Hibák, lapozás és kvóták
A hibaválasz törzse, a lehetséges állapotkódok, a kvótaválaszok, a listázó végpontok lapozása, az azonosítók és mezőnevek vegyes írásmódja, valamint az API-felhasználás elszámolása.
Ezek a konvenciók a teljes REST API-ra vonatkoznak. Az MCP hibakezelése ettől eltér, erről itt olvashatsz: Az MCP áttekintése.
A hibaválasz törzse
Szinte minden hiba egy JSON-objektum, egyetlen, ember által olvasható üzenettel:
{"error": "Conversation not found"}
Általános, gépi feldolgozásra szánt hibakódok nincsenek. Néhány hibacsalád egy további mezőt is visszaad:
| További mező | Mikor | Példa |
|---|---|---|
reason | Kvóta- és csomagkorlátok (429) | {"error":"Quota exceeded","reason":"credit_count"} |
code | Védőkorlát- és adatrezidencia-tiltások a futtató végpontokon | {"error":"...","code":"SENSITIVE_DATA_BLOCKED"} |
error_code | Érzékenyadat-tiltások és MCP-szerverhibák a beszélgetés-végpontokon | {"error":"...","error_code":"..."} |
Az adatrezidencia-kódok: EU_INFERENCE_REQUIRED, ZERO_RETENTION_REQUIRED, NO_PROVIDER_ASSIGNED és NO_ENDPOINT_AVAILABLE. Egyes hitelesítési hibák csak egy állapotkódot adnak vissza, üres törzzsel, ezért ne feltételezd, hogy minden hibaválasz JSON-ként értelmezhető.
Állapotkódok
| Állapotkód | Jelentés | Jellemző törzs |
|---|---|---|
200 / 201 / 204 | Sikeres kérés | Az erőforrás, 204 esetén pedig semmi |
400 | Érvénytelen JSON, vagy egy mező nem ment át az ellenőrzésen; a futtató végpontokon a korlátozott modellek, valamint az adatrezidencia- és védőkorlát-tiltások is ezt adják | {"error":"<binding error text>"} |
401 | Nincs érvényes API-kulcs | {"error":"Invalid API key"}, vagy üres törzs, ha a rendszer nem ismert fel kulcsot |
403 | A kulcsból hiányzik egy jogosultság, a végpont nem érhető el kulccsal, a fiók nem aktív, vagy a kérés nem támogatott régióból érkezik | {"error":"This api key does not have any of the required permissions. You need at least one of: ..."} |
404 | Nem található, vagy a kulcs tulajdonosa nem láthatja | {"error":"Conversation not found"} (egyes végpontok üres törzset adnak) |
429 | A munkaterület elérte a kvótáját vagy a csomagja valamelyik korlátját | {"error":"Quota exceeded","reason":"..."} |
500 / 503 | A művelet sikertelen, például mert nincs kiválasztott modell, vagy szolgáltatói hiba történt | {"error":"<message>"} |
Az egyes végpontok pontos állapotkódjait a REST-referencia oldalai sorolják fel. A hitelesítési hibákról az API-kulcsok és hitelesítés oldalon olvashatsz bővebben.
Kvóták
Azok a végpontok, amelyek kreditköteles munkát indítanak (futtatások, beszélgetések, médiagenerálás, hangátírás, tudásbázis-feltöltés és fájlfeldolgozás), először ellenőrzik a munkaterület csomagját és kreditjeit. Ha az ellenőrzés nem sikerül, ezt adják vissza:
HTTP 429
{"error": "Quota exceeded", "reason": "credit_count"}
reason | Jelentés |
|---|---|
credit_count | A munkaterület elhasználta a kreditjeit. Egy adminisztrátor az alkalmazásban feltöltheti a keretet. |
user_count | A munkaterület csomagjának a felhasználók számára vonatkozó korlátja. |
subscription | A munkaterület előfizetése ezt nem teszi lehetővé. |
trial_expired | A próbaidőszak lejárt. |
unknown | A korlátot nem sikerült besorolni. |
Ez a 429 nem sebességkorlát, így az azonnali újrapróbálkozás nem segít. Juttasd el a hibát valakihez, aki intézkedni tud. A kreditekről és a csomagokról a Felhasználás, kreditek és számlázás oldalon olvashatsz.
Sebességkorlátozás
Nincs közzétett, kulcsonkénti vagy felhasználónkénti kérési sebességkorlát (rate limit). Az áteresztőképességet a munkaterület csomagja és kreditjei határozzák meg, a korlát elérését pedig a fenti 429 Quota exceeded válasz jelzi. A hosszú szinkron hívások (egy lassú modell, egy hosszú hangátírás) addig tartanak, amíg a munka elkészül, ezért állíts be bőséges időkorlátot a HTTP-kliensedben.
Lapozás
A lapozható listázó végpontok két lekérdezési paramétert fogadnak:
| Paraméter | Alapértelmezés | Jelentés |
|---|---|---|
page | 1 | Az oldal sorszáma, 1-től kezdve. |
size | 10 | Elemek száma oldalanként. |
A lapozási adatok a válasz headereiben vannak, nem a törzsben. A törzs egy egyszerű JSON-tömb.
| Header | Jelentés |
|---|---|
X-Page | A kapott oldal sorszáma. |
X-Page-Size | A használt oldalméret. |
X-Total-Count | Az elemek teljes száma az összes oldalon. |
Egyes listázó végpontok mindent visszaadnak, ha nem küldesz lapozási paramétert (például a GET /ai_model). Hogy melyek ezek, azt az adott végpont referenciája jelzi.
curl -i "https://api.stickyprompts.com/api/v1/conversation?page=2&size=25" \
-H "Authorization: Bearer $STICKY_API_KEY"
# X-Page: 2
# X-Page-Size: 25
# X-Total-Count: 137import os
import requests
BASE = "https://api.stickyprompts.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['STICKY_API_KEY']}"}
def all_conversations(size=50):
page = 1
while True:
r = requests.get(f"{BASE}/conversation", headers=HEADERS,
params={"page": page, "size": size})
r.raise_for_status()
yield from r.json()
if page * size >= int(r.headers["X-Total-Count"]):
break
page += 1const BASE = "https://api.stickyprompts.com/api/v1";
const headers = { Authorization: `Bearer ${process.env.STICKY_API_KEY}` };
async function* allConversations(size = 50) {
for (let page = 1; ; page++) {
const res = await fetch(`${BASE}/conversation?page=${page}&size=${size}`, { headers });
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
yield* await res.json();
if (page * size >= Number(res.headers.get("X-Total-Count"))) break;
}
}Az MCP-eszközök másként lapoznak: limit és offset argumentummal, az eredményben pedig egy total_count mezővel. Részletek: Eszközreferencia.
Azonosítók és mezőnevek
- A legtöbb erőforrás numerikus azonosítót használ. Sok végpont az azonosító helyett egy 8 karakteres
slugértéket is elfogad; hogy hol, azt a referenciaoldalak jelzik. - A legtöbb rekord négy alapmezőt tartalmaz, nagybetűvel kezdődő kulccsal:
ID,CreatedAt,UpdatedAtésDeletedAt. A többi mező snake_case, néhány pedig camelCase (például az üzeneteknél azisUser, a beszélgetéseknél auserIdés aprojectId). - Egyes egyedileg összeállított válaszok, például a promptfuttatások eredményei, helyettük kisbetűs
idéscreated_atmezőt használnak. - A tizedes típusú kredit- és pénzértékek (például
credits_used,multiplier) JSON-stringként érkeznek, például"0.4213". Decimális típussal dolgozd fel őket, ne lebegőpontos számként.
{
"ID": 5120,
"CreatedAt": "2026-09-28T09:13:58Z",
"DeletedAt": null,
"slug": "aB3dE5gH",
"userId": 77,
"next_message_ai_model_id": 42,
"credits_used": "0.4213"
}
A kliensedben egyenként, explicit módon képezd le a mezőket, ne egyetlen elnevezési konvencióra hagyatkozz.
Korrelációs azonosító
Minden válasz tartalmaz egy X-Correlation-ID headert. Rögzítsd a saját kérésnaplóidban is. Ha egy konkrét hívással kapcsolatban segítségre van szükséged, add meg ezt az azonosítót is, amikor a hello@stickyprompts.com címre írsz.
Földrajzi korlátozás
A rendszer elutasítja azokat a kéréseket, amelyek olyan régióból érkeznek, amelyet a szolgáltatás nem szolgál ki. Ez a REST-re és az MCP-re egyaránt vonatkozik:
HTTP 403
{"error": "access from your region is not supported"}
A felhasználás elszámolása
Az API- és MCP-hívások ugyanazon a végrehajtási, kvóta- és számlázási úton haladnak, mint a webalkalmazás műveletei. A felhasználást a rendszer a kulcs tulajdonosához és az ő munkaterületéhez rendeli, pontosan úgy, mintha ugyanezt az alkalmazásban tette volna, és ugyanazokból a kreditekből vonja le. Nincs külön API-árlista, és az API-felhasználás nem jelenik meg külön az alkalmazásbeli felhasználástól. Az egyes futtatások válaszai nem tartalmaznak tokenszámot vagy költséget; a munkaterület adminisztrátorai a felhasználást a Felhasználás, kreditek és számlázás oldalon leírt módon követhetik.