Errori e codici di stato HTTP
Gli errori dell'applicazione usano application/problem+json (RFC 9457). Basa la logica sui campi stabili code e action, non sul testo leggibile di detail. Negli errori di convalida, errors contiene i JSON Pointer dei campi interessati. Indica request_id quando contatti l'assistenza. In caso di errori del proxy o di trasmissione il corpo della risposta può essere diverso: controlla Content-Type prima di analizzare il JSON.
Il seguente esempio sintetico 422 mostra una sintassi email non valida, rilevata prima dell'addebito. Il catalogo pubblico degli errori elenca tutti i codici, gli stati, le spiegazioni e le azioni consigliate.
| Stato HTTP | Significato tipico | Passaggio successivo |
|---|---|---|
| 400 / 413 / 415 | JSON non valido, corpo troppo grande o tipo di contenuto non supportato. | Correggi la richiesta. |
| 401 / 403 | Accesso rifiutato, restrizione dell'account o crediti insufficienti. | Controlla code; correggi l'accesso oppure ricarica i crediti o attendi il ripristino della prova IP. |
| 422 | Input non valido o opzioni incompatibili. | Correggi i campi indicati in errors. |
| 404 / 405 | Percorso sconosciuto o metodo HTTP non supportato. | Controlla il percorso dell'endpoint e l'intestazione di risposta Allow. |
| 429 | Limite di frequenza o di operazioni simultanee. | Attendi il tempo indicato in Retry-After prima di inviare un'altra richiesta. |
| 500 | Errore imprevisto del server. | Contatta l'assistenza indicando request_id; controlla l'addebito prima di riprovare. |
| 502 / 503 / 504 | Errore del provider, di una dipendenza o dell'addebito, oppure timeout. | Controlla code, action e billing_status prima di riprovare. |
{
"type": "urn:genderapi:problem:validation_error",
"title": "validation error",
"status": 422,
"detail": "A valid email address is required.",
"instance": "urn:uuid:11111111-1111-4111-8111-111111111111",
"code": "validation_error",
"request_id": "11111111-1111-4111-8111-111111111111",
"documentation": "https://api.genderapi.io/api/v2/errors",
"action": "correct_request",
"errors": [
{
"pointer": "/value",
"message": "Invalid email address."
}
],
"meta": {
"request_id": "11111111-1111-4111-8111-111111111111",
"duration_ms": 12,
"access": {
"mode": "ip_trial",
"reason": "api_key_missing"
},
"usage": {
"charged_credits": 0,
"remaining_credits": null,
"billing_status": "not_charged",
"resets_at": "2026-09-26T12:00:00.000Z",
"limit": 10,
"period_seconds": 86400
}
}
}Campi della risposta di errore
| Campo | Tipo | Può essere null | Esempio | Descrizione |
|---|---|---|---|---|
type | string | No | "urn:genderapi:problem:validation_error" | URI che identifica il tipo di problema. |
title | string | No | "validation error" | Breve titolo dell'errore, leggibile da una persona. |
status | integer | No | 422 | Codice di stato HTTP. |
detail | string | No | "The request does not match the schema." | Spiegazione di questo specifico errore. |
instance | string | No | "urn:uuid:550e8400-e29b-41d4-a716-446655440000" | Identificatore della richiesta non riuscita. |
code | string | No | "validation_error" | Codice di errore stabile e leggibile dalle macchine. |
request_id | string | No | "550e8400-e29b-41d4-a716-446655440000" | Identificatore univoco di questo tentativo HTTP; inviato anche in X-Request-ID. |
documentation | string | No | "https://api.genderapi.io/api/v2/errors" | Link al catalogo degli errori, se presente. |
action | string | No | "correct_request" | Azione di correzione consigliata, se definita nel catalogo degli errori. |
errors | array<object> | No | [{"pointer":"/value","message":"must NOT have fewer than 1 characters"}] | Problemi di convalida, se disponibili. Ogni elemento contiene pointer e message. |
errors[].pointer | string | No | "/value" | JSON Pointer che identifica l'input non valido. |
errors[].message | string | No | "must NOT have fewer than 1 characters" | Spiegazione del problema di convalida. |
Metadati di accesso, addebito e richiesta
| Campo | Tipo | Può essere null | Esempio | Descrizione |
|---|---|---|---|---|
meta.request_id | string | No | "550e8400-e29b-41d4-a716-446655440000" | Identificatore univoco di questo tentativo HTTP; inviato anche in X-Request-ID. |
meta.duration_ms | integer | No | 42 | Tempo di elaborazione della richiesta in millisecondi. |
meta.access.mode | string | No | "api_key" | api_key, ip_trial o unauthenticated. Con un account a pagamento verifica che venga riportato api_key. |
meta.access.reason | string | Sì | null | Motivo del passaggio alla prova IP: api_key_missing, api_key_invalid o api_key_not_found; altrimenti null. |
meta.usage.charged_credits | integer | Sì | 1 | Crediti netti addebitati. Zero prima dell'addebito o dopo un rimborso completo confermato; null se l'addebito non è confermato. |
meta.usage.remaining_credits | integer | Sì | 99 | Saldo al termine dell'operazione. Può essere negativo; null se non disponibile o se l'addebito non è confermato. |
meta.usage.billing_status | string | No | "confirmed" | not_charged, confirmed o unconfirmed. Controllalo prima di ripetere una previsione non riuscita. |
meta.usage.resets_at | string | Sì | "2026-09-27T12:00:00.000Z" | Momento del ripristino della prova IP in UTC (ISO 8601); null per gli account con chiave API o se sconosciuto. |
meta.usage.limit | integer | Sì | 10 | Quota della prova IP; null per gli account con chiave API. |
meta.usage.period_seconds | integer | Sì | 86400 | Durata del periodo della prova IP in secondi; null per gli account con chiave API. |
Nuovi tentativi e addebiti
Ogni richiesta di previsione è una nuova operazione, anche quando si reinvia una richiesta identica. A ogni richiesta si applicano le normali regole sui crediti. Non esiste una protezione contro le richieste duplicate: evita quindi i nuovi tentativi automatici dopo un'interruzione della connessione o un esito sconosciuto.
In caso di risposta 429, attendi il tempo indicato in Retry-After prima di inviare un'altra richiesta. In caso di previsioni non riuscite, controlla prima code, action e meta.usage.billing_status. In caso di billing_reconciliation_required o di addebito non confermato, contatta l'assistenza indicando request_id prima di riprovare.
Un batch riuscito solo in parte può restituire HTTP 200. Controlla ogni elemento e, dopo la conferma dell'addebito, invia di nuovo solo gli elementi non riusciti; gli elementi riusciti verrebbero addebitati un'altra volta.
X-Request-ID e meta.request_id identificano il tentativo HTTP corrente. Leggi il saldo attuale tramite /usage. HEAD non avvia una previsione a pagamento. Le risposte di previsione e dell'account non sono memorizzabili nella cache.
I client devono tollerare nuovi campi aggiunti alla risposta e conservare i valori null quando un'informazione non è disponibile.
Limiti delle richieste
Gestisci HTTP 429 e Retry-After invece di presumere che le richieste vengano sempre accettate fino a questi valori massimi. La capacità del servizio è condivisa. I valori indicati sono le impostazioni predefinite attuali del servizio. Le risposte di limitazione includono X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset (secondi Unix). Retry-After è un'attesa in secondi. Queste intestazioni descrivono i limiti delle richieste, non i crediti residui. Anche la lettura gratuita di /usage rientra nei limiti delle richieste.
| Limite | Valore |
|---|---|
| Corpo della richiesta JSON | 64 KiB al massimo |
| Valore per la previsione | 1–254 caratteri |
| Batch | 50 elementi con una chiave API; 10 con la prova IP |
| Frequenza per account | 120 richieste al minuto |
| Frequenza per indirizzo IP | 600 richieste al minuto |
| Operazioni simultanee | 2 per account; 16 in tutto il servizio |