Navigace
ELOWEN · Dokumentace

Poslední aktualizace: 20. října 2026

Procházet dokumentaci · Agent API
Rozšíření

Agent API

API agenta umožňuje vašim skriptům, úlohám CI a nástrojům komunikovat s agentem přes HTTP. Ověříte se osobním API tokenem, pošlete zprávu a odpověď dostanete buď po dokončení běhu, nebo průběžně streamovanou. Vše, co spuštění provede, je běžný běh konverzace: stejné nástroje, oprávnění, Projekty a účtování spotřeby jako u zprávy napsané ve webové aplikaci.

Příklady používají https://elowen.example.com; nahraďte ji adresou, na které Elowen otevíráte. Všechny cesty vedou přes stejného hostitele pod /api.

Osobní API tokeny

Token jedná za vás. Má přesně takový přístup, jaký má váš účet, včetně práv administrátora, takže s ním zacházejte jako s heslem.

Vytvořte token

  1. Otevřete Účet → API tokeny.
  2. Vyberte Nový token, zadejte název, který později poznáte, a případně zvolte poslední den, kdy má token fungovat. Necháte-li datum prázdné, token funguje, dokud jej neodstraníte. Přestane fungovat na konci zvoleného dne v UTC.
  3. Zkopírujte token z okna, které se otevře. Zobrazí se jen jednou. Elowen ukládá jeho otisk, ne token samotný, takže jej už nikdo nemůže zobrazit. Pokud jej ztratíte, vyberte v řádku tokenu Kopírovat a v dialogu potvrďte Vytvořit novou hodnotu. Token dostane zcela novou hodnotu, která se zobrazí jednou a uloží se do schránky. Vše, co dál používá starou hodnotu, okamžitě přestane fungovat; název, limity a zaznamenané využití zůstanou.

Každý token začíná na elw_, takže uniklý token snadno poznáte v protokolu nebo ve vloženém textu. Účty chatbotů tokeny mít nemohou.

Řádek Volání agenta pod kartou tokenů zkopíruje hotový příklad curl pro endpoint spuštění, s už vyplněnou adresou vaší instance Elowen.

Využití a limity

Tokeny najdete v jedné kartě, každý na vlastním řádku, s posledním použitím, platností a prefixem a s tlačítky Kopírovat, Limity a Odstranit. Otevřením řádku zobrazíte běhy tokenu, zodpovězené i nezdařené běhy a náklady za den, a také limity, podle kterých token běží. Náklady se počítají pro období, které zvolíte vedle grafu; zvolené období pak platí pro všechny tokeny. Dny se počítají v UTC.

Výběrem Limity dáte tokenu strop. Každý limit je nepovinný a každý má vlastní přepínač Bez omezení:

Limit Co se stane při dosažení
Náklady za den Další spuštění se odmítnou až do dalšího dne v UTC.
Náklady za měsíc Další spuštění se odmítnou až do dalšího kalendářního měsíce v UTC.
Požadavků za minutu Každý požadavek s tímto tokenem se odmítne až do konce minuty.
Souběžné běhy Nové spuštění se odmítne, dokud tolik běhů stále probíhá.

Pokud běh spotřeboval tokeny a nic je neocenilo — poskytovatel nehlásil žádnou částku a Elowen neměl pro model cenu (žádný záznam v katalogu ani nastavenou cenu pro daný model) — jsou náklady toho dne neznámé. Elowen nikdy nepovažuje neznámé za nulu: token ukazuje Cena neznámá a token s denním limitem nákladů se odmítá do konce toho dne v UTC, token s měsíčním limitem do konce toho měsíce v UTC. Limit nákladů počítá, co běhy už spotřebovaly, takže běhy, které stále probíhají, když se spouští nový, mohou den nebo měsíc mírně překročit.

Pokud se Elowen restartuje během spuštění, toto spuštění se počítá jako nezdařené a jeho útratu už nelze tokenu připsat. Den, kdy začalo, a den restartu se pak počítají jako neznámé náklady, takže token s denním limitem nákladů se odmítá do konce těchto dnů v UTC a token s měsíčním limitem do konce měsíců, do kterých tyto dny patří.

Odstraňte token

V řádku tokenu vyberte Odstranit. Vše, co jej používá, okamžitě přestane fungovat a zaznamenané využití se smaže. Smazáním účtu se smažou i všechny vaše tokeny.

Co token neumí

Token se nemůže odhlásit, změnit vaše heslo, vydávat se za jiný účet ani vytvářet, upravovat, obnovovat či odstraňovat tokeny, včetně sebe sama. To vyžaduje vaše přihlášení ve webové aplikaci a API na takové požadavky odpovídá 403.

Ověřování

Token posílejte v hlavičce Authorization u každého požadavku:

