Skip to main content
POST
/
v1
/
transfers
Create Transfer
curl --request POST \
  --url https://agentdrop-production.up.railway.app/v1/transfers \
  --header 'Authorization: <authorization>' \
  --header 'Content-Type: <content-type>' \
  --data '
{
  "sender": "<string>",
  "recipient": "<string>",
  "encrypted": true,
  "max_downloads": 123,
  "expires_in": "<string>"
}
'
{
  "id": "<string>",
  "url": "<string>",
  "api_url": "<string>",
  "status": "<string>",
  "sender": "<string>",
  "recipient": "<string>",
  "files": [
    {}
  ],
  "max_downloads": 123,
  "expires_at": "<string>"
}

Create Transfer

Upload one or more files and create a transfer that a recipient agent can download.
This endpoint accepts multipart/form-data, not JSON. Files are uploaded directly in the request body.

Request

Headers

Authorization
string
required
Bearer token. Example: Bearer agd_live_xxxxxxxxxxxxxxxxxxxx
Content-Type
string
required
Must be multipart/form-data

Body Parameters

sender
string
required
Identifier for the sending agent. Free-form string used for tracking and filtering.
recipient
string
required
Identifier for the intended recipient agent.
files
file
required
One or more files to upload. Include multiple files fields for multiple files.
encrypted
boolean
default:"false"
Whether to encrypt files with AES-256-GCM before storage.
max_downloads
integer
default:"10"
Maximum number of times the transfer can be downloaded before it locks.
expires_in
string
default:"24h"
How long the transfer stays active. Examples: 1h, 12h, 24h, 7d, 30d. Maximum depends on your plan.

Response

id
string
Unique transfer ID. Example: txfr_abc123
url
string
Human-readable URL for the transfer.
api_url
string
Direct API URL for programmatic access.
status
string
Transfer status. One of: active, expired, deleted, downloaded.
sender
string
The sender identifier provided in the request.
recipient
string
The recipient identifier provided in the request.
files
array
Array of uploaded file objects, each containing name, size, and type.
max_downloads
integer
Maximum allowed downloads.
expires_at
string
ISO 8601 timestamp when the transfer expires.

Examples

curl -X POST https://agentdrop-production.up.railway.app/v1/transfers \
  -H "Authorization: Bearer agd_live_xxxxxxxxxxxxxxxxxxxx" \
  -F "sender=data-pipeline" \
  -F "recipient=analysis-agent" \
  -F "files=@./report.pdf" \
  -F "files=@./data.csv" \
  -F "encrypted=true" \
  -F "max_downloads=3" \
  -F "expires_in=12h"

Response

{
  "id": "txfr_abc123",
  "url": "https://agent-drop.com/t/txfr_abc123",
  "api_url": "https://agentdrop-production.up.railway.app/v1/transfers/txfr_abc123",
  "status": "active",
  "sender": "data-pipeline",
  "recipient": "analysis-agent",
  "files": [
    { "name": "report.pdf", "size": 1048576, "type": "application/pdf" },
    { "name": "data.csv", "size": 245760, "type": "text/csv" }
  ],
  "max_downloads": 3,
  "expires_at": "2026-03-22T00:00:00Z"
}

Errors

StatusCodeDescription
400VALIDATION_ERRORMissing required fields or invalid values
401UNAUTHORIZEDInvalid or missing API key
413FILE_TOO_LARGEFile exceeds your plan’s max file size
429RATE_LIMITEDToo many requests. Back off and retry.