Przejdź do treści

Błędy i limity

Wszystkie błędy zwracane są jako JSON o jednolitej strukturze:

{
"error": "insufficient_scope",
"message": "Token nie posiada wymaganego uprawnienia",
"timestamp": "2025-01-15T14:30:00Z",
"path": "/api/PurchaseDocuments/my",
"requestId": "req_abc123def456"
}
PoleOpis
errorKod błędu (maszynowy identyfikator)
messageOpis czytelny dla człowieka
timestampCzas wystąpienia błędu (ISO 8601)
pathŚcieżka endpointu, który zwrócił błąd
requestIdUnikalny identyfikator zapytania (przydatny przy kontakcie z supportem)
KodZnaczenieOpis
200OKZapytanie zakończone sukcesem
204No ContentBrak treści (np. dokument w trakcie przetwarzania)
401UnauthorizedBrak tokenu, token nieprawidłowy lub wygasły
403ForbiddenToken nie posiada wymaganego uprawnienia (scope)
404Not FoundZasób nie istnieje
429Too Many RequestsPrzekroczono limit zapytań
500Internal Server ErrorBłąd po stronie serwera

Najczęstsze przyczyny:

  • Brak nagłówka X-API-Key
  • Token z literówką lub obcięty
  • Token został usunięty
Okno terminala
# Sprawdź, czy token jest ustawiony
echo $OGARNIAI_API_TOKEN

Token jest prawidłowy, ale nie ma wystarczającego uprawnienia. Upewnij się, że token posiada odpowiedni scope (read, write lub admin).

Przekroczono limit zapytań. Sprawdź nagłówek Retry-After i poczekaj wskazaną liczbę sekund.

Limity są naliczane na token, w oknie godzinowym.

UprawnienieLimit na godzinę
read1 000 zapytań
write2 000 zapytań
admin5 000 zapytań

Każda odpowiedź zawiera nagłówki informujące o stanie limitu:

NagłówekOpis
X-RateLimit-LimitMaksymalna liczba zapytań w oknie
X-RateLimit-RemainingPozostała liczba zapytań
X-RateLimit-ResetTimestamp resetu limitu (Unix epoch)
X-RateLimit-Reset-AfterSekund do resetu limitu
Retry-AfterSekund do odczekania (tylko przy 429)
HTTP/1.1 200 OK
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 847
X-RateLimit-Reset: 1705334400
X-RateLimit-Reset-After: 2145

Sprawdzaj nagłówki rate limit i reaguj na status 429:

import time
import requests
def safe_request(url, headers, max_retries=3):
for attempt in range(max_retries):
response = requests.get(url, headers=headers)
# Loguj stan limitu
remaining = response.headers.get("X-RateLimit-Remaining")
if remaining:
print(f"Pozostalo zapytan: {remaining}")
if response.status_code == 429:
retry_after = int(response.headers.get("Retry-After", 60))
print(f"Limit przekroczony, czekam {retry_after}s...")
time.sleep(retry_after)
continue
response.raise_for_status()
return response.json()
raise Exception("Przekroczono maksymalna liczbe prob")