Przejdź do głównej zawartości

Przewodnik po API

API East Agile Tracker jest zaprojektowane dla agentów w równym stopniu co dla ludzi. Wszystko, co możesz zrobić w interfejsie, możesz zrobić przez API — a kilka rzeczy, których interfejs nie udostępnia, też tu jest.

Ten przewodnik przeprowadza Cię od zera do „skryptowania backlogu” w mniej niż dziesięć minut. Pełną referencję endpointów znajdziesz w Specyfikacji API.

Uwierzytelniasz się za pomocą klucza API w nagłówku X-TrackerToken. Są dwa rodzaje:

  • Klucze użytkownika (ea_user_…) — Działają jako Ty. Twórz je w Account Settings → API Keys. Używaj ich do osobistych skryptów, narzędzi CLI, integracji.
  • Klucze agentów (ea_agent_…) — Działają jako nazwany agent w jednym projekcie. Twórz je jako właściciel projektu w Project Settings → Agents. Używaj ich dla agentów AI — Claude Code, Codex, własnych — którzy powinni uczestniczyć w projekcie jako wymienieni z imienia członkowie zespołu.

Różnice:

Klucz użytkownikaKlucz agenta
ZasięgWszystkie Twoje projektyJeden konkretny projekt
Tożsamość w dzienniku audytuTwoje imięImię agenta
RolaTwoja rola w każdym projekcieUstawiana przy tworzeniu klucza (viewer lub member)
OdbieranieOdbierz klucz; zachowujesz dostęp przez inne klucze/sesjeOdbierz klucz; agent natychmiast traci dostęp
Najlepszy doOsobistej automatyzacji, skryptówAgentów AI, którzy powinni być odróżnialni od Ciebie w historii

Authorization: Bearer … również działa, jeśli wolisz ten styl nagłówka.

Pobierz swoje projekty:

Okno terminala
curl https://eastagiletracker.com/api/v1/projects \
-H "X-TrackerToken: $TRACKER_TOKEN"

Albo, dla klucza agenta, wylistuj projekt, do którego jest przypisany:

Okno terminala
curl https://eastagiletracker.com/api/v1/projects \
-H "X-TrackerToken: ea_agent_xxxxx"

API jest w JSON, w stylu REST, wersjonowane pod /api/v1/. Te same kształty dla ludzi i agentów.

Okno terminala
curl -X POST https://eastagiletracker.com/api/v1/projects \
-H "X-TrackerToken: $TRACKER_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Onboarding redesign",
"description": "Q3 redesign of new-user onboarding",
"iteration_length_weeks": 1
}'

Odpowiedź zawiera project_id oraz wszelkie wartości domyślne zastosowane przez serwer (skala estymacji, stan ukończenia itd.).

Okno terminala
curl -X POST https://eastagiletracker.com/api/v1/projects/$PROJECT_ID/stories \
-H "X-TrackerToken: $TRACKER_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Add OAuth login for Google",
"description": "## Acceptance\n- Google button on /login\n- Redirect back to original URL",
"story_type": "feature",
"estimate": 3,
"labels": ["auth"]
}'

Endpoint przejścia waliduje żądany ruch i zwraca dozwolone następne stany w przypadku błędu:

Okno terminala
curl -X POST https://eastagiletracker.com/api/v1/projects/$PROJECT_ID/stories/$STORY_ID/transitions \
-H "X-TrackerToken: $TRACKER_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "to": "started" }'

Pole to to (a nie to_state). Jeśli ruch jest niedozwolony — powiedzmy, że spróbowałeś przeskoczyć z unstarted prosto do accepted — odpowiedzią jest 422 invalid_transition ze strukturyzowanymi szczegółami błędu:

{
"code": "invalid_transition",
"error": "Cannot move story from `unstarted` to `accepted`",
"details": { "from": "unstarted", "to": "accepted", "allowed": ["started"] }
}

To jedna z drobnych rzeczy, które czynią API przyjaznym dla agentów: agent może odczytać details.allowed i wybrać właściwy następny ruch bez zeskrobywania prozy.

Okno terminala
curl -X POST https://eastagiletracker.com/api/v1/projects/$PROJECT_ID/stories/$STORY_ID/comments \
-H "X-TrackerToken: $TRACKER_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "text": "Investigation done. Picking this up." }'

Komentarz jest przypisywany temu, kto jest właścicielem klucza API — jeśli to klucz agenta, autorem komentarza jest agent.

Każdy endpoint zapisu akceptuje nagłówek Idempotency-Key. Ponów ten sam klucz z tym samym ciałem, a otrzymasz tę samą odpowiedź. Ponów ten sam klucz z innym ciałem, a otrzymasz 409 idempotency_conflict:

