Python Examples
All examples use therequests library. Install it with pip install requests.
Copy
Ask AI
pip install requests
Copy
Ask AI
export AGENTDROP_API_KEY="agd_live_xxxxxxxxxxxxxxxxxxxx"
Helper Setup
Copy
Ask AI
import os
import requests
BASE_URL = "https://agentdrop-production.up.railway.app"
API_KEY = os.environ["AGENTDROP_API_KEY"]
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
Upload a Single File
Copy
Ask AI
def upload_file(filepath, sender, recipient, expires_in="24h"):
with open(filepath, "rb") as f:
response = requests.post(
f"{BASE_URL}/v1/transfers",
headers=HEADERS,
data={
"sender": sender,
"recipient": recipient,
"expires_in": expires_in,
},
files={"files": f},
)
response.raise_for_status()
return response.json()
transfer = upload_file("report.pdf", "research-agent", "analysis-agent")
print(f"Transfer ID: {transfer['id']}")
print(f"Expires at: {transfer['expires_at']}")
Upload Multiple Files
Copy
Ask AI
def upload_files(filepaths, sender, recipient, encrypted=False):
files = [("files", (os.path.basename(fp), open(fp, "rb"))) for fp in filepaths]
response = requests.post(
f"{BASE_URL}/v1/transfers",
headers=HEADERS,
data={
"sender": sender,
"recipient": recipient,
"encrypted": str(encrypted).lower(),
},
files=files,
)
response.raise_for_status()
# Close file handles
for _, (_, fh) in files:
fh.close()
return response.json()
transfer = upload_files(
["data.csv", "metadata.json"],
sender="etl-pipeline",
recipient="dashboard-agent",
encrypted=True,
)
Download a Transfer
Copy
Ask AI
def download_transfer(transfer_id, output_path):
response = requests.get(
f"{BASE_URL}/v1/transfers/{transfer_id}/download",
headers=HEADERS,
)
response.raise_for_status()
with open(output_path, "wb") as f:
f.write(response.content)
remaining = response.headers.get("X-Downloads-Remaining", "unknown")
print(f"Saved to {output_path} ({remaining} downloads remaining)")
download_transfer("txfr_abc123", "report.pdf")
Check Transfer Status
Copy
Ask AI
def get_transfer(transfer_id):
response = requests.get(
f"{BASE_URL}/v1/transfers/{transfer_id}",
headers=HEADERS,
)
response.raise_for_status()
return response.json()
transfer = get_transfer("txfr_abc123")
print(f"Status: {transfer['status']}")
print(f"Downloads: {transfer['download_count']}/{transfer['max_downloads']}")
List All Transfers
Copy
Ask AI
def list_transfers(page=1, limit=20):
response = requests.get(
f"{BASE_URL}/v1/transfers",
headers=HEADERS,
params={"page": page, "limit": limit},
)
response.raise_for_status()
return response.json()
result = list_transfers()
for t in result["data"]:
print(f"{t['id']} | {t['status']} | {t['sender']} -> {t['recipient']}")
Delete a Transfer
Copy
Ask AI
def delete_transfer(transfer_id):
response = requests.delete(
f"{BASE_URL}/v1/transfers/{transfer_id}",
headers=HEADERS,
)
response.raise_for_status()
return response.json()
result = delete_transfer("txfr_abc123")
print(f"Deleted: {result['status']}")
Full Send-and-Receive Flow
End-to-end example: one agent uploads, another downloads.Copy
Ask AI
import os
import requests
import time
BASE_URL = "https://agentdrop-production.up.railway.app"
API_KEY = os.environ["AGENTDROP_API_KEY"]
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
# --- Sender Agent ---
def sender_workflow():
with open("quarterly-report.pdf", "rb") as f:
response = requests.post(
f"{BASE_URL}/v1/transfers",
headers=HEADERS,
data={
"sender": "finance-agent",
"recipient": "exec-summary-agent",
"expires_in": "12h",
"max_downloads": "3",
},
files={"files": f},
)
response.raise_for_status()
transfer = response.json()
print(f"Uploaded. Transfer ID: {transfer['id']}")
return transfer["id"]
# --- Receiver Agent ---
def receiver_workflow(transfer_id):
# Check status first
status_resp = requests.get(
f"{BASE_URL}/v1/transfers/{transfer_id}",
headers=HEADERS,
)
transfer = status_resp.json()
if transfer["status"] != "active":
print(f"Transfer not available: {transfer['status']}")
return
# Download
dl_resp = requests.get(
f"{BASE_URL}/v1/transfers/{transfer_id}/download",
headers=HEADERS,
)
dl_resp.raise_for_status()
with open("received-report.pdf", "wb") as f:
f.write(dl_resp.content)
print("File received and saved.")
# Run the flow
transfer_id = sender_workflow()
receiver_workflow(transfer_id)
Error Handling
Copy
Ask AI
def safe_upload(filepath, sender, recipient):
try:
with open(filepath, "rb") as f:
response = requests.post(
f"{BASE_URL}/v1/transfers",
headers=HEADERS,
data={"sender": sender, "recipient": recipient},
files={"files": f},
)
response.raise_for_status()
return response.json()
except requests.exceptions.HTTPError as e:
if e.response.status_code == 413:
print("File too large for your plan. Upgrade at https://agent-drop.com/pricing")
elif e.response.status_code == 429:
print("Rate limited. Waiting 60 seconds...")
time.sleep(60)
return safe_upload(filepath, sender, recipient)
else:
print(f"HTTP error: {e.response.status_code} — {e.response.text}")
return None
