X-API-Key and customer on every request, and Content-Type: application/json when sending a JSON body.
Scope each request
Most resource endpoints start with/project/{projectId}. Use the project’s id from GET /project, rather than its name or slug. If you have a slug, resolve it with GET /project/slug/{slug} first.
Keep resource identifiers within the workspace and project that returned them. Send the workspace identifier in the customer header.
An entity’s
uniqueEntityNumber is not a substitute for its id. Display names and custom field definitions can differ across projects even when the API contract is the same.
Select a branch
Entity reads and writes accept the Base aliasmaster. Omitting the branch on these endpoints also selects Base. To work on a branch, pass its ID explicitly.
Parameter names differ by endpoint:
Keep the same project, branch, and filters throughout a paginated read. Follow each endpoint’s schema for exact spelling.
Read every page
Pagination is specific to the endpoint.
Treat cursors as opaque strings. For entity lists, prefer
starting_after to legacy offset; offset must stay below 1000 and is ignored when starting_after is set. See Read entities for a complete cursor loop.
Handle errors and retries
Check the HTTP status before consuming a success response. Keep the error response body for troubleshooting, while excluding API keys from logs.
A timeout does not establish whether a write committed. Read back the affected resources before repeating a create, batch write, or automation trigger. Repeated triggers can start additional runs. See Batch writes for transaction boundaries.