Webhooky a živý WebSocket vám dají vědět o úloze ve chvíli, kdy se dokončí. Jenže ani jedno nepomůže druhý den ráno, po nasazení nebo když potřebujete všechny jazyky, které za poslední hodinu selhaly. Ta chvíle už je pryč; událost je minulostí. Úlohy ale ne – každá z nich zůstává na platformě jako trvalý záznam ještě dlouho poté, co proces, který ji odeslal, doběhl dál.
GET /jobs/localization je způsob, jak se k těmto záznamům vrátit. Vrací vaše úlohy od nejnovějších, po stránkách procházených pomocí kurzoru, a umožňuje je zúžit podle engine, na kterém běžely, nebo podle stavu, v jakém skončily. Tohle je kanál pro dohledání: trvalý záznam, na který se ptáte, když jste nesledovali živé dění.
GET /jobs/localizationS async lokalizací teprve začínáte? Začněte s Přehled. Tato stránka předpokládá, že už máte úlohy, kterými se chcete probrat. Stejně jako každý endpoint se ověřuje pomocí vašeho X-API-Key.
Filtry a stránkování#
GET /jobs/localization?engineId=eng_abc123&status=completed&limit=20&cursor=...| Parametr | Typ | Popis |
|---|---|---|
engineId | string (nepovinné) | Vrátí jen úlohy, které běžely na tomto lokalizačním engine (eng_...). |
status | string (nepovinné) | Vrátí jen úlohy v tomto stavu: queued, processing, completed, completed_with_warnings nebo failed. |
limit | number (nepovinné) | Velikost stránky. Výchozí hodnota je 20, maximum 100. |
cursor | string (nepovinné) | Neprůhledný kurzor z nextCursor v předchozí odpovědi. Pro první stránku ho vynechte. |
Oba filtry jsou nepovinné a dají se kombinovat: engineId=eng_abc123&status=failed vrátí selhané úlohy pro jeden engine a nic navíc. Přesně tak odpovíte na otázku, kterou si při incidentu opravdu položíte – ukaž mi všechno, co na tomto engine selhalo – aniž byste museli stahovat všechny úlohy v organizaci a filtrovat je na straně klienta.
cursor je pozice v proudu výsledků, ne číslo stránky. Nepočítáte ho, dostanete ho. Každá odpověď vrátí nextCursor a vy tuto hodnotu pošlete zpět, abyste načetli další stránku.
Odpověď#
Každá stránka obsahuje pole items a nextCursor. nextCursor je na poslední stránce null – to je ukončovací podmínka vaší smyčky, ne chyba.
{
"items": [
{
"id": "ljb_C3d4E5f6G7h8I9j0",
"groupId": "ljg_A1b2C3d4E5f6G7h8",
"targetLocale": "ja",
"status": "completed",
"warnings": [],
"createdAt": "2026-03-16T10:30:00.000Z",
"completedAt": "2026-03-16T10:30:06.000Z"
}
],
"nextCursor": "eyJ0IjoiMjAyNi0wMy0xNlQxMDozMDowMC4wMDBaIiwiaSI6ImxqYl9CMmMzRDRlNUY2ZzdIOGk5In0"
}Každá položka je jen souhrn – dost na to, abyste úlohu našli a přečetli si její výsledek: který jazyk, která skupina, jaký stav, kdy byla vytvořena a kdy dokončena. Záměrně neobsahuje přeložený výstup. Pokud chcete získat plné outputData a steps pro jednotlivé fáze jedné z těchto úloh, vezměte její id a zavolejte Získat jednu úlohu. Seznam slouží k nalezení, detail k přečtení.
Neznámé hodnoty status zpracovávejte bez pádů
Pracujte se známými hodnotami status a pro ostatní mějte výchozí větev, místo abyste při neznámé hodnotě shodili konzumenta. Tolerance k nerozpoznané hodnotě je bezpečný výchozí přístup pro jakýkoli řetězcový enum, který nevlastníte – udrží váš reader v chodu, místo aby vyhazoval chybu při vstupu, který neumí zařadit.
Projděte všechny výsledky po stránkách#
Ukončovací podmínka je tady to hlavní: pokračujte v požadavcích, dokud se nextCursor nevrátí jako null. Předejte nextCursor z jedné odpovědi jako cursor v další a smyčka se ukončí sama.
async function listFailedJobs(engineId) {
const failed = [];
let cursor = undefined; // first page: no cursor
do {
const url = new URL("https://api.lingo.dev/jobs/localization");
url.searchParams.set("engineId", engineId);
url.searchParams.set("status", "failed");
url.searchParams.set("limit", "100"); // fewer round-trips
if (cursor) url.searchParams.set("cursor", cursor);
const response = await fetch(url, {
headers: { "X-API-Key": process.env.LINGO_API_KEY },
});
const { items, nextCursor } = await response.json();
failed.push(...items);
cursor = nextCursor; // null on the last page -> loop ends
} while (cursor);
return failed; // every failed job for this engine
}Když zvýšíte limit na 100, snížíte počet round-tripů u velkého backlogu; výsledek se nezmění, jen počet stránek, které musíte projít. Není tu žádný offset, který by se mohl rozjet, ani počet stránek, který by bylo potřeba držet synchronizovaný – kurzor nese vaši pozici a null vám řekne, kdy už jste přečetli všechno.
Další kroky#
Máte id úlohy. Kanál pro dohledání vás dovedl až sem; odsud si můžete přečíst výsledek nebo zapojit živé kanály, aby vám to příště neuniklo a viděli jste to v okamžiku, kdy se to stane.
