Cosa fare
- Basa la logica sullo stato HTTP e su error.code, non sul testo di error.message.
- Un 401 richiede un’autenticazione valida; un 403 una verifica di accessi o piano; un 409 una verifica dell’operazione in conflitto o della versione della risorsa.
Accesso negato e nuovi tentativi
- 401
- 401 non significa sempre che il token sia scaduto. Se è scaduto, ottienine uno nuovo e ripeti la lettura al massimo una volta. Se la richiesta del token restituisce 401, verifica la chiave e interrompi i tentativi automatici.
- 403
- In caso di 403, verifica i permessi, le restrizioni IP e il piano. Un nuovo token non ripristina un accesso revocato.
Regola di ripetizione
- Per i guasti temporanei usa un numero limitato di tentativi, con attese crescenti e una componente casuale.
- Rispetta Retry-After quando presente.
- Se una scrittura va in timeout, il suo esito può essere sconosciuto: ripeti la stessa operazione con Idempotency-Key e richiesta invariati.
- Il catalogo seguente spiega tutti i codici pubblicati.
422 / 409
- Per i prezzi, un formato della valuta o una precisione dell’importo non validi restituiscono 422 request.validation_failed.
- Un codice valuta valido ma diverso da quello del listino selezionato restituisce 409 resource.version_conflict.
- Controlla il contesto e le versioni prima di riprovare.
Catalogo degli errori
400request.malformedNon è possibile interpretare la richiesta.
- Cosa fare
- Verifica sintassi JSON, codifica URL e struttura della richiesta.
- Regola di ripetizione
- Riprova dopo aver corretto la richiesta.
{
"error": {
"code": "request.malformed",
"fields": null,
"message": "The request could not be read."
},
"meta": {
"request_id": "example-request"
}
}
401authentication.invalid_credentialsLa chiave API o il token non sono validi, sono scaduti o sono stati revocati.
- Cosa fare
- Verifica URL del negozio e credenziali. Ottieni un nuovo token con una chiave API attiva.
- Regola di ripetizione
- Riprova dopo aver corretto l’autenticazione; evita richieste ripetute con token non validi.
{
"error": {
"code": "authentication.invalid_credentials",
"fields": null,
"message": "The credentials are invalid."
},
"meta": {
"request_id": "example-request"
}
}
401authentication.requiredL’header Authorization obbligatorio è assente o usa uno schema errato.
- Cosa fare
- Usa ApiKey per richiedere un token e Bearer per le operazioni sulle risorse.
- Regola di ripetizione
- Riprova dopo aver fornito l’header corretto.
{
"error": {
"code": "authentication.required",
"fields": null,
"message": "Authentication is required."
},
"meta": {
"request_id": "example-request"
}
}
403authorization.client_ip_unverifiedIl servizio non ha potuto verificare in modo affidabile l’indirizzo IP del client.
- Cosa fare
- Chiedi all’operatore del negozio di verificare il percorso di ingresso. Non inserire autonomamente header di inoltro.
- Regola di ripetizione
- Riprova dopo il ripristino del percorso di connessione attendibile.
{
"error": {
"code": "authorization.client_ip_unverified",
"fields": null,
"message": "The client IP address could not be verified."
},
"meta": {
"request_id": "example-request"
}
}
403authorization.ip_not_allowedL’indirizzo IP di origine non è nell’elenco consentito per la chiave.
- Cosa fare
- Usa un indirizzo approvato oppure chiedi a un amministratore autorizzato di modificare l’elenco IP della chiave.
- Regola di ripetizione
- Riprova soltanto dopo l’autorizzazione dell’indirizzo.
{
"error": {
"code": "authorization.ip_not_allowed",
"fields": null,
"message": "Access from this IP address is not allowed."
},
"meta": {
"request_id": "example-request"
}
}
403authorization.scope_deniedLa chiave non ha un permesso effettivo necessario per questa operazione.
- Cosa fare
- Verifica permessi obbligatori e condizionali dell’operazione, concessioni della chiave e diritti dell’emittente.
- Regola di ripetizione
- Riprova dopo che un amministratore autorizzato ha concesso l’accesso necessario.
{
"error": {
"code": "authorization.scope_denied",
"fields": null,
"message": "The required permission has not been granted."
},
"meta": {
"request_id": "example-request"
}
}
403entitlements.api_disabledL’accesso API è disabilitato per questo negozio.
- Cosa fare
- Chiedi al proprietario di verificare il piano attivo e la disponibilità dell’API.
- Regola di ripetizione
- Non riprovare finché l’accesso API non viene abilitato.
{
"error": {
"code": "entitlements.api_disabled",
"fields": null,
"message": "API access is disabled for this store."
},
"meta": {
"request_id": "example-request"
}
}
403entitlements.limit_exceededLa modifica supererebbe un limite del piano corrente.
- Cosa fare
- Verifica il limite applicabile e modifica l’operazione prevista o il piano.
- Regola di ripetizione
- Riprova dopo aver risolto il limite; usa una nuova chiave di idempotenza se cambia la richiesta.
{
"error": {
"code": "entitlements.limit_exceeded",
"fields": null,
"message": "The operation exceeds a plan limit."
},
"meta": {
"request_id": "example-request"
}
}
403entitlements.operation_disabledIl piano corrente non comprende questa operazione.
- Cosa fare
- Verifica il piano minimo indicato per l’operazione.
- Regola di ripetizione
- Riprova quando il piano consente l’operazione e la chiave ha i permessi necessari.
{
"error": {
"code": "entitlements.operation_disabled",
"fields": null,
"message": "The current plan does not allow this operation."
},
"meta": {
"request_id": "example-request"
}
}
403entitlements.resource_blockedUn limite del piano blocca questa risorsa specifica.
- Cosa fare
- Chiedi al proprietario di risolvere la restrizione del piano sulla risorsa.
- Regola di ripetizione
- Non ripetere la stessa richiesta mentre la risorsa resta bloccata.
{
"error": {
"code": "entitlements.resource_blocked",
"fields": null,
"message": "A plan limit blocks access to this resource."
},
"meta": {
"request_id": "example-request"
}
}
404resource.not_foundLa risorsa è assente, eliminata o non disponibile con l’identificativo indicato.
- Cosa fare
- Verifica negozio, percorso e identificativo. Usa gli identificativi restituiti da questo negozio.
- Regola di ripetizione
- Riprova soltanto dopo aver corretto la destinazione o confermato che esista.
{
"error": {
"code": "resource.not_found",
"fields": null,
"message": "The resource was not found."
},
"meta": {
"request_id": "example-request"
}
}
405request.method_not_allowedL’endpoint non supporta questo metodo HTTP.
- Cosa fare
- Usa il metodo documentato; l’header Allow indica quelli supportati.
- Regola di ripetizione
- Non ripetere il metodo non supportato.
{
"error": {
"code": "request.method_not_allowed",
"fields": null,
"message": "This method is not supported for this resource."
},
"meta": {
"request_id": "example-request"
}
}
409idempotency.key_reusedLa chiave di idempotenza appartiene a una richiesta diversa.
- Cosa fare
- Individua l’operazione originale. Usa una nuova chiave soltanto per una nuova operazione logica intenzionale.
- Regola di ripetizione
- Non ripetere un contenuto modificato con la chiave in conflitto.
{
"error": {
"code": "idempotency.key_reused",
"fields": null,
"message": "This idempotency key was used with a different request."
},
"meta": {
"request_id": "example-request"
}
}
409resource.already_existsUn valore univoco è in conflitto con una risorsa esistente.
- Cosa fare
- Leggi la risorsa esistente e decidi se usarla o scegliere un altro valore univoco.
- Regola di ripetizione
- Non ripetere la stessa creazione in conflitto.
{
"error": {
"code": "resource.already_exists",
"fields": null,
"message": "A resource with these unique values already exists."
},
"meta": {
"request_id": "example-request"
}
}
409resource.in_useAltre risorse dipendono ancora da questa risorsa.
- Cosa fare
- Esamina le dipendenze e rimuovile o modificale mediante operazioni supportate prima dell’eliminazione.
- Regola di ripetizione
- Riprova dopo aver risolto le dipendenze.
{
"error": {
"code": "resource.in_use",
"fields": null,
"message": "The resource is still in use."
},
"meta": {
"request_id": "example-request"
}
}
409resource.state_conflictLo stato operativo corrente impedisce questa modifica.
- Cosa fare
- Leggi lo stato corrente e scegli una transizione valida.
- Regola di ripetizione
- Non forzare automaticamente la modifica in conflitto e non inviarla ripetutamente.
{
"error": {
"code": "resource.state_conflict",
"fields": null,
"message": "The current resource state does not allow this operation."
},
"meta": {
"request_id": "example-request"
}
}
409resource.version_conflictUn’altra scrittura ha modificato la risorsa dopo la versione che hai letto.
- Cosa fare
- Leggi lo stato più recente, riconcilia la modifica e invia la nuova expected_version.
- Regola di ripetizione
- Usa una nuova chiave di idempotenza per l’operazione rivista; non sovrascrivere alla cieca.
{
"error": {
"code": "resource.version_conflict",
"fields": null,
"message": "The resource version has changed."
},
"meta": {
"request_id": "example-request"
}
}
413request.too_largeLa richiesta supera il limite di dimensione.
- Cosa fare
- Riduci il contenuto o suddividi il lavoro in singole operazioni supportate.
- Regola di ripetizione
- Riprova con operazioni valide più piccole, ognuna con la propria chiave di idempotenza.
{
"error": {
"code": "request.too_large",
"fields": null,
"message": "The request exceeds the size limit."
},
"meta": {
"request_id": "example-request"
}
}
415request.unsupported_media_typeIl tipo di contenuto o la sua codifica non sono supportati.
- Cosa fare
- Per scritture JSON usa Content-Type: application/json e un corpo non compresso supportato.
- Regola di ripetizione
- Riprova dopo aver corretto il tipo di contenuto o la codifica.
{
"error": {
"code": "request.unsupported_media_type",
"fields": null,
"message": "The request media type or encoding is not supported."
},
"meta": {
"request_id": "example-request"
}
}
422request.validation_failedUno o più campi o parametri non superano la validazione.
- Cosa fare
- Esamina error.fields, poi verifica campi obbligatori, ammissibilità di null, identificativi e valori consentiti.
- Regola di ripetizione
- Riprova con una richiesta corretta; una scrittura modificata costituisce una nuova operazione logica.
{
"error": {
"code": "request.validation_failed",
"fields": null,
"message": "Some request parameters are invalid."
},
"meta": {
"request_id": "example-request"
}
}
429capacity.queue_fullLa breve coda dell’API è piena; l’esecuzione della richiesta non è iniziata.
- Cosa fare
- Accoda le richieste e rispetta l’header Retry-After della risposta.
- Regola di ripetizione
- Attendi almeno i secondi indicati da Retry-After e aggiungi un ritardo casuale. Per ripetere una scrittura conserva chiave e contenuto originali.
{
"error": {
"code": "capacity.queue_full",
"fields": null,
"message": "The API is busy. Please retry shortly."
},
"meta": {
"request_id": "example-request"
}
}
429capacity.wait_timeoutIl tempo di attesa nella coda dell’API è scaduto; l’esecuzione della richiesta non è iniziata.
- Cosa fare
- Accoda le richieste e rispetta l’header Retry-After della risposta.
- Regola di ripetizione
- Attendi almeno i secondi indicati da Retry-After e aggiungi un ritardo casuale. Per ripetere una scrittura conserva chiave e contenuto originali.
{
"error": {
"code": "capacity.wait_timeout",
"fields": null,
"message": "The API could not start this request in time. Please retry shortly."
},
"meta": {
"request_id": "example-request"
}
}
429rate_limit.exceededLa frequenza delle richieste supera il limite applicabile.
- Cosa fare
- Accoda le richieste e rispetta l’header Retry-After della risposta.
- Regola di ripetizione
- Attendi almeno i secondi indicati da Retry-After e aggiungi un ritardo casuale. Per ripetere una scrittura conserva chiave e contenuto originali.
{
"error": {
"code": "rate_limit.exceeded",
"fields": null,
"message": "The request rate limit has been exceeded."
},
"meta": {
"request_id": "example-request"
}
}
500internal.errorSi è verificato un errore imprevisto del servizio.
- Cosa fare
- Registra l’identificativo della richiesta e contatta l’operatore se l’errore persiste; escludi le credenziali dai log.
- Regola di ripetizione
- Usa tentativi limitati con attese crescenti. Per una scrittura mantieni chiave di idempotenza e contenuto originali.
{
"error": {
"code": "internal.error",
"fields": null,
"message": "An unexpected error occurred."
},
"meta": {
"request_id": "example-request"
}
}
502gateway.bad_responseIl gateway non ha ricevuto una risposta API valida.
- Cosa fare
- Conserva l’identificativo della richiesta. Una risposta fallita non dimostra che una scrittura non sia stata applicata.
- Regola di ripetizione
- Usa attese crescenti con un numero limitato di tentativi; ripeti la stessa scrittura logica con Idempotency-Key e contenuto originali.
{
"error": {
"code": "gateway.bad_response",
"fields": null,
"message": "The API gateway could not obtain a valid response."
},
"meta": {
"request_id": "example-request"
}
}
504gateway.timeoutIl gateway ha superato il tempo di attesa dell’API.
- Cosa fare
- Conserva l’identificativo della richiesta e considera sconosciuto l’esito della scrittura.
- Regola di ripetizione
- Usa un numero limitato di tentativi con attese crescenti; per una scrittura mantieni chiave di idempotenza e contenuto originali.
{
"error": {
"code": "gateway.timeout",
"fields": null,
"message": "The API gateway timed out."
},
"meta": {
"request_id": "example-request"
}
}