Skip to content

Panduan API

API East Agile Tracker direka bentuk untuk ejen sama seperti untuk manusia. Segala yang anda boleh lakukan dalam UI, anda boleh lakukan melalui API — dan beberapa perkara yang UI tidak dedahkan juga ada di sini.

Panduan ini membawa anda daripada sifar ke “memskrip backlog anda” dalam kurang sepuluh minit. Untuk rujukan endpoint penuh, lihat Spesifikasi API.

Anda mengesahkan dengan kunci dalam pengepala X-TrackerToken. Terdapat dua jenis kunci yang anda cetak sendiri, dan jenis ketiga yang diperoleh oleh klien MCP untuk anda:

  • Kunci pengguna (ea_user_…) — Bertindak sebagai anda. Cipta ia dalam Account Settings → API Keys. Gunakan ini untuk skrip peribadi, alat CLI, integrasi.
  • Kunci ejen (ea_agent_…) — Bertindak sebagai ejen bernama dalam satu projek. Cipta ia dalam Project Settings → Agents. Gunakan ini untuk ejen AI — Claude Code, Codex, milik anda sendiri — yang harus mengambil bahagian dalam projek sebagai rakan sepasukan bernama.
  • Token MCP (ea_mcp_…) — Token akses OAuth 2.1 yang dikeluarkan kepada klien MCP (Claude, IDE) selepas anda meluluskannya pada halaman persetujuan. Ia bertindak sebagai anda, dan anda boleh membatalkannya di bawah Account Settings → Connected apps.

Dialog sekali paparan selepas mencipta kunci API peribadi dalam Tetapan Akaun, dengan kunci disembunyikan dalam tangkapan ini

Borang cipta kunci dalam tab Agent dengan nama dan peranan member dipilih, di bawah arahan persediaan

Perbezaan antara dua jenis yang anda cetak sendiri:

Kunci penggunaKunci ejen
SkopSemua projek andaSatu projek tertentu
Identiti dalam log auditNama andaNama ejen
PerananPeranan anda dalam setiap projekDitetapkan semasa penciptaan kunci (viewer, member, atau manager — tidak pernah melebihi peranan ahli yang mencetaknya)
PembatalanBatalkan kunci; anda kekal akses melalui kunci/sesi lainBatalkan atau putar kunci; ejen kehilangan akses serta-merta
Terbaik untukAutomasi peribadi, skripEjen AI yang harus boleh dibezakan daripada anda dalam sejarah

Authorization: Bearer … juga berfungsi jika anda lebih suka gaya pengepala itu.

Dapatkan projek anda:

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

Atau untuk kunci ejen, senaraikan projek yang ia diskopkan:

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

API adalah JSON, REST-ish, berversi pada /api/v1/. Bentuk yang sama untuk manusia dan ejen.

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 termasuk project_id dan mana-mana lalai yang pelayan gunakan (skala anggaran, keadaan selesai, dll.).

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

estimate ialah label nilai skala sebagai rentetan — "3", atau "13" pada skala Fibonacci — kerana ia mesti sepadan dengan satu mata pada skala projek. Nombor JSON ditolak.

Endpoint peralihan mengesahkan gerakan yang diminta dan memulangkan keadaan seterusnya yang dibenarkan apabila ralat:

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

Medan ialah to (bukan to_state). Jika gerakan tidak sah — katakan anda cuba melangkau daripada unstarted terus ke accepted — respons ialah 422 invalid_transition dengan butiran ralat berstruktur:

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

Ini ialah salah satu perkara kecil yang menjadikan API mesra-ejen: ejen boleh membaca details.allowed dan memilih gerakan seterusnya yang betul tanpa mengikis prosa.

rejected adalah terminal bagi endpoint peralihan. Untuk mengembalikan story yang ditolak kepada kerja, gunakan POST …/stories/{sid}/restart; POST …/stories/{sid}/reject ialah bentuk kata kerja untuk menolak story yang telah delivered.

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

Ulasan dikaitkan kepada sesiapa yang memiliki kunci API — jika ia kunci ejen, pengarang ulasan ialah ejen.

Setiap endpoint penulisan menerima pengepala Idempotency-Key. Cuba semula kunci yang sama dengan badan yang sama, dapatkan respons yang sama kembali. Cuba semula kunci yang sama dengan badan yang berbeza, 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 kritikal untuk ejen dalam gelung cuba-semula — terhempas separuh jalan penulisan, cuba semula dengan kunci yang sama, tiada story pendua.

Gerakkan banyak story sekaligus. Setiap story dihakimi secara bebas; satu gerakan tidak sah 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 ejen yang mahu bertindak balas terhadap apa yang manusia lakukan, tinjau endpoint peristiwa:

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

Respons ialah aliran peristiwa berhalaman-kursor dengan pelaku, sumber, dan perubahan. Setiap peristiwa mempunyai ID; hantar ID terakhir yang anda lihat sebagai since untuk menyambung di tempat anda berhenti. Tiada webhook, tiada pengikisan, tiada peristiwa terlepas. Aliran ini memerlukan peranan member — viewer mendapat 403.

