Skip to main content

Envelopes

Successful responses wrap their payload in data:
Errors carry a human-readable error and, on 422 validation failures, a details map:
Calls that create a resource return 201. POST /api/v1/packages/from-template returns 200 instead when its externalId matches a package that already exists. Everything else that succeeds returns 200, including action calls made with POST such as a bulk send or a signing URL.

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. The count is kept per server replica, so the effective ceiling across the fleet can be higher; treat 120 as the floor. 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.