Getting started
Errors
Errors use the same envelope as successful responses: success is false, data is null, and meta.error carries the status code, a stable type, and a human-readable detail.
- 8Documented statuses
- 1Envelope, success or failure
- meta.errorWhere the failure is reported
The error envelope
One shape for every failed call, whatever the status code. Parse it once and every endpoint reports the same way.
{ "success": false, "data": null, "pagination": null, "meta": { "error": { "statusCode": 422, "type": "validation_error", "detail": [ { "loc": ["query", "limit"], "msg": "Input should be less than or equal to the endpoint maximum." } ] } }}Status codes
These statuses are collected from every operation in the OpenAPI document. Rate limiting has its own guide — see Rate limits.
- 400
- Invalid inputCheck parameter names, formats, and required values before retrying.
- 401
- Missing or invalid API keySend the key with the X-API-Key header from server-side code.
- 404
- Resource not foundCheck the supplied profile, company, job, post, or search input.
- 409
- Cookie pool unavailableTemporary upstream availability conflict. Retry later with bounded backoff.
- 422
- Validation errorFix the field-level request issue before retrying.
- 429
- Rate limitedSlow the client and retry later with bounded backoff.
- 502
- Upstream response could not be normalizedTreat it as a temporary processing issue.
- 503
- Upstream unavailableUpstream service unavailable. Retry later or show a temporary unavailable state.
Handling errors well
- Branch on
meta.error.statusCodeandmeta.error.type, not on message text. - Treat
409,502, and503as transient — retry once or twice with bounded backoff. - Treat
400,404, and422as request problems — fix the input instead of retrying. - Never log full API keys, raw profile payloads, or sensitive query parameters alongside errors.