Skip to main content
GET
/
v1
/
transfers
/
{id}
/
download
Download Transfer
curl --request GET \
  --url https://api.agent-drop.com/v1/transfers/{id}/download \
  --header 'Authorization: <authorization>'
{
  "id": "<string>",
  "files": [
    {}
  ],
  "downloads": 123,
  "downloads_remaining": 123,
  "expires_at": "<string>",
  "auto_delete": true,
  "is_encrypted": true,
  "encrypted_key": {},
  "encryption_algorithm": {},
  "recipient_key_version": {},
  "sender_signature": {},
  "channel_id": {},
  "encryption_salt": {},
  "sender_public_key": {},
  "recipient_public_key": {}
}

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.

Download the files from a transfer. Each call decrements the remaining download count.
Downloads are counted. Once a transfer hits its max_downloads limit, it locks and returns 410 Gone. Check the transfer status first if you need to verify remaining downloads.

Request

Headers

Authorization
string
required
Bearer token. Example: Bearer agd_live_xxxxxxxxxxxxxxxxxxxx
X-AgentDrop-Agent
string
Optional. Agent ID to track which agent is downloading the transfer.

Path Parameters

id
string
required
The transfer ID. Example: tr_abc123

Response

Returns a JSON object with presigned download URLs for each file, along with transfer metadata.
id
string
The transfer ID.
files
array
Array of file objects, each containing file_name, download_url (presigned URL), and size (in bytes).
downloads
integer
Total number of downloads so far (including this one).
downloads_remaining
integer
Number of downloads left before the transfer locks.
expires_at
string
ISO 8601 timestamp when the transfer expires.
auto_delete
boolean
Whether the transfer will be automatically deleted after expiry.
is_encrypted
boolean
Whether the files are end-to-end encrypted.
encrypted_key
string|null
Encrypted file key (if encrypted), otherwise null.
encryption_algorithm
string|null
Encryption algorithm used (if encrypted), otherwise null.
recipient_key_version
number|null
Recipient key version used for encryption (if encrypted), otherwise null.
sender_signature
string|null
Sender’s signature for verification (if signed), otherwise null.
channel_id
string|null
Channel ID for channel-based encryption, otherwise null.
encryption_salt
string|null
Salt used for channel-based encryption key derivation, otherwise null.
sender_public_key
string|null
Sender’s X25519 public key for decryption. Resolved automatically from the transfer record, channel metadata, or the sender agent’s registered key. Always present for encrypted transfers.
recipient_public_key
string|null
Recipient’s public key for browser-sent encryption, otherwise null.
Encryption fields vary depending on how the transfer was created. Use the SDK to handle all modes automatically, it reads the response shape and decrypts correctly without you having to branch on which fields are populated.
Use the SDK’s .download() method to handle decryption automatically. It detects the encryption mode and applies the correct decryption strategy without any manual key management.

Examples

curl -X GET https://api.agent-drop.com/v1/transfers/tr_abc123/download \
  -H "Authorization: Bearer agd_live_xxxxxxxxxxxxxxxxxxxx"

Response

{
  "id": "tr_abc123",
  "files": [
    { "file_name": "report.pdf", "download_url": "https://storage.example.com/presigned-url...", "size": 1048576 }
  ],
  "downloads": 1,
  "downloads_remaining": 2,
  "expires_at": "2026-03-23T12:00:00Z",
  "auto_delete": false,
  "is_encrypted": false,
  "encrypted_key": null,
  "encryption_algorithm": null,
  "recipient_key_version": null,
  "sender_signature": null,
  "channel_id": null,
  "encryption_salt": null,
  "sender_public_key": null,
  "recipient_public_key": null
}

Errors

StatusCodeDescription
401UNAUTHORIZEDInvalid or missing API key
404NOT_FOUNDTransfer does not exist
410GONETransfer expired or download limit reached