Guides

Errors

Every error has the same shape, with a machine-readable code and a hint about what to do next.

Every error, from every operation, has the same shape:

JSON
{
  "error": {
    "code": "invalid_request",
    "message": "query.places.0: Invalid input: expected number, received string",
    "hint": "Fix the fields in `issues`. Ids for `places`, `roles` and `companies` come from the lookup endpoints.",
    "issues": [
      { "path": "query.places.0", "message": "Invalid input: expected number, received string" }
    ]
  }
}
  • code is stable and machine-readable. Branch on it, not on message.
  • message is for people and logs.
  • hint, when present, says what to do next, often which lookup to call first. Agents can act on it directly.
  • issues, on validation errors, lists one problem per invalid field, with a dotted path into your request.

Codes

CodeStatusMeaning
invalid_request400The request doesn't match the spec. See issues.
unauthorized401The operation needs you to be signed in (account operations).
forbidden403The operation isn't public.
not_found404No job, company or agent with that id or slug, or no such operation.
conflict409The change conflicts with what exists, such as too many agents.
rate_limited429Too many requests. Wait and retry. Rate limits arrive with API keys.
internal500Something went wrong on our side. Retry later.
unavailable503A dependency is briefly unavailable. Retry later.

A search with unknown ids or slugs is valid and matches nothing; it returns 200 with no jobs. Check the response's labels: values that were not recognized are missing from it.

A closed job is not an error either. GET /v1/jobs/{id} returns closed jobs too, with closedAt set.