API Hop

Dokumentacja

Dokumentacja API Hop

Kody błędów i diagnozowanie

Sprawdź wszystkie kody błędów platformy, rozpoznawaj błędy protokołów, bezpiecznie ponawiaj i zbieraj dane diagnostyczne dla użytkowników oraz asystentów AI.

Ustal, co zawiodło

  1. Zapisz rzeczywisty status HTTP, metodę i ścieżkę żądania. Status HTTP i kod błędu aplikacji opisują różne warstwy; nie zastępuj jednego drugim.
  2. Odczytuj pola błędów zgodnie z wywołanym protokołem. Odpowiedzi natywne, OpenAI, Claude i Gemini nie mają wspólnej struktury we wszystkich przypadkach.
  3. Dla żądań strumieniowych sprawdź także zdarzenia błędów i stan ukończenia. Dla zadań asynchronicznych sprawdź status zadania. HTTP 200 nie gwarantuje udanego generowania.
  4. Użyj poniższej tabeli, aby poprawić żądanie lub zdecydować o ponowieniu. message jest tekstem objaśniającym, a nie stabilnym wyliczeniem; nie uzależniaj logiki od jego brzmienia.

Wyliczenie kodów błędów platformy

To kompletne wyliczenie kodów błędów aplikacyjnych platformy. Nazwy są etykietami referencyjnymi; wartości code w odpowiedzi są liczbami. „Typowy HTTP” jest wskazówką diagnostyczną, a nie stałym mapowaniem każdego punktu końcowego. Używaj rzeczywistego statusu HTTP i treści odpowiedzi. code przekazany od dostawcy może nie należeć do tego wyliczenia.

Numeryczny codeNazwaTypowy HTTPZnaczenie i działanie
10000BAD_REQUEST400Nieprawidłowy format żądania, ścieżka lub podstawowe parametry. Sprawdź metodę, ścieżkę, składnię JSON i nazwy parametrów.
10001VALIDATION_ERROR400 / 422Walidacja parametrów nie powiodła się. Sprawdź wymagane pola, typy, zakresy i kombinacje parametrów.
20000AUTH_ERROR401Uwierzytelnienie nie powiodło się. Sprawdź ważność klucza API, wygaśnięcie i format nagłówka uwierzytelnienia.
20001FORBIDDEN403Odmowa dostępu lub ograniczone konto. Sprawdź uprawnienia konta i własność zasobu.
30000NOT_FOUND404Ścieżka, model lub zasób nie istnieje. Sprawdź ścieżkę punktu końcowego, model i ID zadania względem zasobów widocznych dla bieżącego klucza API.
30001CONFLICT409Operacja koliduje z bieżącym stanem zasobu. Odczytaj stan przed dostosowaniem operacji; unikaj podwójnych zgłoszeń.
40000INSUFFICIENT_CREDIT402Niewystarczające saldo. Sprawdź i uzupełnij je przed kolejnym wywołaniem.
40001RATE_LIMIT429Żądania napływają zbyt często. Zmniejsz częstotliwość i opóźnij ponowienia.
40002CONCURRENCY_LIMIT429Zbyt wiele żądań działa jednocześnie. Zmniejsz współbieżność i poczekaj na ukończenie istniejących żądań.
50000PROVIDER_ERROR502Wywołanie dostawcy zawiodło lub nie zwróciło poprawnego wyniku. Przed rozważeniem ograniczonych ponowień sprawdź, czy wynik został utworzony.
50001SERVICE_UNAVAILABLE503Usługa jest tymczasowo niedostępna. Spróbuj później z ograniczeniami; zbierz dane diagnostyczne, jeśli błąd się utrzymuje.
50002GATEWAY_TIMEOUT504Przetwarzanie przekroczyło limit czasu. Wynik może być niepewny; przed ponowieniem sprawdź, czy nastąpiło wykonanie.
50003INTERNAL_ERROR500Wystąpił niesklasyfikowany błąd serwera. Stosuj ograniczone ponowienia; zbierz dane diagnostyczne, jeśli błąd się utrzymuje.

Sam HTTP 429 nie pozwala wiarygodnie odróżnić limitu częstotliwości od limitu współbieżności. Rozróżniaj je tylko przy dostępnym jawnym numerycznym kodzie błędu. Sprawdź identyfikatory modeli na liście modeli; nie przepisuj samodzielnie wartości model.

Odczytywanie błędów według protokołu

