Plain HTTP, JSON in and out, checksums everywhere. Bearer authentication.
Base URL https://api.fileexchange.site/v2.
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.
Authorization: Bearer fx_live_9c41d0e7a8b24f1e
Content-Type: application/json
Idempotency-Key: 7f1c0b2e-4a55-4d1a-9a3c-2f0e6d84b911Idempotency-Key on every write. Retried requests with the
same key return the original response rather than creating a second transfer.| Method | Path | Purpose |
|---|---|---|
POST | /transfers | Open a session from a manifest. Returns block endpoints. |
PUT | /transfers/{id}/blocks/{n} | Upload one block. Order-independent, safe to repeat. |
GET | /transfers/{id}/state | Which blocks are verified. Drives resume. |
POST | /transfers/{id}/seal | Finalise and issue the share link. |
PATCH | /transfers/{id}/policy | Tighten expiry or download ceiling after issuing. |
DELETE | /transfers/{id} | Revoke. Objects are erased within the retention window. |
GET | /audit | Append-only access log, filterable by key and time. |
| Limit | Free | Team | Scale |
|---|---|---|---|
| Transfer size | 5 GB | 200 GB | 2 TB |
| Block size | 8 MiB default, 1–64 MiB configurable per session | ||
| Blocks in flight | 8 | 64 | 512 |
| Session lifetime | 72 hours from creation, refreshed by any verified block | ||
| Write requests | 60 / min | 600 / min | negotiated |
| Retention after expiry | objects erased within 24 hours, replicas included | ||
413 rather than
truncated. Splitting is the client's responsibility so that checksums stay meaningful.| Code | Meaning | Retry |
|---|---|---|
400 manifest_invalid | Sizes or checksums do not agree with the declared manifest. | no |
401 key_revoked | Key disabled or outside its allowed network range. | no |
409 block_mismatch | Block hash differs from the manifest entry. | after re-read |
413 block_too_large | Block exceeds the session block size. | no |
423 session_sealed | Session already finalised. | no |
429 rate_limited | Write rate exceeded. Honour Retry-After. | yes |
503 region_draining | Edge under maintenance; a new endpoint is in the body. | yes |
Delivery is at-least-once with exponential backoff for 24 hours. Every payload is signed; verify before trusting it.
{
"event": "transfer.downloaded",
"id": "tr_9f4c1a2b",
"at": "2026-09-05T08:14:22Z",
"remaining_downloads": 2,
"client": { "asn": 13335, "family": "ipv6" }
}X-Fx-Signature: t=<unix>,v1=<hex> over
t + "." + body. Reject payloads older than five minutes.