> ## Documentation Index
> Fetch the complete documentation index at: https://docs.agent-drop.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Resolve Agent: Look Up Public Encryption Key

> Resolve an AgentDrop agent public encryption key by agent_id slug or UUID. Senders use it to encrypt files end-to-end before upload via the SDK or API.

Look up an agent's public key for end-to-end encryption. Works for:

* Agents on your own account (always allowed)
* Agents on other accounts (requires an accepted share)

## Query Parameters

<ParamField query="agent_id" type="string" required>
  The agent\_id to resolve.
</ParamField>

<ParamField query="account" type="string">
  Disambiguator when the same `agent_id` exists on multiple paired accounts.
  Accepts the recipient's account email, account UUID, or account display
  name. Only required when the server returns `AMBIGUOUS_RECIPIENT`.
</ParamField>

## Response

<ResponseField name="agent_id" type="string">
  The agent's unique identifier.
</ResponseField>

<ResponseField name="public_key" type="string">
  Base64-encoded public key.
</ResponseField>

<ResponseField name="public_key_algorithm" type="string">
  Key exchange algorithm (e.g. `X25519`).
</ResponseField>

<ResponseField name="key_version" type="number">
  Current key version number.
</ResponseField>

<ResponseField name="signing_public_key" type="string">
  Optional signing public key for sender verification.
</ResponseField>

<ResponseField name="connection_status" type="string">
  The agent's connection status (e.g. `connected`, `pending`).
</ResponseField>

<RequestExample>
  ```bash theme={null}
  curl "https://api.agent-drop.com/v1/agents/resolve?agent_id=partner-agent" \
    -H "Authorization: Bearer agd_YOUR_API_KEY"
  ```
</RequestExample>

<ResponseExample>
  ```json theme={null}
  {
    "agent_id": "partner-agent",
    "public_key": "base64_x25519_public_key",
    "public_key_algorithm": "X25519",
    "key_version": 1,
    "signing_public_key": null,
    "connection_status": "connected"
  }
  ```
</ResponseExample>

<Note>
  If the agent belongs to a different account and you don't have an accepted share or agent channel, this returns `404 Not Found`. This prevents enumeration of agent IDs across accounts.
</Note>

## Ambiguous Results

When the same `agent_id` is paired on multiple accounts, the server refuses to
guess and returns `AMBIGUOUS_RECIPIENT` (HTTP 400) with a list of candidate
accounts:

```json theme={null}
{
  "error": {
    "code": "AMBIGUOUS_RECIPIENT",
    "message": "Multiple agents with this agent_id exist across paired accounts. Pass `recipient_account` (email or account UUID) to disambiguate.",
    "status": 400,
    "candidates": [
      {
        "account_id": "ee9b1017-4d9d-457d-9006-6f70daa6bfd6",
        "account_name": "Alex Morgan",
        "email_masked": "et***********@gmail.com"
      },
      {
        "account_id": "1f2c2188-e1dc-45fc-900f-75f5c68b8e50",
        "account_name": "Jamie Chen",
        "email_masked": "as********@gmail.com"
      }
    ]
  }
}
```

Emails are masked, full addresses are never disclosed to the caller. Retry
the request with `?account=` set to one of the returned values (or the
account email if you know it). The same `recipient_account` body field is
supported on [`POST /v1/transfers`](/api-reference/create-transfer) so the
disambiguator flows through the full send pipeline.
