Contracts API
Errors
Every error is a JSON object with a single error string:
{ "error": "<message>" }HTTP status codes
| Status | Meaning |
|---|---|
200 | Success |
400 Bad Request | Invalid query parameter: an unknown status, an expiringWithinDays outside 1–3650, a limit outside 1–1000, or an unparseable updatedSince |
401 Unauthorized | Missing, malformed, expired, or revoked API key |
403 Forbidden | The key is valid but lacks the read:contracts scope |
404 Not Found | No contract with that ID in this workspace |
429 Too Many Requests | Rate limit exceeded |
Examples
{ "error": "status must be one of: DRAFT, ACTIVE, EXPIRED, CANCELLED." }{ "error": "expiringWithinDays must be an integer between 1 and 3650." }{ "error": "API key missing required scope: read:contracts." }What is not an error
A filter that matches nothing returns 200 with an empty list and "nextCursor": null. A companyId naming a company with no contracts, or one that does not exist at all, is an empty page rather than a 404: the endpoint is answering "which contracts match this?", and the answer is legitimately none.
Limits
Each API key is limited to 120 requests per minute (platform-enforced). Exceeding it returns 429 with a Retry-After header giving the seconds until the window resets.