Talk to us

One API for receiving, storing, and serving files.

No SDK lock-in, no proprietary upload widget. Point a multipart or resumable request at an endpoint and get a durable object back.

Endpoints

The surface area is intentionally small. Most integrations use three of these.

MethodPathPurpose
POST/v2/upload/:keyAccept a new file, streaming or single-shot
GET/v2/files/:idFetch object metadata and status
GET/v2/files/:id/downloadSigned, time-limited download URL
DELETE/v2/files/:idRemove an object and its replicas
POST/v2/webhooksRegister a delivery endpoint

Retries and idempotency

Uploads fail for reasons outside your control — flaky mobile networks, dropped connections, background app suspension. The API is built around that reality rather than around it.

Resumable by default

Interrupted uploads resume from the last acknowledged byte range, not from zero.

Idempotency keys

Retried requests with the same key never create a duplicate object.

At-least-once webhooks

Delivery is retried with backoff for up to 24 hours if your endpoint is unreachable.

Security

The defaults are the settings we'd want turned on for our own data.

AreaDefault
TransportTLS 1.3, HTTP/2
Object accessPrivate by default; signed URLs expire in 15 minutes
Webhook payloadsSigned with a per-account secret, verified on your side
At restServer-side encryption, key rotation every 90 days