Content-Type: application/problem+json:
type — ela é estável entre releases e
dereferenciável para documentação. title e detail são para
humanos e podem ser reescritos; não programe em cima deles.
Alguns tipos carregam extension members (o bloco quota acima é
um deles). Os membros base (type, title, status, detail,
instance) sempre vêm; extensions são documentadas por tipo de erro
abaixo.
Autenticação & acesso
| Status | Type URI | Quando |
|---|---|---|
| 401 | https://errors.attestly.io/authentication-failed | API key ausente, malformada ou revogada. |
| 402 | https://errors.attestly.io/subscription-inactive | Subscription não está mais ativa. |
| 429 | https://errors.attestly.io/quota-exceeded | Teto mensal atingido para o período de billing atual. |
| 429 | https://errors.attestly.io/rate-limit-exceeded | Muitas requests em uma janela curta. |
Retry-After e X-RateLimit-*. O
tipo quota-exceeded carrega adicionalmente uma extension quota
com limit, used, period_started_at, period_ends_at. Veja
Quotas.
Validação
| Status | Type URI | Quando |
|---|---|---|
| 422 | https://errors.attestly.io/request-validation-failed | JSON malformado, tipos errados, campos obrigatórios faltando. |
| 422 | https://errors.attestly.io/program-validation-failed | Estrutura do ruleset inválida (depth, refs, limites). |
| 422 | https://errors.attestly.io/program-compilation-failed | Referências do ruleset não puderam ser compiladas. |
| 422 | https://errors.attestly.io/unknown-source | Ruleset referencia source que você não pode acessar. |
Catálogo
| Status | Type URI | Quando |
|---|---|---|
| 404 | https://errors.attestly.io/ruleset-not-found | ruleset_id não resolve. |
| 409 | https://errors.attestly.io/ruleset-already-exists | (name, version) já está em uso. |
Idempotência
| Status | Type URI | Quando |
|---|---|---|
| 422 | https://errors.attestly.io/idempotency-key-invalid | Header Idempotency-Key malformado. |
| 422 | https://errors.attestly.io/idempotency-key-conflict | Mesma chave, body diferente. |
| 429 | https://errors.attestly.io/idempotency-key-exhausted | Muitas requests concorrentes com a mesma chave. |
| 410 | https://errors.attestly.io/idempotency-replay-expired | A janela de replay para essa chave expirou. |
Servidor (5xx)
| Status | Type URI | Quando |
|---|---|---|
| 500 | https://errors.attestly.io/internal-error | Erro inesperado do servidor. |
| 503 | https://errors.attestly.io/database-unavailable | Problema transiente de infraestrutura. |
support@attestly.io.
Falhas parciais (200)
Falha de source ou check não derruba a request inteira. A resposta é200 mas verdict.status = "degraded" e o check afetado carrega
status: "failed" com mensagem em error. Veja
Verdicts.