Přeskočit na obsah

Specifikace API

Kompletní referenční přehled REST endpointů. Pro tutoriály a příklady viz Průvodce API.

Vše, co může member projektu dělat ve webovém rozhraní, je dostupné zde — SPA spotřebovává totéž API. Operace, které vyžadují roli manager, jsou označeny (manager); vše ostatní potřebuje pouze členství v projektu (nebo, pro čtení označená (viewer), jakoukoli úroveň přístupu). Tabulky níže uvádějí každou skupinu cest, kterou server připojuje; ty, které jsou shrnuty jediným řádkem, jsou úplně popsány v živém openapi.json.

https://eastagiletracker.com/api/v1

https://api.eastagiletracker.com/api/v1 poskytuje identické API. Všechny požadavky a odpovědi jsou JSON, kromě několika endpointů pro nahrávání souborů, které přijímají multipart.

Dvě skupiny leží o úroveň výš, pod /api místo /api/v1: autentizační rozhraní (/api/auth/*) a veřejné formuláře (/api/contact, /api/feedback). Jejich varianty /api/v1/… vracejí 404.

Každý autentizovaný požadavek posílá přihlašovací údaj jedním z:

  • X-TrackerToken: <key>
  • Authorization: Bearer <key>

Uživatelské klíče začínají na ea_user_, agentské klíče na ea_agent_ a přístupové tokeny MCP na ea_mcp_. Viz Průvodce API → Tři druhy přihlašovacích údajů.

Neautentizované endpointy: /openapi.json, /docs, endpointy /api/auth/* a vyhledávání referenčních dat (/story_types, /story_states, /effort_scales, /priority_scales). /meta je autentizované — funguje jakýkoli platný klíč, ale není ohraničeno projektem (dosáhne na něj i agentský klíč vázaný na projekt).

Čtyři úrovně ohraničují endpointy vázané na projekt:

ÚroveňKdo projdeTypické operace
public viewerkdokoli, u projektu s veřejnou viditelnostíčtení nástěnky: stories, iterace, vyhledávání, aktivita stories a epiců (s redigovanými údaji o aktérovi)
viewerviewer, member, managerčtení (list/get stories, vyhledávání, metriky, seznam exportních formátů)
membermember, managervšechny zápisy pracovních položek (stories, tasks, comments, …), proud událostí
managerpouze managernastavení projektu, správa členství, agentské klíče, mazání, import, stahování exportů, zálohy, auditní log

Agenti mají stejné role jako členové — viewer, member nebo manager — omezené rolí člena, který klíč vystavil. Nečlen obdrží 404 unfound_resource (ne 403) na cestách soukromých projektů, takže ID projektů nejsou vyčíslitelná.

MetodaCestaPopis
GET/openapi.jsonŽivá specifikace OpenAPI 3 včetně těl požadavků. Neautentizované.
GET/docsSwagger UI. Neautentizované.
GET/metaIdentita volajícího (auth.kind/key_id/agent_id/project_id) + graf přechodů typů story. Autentizované (jakýkoli platný klíč; není ohraničeno projektem). Volejte toto jako první.
GET/api/health · /api/configStav živosti a veřejná konfigurace instalace (režim jedné organizace, zapnuté volitelné funkce, název instance). Neautentizované, mimo /v1.

Auth (/api/auth/*, mimo /v1)

Sekce “Auth (/api/auth/*, mimo /v1)”

Endpointy relací, neautentizované, pokud není uvedeno jinak. Používá je SPA; skripty obvykle místo nich používají API klíč.

MetodaCestaPopis
POST/auth/registerRegistrovat nový účet — chráněno reCAPTCHA; účet pak projde SMS výzvou
POST/auth/sms/challenge · /auth/sms/status · /auth/sms/bypassOdeslat / zkontrolovat registrační SMS kód (bypass povoluje provozovatel)
GET/auth/configKteré metody přihlášení instalace nabízí
POST/auth/loginPřihlášení e-mailem + heslem; vrací JWT relace, nebo výzvu TOTP
POST/auth/login/totpDokončit přihlášení kódem z autentizační aplikace nebo obnovovacím kódem
POST/auth/passkey/login/start · /auth/passkey/login/finishPřihlášení bez hesla přes WebAuthn
GET/auth/oauth/github/start · /auth/oauth/github/callback · /auth/oauth/google/start · /auth/oauth/google/callback · POST /auth/oauth/exchangePřihlášení přes OAuth s GitHubem nebo Googlem
POST/auth/refresh · /auth/refresh/revokeRotovat obnovovací token / zrušit ho
POST/auth/logoutOdhlásit se (zruší obnovovací token)
POST/auth/forgot-password · /auth/reset-passwordPožádat o e-mail pro obnovení hesla / použít token pro obnovení
POST/auth/accept-invite/lookup · /auth/accept-invitePřeložit token pozvánky → e-mail / přijmout pozvánku do projektu (po autentizaci)

Tyto jednají na volajícím a potřebují pouze platný klíč (žádnou roli v projektu).

MetodaCestaPopis
GET/meProfil aktuálního uživatele
PUT/meAktualizovat profil
DELETE/meSmazat účet — odmítnuto, dokud jste jediným vlastníkem organizace nebo projektu s dalšími členy
GET/me/deletion-impactCo by smazání účtu odstranilo a co mu brání
PUT/me/passwordZměnit heslo
PUT/me/settingsAktualizovat nastavení (motiv, předvolby oznámení)
POST/me/avatarNahrát avatar (multipart)
POST/me/api-token/regenerateRotovat váš API token — zneplatní stávající relace/klíče
GET/me/api_keys · POST /me/api_keys · DELETE /me/api_keys/{id}Spravovat uživatelské (ea_user_) API klíče
GET/me/totp · POST /me/totp/setup · /me/totp/verify · /me/totp/disableRegistrace dvoufázového ověření (TOTP); verify jednou vrátí obnovovací kódy
GET/me/passkeys · POST /me/passkeys/register/start · /me/passkeys/register/finish · DELETE /me/passkeys/{credential_id}Registrace a odebrání passkeys
GET/me/oauth_grants · DELETE /me/oauth_grants/{grant_id}Připojené aplikace — MCP klienti a OAuth aplikace, které jste autorizovali
GET/me/activityVaše aktivita napříč všemi projekty
GET/me/storiesStories, které vlastníte, o které jste požádali nebo které sledujete, napříč všemi projekty, na které token dosáhne — role=owned|requested|following, state=, cursor= / limit= (max 200)
GET/me/mentions · POST /me/mentions/{mention_id}/ackSchránka @-zmínek (unacked=true pro filtrování) a jejich potvrzení — zahrnuto také ve feedu oznámení níže
GET/me/data-exportGDPR sebeexport vašich dat
GET/me/consent · POST /me/consentČíst / zaznamenat souhlas ({ consent_type, granted })
GET/legal/pending · POST /legal/acceptČekající clickwrap dokumenty / zaznamenat přijetí
GET / PUT/agent/meVlastní identita a profil agentského klíče, které agent může číst i upravovat (agentní protějšek /me)
POST/api/contact · /api/feedback · /api/feedback/with-screenshotKontakt + zpětná vazba v aplikaci. Mimo /v1; limitováno podle IP

Referenční data (neautentizované)

Sekce “Referenční data (neautentizované)”

Vyhledávání počátečních dat používaná při vytváření/odhadování stories. Stabilní ID.

MetodaCestaPopis
GET/story_typesfeature, bug, chore, release (+ allow_points)
GET/story_statesunstarted … accepted, rejected
GET/effort_scalesdostupné odhadovací škály
GET/effort_scales/{scale_id}/valuesbodové hodnoty ve škále
GET/priority_scales · /priority_scales/{scale_id}/valuesškály priorit a jejich hodnoty (sem se překládá priority_id na story)

Pouze hostovaná služba — instalace na vlastní infrastruktuře běží v režimu jedné organizace a tyto cesty nepřipojuje (kromě seznamu organizací). Role jsou role v organizaci: owner, admin, member.

MetodaCestaPopis
GET / POST/organizationsVypsat vaše organizace / vytvořit novou
GET / PUT / DELETE/organizations/{oid}Číst, přejmenovat (název + slug; owner nebo admin), smazat
GET / POST/organizations/{oid}/memberships · PUT / DELETE …/memberships/{member_id}Členové a pozvánky; pozvánky nesou strop role (nikdy nad rolí volajícího; owner se nikdy nezve)
POST/organizations/{oid}/memberships/bulk-role · …/memberships/bulk-removeZměna role nebo odebrání až 200 členů najednou. Vše, nebo nic: dávka, která by odebrala posledního ownera nebo nechala projekt bez vlastníka, je odmítnuta celá; s reassign_confirmed se místo toho stanete vlastníkem těchto projektů
DELETE/organizations/{oid}/invitations/{invitation_id}Zrušit čekající pozvánku
POST/organizations/{oid}/transfer-ownershipPředat roli owner jinému členovi
PUT/organizations/{oid}/memberships/{member_id}/anonymizationZamaskovat jméno / e-mail / avatar člena v celé organizaci
GET/organization-invitations/{token} · POST …/{token}/acceptPřeložit / přijmout pozvánku do organizace zaslanou e-mailem
POST/organizations/{oid}/export · GET / POST …/export/jobs · GET …/export/jobs/{job_id} · …/export/jobs/{job_id}/downloadExport organizace pouze pro vlastníka: zip s SQL dumpem a všemi přílohami, spouštěný jako úloha
MetodaCestaPopis
GET/projectsVypsat vaše projekty (limit ≤ 200)
POST/projectsVytvořit projekt
GET/projects/{id}Získat detaily projektu (viewer)
PUT/projects/{id}Aktualizovat nastavení projektu (manager)
DELETE/projects/{id}Smazat projekt (manager)
POST/projects/{id}/pinPřipnout / odepnout projekt ve vašem seznamu projektů
POST/projects/{id}/transfer-organizationPřesunout projekt do jiné organizace (manager)
POST/projects/{id}/slack/testOdeslat testovací zprávu do feedu projektu ve Slacku (manager)
GET / POST/projects/{id}/showcase_claim_eligibility · /projects/{id}/showcase_claim · /projects/{id}/showcase_seedVeřejné ukázkové projekty: ověřit, zda si ho můžete převzít, převzít ho, naplnit ho
GET/projects/{id}/audit-logČtení auditního logu — historie projektu plus aktivita per-story / per-epic přes surface=; přístup se liší podle surface, viz níže
GET/projects/{id}/eventsKurzorem stránkovaný proud událostí (member) — viz Events

Query parametry auditního logu: event_type= (jeden typ nebo čárkami oddělený seznam), limit= (≤ 1000), before= (keyset kurzor, ISO-8601 created_at), surface= (project_history, story_activities, epic_activities), target_id= (id story/epicu — povinné, když surface=story_activities nebo epic_activities). Přístup: nefiltrovaný log a surface=project_history jsou (manager); story_activities / epic_activities může číst kterýkoli člen projektu a u veřejných projektů i anonymně s redigovanými osobními údaji aktéra.

Členové, agenti a agentské klíče

Sekce “Členové, agenti a agentské klíče”
MetodaCestaPopis
GET/projects/{id}/membershipsVypsat členy (viewer)
POST/projects/{id}/membershipsPozvat člena e-mailem (manager)
PUT/projects/{id}/memberships/{mid}Aktualizovat roli (manager)
DELETE/projects/{id}/memberships/{mid}Odebrat člena (manager)
GET/projects/{id}/addable-members · POST /projects/{id}/members/add-existingČlenové organizace, kteří ještě nejsou v projektu / přidat jednoho bez e-mailové pozvánky (manager)
POST/projects/{id}/members/joinOwner nebo admin organizace se připojí k projektu ve své organizaci jako manager, nebo se na managera povýší (akce Make me owner v seznamu projektů)
PUT/projects/{id}/members/{mid}/anonymizationZamaskovat jméno / e-mail / avatar člena v tomto projektu (manager)
GET / POST/projects/{id}/agent_keysVypsat / vystavit agentské klíče — managers, nebo role, které připouští creator-roles policy projektu
DELETE/projects/{id}/agent_keys/{kid}Odvolat agentský klíč
GET/projects/{id}/agent_keys/onboardingOnboarding bundle: prompty a konfigurační soubory pro běžné agentní klienty
GET/projects/{id}/agents · GET / PUT /projects/{id}/agents/{aid}Agenti projektu a jejich profily (jméno, iniciály, popis, barva)
POST/projects/{id}/agents/{aid}/rotate-key · /projects/{id}/agents/{aid}/avatarRotovat klíč agenta (identita a historie zůstávají) / nahrát jeho avatar

Všechny zápisy stories potřebují roli member.

MetodaCestaPopis
GET/projects/{id}/storiesVypsat stories (stránkované, filtrovatelné) (viewer)
POST/projects/{id}/storiesVytvořit story
GET/projects/{id}/stories/{sid}Získat jednu story (viewer)
PUT/projects/{id}/stories/{sid}Aktualizovat story
DELETE/projects/{id}/stories/{sid}Smazat story
POST/projects/{id}/stories/{sid}/transitionsZměnit stav s validací
POST/projects/{id}/stories/{sid}/reject · /projects/{id}/stories/{sid}/restartOdmítnout dodanou story / vrátit odmítnutou zpět do started (rejected je pro /transitions koncový stav)
POST/projects/{id}/stories/{sid}/archive · /projects/{id}/stories/{sid}/unarchiveArchivovat / obnovit z archivu jednu story
POST/projects/{id}/stories/bulk_transitionPřechod mnoha stories (1–100) najednou
POST/projects/{id}/stories/bulk-archive · bulk-delete · bulk-duplicate · bulk-moveArchivovat, smazat, duplikovat nebo přesunout (na panel / pozici) mnoho stories
POST/projects/{id}/stories/{sid}/duplicateDuplikovat jednu story
GET / POST / DELETE/projects/{id}/stories/{sid}/epics · …/epics/{eid}Příslušnost story k epicům
GET/short-links/{code} · /story-referencesPřeložit krátký odkaz /s/<code> na jeho story / přeložit až 100 referencí na stories (#id, URL) na stories, které volající smí číst

Query parametry seznamu stories: archived= (exclude výchozí / include / only — třístavový filtr archivace; nahrazuje zastaralé include_archived=true, které je nyní aliasem archived=include), include_done=true (připustí stories z panelu Done zmrazené na minulých iteracích, standardně vyloučené). Stránkování (cursor= / limit= / offset=) a řídké sady polí (fields=) se řídí sekcemi Stránkování a Projekce polí.

Create (POST …/stories): { "name" (required), "story_type": "feature|bug|chore|release", "description"?, "estimate"?, "current_state"?, "icebox"?, "labels"? }. estimate je popisek hodnoty škály jako řetězec ("3", "13"); číslo v JSON se odmítne. labels přijímá ["auth"] nebo [{ "name": "auth" }]; neznámé štítky se vytvoří. Výchozí: story_type=feature, current_state=unstarted.

Update (PUT …/stories/{sid}): stejná pole, všechna volitelná, plus "position" (float), "force_state_change" (bool) a "expected_updated_at" (RFC 3339 — uložení popisu se odmítne s 409 stale_write, pokud se story od vašeho čtení změnila). Zápisy stories také respektují If-Match vůči ETag story; nesoulad vede na 412 precondition_failed.

Transition (POST …/transitions): { "to": "<state>" }. Pole je to. Vrací { story_id, state }. Nelegální tah → 422 invalid_transition s details: { from, to, allowed }.

Bulk transition (POST …/bulk_transition): { "story_ids": [int,…] (1–100), "to": "<state>" }. Každá story je posuzována nezávisle; vrací { results: [ { id, status: "ok" } | { id, status: "failed", error } ] }.

Všechny member. List/GET na většině je (viewer).

MetodaCestaTělo / poznámky
GET / POST/projects/{id}/stories/{sid}/tasks · PUT/DELETE …/tasks/{tid}{ description (or task_desc), complete?, task_order? }
GET / POST/projects/{id}/stories/{sid}/comments · PUT/DELETE …/comments/{cid}{ text (or comment_text) } nebo { comment_emoji }. GET přijímá fields= (povolený seznam: comment_id, story_comment_id, story_id, comment_text, comment_emoji, member, created) a navíc cursor= / limit= (≤ 200) / order=asc|desc
GET / POST/projects/{id}/stories/{sid}/blockers · PUT/DELETE …/blockers/{bid}{ blocker_desc, resolved? }
GET / POST/projects/{id}/stories/{sid}/links · PUT/DELETE …/links/{lid}{ url, link_type?, title? }link_typerelates_to, duplicates, blocks, is_blocked_by, pull_request, branch, other; GitHub URL s /pull/ a /tree/ dostanou typ automaticky
GET / POST/projects/{id}/stories/{sid}/reviews · PUT/DELETE …/reviews/{rid}Vytvoření: { reviewer_id? / reviewer_agent_id?, comment? } — vynechte obojí a přiřadíte sami sebe. Aktualizace: { status, comment? }
GET / POST/projects/{id}/stories/{sid}/owners · DELETE …/owners/{mid} · DELETE …/owners/agents/{aid}{ member_id? / agent_id? } — vynechte obojí pro přidání volajícího
GET / POST/projects/{id}/stories/{sid}/followers · DELETE …/followers/{mid} · DELETE …/followers/agents/{aid}{ member_id? / agent_id? }
GET / POST/projects/{id}/stories/{sid}/labels · DELETE …/labels/{lid}{ name }
GET / POST/projects/{id}/stories/{sid}/attachments (+ /json) · DELETE …/attachments/{aid}multipart upload — video ≤ 200 MB, PDF / Word / Excel ≤ 25 MB, obrázky / CSV / text ≤ 10 MB; list je (viewer)
GET / POST/projects/{id}/stories/{sid}/link-attachments · DELETE …/link-attachments/{laid}Odkazové přílohy — externí URL vedená vedle souborových příloh, nikoli jako odkaz na kód
GET/attachments/{token} · /api/avatars/{token}Čtení přílohy nebo avataru adresované tokenem — URL, které API vydává; X-TrackerToken není potřeba

Stejný tvar jako stories, jen bez stavového automatu. member pro zápisy, (viewer) pro čtení.

MetodaCestaPopis
GET / POST/projects/{id}/epics · GET / PUT / DELETE …/epics/{eid}Epiky nesou název, popis v Markdownu a podkladový štítek, který spojuje jejich stories
GET / POST / PUT / DELETE…/epics/{eid}/comments · …/comments/{cid}Komentáře k epicům
GET / POST / DELETE…/epics/{eid}/owners · …/followers (+ varianty /agents/{aid})Vlastníci a sledující, členové nebo agenti — vlastníci epicu se propisují do jeho stories
GET / POST / DELETE…/epics/{eid}/attachments (+ /json) · …/link-attachmentsPřílohy, stejné limity jako u stories
GET/projects/{id}/analytics/epics · …/analytics/epics/{eid}Postup po epicích: burnup, propustnost, stav, předpověď (viewer)

member pro zápisy, (viewer) pro čtení.

MetodaCestaPopis
GET / POST/projects/{id}/labelsVypsat / vytvořit štítek
PUT / DELETE/projects/{id}/labels/{lid}Aktualizovat / smazat štítek
POST/projects/{id}/labels/{lid}/archiveArchivovat (měkce skrýt) štítek

Čtení je otevřené pro jakoukoli roli v projektu a u veřejného projektu i anonymně.

MetodaCestaPopis
GET/projects/{id}/iterationsVypsat iterace (≤ 500 na stránku; nese ETag a při zkrácení pokračovací hlavičky X-Tracker-Pagination-*)
GET/projects/{id}/iterations/{itid}Jedna iterace
GET/projects/{id}/iterations/first-previewData, která by dostala první iterace, zobrazená v potvrzení při jejím založení
POST/projects/{id}/iterationsVytvořit manuální iteraci (member)
DELETE/projects/{id}/iterations/{itid}Smazat iteraci (manager)
PUT/projects/{id}/iterations/{itid}/velocityPřepsat rychlost jedné iterace bez změny strategie projektu (manager)
GET/projects/{id}/iterations/{itid}/done-storiesPřijaté stories uzavřené iterace, stránkované

Vyhledávání, metriky, předvolby

Sekce “Vyhledávání, metriky, předvolby”
MetodaCestaPopis
GET/projects/{id}/search?q=…Výkonné vyhledávání — fulltext + kvalifikátory faset / datových rozsahů / osob (DSL ve stylu GitHubu); vrací { results, total, limit, offset }. query je alias pro q; limit= (výchozí 50, max 1000) / offset= stránkují; sort= řadí podle relevance (výchozí), created, created_asc, state nebo updated. (viewer) — viz Průvodce
GET/projects/{id}/metrics/{velocity,burndown,story-types,contributors}Řady pro stránku Metrics (viewer); metriky epiců jsou výše pod /analytics/epics
GET/projects/{id}/backlog/groupingPromítnuté skupiny iterací v Backlogu (viewer)
GET / PUT/projects/{id}/preferencesVaše předvolby nástěnky pro tento projekt — jakákoli role v projektu, pouze váš vlastní řádek
MetodaCestaPopis
GET/projects/{id}/eventsKurzorem stránkovaný proud událostí (member) — viewers dostanou 403

Parametry dotazu: since=<event_id>, types=story.created,story.transitioned,comment.added,…, limit= (≤ 500), cursor=. Odpověď zahrnuje next_cursor. Předejte poslední event_id, které jste viděli, jako since, abyste pokračovali.

Sjednocený feed oznámení v aplikaci: plnohodnotné řádky oznámení (žádosti o review, aktivita na story, pozvánky, …) sloučené se schránkou @-zmínek do jednoho proudu, od nejnovějších. Id ve feedu nesou prefix zdroje (nt-… / sc-… / ec-…). Členské relace a klíče ea_user_* čtou své členské řádky; klíče ea_agent_* své agentní řádky.

MetodaCestaPopis
GET/me/notificationsVáš feed oznámení. Filtry: unread=true, since_id=, kind= (mentions / reviews / stories / invitations); stránkujte přes cursor= / limit=
GET/me/notifications/unread-countSouhrny nepřečtených — { unread_count, by_category: { mentions, reviews, stories, invitations } }
POST/me/notifications/read-allOznačit vše jako přečtené; vrací čerstvé počty
POST/me/notifications/{id}/ackOznačit jednu položku jako přečtenou (idempotentní)
POST/me/notifications/{id}/acceptPřijmout pozvánku do projektu / organizace přímo z feedu (pouze členské tokeny)
POST/me/notifications/{id}/declineOdmítnout pozvánku do projektu / organizace (pouze členské tokeny)
GET/me/notifications/resolve-invite?token=…Převést e-mailový token pozvánky na id vašeho oznámení — { "id": "nt-…" } nebo { "id": null }
GET/me/notifications/streamŽivý push — Server-Sent Events (text/event-stream); viz níže

Stream endpoint není JSON endpoint, a proto není v OpenAPI specifikaci: drží spojení otevřené a při každé nové události vyšle rámec bez payloadu ({"type":"notification","kind":…}), kterým klientovi říká, ať feed načte znovu. Spojení server ukončí po 45 minutách — znovu se připojte a autentizujte. Pouze členské relace a klíče ea_user_*; klíče ea_agent_* dostanou 403.

MetodaCestaPopis
POST/projects/{id}/importSouborové zdroje: source=pivotal, jira, asana, gitlab, shortcut, trello, linear, plane, plane_json, eat. Multipart file=. Synchronní — odpoví počty výsledků.
POST/projects/{id}/import/jsonTělo v JSON; source=github nepotřebuje soubor — owner, repo, volitelný token a opt-in přepínače include_pull_requests / include_milestones / include_releases / include_dependencies; souborové zdroje posílají file_base64. Asynchronní: vrací 202 { import_id, status }. Server načítá přes GraphQL API GitHubu, které odmítá anonymní volající, takže na GitHub vždy dorazí token — váš, nebo sdílený token instalace. Viz Průvodce.
GET/projects/{id}/imports/{import_id}Dotazování na úlohu: status prochází pending → fetching → writing → done | failed, během načítání s progress_current / progress_total a při done s počty výsledků

V jednom projektu běží vždy jen jeden import; druhý POST, zatímco jiný probíhá, skončí 409 import_already_running. dry_run: true (JSON tělo nebo dry_run=true multipart) zobrazí náhled libovolného zdroje: zpracuje, přeloží, odstraní duplicity, vrátí stejné počty { imported, skipped, errors, unmatched } a pak vše vrátí zpět — nic se nezapíše. Limity: 10 MiB tělo a 5 000 stories na import u souborových zdrojů (přes kterýkoli z nich → 400, nic se nezapíše). Zdroj GitHub limit nemá — zapisuje po dávkách místo jedné transakce. Opakovaný import je idempotentní podle source id — již naimportované řádky se přeskočí, nikoli duplikují.

MetodaCestaPopis
GET/projects/{id}/export/formatsRegistrované formáty: { id, name, content_type, drops, includes_archived }. Jakákoli role v projektu.
GET/projects/{id}/export/{format}Stáhnout jeden (manager). Výměnné: eat (plná věrnost), jira, pivotal, shortcut, trello, asana, gitlab, linear, plane, plane_json; dokumenty: pdf, docx.
GET/projects/{id}/export/attachmentsKaždá příloha jako jeden procházecí zip (soubory si ponechávají původní názvy; manifest v JSON + CSV) (manager).

Exporty dokumentů (pdf, docx) berou další query parametry: page_size= (letter výchozí / a4 / legal / folio), from= / to= (meze okna stories — RFC 3339 nebo holé YYYY-MM-DD; story je v rozsahu, když do něj spadá její created nebo completed_at), include_icebox= / include_backlog= (obojí výchozí false, takže sdílitelný export ukazuje jen naplánovanou / rozpracovanou práci). Výměnné formáty CSV je ignorují.

Zálohy a obnovy (manager)

Sekce “Zálohy a obnovy (manager)”
MetodaCestaPopis
GET / POST/projects/{id}/backups · GET …/backups/{snapshot_id} · …/backups/healthVypsat snímky, pořídit snímek hned, přečíst jeden snímek a souhrn stavu uchovávání
GET / POST/projects/{id}/restores · POST …/restores/partial · GET …/restores/{restore_id}Obnovit celý snímek nebo vybrané tabulky z něj a dotazovat se na průběh obnovy

Požadavky POST spadají do citlivé úrovně limitů rychlosti (níže).

MCP a poskytovatel OAuth

Sekce “MCP a poskytovatel OAuth”

East Agile Tracker je poskytovatel OAuth 2.1 pro MCP klienty. Klient ho objeví na /.well-known/oauth-authorization-server a /.well-known/oauth-protected-resource/mcp, pošle vás na /oauth/authorize (stránka souhlasu), vymění kód na /oauth/token a pak s výsledným tokenem ea_mcp_* komunikuje přes MCP na /mcp. Udělená oprávnění se vypisují a odvolávají na /me/oauth_grants. Endpointy poskytovatele mají vlastní úroveň limitů rychlosti.

wss://eastagiletracker.com/ws/control?token=<session JWT>

Pro interaktivní vzdálené ovládání rozhraní ({ "action": "get_state", "id": "req-1" }). Token je JWT relace prohlížeče — API klíč se odmítne s 401 ještě před upgradem spojení. Není to datový kanál — všechna čtení/zápisy jdou přes REST. Pouze jedna instance; nešíří se napříč replikami.

Zápisové endpointy (POST, PUT, DELETE) přijímají hlavičku Idempotency-Key. Stejný klíč + stejné tělo přehraje cachovanou odpověď (24hodinové okno); stejný klíč + jiné tělo vrátí 409 idempotency_conflict. Klíč je vázán na přihlašovací údaj, který ho odeslal. Neaplikuje se na GET/HEAD/OPTIONS, /openapi.json a /docs, /api/auth/* ani na multipart nahrávání na cestách /attachments. Odpovědi, které skončily dřív, než doménová logika odpověděla, se nikdy necachují — 401, 403, 404, 429 a každé 5xx — takže opakování po kterékoli z nich dosáhne na handler; 400, 409, 412 a 422 jsou odpovědí domény a přehrávají se stejně jako úspěch.

List endpointy přijímají cursor=<opaque> a limit=<n>. Když jsou nastaveny, odpověď je { "items": [...], "next_cursor": "<str|null>" }; předejte next_cursor zpět pro další stránku. Strop limit se liší podle endpointu: 200 u stories, komentářů a projektů; 500 u událostí; 1000 u vyhledávání a auditního logu.

Prostý seznam (bez cursor/limit), který musel svou odpověď zkrátit, to oznámí v hlavičkách — X-Tracker-Pagination-Truncated, X-Tracker-Pagination-Limit, X-Tracker-Pagination-Offset a X-Tracker-Pagination-Next-Offset; poslední z nich předejte zpět jako offset= pro další stránku. Hlavička s celkovým počtem neexistuje.

List endpointy přijímají fields= (oddělené čárkami) pro vrácení pouze konkrétních polí. story_id je vždy zahrnuto; neznámý název pole vrátí 400 validation_failed s problematickými názvy v details.fields.

GET /projects/123/stories?fields=story_id,name,current_state,owners

Každá JSON chyba má code a error; některé přidávají details:

{ "code": "invalid_transition",
"error": "Cannot move story from `unstarted` to `accepted`",
"details": { "from": "unstarted", "to": "accepted", "allowed": ["started"] } }
StatuscodeKdy
400invalid_parameteršpatný vstup; zpráva v error, žádné details (většina validace: prázdné/délka/null-byte/email)
400validation_failedstrukturovaná chyba vstupu; details.fields je pole názvů problematických polí
401unauthenticatedchybějící/neplatný token
403unauthorized_operationautentizovaný, ale nedostatečná role
404unfound_resourcenenalezeno — vraceno také nečlenům
409conflictkonflikt zdroje (např. duplikát)
409idempotency_conflictIdempotency-Key znovupoužitý s jiným tělem
409stale_write · import_already_runningstory se změnila od vašeho expected_updated_at · import už probíhá
412precondition_failedIf-Match neodpovídá aktuálnímu ETag zdroje; details nese expected a current
413request_too_largetělo překračuje limit velikosti dané cesty
422invalid_transitionnelegální přesun stavu; details nese { from, to, allowed }
429rate_limitedpříliš mnoho požadavků z této IP na cestě s limitem rychlosti; hlavička Retry-After
500internal_errorchyba serveru — generická zpráva; bezpečné opakovat
503not_configuredinstalaci chybí integrace, kterou tato cesta potřebuje (SMS, objektové úložiště, …)

details.fields je JSON pole názvů polí (např. ["to"]), někdy s extra klíči jako max. Neexistuje mapa pole→zpráva.

{ "code": "validation_failed", "error": "unknown field(s): foo", "details": { "fields": ["foo"] } }

Podle IP klienta, na několika málo cestách; autentizovaný provoz API jinde limitován není. Výchozí hodnoty (každá dvojice je trvalá rychlost a burst, laditelné provozovatelem):

  • Auth/api/auth/*: 0.5 req/s, burst 20.
  • OAuth provider/oauth/*: 1 req/s, burst 60.
  • Public/api/contact: 0.2 req/s, burst 10.
  • Feedback/api/feedback: tři vrstvené úrovně — jedno odeslání za 15 s, 10 za hodinu, 36 za den.
  • Avatars — neautentizované přesměrování na avatar: 20 req/s, burst 200.
  • Sensitive — požadavky POST pro zálohy a obnovy: ~0.002 req/s, burst 5.

Překročený limit vrátí 429 s hlavičkou Retry-After a standardní JSON obálkou chyby, code: "rate_limited".