A predictable, resource-oriented REST API. JSON everywhere, standard verbs, bearer-token auth, and cursor pagination. This is the complete surface — pipelines, candidates, compensation, and analytics.
Every request must include your secret key in the Authorization header. Requests over plain HTTP or without a valid key are rejected with 401. Keep secret keys server-side; use publishable keys for browser contexts.
Grouped by resource. Every collection endpoint supports cursor pagination and filtering; every object endpoint accepts a resource ID.
A compensation benchmark lookup returns base, bonus, and equity splits at the percentiles you request, plus a sample size and last-refreshed timestamp so you know how fresh the data is.
List endpoints are cursor-paginated. Pass limit (max 100) and the starting_after cursor from the previous page. Responses include has_more and the last object's ID — loop until has_more is false.
1,000 req/min per organization, burstable to 2,000. Watch X-RateLimit-Remaining and X-RateLimit-Reset. On 429, honor Retry-After. SDKs retry automatically with exponential backoff.
Every error returns a consistent JSON envelope with a machine-readable type, a human message, and (for validation) the offending param. HTTP status conveys the class of failure — see the table below.
Versions are dated (2026-04-01). Set Crimson-Version per request or account-wide. Released versions never break; additive changes are continuous. Deprecations get 12 months' notice in the changelog.
Crimson uses conventional HTTP response codes. 2xx means success, 4xx means a problem with your request, and 5xx means something failed on our end (rare — and safe to retry).
| Code | Type | Meaning |
|---|---|---|
| 400 | invalid_request_error | The request was malformed or missing a required parameter. |
| 401 | authentication_error | No valid API key was provided, or the key was revoked. |
| 403 | permission_error | The key is valid but lacks the scope for this resource. |
| 404 | not_found_error | The requested resource does not exist on your account. |
| 429 | rate_limit_error | Too many requests — back off using Retry-After. |
| 500 | api_error | Something went wrong on our end. Safe to retry with backoff. |
Our official SDKs handle auth, retries, pagination, and typing for you — so you can focus on the data, not the plumbing.
Browse the SDKs