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 owner, jsou označeny (owner); vše ostatní potřebuje pouze členství v projektu (nebo, pro čtení označená (viewer), jakoukoli úroveň přístupu).

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.

Každý autentizovaný požadavek posílá API klíč jedním z:

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

Uživatelské klíče začínají na ea_user_. Agentské klíče začínají na ea_agent_. Viz Průvodce API → Dva druhy klíčů.

Neautentizované endpointy: /openapi.json, /docs, endpointy /auth/* a vyhledávání referenčních dat (/story_types, /story_states, /effort_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).

Tři úrovně ohraničují endpointy ohraničené projektem:

ÚroveňKdo projdeTypické operace
viewerviewer, member, ownerčtení (list/get stories, search, analytics)
membermember, ownervšechny zápisy pracovních položek (stories, tasks, comments, …)
ownerpouze ownernastavení projektu, správa členství, agentské klíče, mazání, import, auditní log

Nečlen obdrží 404 unfound_resource (ne 403) na cestách projektu, takže ID projektů nejsou vyčíslitelná.

MetodaCestaPopis
GET/openapi.jsonŽivá specifikace OpenAPI 3. 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í.

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

MetodaCestaPopis
POST/auth/registerRegistrovat nový účet
POST/auth/loginPřihlásit se, vrací token relace
POST/auth/logoutOdhlásit se
POST/auth/forgot-passwordPožádat o e-mail pro reset hesla
POST/auth/reset-passwordPoužít reset token k nastavení nového hesla
GET/auth/verify-emailOvěřit e-mailovou adresu
POST/auth/accept-invite/lookupPřeložit pozvánkový token → e-mail (neautentizované)
POST/auth/accept-invitePřijmout pozvánku do projektu (po autentizaci)
GET/meProfil aktuálního uživatele
PUT/meAktualizovat profil
DELETE/meSmazat účet
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/activityVaše aktivita napříč všemi projekty
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í
POST/contact · POST /feedback · POST /feedback/with-screenshotKontakt + zpětná vazba v aplikaci

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
MetodaCestaPopis
GET/projectsVypsat vaše projekty
POST/projectsVytvořit projekt
GET/projects/{id}Získat detaily projektu (viewer)
PUT/projects/{id}Aktualizovat nastavení projektu (owner)
DELETE/projects/{id}Smazat projekt (owner)
GET/projects/{id}/audit-logProud aktivity projektu (owner)
GET/projects/{id}/eventsKurzorem stránkovaný proud událostí (viewer) — viz Events

Členové a agentské klíče

Sekce “Členové a agentské klíče”
MetodaCestaPopis
GET/projects/{id}/membershipsVypsat členy (viewer)
POST/projects/{id}/membershipsPozvat člena e-mailem (owner)
PUT/projects/{id}/memberships/{mid}Aktualizovat roli (owner)
DELETE/projects/{id}/memberships/{mid}Odebrat člena (owner)
GET / POST/projects/{id}/agent_keysVypsat / vytvořit agentské klíče (owner)
DELETE/projects/{id}/agent_keys/{kid}Odvolat agentský klíč (owner)

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/bulk_transitionPřechod mnoha stories (1–100) najednou
POST/projects/{id}/stories/bulk-deleteSmazat mnoho stories
POST/projects/{id}/stories/bulk-duplicateDuplikovat mnoho stories
POST/projects/{id}/stories/{sid}/duplicateDuplikovat jednu story

Create (POST …/stories): { "name" (required), "story_type": "feature|bug|chore|release", "description"?, "estimate"?, "current_state"?, "icebox"?, "labels"? }. 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) a "force_state_change" (bool).

Transition (POST …/transitions): { "to": "<state>", "reason"? }. 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>", "reason"? }. 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 / POST/projects/{id}/stories/{sid}/blockers · PUT/DELETE …/blockers/{bid}{ blocker_desc, resolved? }
GET / POST/projects/{id}/stories/{sid}/links · DELETE …/links/{lid}{ url, link_type?, title? }
GET / POST/projects/{id}/stories/{sid}/reviews · PUT/DELETE …/reviews/{rid}{ reviewer_id? / reviewer_agent_id?, 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 (≤ 2 GB každý); list je (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
MetodaCestaPopis
GET/projects/{id}/iterationsVypsat iterace (member)
POST/projects/{id}/iterationsVytvořit manuální iteraci (owner)
DELETE/projects/{id}/iterations/{itid}Smazat iteraci (owner)

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

Sekce “Vyhledávání, analytika, metriky, předvolby”
MetodaCestaPopis
GET/projects/{id}/search?query=…Vyhledávání syntaxí filtrů (viewer) — viz Průvodce
GET/projects/{id}/analytics/{overview,iteration,releases,activity,cycle-time,projections}Analytika (viewer). Detailní rozbor iterace bere ?iteration_id=
GET/projects/{id}/metrics/{velocity,burndown,story-types}Metriky (viewer)
GET / PUT/projects/{id}/preferencesVaše předvolby tabule pro tento projekt (member)
MetodaCestaPopis
GET/projects/{id}/eventsKurzorem stránkovaný proud událostí (viewer)

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

MetodaCestaPopis
POST/projects/{id}/import (+ /json)Multipart upload. source=pivotal, jira, asana, gitlab, shortcut, trello, linear, plane, plane_json.
wss://eastagiletracker.com/ws/control?token=<key>

Pro interaktivní vzdálené ovládání rozhraní ({ "action": "get_state", "id": "req-1" }). 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. Neaplikuje se na cesty GET/HEAD/OPTIONS, /auth/* ani /attachments. Odpovědi 5xx se nikdy necachují — opakování dosáhne na handler.

List endpointy přijímají cursor=<opaque> a limit=<n≤200>. Když jsou nastaveny, odpověď je { "items": [...], "next_cursor": "<str|null>" }; předejte next_cursor zpět pro další stránku. Některé seznamy také vracejí hlavičku X-Tracker-Pagination-Total.

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
422invalid_transitionnelegální přesun stavu; details nese { from, to, allowed }
500internal_errorchyba serveru — generická zpráva; bezpečné opakovat

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"] } }

Per-klíč (per-IP pro neautentizované endpointy), GCRA token bucket:

  • Auth/auth/*: 0.5 req/s, burst 20.
  • Public/contact, /feedback: 0.2 req/s, burst 10.
  • Sensitive — reset hesla: ~0.002 req/s, burst 5.

Překročený limit vrátí 429 Too Many Requests s hlavičkou Retry-After a tělem v prostém textu (ne JSON obálka chyby).