export ELOWEN_URL=https://elowen.example.com
export ELOWEN_TOKEN=elw_…   # the token you copied

curl -sS "$ELOWEN_URL/api/auth/me" -H "Authorization: Bearer $ELOWEN_TOKEN"

Chybějící, neznámý, smazaný nebo propadlý token dostane 401 {"error":"unauthorized"}. Totéž se stane poté, co tokenu vytvoříte novou hodnotu: stará hodnota je od té chvíle mrtvá.

Spusťte agenta

POST /api/v1/agent/runs pošle jednu zprávu a spustí jeden běh agenta.

Pole Typ Význam
message string, povinné Co má agent udělat.
conversationId string, nepovinné Pokračovat v této konverzaci. Bez něj spuštění začne novou.
model string, nepovinné Běží na tomto modelu. Viz Modely.
stream boolean, nepovinné true streamuje průběh jako server-sent events.

Počkejte na odpověď

curl -sS "$ELOWEN_URL/api/v1/agent/runs" \
  -H "Authorization: Bearer $ELOWEN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"message":"Summarise the failed builds from yesterday"}'
{ "conversationId": "brain-12-…", "reply": "Two builds failed…", "usage": { "tokens": 1840, "costUsd": 0.012 } }

usage.costUsd je null, když spuštění nic neocenilo: poskytovatel nehlásil žádnou částku a Elowen neměl pro model cenu, ani cenu z katalogu, ani cenu pro daný model. Cena, kterou Elowen pro model má, je odhad, a částka, kterou hlásí sám poskytovatel, má přednost, včetně hlášené $0.

Volání čeká až dvě minuty. Pokud běh trvá déle, dostanete 202 s { "conversationId": "…", "reply": null, "usage": null }. Běh pokračuje dál a jeho odpověď přistane v této konverzaci; u dlouhé práce raději streamujte.

Streamujte běh

curl -sSN "$ELOWEN_URL/api/v1/agent/runs" \
  -H "Authorization: Bearer $ELOWEN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"message":"Check the open pull requests","stream":true}'

Odpověď má typ text/event-stream. Každá událost má název a řádek data s JSON:

event: start
data: {"conversationId":"brain-12-…"}

event: tool
data: {"phase":"start","id":"t1","name":"Bash","detail":"gh pr list"}

event: tool
data: {"phase":"end","id":"t1","ok":true}

event: delta
data: {"text":"There are three open"}

event: delta
data: {"text":" pull requests…"}

event: final
data: {"conversationId":"brain-12-…","reply":"There are three open pull requests…","usage":{"tokens":2210,"costUsd":0.019}}
Událost Data
start { conversationId }, vždy první.
delta { text }, další část odpovědi.
tool { phase: "start", id?, name, detail? }, když se nástroj spustí, { phase: "end", id?, ok }, když skončí.
error { message }, když běh selže. Stream pak skončí bez final.
final { conversationId, reply, usage }, když je běh hotový.

Pokud se odpojíte, běh pokračuje dál a jeho odpověď přistane v konverzaci.

Konverzace

Každé spuštění v odpovědi uvádí conversationId, které použilo. Pošlete jej zpět a budete pokračovat ve stejné konverzaci, s její historií a kontextem:

curl -sS "$ELOWEN_URL/api/v1/agent/runs" \
  -H "Authorization: Bearer $ELOWEN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"message":"Open an issue for the second one","conversationId":"brain-12-…"}'
  • Bez conversationId každé spuštění začne novou konverzaci.
  • Můžete pokračovat v kterékoli své konverzaci, včetně těch, které jste začali ve webové aplikaci. Konverzace jiného účtu nebo neexistující identifikátor dostane 404 {"error":"unknown conversation"}.
  • Konverzace zpracovává vždy jeden běh. Spuštění do konverzace, která už pracuje — ať na jiném spuštění, nebo na zprávě napsané ve webové aplikaci — se odmítne s 409 {"error":"conversation_busy"} a nic se nezapočítá. Počkejte, až druhý běh skončí, a pošlete požadavek znovu, nebo začněte novou konverzaci.
  • Spuštění přes API nikdy nemění, kterou konverzaci vaše webová aplikace nebo CLI otevře.
  • Konverzace z API se v historii konverzací zobrazují jako každá jiná.

Modely

Vypište modely, které můžete použít

curl -sS "$ELOWEN_URL/api/brain/models" -H "Authorization: Bearer $ELOWEN_TOKEN"
[
  { "provider": "anthropic", "providerLabel": "Anthropic", "model": "claude-sonnet-4-5", "exec": "anthropic/claude-sonnet-4-5", "contextWindow": 200000, "…": "…" }
]

Seznam obsahuje jen modely, které váš účet smí používat. Hodnota exec, <provider>/<model>, je to, co předáte při výběru modelu.