GET /projects/{id}/search?q=<query> menjalankan carian teks penuh + berstruktur yang berkuasa ke atas story projek. Bahasa pertanyaannya dimodelkan pada kelayakan carian issue GitHub — jadi sintaks yang anda (atau ejen AI) sudah kenali daripada GitHub kebanyakannya boleh terus digunakan.

Terminal window
curl -G "https://eastagiletracker.com/api/v1/projects/$PROJECT_ID/search" \
-H "X-TrackerToken: $TRACKER_TOKEN" \
--data-urlencode 'q=payment crash type:bug,chore owner:@me created:>2026-05-01'

Respons ialah sampul JSON, dengan story disusun mengikut kerelevanan:

{ "results": [ /* canonical story objects */ ], "total": 42, "limit": 50, "offset": 0 }

total ialah kiraan padanan penuh, bukan saiz halaman. Halamankan dengan limit (lalai 50, maksimum 1000) dan offset; susun dengan sort=relevance (lalai), created, created_asc, updated, atau state.

  • Teks bebas memadankan tajuk, rujukan, dan penerangan story (teks penuh, dengan stemming dan penyusunan kedudukan). Balut frasa tepat dalam "tanda petik".
  • Kelayakan berbentuk field:value. Pisahkan alternatif dengan koma (OR dalam satu medan): type:bug,chore. Pisahkan kelayakan dengan ruang (AND merentasinya).
  • Nafikan mana-mana istilah atau kelayakan dengan - di hadapan: -label:wontfix.
  • Julat untuk tarikh dan mata: inklusif a..b, atau terbuka >x / <x.
KelayakanContohPadanan
type:type:bug,chorejenis story
state:state:started,finishedkeadaan aliran kerja
label:label:"my label"satu label
epic:epic:"Checkout"story dalam satu epik
priority:priority:p1keutamaan
points:points:3 · points:1..5 · points:>3nilai atau julat anggaran
iteration:iteration:42id iterasi
created: updated: started: completed: release:created:2026-05-01..2026-06-01 · updated:>2026-06-01satu tarikh atau julat (kebutiran hari); release: ialah tarikh release story
owner: requester: follower: reviewer: commenter: mention:owner:claire · owner:@meseseorang mengikut nama atau e-mel — ahli dan ejen, termasuk mention:; @me ialah anda
has:blockerhas:blockermempunyai blocker terbuka
is:is:unestimated · is:icebox · is:backlog · is:blockedsatu bendera

mywork: ialah alias bagi owner:mywork:me ialah owner:@me. Kelayakan scheduled: yang lama sudah dihentikan dan diabaikan secara senyap; gunakan release:.

Koma-OR (type:bug,chore) terpakai pada kelayakan faset; kelayakan orang (owner: requester: follower: reviewer: commenter: mention:) menerima satu nilai sahaja.

payment crash full text "payment" AND "crash"
"exact phrase" a phrase
type:bug,chore state:started bugs or chores that are started
owner:@me -label:wontfix mine, excluding the wontfix label
points:3..8 created:2026-05-01..2026-06-01 estimated 3-8, created in May
follower:tomas has:blocker tomas follows it and it's blocked
is:backlog updated:>2026-06-01 backlog items touched since Jun 1

Rentetan pertanyaan yang sama memacu kotak carian papan (yang membuka lajur hasil langsung) dan API ini — satu tatabahasa untuk manusia dan ejen. Mencari kandungan ulasan, tugas, dan blocker ada dalam pelan hala tuju; hari ini teks bebas meliputi tajuk, rujukan, dan penerangan story itu sendiri.

Spesifikasi OpenAPI 3 langsung berada di:

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

Swagger UI berada di:

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

/openapi.json dan /docs adalah tidak disahkan — ejen boleh membaca kontrak sebelum ia mempunyai kunci. Sebaik sahaja ia memegang kunci, /api/v1/meta (yang memerlukan kunci yang sah) memulangkan identitinya dan graf peralihan setiap-jenis-story; carian rujukan-data (/story_types, /story_states, /effort_scales, /priority_scales) juga tidak disahkan. Bersama-sama ia membenarkan ejen menjawab “apa yang saya boleh lakukan di sini?” tanpa 403 cuba-dan-ralat.

openapi.json yang dihidangkan membawa skema badan permintaan untuk endpoint penulisan, termasuk maxLength setiap medan, jadi klien boleh mengesahkan sebelum menghantar. Spesifikasi meringkaskan bentuk yang sama.

Untuk automasi interaktif — memacu sesi pelayar yang dilog masuk daripada skrip, atau mengawal jauh UI untuk tutorial — terdapat saluran WebSocket:

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

token ialah JWT sesi pelayar, bukan kunci API — kunci ea_user_* atau ea_agent_* ditolak sebelum naik taraf sambungan. Kebanyakan pengguna tidak pernah memerlukan ini; ia ada untuk kes-kes di mana REST tidak mencukupi.