Poniższe przykłady pokazują typowe struktury generowane przez platformę, a nie jeden format gwarantowany dla każdego błędu. Błędy uwierzytelnienia mogą pochodzić z różnych warstw przetwarzania, a odpowiedzi przekazywane od dostawcy mogą zachować własne struktury, kody tekstowe lub typy. Przed parsowaniem rozpoznaj rzeczywistą strukturę odpowiedzi. Jeśli jest nieznana, zachowaj oryginalne pola i status HTTP zamiast wymuszać konwersję.

Natywne API platformy

Zwykle odczytuj error.code i error.message. requestId może nie występować.

json
{
  "success": false,
  "error": {
    "code": 10000,
    "message": "Bad request"
  },
  "requestId": "req_example"
}

Niektóre błędy mogą używać code i message najwyższego poziomu. Klienci powinni tolerować tę różnicę i nie mogą traktować braku obiektu error jako dowodu sukcesu. Odpowiedzi walidacji parametrów mogą też nie zawierać numerycznego kodu błędu. Traktuj brakujący kod jako nieznany zamiast go wymyślać.

API zgodne z OpenAI

Typowe błędy generowane przez platformę używają code, message i type najwyższego poziomu; nie muszą być opakowane w error.

json
{
  "code": 40000,
  "message": "Insufficient credit",
  "type": "api_error"
}

type jest kategorią protokołu; code w tej strukturze to numeryczny kod błędu platformy. Samo api_error nie określa zasadności ponowienia. Błędy przekazywane od dostawcy i błędy strumieniowe mogą zawierać zagnieżdżone error; obsługuj rzeczywistą odpowiedź protokołu. Zobacz Chat Completions i Responses.

API zgodne z Claude

W typowej strukturze type najwyższego poziomu to error, konkretna kategoria to error.type, a opis to error.message. Ta struktura nie zawiera numerycznego code platformy. Nie wymyślaj go.

json
{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "max_tokens must be a positive safe integer"
  }
}

Platforma lokalnie generuje poniższe typy błędów Claude. Nie jest to pełne wyliczenie typów błędów dostawcy.

error.typeLokalne mapowanie HTTPCo sprawdzić
invalid_request_error400Sprawdź format i parametry żądania.
authentication_error401Sprawdź dane uwierzytelniające.
api_errorInne statusy HTTPOgólny błąd API; sprawdź rzeczywisty status HTTP i opis. Nie musi nadawać się do ponowienia.

Zobacz wiadomości Claude.

Błędy w stylu Gemini

Gdy otrzymasz odpowiedź w stylu Gemini, odczytaj error.code, error.message i error.status. Tutaj status jest kategorią tekstową, a nie statusem HTTP lub zadania asynchronicznego.

json
{
  "error": {
    "code": 10000,
    "message": "Bad request",
    "status": "INVALID_ARGUMENT"
  }
}

Błędy generowane przez platformę w tej strukturze używają numerycznych wartości code platformy. Poniżej znajduje się lokalne mapowanie tekstowego status; nie jest to wyliczenie wszystkich statusów dostawcy.

error.statusLokalne mapowanie HTTPCo sprawdzić
UNAUTHENTICATED401Sprawdź dane uwierzytelniające.
RESOURCE_EXHAUSTED402 / 429Sprawdź saldo lub limity zużycia; sam ciąg nie pozwala ich odróżnić.
PERMISSION_DENIED403Sprawdź uprawnienia i własność zasobu.
NOT_FOUND404Sprawdź ścieżkę, model lub zasób.
UNAVAILABLE503Usługa jest tymczasowo niedostępna.
INTERNAL>= 500, z wyjątkiem 503Błąd serwera; 504 również używa tej wartości.
INVALID_ARGUMENTInne statusy HTTPSprawdź rzeczywisty status HTTP i żądanie; 409 również używa tej wartości.

503 ma pierwszeństwo i używa UNAVAILABLE, a nie INTERNAL. Odpowiedzi dostawcy mogą mieć inną semantykę code i status. Nie stosuj tabeli błędów platformy do każdego numerycznego kodu Gemini.

Bezpieczne ponawianie

SytuacjaZalecane działanie
400 / 401 / 402 / 403 / 404 / 409 / 422Najpierw popraw żądanie, dane uwierzytelniające, saldo, uprawnienia lub stan zasobu. Nie wysyłaj wielokrotnie niezmienionego żądania. Klucze API wysyłaj tylko w nagłówkach, nigdy w parametrach zapytania URL.
429Zmniejsz częstotliwość i współbieżność, a następnie poczekaj przed ponowieniem. Samo zwiększanie liczby ponowień zwykle nasila ograniczanie.
500 / 502 / 503 / 504Najpierw oceń ryzyko podwójnego wykonania, a następnie użyj ograniczonego wykładniczego wydłużania odstępów z losowym odchyleniem, na przykład najwyżej 3 ponowień z łącznym limitem oczekiwania.
Rozłączenie sieci lub limit czasu klientaBrak otrzymanego wyniku nie oznacza, że serwer nie wykonał żądania. Oznacz wynik jako nieznany zamiast deklarować błąd lub natychmiast tworzyć kolejne żądanie.

