Errors
Every failure on the KnoxCall Management API (/v1) returns one canonical shape. There
is a single error object with a machine-readable type, a human-readable message, and a
request_id. You branch on type; you show message to a human; you quote request_id to
support.
The error envelope
The
error object is the only top-level key on a failure response — there is no data or
meta on an error. Success responses use { "data": ..., "meta": ... }; failures use
{ "error": ... }. Check for the presence of error first.Type → status table
The HTTP status is derived fromerror.type. The mapping is stable — code against it.
Idempotency error types
Sent only on mutating requests that carry an idempotency key. See Idempotency for the full flow.422 is used only for idempotency_key_reuse. Ordinary input-validation failures are
always 400 validation_error — never 422.Branching on error.type
Match on error.type, not on HTTP status codes and not on the human message. Statuses are
shared across several types (three different types map to 403), and message wording is
not part of the contract.
Correlating a request — request_id and X-Request-Id
Every response carries the same request ID in two places:
error.request_idin the JSON body (on failures) andmeta.request_id(on successes).- The
X-Request-Idresponse header — present on every response, success or error.
500 you logged and moved past). The two values are always identical.
What’s Next?
Rate limits
Headers,
Retry-After, and backoff guidance for 429 responses.Idempotency
Safe retries for mutating requests, replay semantics, and
409 / 422 behavior.API Overview
Base URLs, response envelope, pagination, and quick examples.
Authentication
OAuth 2.1 + DPoP, CLI login, and API key types.