Skip to main content

Envelopes

Successful responses wrap their payload in data:
Errors carry a human-readable error and, for validation failures, a details map:
Creates return 201; everything else that succeeds returns 200.

Status codes

Validation details

details keys are dotted paths into the request. Array items are addressed by index, so recipients.0.email is the email of the first recipient. Query parameters are validated the same way: GET /api/v1/packages?pageSize=500 returns 422 with details.pageSize. A 422 on a body that references something the target resource does not have (an unknown roleIndex, for example) uses the same shape.

Rate limits

All /api/v1 routes share one limit: 120 requests per 60-second window, counted per source IP address. Beyond it the API returns:
Retry-After is the number of seconds until the window resets. Wait at least that long before retrying.
Prefer webhooks over polling GET /api/v1/packages/{packageId} to stay well under the limit.