Respektuj poprawny nagłówek Retry-After, jeśli występuje. Nie zakładaj, że zawiera go każdy błąd. Automatyczne ponowienie nieidempotentnego żądania generowania może wykonać je ponownie i naliczyć dodatkowe opłaty. Ta strona nie obiecuje ogólnej obsługi kluczy idempotencji; samodzielne dodanie Idempotency-Key nie gwarantuje deduplikacji.

Jeśli masz już jobId, sprawdź to zadanie przed utworzeniem kolejnego. Jeśli nie masz jobId, a wynik jest niepewny, zachowaj identyfikator żądania i znacznik czasu do analizy.

Strumienie i zadania asynchroniczne

Żądania SSE

Po rozpoczęciu SSE status HTTP może pozostać 200, podczas gdy późniejszy błąd zostanie zgłoszony przez zdarzenie lub dane błędu w strumieniu. Parsuj zdarzenia i dane wybranego protokołu oraz sprawdzaj prawidłowe ukończenie. Przy błędzie lub nieoczekiwanym rozłączeniu nie traktuj częściowego tekstu lub obrazów jako pełnego udanego wyniku. Nazwy zdarzeń i ich dane różnią się między punktami końcowymi. Nie sprawdzaj tylko jednego stałego pola error ani nie używaj „otrzymano dowolny tekst” jako warunku sukcesu.

Zadania asynchroniczne

Odpowiedź utworzenia zawierająca data.jobId oznacza przyjęcie żądania, a nie ukończenie generowania. Udana odpowiedź HTTP przy odpytywaniu zadania oznacza powodzenie zapytania. Nadal musisz sprawdzić data.status zadania:

  • PENDING, CONNECT, PROCESSING: kontynuuj odpytywanie zgodnie z dokumentacją Jobs.
  • COMPLETED: odczytaj outputResult.
  • FAILED, CANCELLED: zatrzymaj odpytywanie i zachowaj ID zadania oraz informacje odpowiedzi bez danych wrażliwych do analizy.

Szczegóły błędu mogą pojawić się w data.outputResult.error. Pole jest opcjonalne i nie jest gwarantowane dla każdego nieudanego zadania. Używaj Jobs tylko wtedy, gdy odpowiedź utworzenia jawnie zwraca jobId. Nie stosuj odpytywania zadań do punktów końcowych zwracających wyniki bezpośrednio przez JSON lub SSE.

Diagnostyka dla użytkowników i asystentów AI

Przekaż wsparciu lub asystentowi AI poniższe informacje po usunięciu danych wrażliwych. Dla brakujących pól użyj unknown; dla statusu HTTP użyj unknown, jeśli nie otrzymano odpowiedzi HTTP. Zachowaj ścieżki pól i oryginalne typy wartości, na przykład error.code: 10000 (number) lub error.code: "invalid_api_key" (string). Nie konwertuj automatycznie tekstowego code na numeryczny kod platformy ani nie wymyślaj brakujących pól z message, statusu HTTP lub nazw modeli.

text
time_with_timezone: unknown
method: unknown
path_without_query: unknown
model: unknown
stream: unknown
http_status: unknown
error_code_path_value_and_type: unknown
error_type_path_and_value: unknown
protocol_status_path_and_value: unknown
sanitized_message: unknown
request_id_from_body_or_X-Request-ID: unknown
job_id: unknown
job_status: unknown
retry_after: unknown
retry_count_and_delays: unknown
received_partial_output: unknown

Odczytaj requestId z treści odpowiedzi lub nagłówka odpowiedzi X-Request-ID, gdy są dostępne. Zachowaj jobId jako ciąg znaków, aby nie utracić precyzji długich liczb. Podaj tylko minimalne parametry żądania bez danych wrażliwych. Usuń klucze API, tokeny, pliki cookie, pełne nagłówki uwierzytelnienia, dane osobowe, prywatne prompty i treść plików wejściowych. Usuń parametry zapytań URL oraz adresy wejścia lub wyjścia zawierające podpisy lub dane dostępu. Nie wklejaj pełnych logów żądań bez ich przeglądu.

Asystenci AI powinni odróżniać zaobserwowane pola od możliwych przyczyn i wskazywać brakujące informacje. Niedostateczne dowody nie mogą być uznawane za potwierdzenie sukcesu żądania, braku wykonania lub braku opłaty.