Jika anda memskrip migrasi pukal:

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 fail yang disokong: pivotal, jira, asana, gitlab, shortcut, trello, linear, plane, plane_json, eat (format eksport East Agile Tracker sendiri — format pergi-balik). Endpoint multipart berjalan secara segerak dan menjawab dengan kiraan hasil.

GitHub mengimport daripada API dan bukannya daripada fail, melalui endpoint JSON — tiada file, hanya koordinat repositori:

Terminal window
curl -X POST https://eastagiletracker.com/api/v1/projects/$PROJECT_ID/import/json \
-H "X-TrackerToken: $TRACKER_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"source": "github",
"owner": "octocat",
"repo": "hello-world",
"token": "ghp_…",
"include_pull_requests": false,
"include_milestones": false,
"include_releases": false,
"include_dependencies": false
}'

Endpoint JSON adalah tak segerak: ia menjawab 202 dengan { "import_id", "status" } dan anda meninjau GET /projects/{id}/imports/{import_id} sehingga kerja itu mencapai done atau failed. Hanya satu import berjalan bagi setiap projek pada satu masa — panggilan kedua semasa satu sedang berjalan ialah 409 import_already_running. Keseluruhan gelung, dengan medan kemajuan kerja itu, ada dalam Mengisi projek daripada repo GitHub.

token adalah pilihan dalam permintaan, tetapi pengambilan itu sendiri sentiasa mengesahkan diri — ia berjalan pada API GraphQL GitHub, yang tiada peringkat tanpa nama. Tinggalkan token dan pelayan menggantikannya dengan token platformnya: repositori awam sahaja, dikongsi oleh setiap pemanggil, dan ditolak dengan import_github_shared_quota_low apabila bajet GraphQL-nya jatuh di bawah 500 mata. Repositori peribadi, atau deployment yang tidak mengkonfigurasi token platform (import_github_no_token), menuntut token anda. Token mana pun yang berjalan, ia digunakan hanya untuk panggilan GitHub huluan dan tidak pernah disimpan atau digemakan kembali. Perincian penuh, termasuk siling REST tanpa pengesahan sebanyak 60 permintaan pada GitHub, ada dalam Mengisi projek daripada repo GitHub.

Pratonton dry-run. Tambah "dry_run": true (JSON) atau -F "dry_run=true" (multipart) pada mana-mana sumber. Import menghurai, menyelesaikan, dan menyahduplikasi tepat seperti larian sebenar, menghasilkan kiraan hasil yang sama (imported, skipped, errors, unmatched), kemudian mengundur segalanya — tiada apa yang ditulis. Pada endpoint JSON, kiraan tiba pada kerja yang ditinjau, sama ada dry run atau tidak.

Had. Badan muat naik dihadkan pada 10 MiB, dan satu import pada 5,000 story; melebihi salah satu adalah 400 tanpa apa-apa ditulis. Mengimport semula fail adalah selamat — baris yang telah diimport (dipadankan mengikut id sumber) dilangkau, bukan diduplikasi.

Mana-mana peranan projek boleh menyenaraikan format; memuat turun satu format adalah untuk pemilik sahaja:

Terminal window
# The registered export formats: { id, name, content_type, drops, includes_archived }
curl https://eastagiletracker.com/api/v1/projects/$PROJECT_ID/export/formats \
-H "X-TrackerToken: $TRACKER_TOKEN"
# Download one format (eat is the full-fidelity round-trip CSV)
curl https://eastagiletracker.com/api/v1/projects/$PROJECT_ID/export/eat \
-H "X-TrackerToken: $TRACKER_TOKEN" -o project-export.csv

Id format pertukaran: eat, jira, pivotal, shortcut, trello, asana, gitlab, linear, plane, plane_json, ditambah format dokumen pdf dan docx. Setiap lampiran boleh dimuat turun sebagai satu zip daripada GET /projects/{id}/export/attachments.

Semua ralat adalah JSON dengan sekurang-kurangnya:

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

Banyak respons ralat juga termasuk objek detailsdetails.fields (sebuah tatasusunan nama medan yang menyalahi) pada validation_failed, dan details.allowed (bersama from/to) pada 422 invalid_transition. Gunakannya. 429 rate_limited membawa pengepala Retry-After dalam sampul JSON yang sama.

Endpoint senarai menerima limit dan cursor. Cursor adalah legap; hantar next_cursor daripada respons sebelumnya. Had limit berbeza bagi setiap endpoint — 200 pada story, ulasan, dan projek, 500 pada peristiwa, 1000 pada carian dan log audit. Senarai biasa (bukan kursor) yang terpaksa memotong responsnya menyatakannya dalam pengepala: X-Tracker-Pagination-Truncated, -Limit, -Offset, dan -Next-Offset, yang anda hantar kembali sebagai offset= untuk halaman seterusnya. Tiada pengepala jumlah kiraan.