Talk to us

Quickstart

Three requests to a working upload flow: authenticate, upload, confirm.

1. Authenticate

Every request carries a bearer token scoped to one project.

curl https://api.guard-3.roomul.com/v2/upload/8a3f1c5b \
  -H "Authorization: Bearer sk_live_••••••••" \
  -H "Idempotency-Key: 7c1e-attempt-1" \
  --data-binary @export.csv

2. Handle the response

A 200 means the bytes are accepted and validated — not yet durably stored. Wait for the webhook, or poll the file id, before treating the upload as final.

StatusMeaning
200Accepted and passed validation
202Accepted, large file queued for chunked processing
409Idempotency key reused with a different payload
413File exceeds the plan's size limit
422Content type not on the project's allow-list

3. Confirm delivery

Register a webhook once, and every future upload notifies it — no polling required in steady state.

{
  "event": "file.stored",
  "id": "up_9f1kd2a",
  "region": "eu-central",
  "signature": "t=1727,v1=91cf…"
}

Rate limits

Limits apply per project, not per API key, and scale automatically with your plan.

PlanSustainedBurst
Starter50 req/s200 req/s for 10s
Growth400 req/s1,200 req/s for 10s
ScaleCustomCustom