Skip to main content

Errors

The Customer API uses standard HTTP status codes and returns errors in two different formats, depending on the endpoint.

Standard format

Most endpoints return errors in this shape:

{ "error": "Human-readable message describing what went wrong." }

The error field is a single, plain-English message intended for display in logs and operator dashboards. There is no separate error code field — the HTTP status code is authoritative.

OAuth format

The /auth/token endpoint follows the OAuth 2.0 error format:

{
"error": "invalid_client",
"error_description": "Invalid client credentials."
}
FieldDescription
errorA short OAuth error code (e.g. invalid_client, unsupported_grant_type).
error_descriptionA human-readable message.

See Authentication — Error responses for the full list of OAuth error codes.

Status codes used

StatusMeaningTypical cause
200 OKSuccessRequest succeeded with a response body.
400 Bad RequestClient errorThe request is malformed — missing required field, wrong content type, etc.
401 UnauthorizedAuthentication failedMissing, malformed, or expired access token, or invalid client credentials on /auth/token.
404 Not FoundResource not foundYour customer record could not be found.
429 Too Many RequestsRate-limitedSee Rate limits.
500 Internal Server ErrorServer errorSomething went wrong on our side. Please retry; if it persists, contact support.

Common error responses

401 Unauthorized — protected endpoints

Bearer-token validation failures (missing, malformed, or expired tokens) return 401 with no response body and a WWW-Authenticate header:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer error="invalid_token"

Fix: Request a new token from /auth/token.

401 Unauthorized — /auth/token

Invalid client credentials on the token endpoint return the OAuth format:

{
"error": "invalid_client",
"error_description": "Invalid client credentials."
}

Fix: Verify your Customer Code and API Key. If the key has been rotated or revoked, contact your Kiss account manager.

400 Bad Request — /auth/token

For malformed token requests, the response uses the OAuth format:

{ "error": "unsupported_grant_type", "error_description": "Only 'client_credentials' grant type is supported." }
{ "error": "invalid_request", "error_description": "client_id and client_secret are required." }

404 Not Found

The customer record for the authenticated token could not be located:

{ "error": "Customer not found." }

Fix: This usually indicates an account problem rather than a client bug. Contact support.

429 Too Many Requests

You've exceeded your rate-limit window. See Rate limits for the response shape and how to handle it.

500 Internal Server Error

{ "error": "An unexpected error occurred." }

Fix: Retry once after a short delay. If the error persists, open a support ticket with the time of the request and your Customer Code so we can investigate.

Error-handling pattern

A robust client should treat HTTP errors as a small, finite set:

- 2xx → success path
- 401 → refresh token, retry once
- 429 → wait Retry-After, retry with back-off
- 4xx (other) → permanent failure, log and surface
- 5xx → transient failure, retry with back-off

This pattern works for almost all integrations. Resist the temptation to inspect the error text — it's intended for humans, and the wording may change between releases.

What we never include in errors

For security reasons, error responses never include:

  • Stack traces.
  • Internal IDs that aren't already in the request URL.
  • The exact set of valid values for a field you got wrong (you must consult the documentation).

If you believe an error message is so unclear that it's blocking your work, please open a support ticket and we'll improve it in a future release.