# Error Reference

The Kordiam API uses [RFC 9457 Problem Details](https://www.rfc-editor.org/rfc/rfc9457) for error responses. Each error type has a stable URI that identifies the error category.

For an overview of the error response format and best practices, see the [Error Handling](/docs/guides/api-conventions/error-handling) guide.

This reference lists the error types currently documented for the public API. Endpoint-specific
status codes remain documented in the [API reference](/api). New error types may be added over time
and will be documented here once they are part of the supported public contract.

## Client Errors (4xx)

### Validation & Input

| Error Type                                                    | Status | Description                                                  |
|---------------------------------------------------------------|--------|--------------------------------------------------------------|
| [`validation-failed`](/docs/errors/validation-failed)         | 400    | Request body or query parameters failed validation           |
| [`bad-request`](/docs/errors/bad-request)                     | 400    | Malformed JSON or missing request body                       |
| [`missing-parameter`](/docs/errors/missing-parameter)         | 400    | Required query, path, or header parameter is missing         |
| [`type-mismatch`](/docs/errors/type-mismatch)                 | 400    | Parameter value has wrong type                               |
| [`date-format-error`](/docs/errors/date-format-error)         | 400    | Date value could not be parsed (expected ISO 8601)           |
| [`input-parameter-error`](/docs/errors/input-parameter-error) | 400    | Domain-specific input parameter is invalid                   |
| [`unsupported-version`](/docs/errors/unsupported-version)     | 400    | Requested API version is not supported                       |

### Authentication & Authorization

| Error Type                                    | Status | Description                                       |
|-----------------------------------------------|--------|---------------------------------------------------|
| [`unauthorized`](/docs/errors/unauthorized)   | 401    | Missing or invalid authentication token           |
| [`token-revoked`](/docs/errors/token-revoked) | 401    | Token has been revoked                            |
| [`access-denied`](/docs/errors/access-denied) | 403    | Authenticated but lacks permission for this operation |

### Resource & State

| Error Type                                                      | Status | Description                                     |
|-----------------------------------------------------------------|--------|-------------------------------------------------|
| [`endpoint-not-found`](/docs/errors/endpoint-not-found)         | 404    | Endpoint route does not exist                   |
| [`resource-not-found`](/docs/errors/resource-not-found)         | 404    | Resource does not exist or is not visible       |
| [`method-not-allowed`](/docs/errors/method-not-allowed)         | 405    | HTTP method not supported for the endpoint      |
| [`not-acceptable`](/docs/errors/not-acceptable)                 | 406    | Accept header specifies unsupported media type  |
| [`conflict`](/docs/errors/conflict)                             | 409    | Resource conflict                               |
| [`unsupported-media-type`](/docs/errors/unsupported-media-type) | 415    | Wrong Content-Type header                       |
| [`too-many-requests`](/docs/errors/too-many-requests)           | 429    | Request was throttled                           |

### Business Rules

| Error Type                                      | Status | Description                       |
|-------------------------------------------------|--------|-----------------------------------|
| [`business-error`](/docs/errors/business-error) | 400    | Domain or business rule violation |

## Server Errors (5xx)

| Error Type                                                | Status | Description                                |
|-----------------------------------------------------------|--------|--------------------------------------------|
| [`internal-error`](/docs/errors/internal-error)           | 500    | Unexpected server error                    |
