TracePass
Riferimento

Errori e limiti di frequenza

Riferimento: codici di stato HTTP, forma dell'envelope di errore, limiti di frequenza per piano, indicazioni sui nuovi tentativi.

Ogni risposta di errore porta lo stesso envelope JSON, il codice di stato HTTP corrisponde alla semantica e la stringa di errore è abbastanza stabile da poterci basare la logica del client. L'elenco qui sotto è esaustivo — se incontrate qualcosa che non vi è incluso, segnalatelo a support@tracepass.eu.

Envelope

json
{
  "error": "Validation error",
  "details": {
    "fieldErrors": {
      "model": ["Required"]
    }
  }
}

error è sempre presente ed è una stringa stabile — basateci la logica del vostro client. detailsè opzionale; quando è presente, la sua forma dipende dall'errore specifico (un risultato Zod appiattito per la convalida, numeri di piano/utilizzo per un'eccedenza, nome del ruolo / autorizzazione per un 403).

Codici di stato

StatoQuandoNuovo tentativo?
400Errore di convalida — il corpo o la query non hanno superato il controllo dello schema; oppure chiave di campo sconosciuta in un PATCH di passaporto.No (correggere la richiesta)
401Chiave API mancante o revocata, oppure sessione scaduta.No (generare una nuova chiave / autenticarsi di nuovo)
402Quota DPP esaurita in una chiamata di creazione passaporto. Ritentare con `confirmOverage: true` se il piano supporta l'eccedenza. Si attiva anche quando è richiesto un abbonamento attivo ma è past_due/canceled.Sì, con `confirmOverage: true`
403Plan-gate (es. API v1 su un piano Free) oppure autorizzazione dello spazio di lavoro negata.No
404La risorsa non esiste o si trova in un altro spazio di lavoro.No
409Conflitto — model duplicato su un prodotto, GTIN registrato a un tenant diverso, collisione di numero di serie all'interno di un GTIN.A volte (risolvere il conflitto, poi ritentare)
410La risorsa è stata rimossa in modo permanente (raro; riguarda soprattutto gli URL pubblici dei passaporti dopo l'archiviazione).No
413Payload troppo grande — riguarda i caricamenti di immagini multipart (limite di 5 MB).No
415Media type non supportato — caricamento di un'immagine che non è PNG / JPG / WebP.No
422Idempotency-Key riutilizzata con un corpo della richiesta diverso.No (generare una chiave nuova)
423La risorsa è sospesa (solo nel visualizzatore pubblico del passaporto).No
429Limite di frequenza superato — scritture giornaliere o letture giornaliere di passaporti.Sì (dopo la successiva mezzanotte UTC)
500Errore del server non gestito. Siamo stati allertati.Sì (con backoff)
503Finestra di manutenzione o sovraccarico. Restituisce Retry-After.Sì (dopo Retry-After)

Indicazioni sui nuovi tentativi

Per le righe “Sì” qui sopra: backoff esponenziale con jitter, limitato a sei tentativi. Non accettiamo nuovi tentativi più aggressivi di uno al secondo su un singolo endpoint — qualcosa di più veloce comunque non raggiungerà il database (il rate limiter in memoria lo rifiuta), ma consumerete il vostro budget di scrittura giornaliero. L'headerRetry-After è impostato su ogni 503; il reset del limite di frequenza per 429 è sempre la successiva 00:00 UTC.

Stringhe di errore comuni

Stringa di erroreStatoSignificato
Validation error400Il controllo dello schema è fallito. details.fieldErrors porta le motivazioni per ogni campo (Zod flatten()).
Invalid field key: <key>400PATCH .../fields/<key> ha referenziato una chiave non presente nel template del passaporto.
No template found for category: <slug>400La categoria che avete inviato non è preconfigurata — verificate l'ortografia rispetto alla Buyer's Guide pubblica.
A product with this model already exists for your company409Le stringhe model sono univoche all'interno di uno spazio di lavoro. Scegliete un model diverso o aggiornate il prodotto esistente.
This GTIN is already registered by another company. Contact support if this is an error.409I GTIN sono univoci a livello globale tra i tenant — due aziende non possono possedere entrambe lo stesso GTIN.
Serial number already exists for this GTIN409Scegliete un numero di serie diverso. All'interno di un singolo GTIN i numeri di serie devono essere univoci.
Idempotency-Key has already been used with a different request body. Use a new key for the new request, or reuse the original body.422Avete inviato la stessa chiave due volte con corpi diversi. Generate una chiave nuova.
overage_required402Quota DPP esaurita. Il corpo porta planLimit + currentUsage + extraPriceCents. Ritentare con `confirmOverage: true` per accettare l'addebito per passaporto.
API rate limit: N writes/day via /api/v1. Currently X today; requested Y. Retry tomorrow (UTC) or upgrade your plan.429Budget di scrittura v1 giornaliero esaurito. Attendete o fate un upgrade.
API rate limit: N passports/day read via /api/v1. Currently X today; requested Y. Retry tomorrow (UTC) or contact support for a bulk export.429Budget di lettura passaporti v1 giornaliero esaurito. Attendete, fate un upgrade, oppure usate l'esportazione massiva JSON-LD dalla dashboard.
Passport not found404ID errato o spazio di lavoro errato. Verificate che la chiave API corrisponda allo spazio di lavoro che possiede il passaporto.