Envelopes
Successful responses wrap their payload indata:
error and, for validation failures, a details map:
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.

