API v2 · stable

API reference

Plain HTTP, JSON in and out, checksums everywhere. Bearer authentication. Base URL https://api.fileexchange.site/v2.

Authentication

Every request carries a key in the Authorization header. Keys are scoped per project and can be restricted to source networks. A key never grants read access to objects — decryption stays client-side.

http
Authorization: Bearer fx_live_9c41d0e7a8b24f1e
Content-Type: application/json
Idempotency-Key: 7f1c0b2e-4a55-4d1a-9a3c-2f0e6d84b911
Send an Idempotency-Key on every write. Retried requests with the same key return the original response rather than creating a second transfer.

Endpoints

MethodPathPurpose
POST/transfersOpen a session from a manifest. Returns block endpoints.
PUT/transfers/{id}/blocks/{n}Upload one block. Order-independent, safe to repeat.
GET/transfers/{id}/stateWhich blocks are verified. Drives resume.
POST/transfers/{id}/sealFinalise and issue the share link.
PATCH/transfers/{id}/policyTighten expiry or download ceiling after issuing.
DELETE/transfers/{id}Revoke. Objects are erased within the retention window.
GET/auditAppend-only access log, filterable by key and time.

Limits

LimitFreeTeamScale
Transfer size5 GB200 GB2 TB
Block size8 MiB default, 1–64 MiB configurable per session
Blocks in flight864512
Session lifetime72 hours from creation, refreshed by any verified block
Write requests60 / min600 / minnegotiated
Retention after expiryobjects erased within 24 hours, replicas included
Blocks above the configured size are rejected with 413 rather than truncated. Splitting is the client's responsibility so that checksums stay meaningful.

Error codes

CodeMeaningRetry
400 manifest_invalidSizes or checksums do not agree with the declared manifest.no
401 key_revokedKey disabled or outside its allowed network range.no
409 block_mismatchBlock hash differs from the manifest entry.after re-read
413 block_too_largeBlock exceeds the session block size.no
423 session_sealedSession already finalised.no
429 rate_limitedWrite rate exceeded. Honour Retry-After.yes
503 region_drainingEdge under maintenance; a new endpoint is in the body.yes

Webhooks

Delivery is at-least-once with exponential backoff for 24 hours. Every payload is signed; verify before trusting it.

payload
{
  "event": "transfer.downloaded",
  "id": "tr_9f4c1a2b",
  "at": "2026-09-05T08:14:22Z",
  "remaining_downloads": 2,
  "client": { "asn": 13335, "family": "ipv6" }
}
Signature is X-Fx-Signature: t=<unix>,v1=<hex> over t + "." + body. Reject payloads older than five minutes.