docs

API — Erori

Modelul de erori, codurile de status și strategia de retry pentru API-ul SCOPO Intelligence.

API — Erori

Format eroare

Toate erorile returnează JSON cu același format:

{
  "statusCode": 401,
  "code": "API_KEY_INVALID",
  "message": "Invalid or revoked API key"
}

Pentru erori de validare cu multiple câmpuri:

{
  "statusCode": 400,
  "code": "VALIDATION_ERROR",
  "message": "Validare eșuată",
  "details": [
    { "field": "cpvCodes", "message": "Formatul codului CPV este invalid" },
    { "field": "minValue", "message": "Valoarea minimă trebuie să fie pozitivă" }
  ]
}

Coduri de status HTTP

CodSemnificațieCauze frecvente
400Bad RequestBody invalid, parametri malformați, limite depășite
401UnauthorizedAPI Key sau JWT lipsă, invalid sau revocat
402Payment RequiredCredite API epuizate pentru luna curentă
403ForbiddenPlan insuficient sau companie din alt tenant
404Not FoundResursa nu există sau nu aparține contului tău
409ConflictResursa există deja (ex: watchlist cu același nume)
410GoneToken de descărcare expirat sau depășit numărul maxim de utilizări
422Unprocessable EntityDate valide sintactic dar invalide semantic
429Too Many RequestsRate limit depășit — verifică Retry-After
500Internal Server ErrorEroare internă — raportează la suport dacă persistă
503Service UnavailableServiciu temporar indisponibil — aplică retry cu backoff

Erori API Key (401 / 403)

Cod eroareStatusCauză
API_KEY_MISSING401Antetul Authorization: Bearer lipsește
API_KEY_INVALID401Cheia nu există sau nu a fost recunoscută
API_KEY_REVOKED401Cheia a fost revocată din Settings → API
PLAN_UPGRADE_REQUIRED403Plan < Consultant; necesari 349 RON/lună
COMPANY_ACCESS_DENIED403companyId nu aparține tenant-ului cheii tale
{
  "statusCode": 401,
  "code": "API_KEY_REVOKED",
  "message": "Invalid or revoked API key"
}

Erori credite (402)

Cod eroareStatusCauză
API_CREDITS_EXHAUSTED402Credite epuizate pentru luna curentă
{
  "statusCode": 402,
  "code": "API_CREDITS_EXHAUSTED",
  "message": "Creditele API incluse în planul Consultant au fost epuizate pentru această lună.",
  "credits_remaining": 0,
  "credits_required": 20,
  "period_ends_at": "2026-07-01T00:00:00+03:00"
}

Erori de validare și limite (400 / 422)

Cod eroareStatusCauză
DATE_RANGE_EXCEEDED400Intervalul to - from depășește 90 de zile
LIMIT_EXCEEDED400limit > 1000 la export
WEBHOOK_LIMIT_EXCEEDED422Deja 5 webhooks active per tenant

Token descărcare expirat (410)

Cod eroareStatusCauză
DOWNLOAD_TOKEN_EXPIRED410Token > 15 min sau folosit de mai mult de 3 ori

Rate limiting (429)

Cod eroareStatusCauză
RATE_LIMIT_EXCEEDED429Limita de req/min sau req/oră depășită
{
  "statusCode": 429,
  "code": "RATE_LIMIT_EXCEEDED",
  "message": "Rate limit depășit.",
  "retry_after_seconds": 23
}

Limitele pe grup de endpoint:

GrupLimită
General (/tenders, webhooks)60 / minut
Export (/export/tenders)20 / oră
PDF reports10 / oră

Strategie de retry recomandată

CodRetry?Strategie
400NuCorectează request-ul înainte de a reîncerca
401Da*API Key — verifică dacă a fost revocat; JWT — reînnoiește token-ul
402NuCreditele se resetează la 1 ale lunii
403NuVerifică plan sau companyId
404NuVerifică ID-ul resursei
410NuSolicită un nou URL de descărcare (/jobs/:id/download)
429DaAșteaptă retry_after_seconds, apoi retrimitere
500DaExponential backoff: 1s, 2s, 4s, max 3 încercări
503DaExponential backoff: 5s, 10s, 20s, max 3 încercări

Logging recomandat

Loghează întotdeauna:

  • statusCode și code din răspunsul de eroare
  • X-Request-Id din antet (util pentru suport)
  • Timestamp-ul și endpoint-ul accesat

Nu loga: API Key, token-uri JWT, parole sau payload-uri complete ale utilizatorilor.

Vezi și

On this page