Chybové kódy#
🔴 Chyby většinou chodí s kódem HTTP 200#
Stavový kód nestačí
Validace dat, „nenalezeno“, duplicita i konflikt vracejí 200 s success: false.
Rozhodujte podle těla odpovědi.
Výjimkou je špatně sestavený požadavek — parametr ve špatném tvaru, nepovolené pole ve filtru. Ten dostane 400 ještě předtím, než se cokoli načte nebo zapíše.
Stavové kódy, které API skutečně používá#
| Kód | Kdy |
|---|---|
| 200 | prakticky vše, včetně aplikačních chyb |
| 204 | předběžný CORS dotaz, některé platební návratové adresy |
| 400 | parametr ve špatném tvaru, nepovolené pole ve filtru, řazení nebo sloupcích — viz Špatný tvar parametru |
| 401 | chybějící nebo neplatný klíč aplikace (kód 501), nebo neplatný, vypršelý či zneplatněný token uživatele (kód 103) |
| 403 | zamítnuté oprávnění |
| 404 | neexistující zdroj nebo akce — vrací HTML |
| 429 | překročený limit aplikace, volajícího, přihlášení nebo obnovy tokenu, s hlavičkou Retry-After |
| 500 | neošetřená výjimka — vrací HTML |
Kódy výsledku#
Číslo v poli code.
Kódy výsledku NEODPOVÍDAJÍ stavovým kódům HTTP
Vypadají podobně a nekorelují. 400 znamená zamítnuté oprávnění, 404 znamená
překročený limit, 403 znamená neplatný token.
Nejčastější#
| Kód | Význam |
|---|---|
0 |
v pořádku |
2 |
validace neprošla — i špatný tvar parametru (pak s HTTP 400) |
102 |
uživatel nenalezen; vrací ho i obnova tokenu u neaktivního, zablokovaného nebo rušeného účtu |
103 |
není přihlášen |
104 |
účet je zablokovaný (hlásí se až po správném hesle) |
106 |
relace vypršela |
108 |
neplatné heslo — i chybějící nebo špatné současné heslo u změny hesla |
109 |
účet není aktivní (hlásí se až po správném hesle) |
110 |
špatné přihlašovací údaje — stejný kód pro neznámý účet i špatné heslo |
400 |
zamítnuté oprávnění |
501 |
chybí platný klíč aplikace (HTTP 401) — API_UNAUTHORIZED |
402 |
přístupový token vypršel |
403 |
přístupový token je neplatný |
404 |
překročený limit požadavků |
602 |
chybí povinné pole |
604 |
hodnota pole se nedá převést na jeho typ — zpráva nese jméno pole |
607 |
nepovolená operace |
611 |
nevyhovující délka — např. nové heslo kratší než 8 znaků |
615 |
nepřípustná hodnota — např. údaj na blacklistu nebo nepovolená kategorie, viz Důvod odmítnutí |
616 |
položka nenalezena |
Účet, hesla a odkazy z e-mailu#
| Kód | Význam |
|---|---|
111 |
aktivační odkaz je neplatný, použitý nebo prošlý (jeden kód i pro neznámý e-mail) |
112 |
odkaz pro obnovu hesla je neplatný, použitý nebo prošlý (jeden kód i pro neznámý e-mail) |
113 |
přihlášení přes cizí službu: e-mail už patří jinému účtu a služba ho nepotvrdila — přihlaste se heslem |
114 |
přihlášení přes cizí službu: nový účet vznikl neaktivní, čeká na aktivaci z e-mailu |
115 |
přihlášení přes cizí službu: propojení s existujícím účtem se musí potvrdit odkazem z e-mailu |
116 |
odkaz pro potvrzení propojení je neplatný, použitý nebo prošlý |
117 |
účet čeká na zrušení — přihlášení je odmítnuté, data nese scheduledAt (datum zrušení) |
118 |
odkaz pro potvrzení nebo storno zrušení účtu je neplatný, použitý nebo prošlý |
119 |
žádost o zrušení účtu bez hesla se potvrzuje odkazem z e-mailu |
120 |
účet byl zrušen a anonymizován — nedá se uložit ani změnit |
Kódy 113–119 vznikají hlavně na webu
Přihlášení přes cizí službu a zrušení účtu probíhají na webu a nemají HTTP obal. Přes
API se setkáte hlavně s 117 (přihlášení rušeného účtu) a 120 (zápis do zrušeného
účtu).
Skupiny#
| Rozsah | Oblast |
|---|---|
| 100–120 | uživatel, přihlášení a účet |
| 200–207 | obrázky a soubory |
| 300–304 | databáze |
| 400–404 | oprávnění a tokeny |
| 500–504 | volání API |
| 600–626 | data a operace |
| 700–703 | úlohy |
| 800–804 | zpracování požadavku |
Důvod odmítnutí (data.errorCode)#
Neúspěšný save, který odmítlo obchodní pravidlo, nese v data jediný klíč errorCode
— stálý název důvodu. Kód výsledku (code) určuje skupinu, errorCode konkrétní příčinu.
HTTP stav je 200.
code |
errorCode |
Kdy |
|---|---|---|
2 |
parameterTooLong |
hodnota parametru inzerátu nebo profilu je delší, než parametr dovoluje (u editoru se počítá viditelný text) |
2 |
parameterUrlNotAllowed |
hodnota parametru obsahuje odkaz a parametr odkazy zakazuje |
2 |
parameterBlacklistedWord |
hodnota parametru obsahuje aktivní zakázané slovo v jazyce stránky požadavku |
2 |
parameterRequired |
chybí povinný parametr — povinnost se vyhodnocuje podle pravidel parametrů (např. typ ceny) |
2 |
parameterOptionNotAllowed |
zvolená volba výběrového parametru se při ostatních odeslaných hodnotách nenabízí |
2 |
userTypeDataMissing |
typ účtu vyžaduje IČ a název firmy nebo DIČ a chybí |
2 |
currencyRequired, currencyNotAllowed |
cena odpovědi bez měny, nebo nepovolená měna |
400 |
commentOnlyForLoggedIn |
komentář bez přihlášení ve vlákně, kam smějí psát jen přihlášení |
607 |
commentsClosed |
komentář do vlákna s vypnutými komentáři |
607 |
advertSold |
odpověď na prodaný inzerát |
615 |
blacklisted |
e-mail, telefon nebo IP adresa je na blacklistu webu |
615 |
advertCategoryNotAllowed |
kategorie inzerátu nebo profilu je vypnutá nebo jen pro administrátora |
Podrobnosti jsou jen v textu zprávy
Odpověď nenese číslo parametru, seznam chybějících polí ani typ blokovaného údaje — jen
errorCode. Zpráva je zmiňuje (parameter #12, regId, companyName), ale její text se může
změnit. Rozhodujte podle code a errorCode.
extend-expiration v placené kategorii vrací jen kód
Akce advert/extend-expiration (inzerce i firmy) odmítne neprivilegovanému volajícímu
prodloužení v placené kategorii s code: 607 a data: null — důvod (paymentRequired) je
jen v textu zprávy. Prodloužení v placené kategorii se platí na webu.
Administrátor se nekontroluje
Pravidla platí pro neprivilegovaného volajícího (host, přihlášený uživatel, vlastník).
Aplikace jednající s rolí admin je obchází stejně jako administrace webu.
Ukázky#
Chybí platný klíč aplikace (HTTP 401) — stejná odpověď pro chybějící, špatný, vypnutý i zrušený klíč:
{"success":false,"message":"A valid application key (X-API-Key) is required.","data":null,"code":501}
Neplatný token uživatele (HTTP 401, token neplatí, vypršel nebo byl zneplatněn):
Zamítnuto (HTTP 403):
Limit aplikace nebo volajícího (HTTP 429, hlavička Retry-After: 3):
Limit přihlášení nebo obnovy tokenu (HTTP 429, hlavička Retry-After: 240) — tytéž klíče,
jen zpráva nese i počet sekund:
Počkejte Retry-After sekund. Rozhodujte podle code a data.retryAfter, ne podle textu
zprávy.
Chybí data (HTTP 200):
Poslední ukázka nemá klíč data
Obálka není konzistentní. Čtěte jednotlivé klíče obranně.
Nepřevoditelná hodnota (HTTP 200):
{"success":false,"code":604,"message":"Invalid value for field \"currencyId\": expected int, got \"1.9\"."}
Příliš mnoho nových záznamů (HTTP 200, bez Retry-After):
Vrací ho uložení nového obsahu nad kvótou zakládání.
Maskovaná technická chyba (errorRef)#
Technické selhání (databáze, soubory, externí služba, fronta, neznámá chyba) neprozradí v odpovědi nic o vnitřku systému. Místo textu výjimky přijde obecná hláška a referenční kód:
{"success":false,"code":300,"message":"An internal error occurred. Quote the reference when contacting support.","errorRef":"3f9a1c07","data":null}
Kód errorRef předejte správci webu — v logu serveru je pod [errorRef=3f9a1c07] celý
detail. Klient se podle textu message neřídí; rozhoduje code. Doménové chyby
(validace, stav, nenalezeno) errorRef nemají a jejich message se nemění.
Špatný tvar parametru#
Parametr, který má jiný tvar, než akce čeká, se nepřetypuje — požadavek skončí
HTTP 400 s kódem 2, dřív než se cokoli načte nebo zapíše:
| Příklad | Proč neprojde |
|---|---|
filters=x, orderBys=x, columns=x |
text místo pole |
data=x, meta=x, skipFields=x u save |
text místo pole |
ids u update-columns chybí, je prázdné nebo je to text; values je text |
seznam ID a hodnoty musí být pole |
ids u register-event není neprázdný seznam kladných celých čísel |
1.9, 0 ani prázdný seznam neprojdou |
computeTotalCount=ano |
logická hodnota jen 1/0, true/false, on/off |
includes[0][]=user, includes= |
includes je jedna cesta nebo seznam cest |
includes=* nebo columns[]=… u get-all |
u výpisu se nepodporují |
| filtr s neznámým typem, bez pole nebo s vnořenou skupinou ve špatném tvaru | filtr se nedá sestavit |
doplňkový klíč filtru inclusive nebo isNull poslaný v adrese |
očekává se pravdivostní hodnota, adresa nese jen text |
Nepovolené pole ve filtru má vlastní zprávu
Filtr, řazení nebo sloupec nad polem, které volající nesmí číst (heslo, IP adresa,
e-mail cizího uživatele, neexistující pole), vrátí také HTTP 400 a kód 2, se zprávou
Field path "user.email" is not allowed in filters, orderBys or columns. Podrobně
v Oprávněních.
400 je chyba klienta — opakování nepomůže
Opravte sestavení požadavku. Zpráva říká, který parametr je špatně.