TracePass
Справочник

Грешки и лимити

Справочник: HTTP кодове за статус, форма на пакета грешки, лимити по план, насоки за повторение.

Всеки отговор за грешка носи един и същ JSON envelope, HTTP статус кодът съответства на семантиката, а низът на грешката е достатъчно стабилен, за да превключвате по него в клиента. Списъкът по-долу е изчерпателен — ако срещнете нещо извън него, докладвайте го на support@tracepass.eu.

Envelope

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

error винаги присъства и е стабилен низ — превключвайте по него в клиента. details е незадължително; когато присъства, формата му зависи от конкретната грешка (flattened Zod резултат при валидация, числови данни за плана / използването при overage, име на ролята / разрешението при 403).

Статус кодове

СтатусКогаПовторение?
400Валидационна грешка — тялото или query параметрите не преминаха schema проверка; или непознат ключ на поле при PATCH на паспорт.Не (поправете заявката)
401Липсващ или отзован API ключ, или изтекла сесия.Не (генерирайте нов ключ / преминете отново auth)
402DPP квотата е изчерпана при повикване за създаване на паспорт. Повторете с `confirmOverage: true`, ако планът поддържа overage. Връща се и когато се изисква активен абонамент, но е past_due/canceled.Да, с `confirmOverage: true`
403Plan-gate (напр. v1 API на план Free) или отказано разрешение в работното пространство.Не
404Ресурсът не съществува или е в друго работно пространство.Не
409Конфликт — дублиран model на продукт, GTIN регистриран от друг тенант, колизия на сериен номер в рамките на GTIN.Понякога (разрешете конфликта, после повторете)
410Ресурсът е премахнат за постоянно (рядко; основно при публични URL на паспорти след архивиране).Не
413Payload-ът е твърде голям — отнася се за multipart качване на изображения (5 MB лимит).Не
415Неподдържан media type — качено изображение, което не е PNG / JPG / WebP.Не
422Idempotency-Key е използван повторно с различно тяло на заявката.Не (генерирайте нов ключ)
423Ресурсът е спрян (само в публичния преглед на паспорта).Не
429Превишен лимит — дневни записи или дневни четения на паспорти.Да (след следващата UTC полунощ)
500Необработена грешка на сървъра. Алармирани сме.Да (с backoff)
503Maintenance прозорец или претоварване. Връща Retry-After.Да (след Retry-After)

Насоки за повторение

За редовете „Да“ по-горе: експоненциален backoff с jitter, капнат на шест опита. Не приемаме повторения, по-агресивни от веднъж в секунда на един endpoint — нещо по-бързо няма да достигне базата данни (in-memory rate limiter ги отхвърля), но ще изгори дневния ви бюджет за запис.Retry-After header се задава при всеки 503; нулирането на rate-limit за 429 винаги е следващата 00:00 UTC.

Често срещани низове на грешки

Низ на грешкатаСтатусЗначение
Validation error400Schema проверката е неуспешна. details.fieldErrors носи причините по поле (Zod flatten()).
Invalid field key: <key>400PATCH .../fields/<key> е цитирал ключ, който не е в шаблона на паспорта.
No template found for category: <slug>400Категорията, която сте изпратили, не е seeded — проверете изписването спрямо публичния Buyer's Guide.
A product with this model already exists for your company409Низовете model са уникални в работното пространство. Изберете различен model или актуализирайте съществуващия продукт.
This GTIN is already registered by another company. Contact support if this is an error.409GTIN е глобално уникален между тенантите — две компании не могат да притежават един и същ GTIN.
Serial number already exists for this GTIN409Изберете различен сериен номер. В рамките на един GTIN серийните номера трябва да са уникални.
Idempotency-Key has already been used with a different request body. Use a new key for the new request, or reuse the original body.422Изпратили сте същия ключ два пъти с различни тела. Генерирайте нов ключ.
overage_required402DPP квотата е изчерпана. Тялото носи planLimit + currentUsage + extraPriceCents. Повторете с `confirmOverage: true`, за да приемете таксата за паспорт.
API rate limit: N writes/day via /api/v1. Currently X today; requested Y. Retry tomorrow (UTC) or upgrade your plan.429Дневният v1 бюджет за запис е изчерпан. Изчакайте или направете 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.429Дневният v1 бюджет за четене на паспорти е изчерпан. Изчакайте, направете upgrade, или използвайте JSON-LD масовия експорт от таблото.
Passport not found404Грешен ID или грешно работно пространство. Проверете, че API ключът съответства на работното пространство, което притежава паспорта.