Fontes Portal API returns errors in ProblemDetails format, as defined by
RFC 9457. Every error
response has Content-Type: application/problem+json.
{
"type": "https://api.fontes.ee/problems/validation_failed",
"title": "Validation failed",
"status": 422,
"detail": "One or more fields failed validation.",
"traceId": "00-4af4b5c6d7e8f9a0b1c2d3e4f5a6b7c8-1234567890abcdef-00",
"errors": [
{
"code": "validation_failed",
"field": "rows[0].jobFamilyCode",
"message": "Job family code 'JF999' is not in the catalog."
}
]
}
| Field | Description |
|---|---|
type |
URI that uniquely identifies the error type. Stable — safe to match in code. |
title |
Human-readable summary of the error type. |
status |
HTTP status code (mirrors the response status). |
detail |
Human-readable explanation of this specific occurrence. |
traceId |
Correlation ID for this request. Always log this — Fontes support uses it to trace your request in server logs. |
errors |
Array of structured error entries (present on validation errors; may be absent on other error types). |
| HTTP | Code | Title | Description |
|---|---|---|---|
| 400 | idempotency_key_required |
Idempotency-Key required | This endpoint requires the Idempotency-Key header. |
| 400 | validation_failed |
Validation failed | One or more fields failed validation. |
| 401 | unauthorized |
Unauthorized | Invalid or missing credentials. |
| 403 | forbidden |
Forbidden | The authenticated client does not have permission for this resource. |
| 404 | customer_not_found |
Customer not found | No customer matches the supplied registry number. |
| 422 | idempotency_key_reused |
Idempotency-Key reused with different body | Re-using an Idempotency-Key requires an identical request body. Mint a new key for new logical submissions. |
| 422 | no_eligible_survey |
No eligible survey | The customer has no survey in Preparation/Capturing/Analysis with unconfirmed data. |
| 429 | rate_limit_exceeded |
Rate limit exceeded | Per-client request quota exceeded. See Retry-After. |
| 500 | catalog_not_configured |
Catalog not configured | No job_family_version is marked as is_api_export. Contact Fontes support. |
| 500 | internal_error |
Internal error | An unexpected error occurred. The traceId can be used by Fontes support to diagnose. |
{
"type": "https://api.fontes.ee/problems/customer_not_found",
"title": "Customer not found",
"status": 404,
"detail": "No customer with registration number '99999999' is linked to this API client.",
"traceId": "00-abc123..."
}
The customerRegNo in your request body does not exist in the Fontes system,
or it belongs to a different API client. Verify the registration number and
that the customer has been set up by Fontes support.
{
"type": "https://api.fontes.ee/problems/validation_failed",
"title": "Validation failed",
"status": 422,
"detail": "One or more fields failed validation.",
"traceId": "00-def456...",
"errors": [
{
"code": "validation_failed",
"field": "rows[0].jobFamilyCode",
"message": "Job family code 'JF999' is not in the catalog."
},
{
"code": "validation_failed",
"field": "rows[1].grossSalary",
"message": "Gross salary must be greater than zero."
}
]
}
Multiple validation errors are returned in a single response — do not fix one
and submit again only to discover the next. Fix all reported errors before
resubmitting, and generate a new Idempotency-Key when you do.
traceId from every error response. Fontes support cannot
trace a request without it.status and code fields for monitoring and alerting.5xx responses as transient and retry with backoff (see the
Idempotency & retries guide). Treat 4xx as definitive
(except 401, which means re-issue a JWT first).