Lewati ke konten

Panduan API

API East Agile Tracker dirancang untuk agen sebanyak untuk manusia. Segala sesuatu yang dapat Anda lakukan di UI, dapat Anda lakukan lewat API — dan beberapa hal yang tidak ditampilkan UI ada di sana juga.

Panduan ini membawa Anda dari nol ke “menulis skrip untuk backlog Anda” dalam waktu kurang dari sepuluh menit. Untuk referensi endpoint lengkap, lihat Spesifikasi API.

Anda mengautentikasi dengan kunci API di header X-TrackerToken. Ada dua jenis:

  • Kunci pengguna (ea_user_…) — Bertindak sebagai Anda. Buat di Account Settings → API Keys. Gunakan ini untuk skrip pribadi, alat CLI, integrasi.
  • Kunci agen (ea_agent_…) — Bertindak sebagai agen bernama dalam satu proyek. Buat sebagai owner proyek di Project Settings → Agents. Gunakan ini untuk agen AI — Claude Code, Codex, milik Anda sendiri — yang harus berpartisipasi dalam proyek sebagai rekan setim bernama.

Perbedaannya:

Kunci penggunaKunci agen
LingkupSemua proyek AndaSatu proyek tertentu
Identitas di log auditNama AndaNama agen
PeranPeran Anda di setiap proyekDiatur saat pembuatan kunci (viewer atau member)
PencabutanCabut kunci; Anda tetap punya akses lewat kunci/sesi lainCabut kunci; agen kehilangan akses seketika
Paling cocok untukOtomasi pribadi, skripAgen AI yang harus dapat dibedakan dari Anda dalam riwayat

Authorization: Bearer … juga berfungsi jika Anda lebih suka gaya header itu.

Dapatkan proyek Anda:

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

Atau untuk kunci agen, daftarkan proyek yang menjadi cakupannya:

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

API adalah JSON, REST-ish, diberi versi di /api/v1/. Bentuk yang sama untuk manusia dan agen.

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

Respons mencakup project_id dan default apa pun yang diterapkan server (skala estimasi, done state, dst.).

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

Endpoint transisi memvalidasi pergerakan yang diminta dan mengembalikan status berikutnya yang diizinkan saat error:

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

Field-nya adalah to (bukan to_state). Jika pergerakan ilegal — misalnya Anda mencoba melompat dari unstarted langsung ke accepted — responsnya adalah 422 invalid_transition dengan detail error terstruktur:

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

Ini adalah salah satu hal kecil yang membuat API ramah-agen: sebuah agen dapat membaca details.allowed dan memilih pergerakan berikutnya yang tepat tanpa mengikis prosa.

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

Komentar diatribusikan kepada siapa pun yang memiliki kunci API — jika itu kunci agen, penulis komentar adalah agen.

Setiap endpoint write menerima header Idempotency-Key. Coba ulang kunci yang sama dengan body yang sama, dapatkan respons yang sama kembali. Coba ulang kunci yang sama dengan body berbeda, dapatkan 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" }'

Ini krusial untuk agen dalam loop coba-ulang — crash di tengah-write, coba ulang dengan kunci yang sama, tanpa story duplikat.

Pindahkan banyak story sekaligus. Setiap story dinilai secara independen; satu pergerakan ilegal tidak menggagalkan yang lain.

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

Untuk agen yang ingin bereaksi terhadap apa yang dilakukan manusia, polling endpoint event:

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"

Respons adalah aliran event dengan paginasi-kursor berisi aktor, sumber daya, dan perubahan. Setiap event memiliki ID; berikan ID terakhir yang Anda lihat sebagai since untuk melanjutkan dari tempat Anda berhenti. Tanpa webhook, tanpa pengikisan, tanpa event yang terlewat.

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

Filter yang tersedia:

FilterContohDeskripsi
type:type:featureFilter berdasarkan tipe story
state:state:startedFilter berdasarkan status
label:label:"my label"Filter berdasarkan label
owner:owner:claireFilter berdasarkan pemilik
requester:requester:tomasFilter berdasarkan requestor
has:has:blockerStory dengan blocker
is:is:unestimatedFeature yang belum diestimasi

Teks bebas mencocokkan judul dan deskripsi. Gabungkan filter dengan memisahkannya dengan spasi — mereka di-AND-kan.

Spesifikasi OpenAPI 3 langsung ada di:

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

Swagger UI ada di:

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

/openapi.json dan /docs tidak terautentikasi — sebuah agen dapat membaca kontrak sebelum ia memiliki kunci. Setelah ia memegang kunci, /api/v1/meta (yang memerlukan kunci valid) mengembalikan identitasnya dan graf transisi per-tipe-story; lookup data-referensi (/story_types, /story_states, /effort_scales) juga tidak terautentikasi. Bersama-sama mereka memungkinkan agen menjawab “apa yang dapat saya lakukan di sini?” tanpa 403 coba-coba.

Catatan: openapi.json yang disajikan mencantumkan path tetapi saat ini mengirim request body kosong — gunakan bentuk field di Spesifikasi untuk write.

Untuk otomasi interaktif — mengendalikan sesi browser yang sudah masuk dari skrip, atau mengontrol UI dari jarak jauh untuk tutorial — ada kanal WebSocket:

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

Sebagian besar pengguna tidak pernah membutuhkan ini; ia ada untuk kasus di mana REST tidak cukup.

Jika Anda menulis skrip untuk migrasi massal:

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"

Sumber yang didukung: pivotal, jira, asana, gitlab, shortcut, trello, linear, plane, plane_json.

Semua error berupa JSON dengan minimal:

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

Banyak respons error juga menyertakan objek detailsdetails.fields (sebuah array nama field yang menyalahi) pada validation_failed, dan details.allowed (di samping from/to) pada 422 invalid_transition. Gunakan mereka.

Endpoint daftar menerima limit dan cursor. Cursor bersifat opak; berikan next_cursor dari respons sebelumnya. Header respons juga menyertakan X-Tracker-Pagination-Total untuk jumlah total di mana murah untuk dihitung.