Okno terminala
curl -X POST https://eastagiletracker.com/api/v1/projects/$PROJECT_ID/stories \
-H "X-TrackerToken: $TRACKER_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{ "name": "Refactor auth middleware", "story_type": "chore" }'

To krytyczne dla agentów w pętlach ponawiania — awaria w połowie zapisu, ponowienie z tym samym kluczem, brak zduplikowanych historii.

Przesuwaj wiele historii naraz. Każda historia jest oceniana niezależnie; jeden niedozwolony ruch nie powoduje porażki pozostałych.

Okno terminala
curl -X POST https://eastagiletracker.com/api/v1/projects/$PROJECT_ID/stories/bulk_transition \
-H "X-TrackerToken: $TRACKER_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"story_ids": [101, 102, 103],
"to": "delivered"
}'

Dla agentów, którzy chcą reagować na to, co robią ludzie, odpytuj endpoint zdarzeń:

Okno terminala
curl "https://eastagiletracker.com/api/v1/projects/$PROJECT_ID/events?since=$LAST_CURSOR&types=story.created,story.transitioned,comment.created" \
-H "X-TrackerToken: $TRACKER_TOKEN"

Odpowiedzią jest strumień zdarzeń stronicowany kursorem, z wykonawcą, zasobem i zmianą. Każde zdarzenie ma identyfikator; przekaż ostatni widziany identyfikator jako since, aby wznowić tam, gdzie skończyłeś. Bez webhooków, bez zeskrobywania, bez pominiętych zdarzeń.

Okno terminala
curl "https://eastagiletracker.com/api/v1/projects/$PROJECT_ID/search?query=type:feature%20state:started%20label:mvp" \
-H "X-TrackerToken: $TRACKER_TOKEN"

Dostępne filtry:

FiltrPrzykładOpis
type:type:featureFiltruj według typu historii
state:state:startedFiltruj według stanu
label:label:"my label"Filtruj według etykiety
owner:owner:claireFiltruj według właściciela
requester:requester:tomasFiltruj według zgłaszającego
has:has:blockerHistorie z blokerami
is:is:unestimatedNieestymowane features

Tekst swobodny dopasowuje tytuł i opis. Łącz filtry, oddzielając je spacją — są łączone operatorem AND.

Żywa specyfikacja OpenAPI 3 znajduje się pod:

https://eastagiletracker.com/api/v1/openapi.json

Swagger UI znajduje się pod:

https://eastagiletracker.com/api/v1/docs

/openapi.json i /docs są nieuwierzytelnione — agent może odczytać kontrakt, zanim będzie miał klucz. Gdy już ma klucz, /api/v1/meta (które wymaga prawidłowego klucza) zwraca jego tożsamość oraz graf przejść per typ historii; lookupy danych referencyjnych (/story_types, /story_states, /effort_scales) są również nieuwierzytelnione. Razem pozwalają agentom odpowiedzieć na pytanie „co mogę tu zrobić?” bez błędów 403 metodą prób i błędów.

Uwaga: serwowany openapi.json wymienia ścieżki, ale obecnie dostarcza puste ciała żądań — użyj kształtów pól ze Specyfikacji dla zapisów.

Do interaktywnej automatyzacji — sterowania zalogowaną sesją przeglądarki ze skryptu lub zdalnego sterowania interfejsem na potrzeby samouczków — istnieje kanał WebSocket:

const ws = new WebSocket('wss://eastagiletracker.com/ws/control?token=YOUR_TOKEN')
ws.send(JSON.stringify({ action: 'get_state', id: 'req-1' }))

Większość użytkowników nigdy tego nie potrzebuje; jest tu dla przypadków, w których REST nie wystarcza.

Jeśli skryptujesz masową migrację:

Okno terminala
curl -X POST https://eastagiletracker.com/api/v1/projects/$PROJECT_ID/import \
-H "X-TrackerToken: $TRACKER_TOKEN" \
-F "source=pivotal" \
-F "file=@pivotal_export.csv"

Obsługiwane źródła: pivotal, jira, asana, gitlab, shortcut, trello, linear, plane, plane_json.

Wszystkie błędy są w JSON, z co najmniej:

{
"code": "invalid_transition",
"error": "Cannot move story from `unstarted` to `accepted`"
}

Wiele odpowiedzi błędów zawiera również obiekt detailsdetails.fields (tablica nazw wadliwych pól) przy validation_failed oraz details.allowed (obok from/to) przy 422 invalid_transition. Korzystaj z nich.

Endpointy listujące akceptują limit i cursor. Kursor jest nieprzezroczysty; przekaż next_cursor z poprzedniej odpowiedzi. Nagłówki odpowiedzi zawierają również X-Tracker-Pagination-Total dla łącznych liczników, gdy ich obliczenie jest tanie.