Documentation Index
Fetch the complete documentation index at: https://docs-attestly.code4source.com/llms.txt
Use this file to discover all available pages before exploring further.
Los errores devuelven un body JSON con un code estable:
{
"title": "Quota Exceeded",
"status": 429,
"code": "QUOTA_EXCEEDED",
"detail": "Monthly quota exceeded.",
"limit": 10000,
"used": 10000,
"period_started_at": "2026-04-15T00:00:00Z",
"period_ends_at": "2026-05-15T00:00:00Z"
}
Haz match por code — no por title o detail, que son para
humanos y pueden reescribirse.
Autenticación & acceso
| Status | Code | Cuándo |
|---|
| 401 | AUTHENTICATION_ERROR | API key ausente, malformada o revocada. |
| 401 | TOKEN_EXPIRED | API key expiró. Solicita una nueva. |
| 402 | SUBSCRIPTION_INACTIVE | Subscription no está activa. |
| 429 | QUOTA_EXCEEDED | Tope mensual alcanzado para el periodo de billing actual. |
| 429 | RATE_LIMIT_EXCEEDED | Demasiadas requests en una ventana corta. |
Las respuestas 429 llevan headers Retry-After y X-RateLimit-*,
más campos limit, used, period_started_at, period_ends_at
para QUOTA_EXCEEDED. Ver Quotas.
Validación
| Status | Code | Cuándo |
|---|
| 422 | (validación de request) | JSON malformado, tipos incorrectos, campos faltantes. |
| 422 | PROGRAM_VALIDATION_ERROR | Estructura del ruleset inválida (depth, refs, límites). |
| 422 | UNKNOWN_SOURCE | El ruleset referencia un source que no puedes acceder. |
Catálogo
| Status | Code | Cuándo |
|---|
| 404 | RULESET_NOT_FOUND | ruleset_id no resuelve. |
| 409 | RULESET_ALREADY_EXISTS | (name, version) ya está en uso. |
Idempotencia
| Status | Code | Cuándo |
|---|
| 422 | IDEMPOTENCY_KEY_INVALID | Header Idempotency-Key malformado. |
| 422 | IDEMPOTENCY_KEY_CONFLICT | Misma clave, body distinto. |
| 429 | IDEMPOTENCY_KEY_EXHAUSTED | Demasiadas requests concurrentes con la misma clave. |
| 410 | IDEMPOTENCY_REPLAY_EXPIRED | La ventana de replay para esa clave ha expirado. |
Servidor (5xx)
| Status | Code | Cuándo |
|---|
| 500 | INTERNAL_ERROR | Error inesperado del servidor. |
| 503 | (no disponible) | Problema transitorio de infraestructura. |
Las respuestas 5xx son reintentables. Usa exponential backoff con
jitter; si persiste, contacta support@attestly.io.
Fallas parciales (200)
Una falla de source o check no tira la request entera. La respuesta
es 200 pero verdict.status = "degraded" y el check afectado
lleva status: "failed" con un mensaje en error. Ver
Verdicts.