2xx means success; 4xx means the request
needs to change before retrying; 5xx means a server-side problem.
Status code summary
Error details
All errors return a JSON body with a human-readablemessage. Shape:
400 — Bad Request
400 — Bad Request
When: A required field is missing, a value is the wrong type, or a JSON array field
(
selectedControlItemIds, selectedControlClusterIds) is malformed.Fix: Check the message for the offending field. Validate the request body against the
endpoint schema in the API Reference before retrying.403 — Forbidden (wrong key tier)
403 — Forbidden (wrong key tier)
When: You used the wrong tier of key for the operation. The API uses a two-tier key model:
- Partner Key — onboarding clients, listing companies, browsing controls.
- Company Key — document submission, status polling, results retrieval, company/entity updates.
403.Fix: Use the Company Key returned by POST /v2/onboard for all document operations; use the
Partner Key for onboarding and partner-level listing. See Authentication.404 — Not Found
404 — Not Found
When: The resource ID doesn’t exist, or it belongs to a different company than your key.The organization unit routes (
/v2/organization-units*) answer 404 with genericErrors:
Organization unit not found or access denied when the unit doesn’t exist, belongs to another company,
or has another type than the type query parameter. See Organization Units.Fix: Confirm the ID and that you’re using the key for the company that owns the resource.410 — Gone (expired upload session)
410 — Gone (expired upload session)
When: You uploaded a chunk to an upload session that has expired (sessions last 24 hours).Fix: Start a new session with
POST /v2/documents/upload/start and re-upload. See
Chunked Upload.422 — Unprocessable Entity
422 — Unprocessable Entity
When: The request is well-formed but can’t be processed — e.g. submitting both
organizationUnitId and complianceReviewId, or referencing a control that isn’t whitelisted for
your partner. Examples from the v2 document routes:POST /v2/documents/submit:Provide either complianceReviewId OR organizationUnitId, not both or neither.; anorganizationUnitIdthat is not found or belongs to another company returns422(not404) withOrganization unit not found or access denied.POST /v2/documents/upload/startwithorganizationUnitId:complianceFrameworkId is required when using organizationUnitIdandcontrolId is required when using organizationUnitId.
422 means an unknown or archived type, a blank, too long or
duplicate name, a PATCH without name and type, or a PATCH of an archived unit.The deprecated v1 routes keep their own messages: the v1 business entity routes answer 422 (not
404) when the business entity is not found, and the v1 submit and upload routes say
BusinessEntity not found or access denied (v1 only). See Migrating to v2.Fix: Read the message; provide exactly one of organizationUnitId / complianceReviewId, and
only reference frameworks/controls returned by GET /v2/compliance-frameworks.429 — Too Many Requests
429 — Too Many Requests
When: You exceeded your tier’s request rate or the per-company submission limit.Fix: Back off and retry after the seconds given in the
Retry-After response header. See
Rate Limiting for the per-tier limits.500 — Internal Server Error
500 — Internal Server Error
When: An unexpected server-side error.Fix: Retry with exponential backoff. If it persists, contact support with the request details
and timestamp. See Support.