Vyberte model pro jedno spuštění

Přidejte do spuštění model. Konverzace se na tento model přepne před začátkem běhu a zůstane na něm i pro další spuštění:

curl -sS "$ELOWEN_URL/api/v1/agent/runs" \
  -H "Authorization: Bearer $ELOWEN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"message":"Review this diff","model":"anthropic/claude-sonnet-4-5"}'

Přepněte model konverzace

POST /api/brain/model přepne existující konverzaci stejně jako výběr modelu ve webové aplikaci. Konverzaci vždy předávejte jako session; bez něj se přepnutí použije na konverzaci, kterou má webová aplikace otevřenou.

curl -sS "$ELOWEN_URL/api/brain/model" \
  -H "Authorization: Bearer $ELOWEN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"model":"anthropic/claude-sonnet-4-5","session":"brain-12-…"}'
{ "model": "claude-sonnet-4-5" }

Obě cesty se řídí stejnými pravidly jako webová aplikace. Model, který nesmíte používat, nebo ten, který nemůže tuto konverzaci převzít, dostane 409 se stejnou chybovou zprávou, jakou ukazuje webová aplikace, a žádný běh neproběhne.

Chyby

Každé tělo chyby je JSON s polem error.

Stav Kdy Tělo
400 Tělo požadavku není platný JSON, některé pole má špatný typ nebo obsahuje pole, které endpoint nepřijímá. { "error": "…" } s popisem pole
401 Token chybí, je neznámý, smazaný nebo propadlý, případně byla jeho hodnota nahrazena. { "error": "unauthorized" }
402 Váš účet dosáhl měsíčního limitu útraty nebo se používá model bez známé ceny, zatímco účet má limit útraty. Jde o limit účtu, ne tokenu. { "error": "spend_limit", "reason": "monthly_limit" or "unpriced_model", "resetsAt": "…" }, kde resetsAt je začátek dalšího měsíce v UTC
403 Endpoint vyžaduje přihlášenou relaci v prohlížeči (viz Co token neumí) nebo jej váš účet nesmí používat. { "error": "forbidden" }
404 conversationId není jedna z vašich konverzací. { "error": "unknown conversation" }
409 Konverzace už zpracovává běh. { "error": "conversation_busy" }
409 Požadovaný model byl odmítnut. { "error": "…" }, stejná zpráva, jakou ukazuje webová aplikace
429 Byl dosažen limit tokenu. { "error": "…", "reason": "…" } a hlavička Retry-After
500 Běh selhal, nemohl se spustit nebo se nepodařilo přepnout na požadovaný model. S "stream": true běh, který se nemohl spustit, odpoví tímto stavem místo streamu. { "error": "…", "conversationId": "…" }
503 Agent na tomto serveru není dostupný. Vrací se i tehdy, když se nepodařilo zaznamenat využití účtu, což blokuje jeho placené požadavky, dokud administrátor využití nesrovná a služba se restartuje. { "error": "brain unavailable" }, případně zpráva o využití

Odmítnutí limitem

429 vždy nese Retry-After, počet sekund, které je třeba počkat, a reason, se kterým může skript pracovat:

error reason Význam Retry-After
limit_exhausted requests_per_minute Příliš mnoho požadavků v této minutě. Sekundy do konce minuty.
limit_exhausted monthly_cost Limit nákladů na tento měsíc je dosažen. Sekundy do dalšího měsíce v UTC.
limit_unverifiable monthly_cost_unverifiable Některý běh v tomto měsíci nehlásil náklady, takže limit nákladů nelze ověřit. Sekundy do dalšího měsíce v UTC.
limit_exhausted daily_cost Limit nákladů na dnešní den je dosažen. Sekundy do dalšího dne v UTC.
limit_unverifiable daily_cost_unverifiable Některý běh dnes nehlásil náklady, takže limit nákladů nelze ověřit. Sekundy do dalšího dne v UTC.
limit_exhausted concurrent_turns Příliš mnoho spuštění stále probíhá. 1

Když je najednou dosaženo více limitů nákladů, odpověď uvádí širší okno: měsíc před dnem, takže Retry-After je čas, kdy spuštění skutečně může uspět.

curl -sS -D - "$ELOWEN_URL/api/v1/agent/runs" \
  -H "Authorization: Bearer $ELOWEN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"message":"One more"}'
HTTP/1.1 429 Too Many Requests
Retry-After: 52380
Content-Type: application/json

{"error":"limit_exhausted","reason":"daily_cost"}

Spuštění odmítnuté limitem nic nevytvoří: žádnou konverzaci, žádný běh, a nic se nezapočítá do běhů tokenu. Ani spuštění odmítnuté jako conversation_busy, kvůli neznámé konverzaci či modelu nebo proto, že jeho běh nemohl začít, se nepočítá.