Перейти до вмісту

Посібник з API

API East Agile Tracker спроєктовано для агентів не менше, ніж для людей. Усе, що ви можете зробити в інтерфейсі, ви можете зробити через API — а ще там є кілька речей, яких інтерфейс не показує.

Цей посібник проведе вас від нуля до «скриптування свого беклогу» менш ніж за десять хвилин. Повну довідку по кінцевих точках дивіться в Специфікації API.

Ви автентифікуєтеся за допомогою ключа API в заголовку X-TrackerToken. Існує два види:

  • Користувацькі ключі (ea_user_…) — діють як ви. Створюйте їх в Account Settings → API Keys. Використовуйте їх для особистих скриптів, інструментів CLI, інтеграцій.
  • Ключі агентів (ea_agent_…) — діють як названий агент в одному проєкті. Створюйте їх як власник проєкту в Project Settings → Agents. Використовуйте їх для AI-агентів — Claude Code, Codex, власних — які мають брати участь у проєкті як названі члени команди.

Відмінності:

Користувацький ключКлюч агента
Область діїУсі ваші проєктиОдин конкретний проєкт
Ідентичність у журналі аудитуВаше ім’яІм’я агента
РольВаша роль у кожному проєктіЗадається при створенні ключа (viewer або member)
ВідкликанняВідкличте ключ; ви зберігаєте доступ через інші ключі/сесіїВідкличте ключ; агент негайно втрачає доступ
Найкраще дляОсобиста автоматизація, скриптиAI-агенти, яких слід відрізняти від вас в історії

Authorization: Bearer … також працює, якщо ви віддаєте перевагу цьому стилю заголовка.

Отримайте свої проєкти:

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

Або для ключа агента — перелічіть проєкт, до якого він прив’язаний:

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

API — це JSON, у стилі REST, версіонований за /api/v1/. Однакові структури для людей і агентів.

Terminal window
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
}'

Відповідь містить project_id та будь-які значення за замовчуванням, які застосував сервер (шкала оцінювання, завершений стан тощо).

Terminal window
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"]
}'

Проведення історії через життєвий цикл

Section titled “Проведення історії через життєвий цикл”

Кінцева точка переходу перевіряє запитаний рух і повертає дозволені наступні стани при помилці:

Terminal window
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" }'

Поле — це to (не to_state). Якщо рух неприпустимий — скажімо, ви спробували перескочити з unstarted прямо до accepted — відповідь буде 422 invalid_transition зі структурованими деталями помилки:

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

Це одна з дрібниць, що робить API дружнім до агентів: агент може прочитати details.allowed і обрати правильний наступний рух без вишкрібання прози.

Terminal window
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." }'

Коментар приписується тому, хто володіє ключем API — якщо це ключ агента, автором коментаря є агент.

Кожна кінцева точка запису приймає заголовок Idempotency-Key. Повторіть той самий ключ із тим самим тілом — отримаєте ту саму відповідь назад. Повторіть той самий ключ з іншим тілом — отримаєте 409 idempotency_conflict:

Terminal window
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" }'

Це критично для агентів у циклах повторних спроб — збій посеред запису, повтор із тим самим ключем, жодних дубльованих історій.

Переміщайте багато історій за раз. Кожна історія оцінюється незалежно; один неприпустимий рух не провалює інші.

Terminal window
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"
}'

Слідкування за потоком подій

Section titled “Слідкування за потоком подій”

Для агентів, які хочуть реагувати на те, що роблять люди, опитуйте кінцеву точку подій:

Terminal window
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"

Відповідь — це потік подій з курсорною пагінацією, з актором, ресурсом і зміною. Кожна подія має ID; передайте останній ID, який ви бачили, як since, щоб відновитися там, де зупинилися. Жодних вебхуків, жодного вишкрібання, жодних пропущених подій.

Пошук із синтаксисом фільтрів

Section titled “Пошук із синтаксисом фільтрів”
Terminal window
curl "https://eastagiletracker.com/api/v1/projects/$PROJECT_ID/search?query=type:feature%20state:started%20label:mvp" \
-H "X-TrackerToken: $TRACKER_TOKEN"

Доступні фільтри:

ФільтрПрикладОпис
type:type:featureФільтр за типом історії
state:state:startedФільтр за станом
label:label:"my label"Фільтр за міткою
owner:owner:claireФільтр за власником
requester:requester:tomasФільтр за замовником
has:has:blockerІсторії з блокерами
is:is:unestimatedНеоцінені функції

Вільний текст збігається із заголовком та описом. Комбінуйте фільтри, розділяючи їх пробілом — вони об’єднуються через AND.

Актуальна специфікація OpenAPI 3 за адресою:

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

Swagger UI за адресою:

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

/openapi.json та /docs не вимагають автентифікації — агент може прочитати контракт ще до того, як матиме ключ. Щойно він отримає ключ, /api/v1/meta (яка вимагає дійсного ключа) повертає його ідентичність та граф переходів для кожного типу історій; пошуки довідкових даних (/story_types, /story_states, /effort_scales) також не вимагають автентифікації. Разом вони дозволяють агентам відповісти на запитання «що я можу тут зробити?» без помилок 403 методом проб.

Зауваження: обслуговуваний openapi.json перелічує шляхи, але наразі постачається з порожніми тілами запитів — для записів використовуйте структури полів зі Специфікації.

Для інтерактивної автоматизації — керування сесією залогіненого браузера зі скрипта чи дистанційне керування інтерфейсом для туторіалів — є канал WebSocket:

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

Більшості користувачів це ніколи не знадобиться; воно існує для випадків, коли REST недостатньо.

Імпорт з іншого трекера

Section titled “Імпорт з іншого трекера”

Якщо ви скриптуєте масову міграцію:

Terminal window
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"

Підтримувані джерела: pivotal, jira, asana, gitlab, shortcut, trello, linear, plane, plane_json.

Усі помилки — це JSON, що містить щонайменше:

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

Багато відповідей про помилку також містять об’єкт detailsdetails.fields (масив імен полів, що порушують правило) при validation_failed та details.allowed (поряд із from/to) при 422 invalid_transition. Використовуйте їх.

Кінцеві точки списків приймають limit та cursor. Курсор непрозорий; передайте next_cursor із попередньої відповіді. Заголовки відповіді також містять X-Tracker-Pagination-Total для загальної кількості там, де її дешево обчислити.