コンテンツにスキップ

API 仕様

完全な REST エンドポイントリファレンスです。チュートリアルと例については API ガイド を参照してください。

プロジェクトの member が Web UI でできることはすべてここで利用できます — SPA はこの同じ API を消費しています。manager ロールを必要とする操作は (manager) とマークされています。それ以外はプロジェクトメンバーシップのみ(または、(viewer) とマークされた読み取りについては任意のアクセスレベル)を必要とします。以下の表はサーバーがマウントするすべてのルートグループを挙げています。1 行で要約されているものは、ライブの openapi.json に完全に記述されています。

https://eastagiletracker.com/api/v1

https://api.eastagiletracker.com/api/v1 は同一の API を提供します。すべてのリクエストとレスポンスは JSON です。ただし、multipart を受け付けるいくつかのファイルアップロードエンドポイントを除きます。

2 つのグループは 1 階層上、/api/v1 ではなく /api の下にあります: 認証サーフェス(/api/auth/*)と公開フォーム(/api/contact/api/feedback)です。これらを /api/v1/… と書いた場合は 404 が返ります。

すべての認証済みリクエストは、次のいずれかで認証情報を送ります。

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

ユーザーキーは ea_user_、エージェントキーは ea_agent_、MCP アクセストークンは ea_mcp_ で始まります。API ガイド → 3 種類の認証情報 を参照してください。

認証不要のエンドポイント: /openapi.json/docs/api/auth/* エンドポイント、参照データのルックアップ(/story_types/story_states/effort_scales/priority_scales)。/meta認証済み です — 任意の有効なキーが機能しますが、プロジェクトスコープではありません(プロジェクトにバインドされたエージェントキーでも到達できます)。

4 つのレベルがプロジェクトスコープのエンドポイントを制御します。

レベル通過する者典型的な操作
public viewer公開設定のプロジェクトであれば誰でもボードの読み取り: ストーリー、イテレーション、検索、ストーリーと Epic のアクティビティ(アクターの詳細はマスクされる)
viewerviewer, member, manager読み取り(ストーリーの一覧/取得、検索、メトリクス、エクスポートフォーマットの一覧)
membermember, managerすべての作業項目の書き込み(ストーリー、タスク、コメント、…)、イベントストリーム
managermanager のみプロジェクト設定、メンバーシップ管理、エージェントキー、削除、インポート、エクスポートのダウンロード、バックアップ、監査ログ

エージェントはメンバーと同じロール — viewermembermanager — を持ち、キーを発行したメンバーのロールが上限になります。非メンバーは非公開プロジェクトのパスで 404 unfound_resource403 ではなく)を受け取るので、プロジェクト ID は列挙できません。

MethodPath説明
GET/openapi.jsonライブの OpenAPI 3 仕様(リクエストボディを含む)。認証不要。
GET/docsSwagger UI。認証不要。
GET/meta呼び出し元のアイデンティティ(auth.kind/key_id/agent_id/project_id)+ ストーリータイプの遷移グラフ。認証済み(任意の有効なキー。プロジェクトスコープではない)。最初にこれを呼びます。
GET/api/health · /api/config死活確認と、デプロイの公開設定(シングル組織モード、有効なオプション機能、インスタンス名)。認証不要、/v1 の外。

セッション用のエンドポイントで、特記がない限り認証不要です。SPA がこれらを使います。スクリプトは通常、代わりに API キーを使います。

MethodPath説明
POST/auth/register新規アカウントを登録 — reCAPTCHA で保護。その後アカウントは SMS チャレンジを通過する
POST/auth/sms/challenge · /auth/sms/status · /auth/sms/bypassサインアップ用の SMS コードを送信 / 確認(バイパスはオペレーター限定)
GET/auth/configデプロイが提供するサインイン方法
POST/auth/loginメール + パスワードでサインイン。セッション JWT、または TOTP チャレンジを返す
POST/auth/login/totp認証アプリのコードまたはリカバリーコードでサインインを完了
POST/auth/passkey/login/start · /auth/passkey/login/finishパスワードレスの WebAuthn サインイン
GET/auth/oauth/github/start · /auth/oauth/github/callback · /auth/oauth/google/start · /auth/oauth/google/callback · POST /auth/oauth/exchangeGitHub または Google による OAuth サインイン
POST/auth/refresh · /auth/refresh/revokeリフレッシュトークンをローテーション / 取り消す
POST/auth/logoutサインアウト(リフレッシュトークンを取り消す)
POST/auth/forgot-password · /auth/reset-passwordリセットメールを要求 / リセットトークンを使用
POST/auth/accept-invite/lookup · /auth/accept-invite招待トークンを解決 → メールアドレス / プロジェクトの招待を受け入れる(認証後)

アカウント / アイデンティティ

Section titled “アカウント / アイデンティティ”

これらは呼び出し元に作用し、有効なキーのみを必要とします(プロジェクトロールは不要)。

MethodPath説明
GET/me現在のユーザープロフィール
PUT/meプロフィールを更新
DELETE/meアカウントを削除 — 他のメンバーがいる組織またはプロジェクトの唯一のオーナーである間は拒否される
GET/me/deletion-impactアカウントを削除すると何が消えるか、そして何が削除を妨げているか
PUT/me/passwordパスワードを変更
PUT/me/settings設定を更新(テーマ、通知設定)
POST/me/avatarアバターをアップロード(multipart)
POST/me/api-token/regenerateAPI トークンをローテーション — 既存のセッション/キーを無効化
GET/me/api_keys · POST /me/api_keys · DELETE /me/api_keys/{id}ユーザー(ea_user_)API キーを管理
GET/me/totp · POST /me/totp/setup · /me/totp/verify · /me/totp/disable2 要素認証(TOTP)の登録。verify はリカバリーコードを一度だけ返す
GET/me/passkeys · POST /me/passkeys/register/start · /me/passkeys/register/finish · DELETE /me/passkeys/{credential_id}パスキーの登録と削除
GET/me/oauth_grants · DELETE /me/oauth_grants/{grant_id}接続済みアプリ — あなたが認可した MCP クライアントと OAuth アプリ
GET/me/activity全プロジェクトにわたるあなたのアクティビティ
GET/me/storiesトークンが到達できるすべてのプロジェクトで、あなたがオーナー・リクエスター・フォロワーであるストーリー — role=owned|requested|followingstate=cursor= / limit=(最大 200)
GET/me/mentions · POST /me/mentions/{mention_id}/ack@メンション受信箱(unacked=true で絞り込み)と既読確認 — 下記の通知フィードにも統合されている
GET/me/data-exportあなたのデータの GDPR セルフエクスポート
GET/me/consent · POST /me/consent同意を読み取り / 記録({ consent_type, granted }
GET/legal/pending · POST /legal/accept保留中のクリックラップ文書 / 受け入れを記録
GET / PUT/agent/meエージェントキー自身のアイデンティティとプロフィール。エージェントが読み取り・編集できる(/me のエージェント側の対応物)
POST/api/contact · /api/feedback · /api/feedback/with-screenshotお問い合わせ + アプリ内フィードバック。/v1 の外。IP ごとにレート制限あり

ストーリーの作成/見積もり時に使われるシードルックアップ。安定した ID。

MethodPath説明
GET/story_typesfeature, bug, chore, release(+ allow_points
GET/story_statesunstarted … accepted, rejected
GET/effort_scales利用可能な見積もりスケール
GET/effort_scales/{scale_id}/valuesスケール内のポイント値
GET/priority_scales · /priority_scales/{scale_id}/values優先度スケールとその値(ストーリーの priority_id はここで解決される)

ホスティング版サービスのみ — セルフホストのインストールはシングル組織モードで動作し、これらをマウントしません(組織一覧を除く)。ロールは組織ロールです: owner、admin、member。

MethodPath説明
GET / POST/organizations自分の組織を一覧 / 作成
GET / PUT / DELETE/organizations/{oid}読み取り、名前変更(名前 + slug。owner または admin)、削除
GET / POST/organizations/{oid}/memberships · PUT / DELETE …/memberships/{member_id}メンバーと招待。招待にはロールの上限がある(呼び出し元のロールを超えない。owner は招待では付与されない)
POST/organizations/{oid}/memberships/bulk-role · …/memberships/bulk-remove最大 200 人のメンバーのロールを一括変更、または一括削除。全件か無し: 最後の owner を外す、またはプロジェクトの所有者がいなくなるバッチは丸ごと拒否される。reassign_confirmed を指定すると、代わりに自分がそれらのプロジェクトの所有者になる
DELETE/organizations/{oid}/invitations/{invitation_id}保留中の招待を取り消す
POST/organizations/{oid}/transfer-ownershipowner ロールを別のメンバーに引き渡す
PUT/organizations/{oid}/memberships/{member_id}/anonymizationメンバーの名前 / メール / アバターを組織全体でマスク
GET/organization-invitations/{token} · POST …/{token}/acceptメールで届いた組織の招待を解決 / 受け入れる
POST/organizations/{oid}/export · GET / POST …/export/jobs · GET …/export/jobs/{job_id} · …/export/jobs/{job_id}/downloadowner 限定の組織エクスポート: SQL ダンプとすべての添付ファイルを含む zip を、ジョブとして実行
MethodPath説明
GET/projectsあなたのプロジェクトを一覧表示(limit ≤ 200)
POST/projectsプロジェクトを作成
GET/projects/{id}プロジェクト詳細を取得 (viewer)
PUT/projects/{id}プロジェクト設定を更新 (manager)
DELETE/projects/{id}プロジェクトを削除 (manager)
POST/projects/{id}/pinプロジェクト一覧でプロジェクトをピン留め / ピン留め解除
POST/projects/{id}/transfer-organizationプロジェクトを別の組織に移動 (manager)
POST/projects/{id}/slack/testプロジェクトの Slack フィードにテストメッセージを送信 (manager)
GET / POST/projects/{id}/showcase_claim_eligibility · /projects/{id}/showcase_claim · /projects/{id}/showcase_seed公開ショーケースプロジェクト: 引き取れるかを確認、引き取る、データを投入する
GET/projects/{id}/audit-log監査ログの読み取り — プロジェクト履歴に加え、surface= によるストーリー別 / Epic 別のアクティビティ。アクセスは surface により異なる(下記参照)
GET/projects/{id}/eventsカーソルでページ分割されたイベントストリーム (member)イベント を参照

監査ログのクエリパラメータ: event_type=(単一タイプまたはカンマ区切りリスト)、limit=(≤ 1000)、before=(keyset カーソル、ISO-8601 の created_at)、surface=project_historystory_activitiesepic_activities)、target_id=(ストーリー/Epic の id — surface=story_activities または epic_activities のとき必須)。アクセス: フィルタなしのログと surface=project_history(manager)story_activities / epic_activities はプロジェクトの任意のメンバーが読め、公開プロジェクトでは匿名でも読める(アクターの PII はマスクされる)。

メンバー、エージェント、エージェントキー

Section titled “メンバー、エージェント、エージェントキー”
MethodPath説明
GET/projects/{id}/membershipsメンバーを一覧表示 (viewer)
POST/projects/{id}/membershipsメンバーをメールで招待 (manager)
PUT/projects/{id}/memberships/{mid}ロールを更新 (manager)
DELETE/projects/{id}/memberships/{mid}メンバーを削除 (manager)
GET/projects/{id}/addable-members · POST /projects/{id}/members/add-existingまだプロジェクトにいない組織メンバー / メール招待なしで 1 人追加 (manager)
POST/projects/{id}/members/join組織の owner または admin が、自組織のプロジェクトに manager として参加する、または自分を manager に昇格させる(プロジェクト一覧の Make me owner アクション)
PUT/projects/{id}/members/{mid}/anonymizationこのプロジェクトでメンバーの名前 / メール / アバターをマスク (manager)
GET / POST/projects/{id}/agent_keysエージェントキーを一覧 / 発行 — manager、またはプロジェクトのキー作成者ロールのポリシーが認めるロール
DELETE/projects/{id}/agent_keys/{kid}エージェントキーを取り消す
GET/projects/{id}/agent_keys/onboardingオンボーディング一式: 一般的なエージェントクライアント向けのプロンプトと設定ファイル
GET/projects/{id}/agents · GET / PUT /projects/{id}/agents/{aid}プロジェクトのエージェントとそのプロフィール(名前、イニシャル、説明、色)
POST/projects/{id}/agents/{aid}/rotate-key · /projects/{id}/agents/{aid}/avatarエージェントのキーをローテーション(アイデンティティと履歴は保持)/ アバターをアップロード

すべてのストーリー書き込みは member ロールを必要とします。

MethodPath説明
GET/projects/{id}/storiesストーリーを一覧表示(ページ分割、フィルター可能) (viewer)
POST/projects/{id}/storiesストーリーを作成
GET/projects/{id}/stories/{sid}1 つのストーリーを取得 (viewer)
PUT/projects/{id}/stories/{sid}ストーリーを更新
DELETE/projects/{id}/stories/{sid}ストーリーを削除
POST/projects/{id}/stories/{sid}/transitions検証付きで状態を変更
POST/projects/{id}/stories/{sid}/reject · /projects/{id}/stories/{sid}/restart納品済みのストーリーを却下 / 却下されたストーリーを started に戻す(/transitions にとって rejected は終端状態)
POST/projects/{id}/stories/{sid}/archive · /projects/{id}/stories/{sid}/unarchive1 つのストーリーをアーカイブ / アーカイブ解除
POST/projects/{id}/stories/bulk_transition多くのストーリー(1〜100)を一度に遷移
POST/projects/{id}/stories/bulk-archive · bulk-delete · bulk-duplicate · bulk-move多くのストーリーをアーカイブ、削除、複製、または移動(パネル / 位置へ)
POST/projects/{id}/stories/{sid}/duplicate1 つのストーリーを複製
GET / POST / DELETE/projects/{id}/stories/{sid}/epics · …/epics/{eid}ストーリーの Epic への所属
GET/short-links/{code} · /story-references/s/<code> 短縮リンクをそのストーリーに解決 / 最大 100 件のストーリー参照(#id、URL)を、呼び出し元が読めるストーリーに解決

ストーリー一覧のクエリパラメータ: archived=exclude デフォルト / include / only — 3 値のアーカイブフィルター。非推奨の include_archived=true に取って代わり、後者は現在 archived=include のエイリアスです)、include_done=true(過去のイテレーションに凍結された Done パネルのストーリーを含める。デフォルトでは除外)。ページング(cursor= / limit= / offset=)と部分フィールドセット(fields=)は、ページネーションフィールドの射影 に従います。

作成POST …/stories): { "name" (required), "story_type": "feature|bug|chore|release", "description"?, "estimate"?, "current_state"?, "icebox"?, "labels"? }estimate はスケール値の ラベル を文字列で指定します("3""13")。JSON の数値は拒否されます。labels["auth"] または [{ "name": "auth" }] を受け付けます。未知のラベルは作成されます。デフォルト: story_type=featurecurrent_state=unstarted

更新PUT …/stories/{sid}): 同じフィールド、すべて任意、加えて "position"(float)、"force_state_change"(bool)、"expected_updated_at"(RFC 3339 — 読み取った後にストーリーが変更されていた場合、説明の保存は 409 stale_write で拒否されます)。ストーリーの書き込みは、ストーリーの ETag に対する If-Match にも従います。一致しない場合は 412 precondition_failed です。

遷移POST …/transitions): { "to": "<state>" }。フィールドは to です。{ story_id, state } を返します。不正な移動 → details: { from, to, allowed } 付きの 422 invalid_transition

一括遷移POST …/bulk_transition): { "story_ids": [int,…] (1–100), "to": "<state>" }。各ストーリーは独立して判断されます。{ results: [ { id, status: "ok" } | { id, status: "failed", error } ] } を返します。

すべて member。ほとんどの List/GET は (viewer) です。

MethodPathボディ / 注記
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) } または { comment_emoji }。GET は fields=(許可リスト: comment_idstory_comment_idstory_idcomment_textcomment_emojimembercreated)に加えて cursor= / limit=(≤ 200)/ order=asc|desc を取る
GET / POST/projects/{id}/stories/{sid}/blockers · PUT/DELETE …/blockers/{bid}{ blocker_desc, resolved? }
GET / POST/projects/{id}/stories/{sid}/links · PUT/DELETE …/links/{lid}{ url, link_type?, title? }link_typerelates_toduplicatesblocksis_blocked_bypull_requestbranchother。GitHub の /pull//tree/ の URL には自動的に種別が付く
GET / POST/projects/{id}/stories/{sid}/reviews · PUT/DELETE …/reviews/{rid}作成: { reviewer_id? / reviewer_agent_id?, comment? } — 両方を省略すると自分自身を割り当てる。更新: { status, comment? }
GET / POST/projects/{id}/stories/{sid}/owners · DELETE …/owners/{mid} · DELETE …/owners/agents/{aid}{ member_id? / agent_id? } — 両方を省略すると呼び出し元を追加
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 アップロード — 動画 ≤ 200 MB、PDF / Word / Excel ≤ 25 MB、画像 / CSV / テキスト ≤ 10 MB。一覧は (viewer)
GET / POST/projects/{id}/stories/{sid}/link-attachments · DELETE …/link-attachments/{laid}リンク添付 — コードリンクとしてではなく、ファイル添付と並べて保持される外部 URL
GET/attachments/{token} · /api/avatars/{token}添付ファイルまたはアバターのトークン指定による読み取り — API が返す URL。X-TrackerToken は不要

ストーリーと同じ形で、ステートマシンがないものです。書き込みは member、読み取りは (viewer)

MethodPath説明
GET / POST/projects/{id}/epics · GET / PUT / DELETE …/epics/{eid}Epic は名前、Markdown の説明、そしてストーリーを束ねる裏付けラベルを持つ
GET / POST / PUT / DELETE…/epics/{eid}/comments · …/comments/{cid}Epic のコメント
GET / POST / DELETE…/epics/{eid}/owners · …/followers(+ /agents/{aid} の各バリアント)オーナーとフォロワー(メンバーまたはエージェント)— Epic のオーナーはそのストーリーに伝播する
GET / POST / DELETE…/epics/{eid}/attachments (+ /json) · …/link-attachments添付ファイル。上限はストーリーと同じ
GET/projects/{id}/analytics/epics · …/analytics/epics/{eid}Epic ごとの進捗: バーンアップ、スループット、健全性、予測 (viewer)

書き込みは member、読み取りは (viewer)

MethodPath説明
GET / POST/projects/{id}/labelsラベルを一覧 / 作成
PUT / DELETE/projects/{id}/labels/{lid}ラベルを更新 / 削除
POST/projects/{id}/labels/{lid}/archiveラベルをアーカイブ(ソフト非表示)

読み取りはすべてのプロジェクトロールに開かれており、公開プロジェクトでは匿名でも可能です。

MethodPath説明
GET/projects/{id}/iterationsイテレーションを一覧表示(1 ページあたり ≤ 500。ETag を伴い、切り詰められた場合は X-Tracker-Pagination-* 継続ヘッダーも伴う)
GET/projects/{id}/iterations/{itid}1 つのイテレーション
GET/projects/{id}/iterations/first-preview最初のイテレーションに割り当てられる日付。作成時の確認画面に表示される
POST/projects/{id}/iterations手動イテレーションを作成 (member)
DELETE/projects/{id}/iterations/{itid}イテレーションを削除 (manager)
PUT/projects/{id}/iterations/{itid}/velocityプロジェクトの戦略を変えずに、1 つのイテレーションのベロシティを上書き (manager)
GET/projects/{id}/iterations/{itid}/done-stories終了したイテレーションの受け入れ済みストーリー(ページ分割)
MethodPath説明
GET/projects/{id}/search?q=…強力な検索 — 全文 + ファセット / 日付範囲 / 人物の修飾子(GitHub スタイルの DSL)。{ results, total, limit, offset } を返す。queryq のエイリアス。limit=(デフォルト 50、最大 1000)/ offset= でページング。sort=relevance(デフォルト)、createdcreated_ascstateupdated で並べ替え。(viewer)ガイド を参照
GET/projects/{id}/metrics/{velocity,burndown,story-types,contributors}Metrics ページの系列データ (viewer)。Epic のメトリクスは上記の /analytics/epics にある
GET/projects/{id}/backlog/groupingBacklog の予測イテレーショングループ (viewer)
GET / PUT/projects/{id}/preferencesこのプロジェクトに対するあなたのボード設定 — 任意のプロジェクトロール、自分の行のみ
MethodPath説明
GET/projects/{id}/eventsカーソルでページ分割されたイベントストリーム (member) — viewer は 403 を受け取る

クエリパラメータ: since=<event_id>types=story.created,story.transitioned,comment.added,…limit=(≤ 500)、cursor=。レスポンスには next_cursor が含まれます。最後に見た event_idsince として渡すと再開します。

アプリ内通知の統合フィード: ファーストクラスの通知行(レビュー依頼、ストーリーのアクティビティ、招待など)を @メンション受信箱と統合し、新しい順の 1 本のストリームにまとめたものです。フィードの id はソースを示すプレフィックス付きです(nt-… / sc-… / ec-…)。メンバーセッションと ea_user_* キーはメンバー側の行を、ea_agent_* キーはエージェント側の行を読み取ります。

MethodPath説明
GET/me/notifications自分の通知フィード。フィルタ: unread=truesince_id=kind=mentions / reviews / stories / invitations)。ページングは cursor= / limit=
GET/me/notifications/unread-count未読数の合計 — { unread_count, by_category: { mentions, reviews, stories, invitations } }
POST/me/notifications/read-allすべて既読にする。最新のカウントを返します
POST/me/notifications/{id}/ack1 件を既読にする(冪等)
POST/me/notifications/{id}/acceptフィードからプロジェクト / 組織への招待を承諾(メンバートークンのみ)
POST/me/notifications/{id}/declineプロジェクト / 組織への招待を辞退(メンバートークンのみ)
GET/me/notifications/resolve-invite?token=…メールで届いた招待トークンを自分の通知 id に解決 — { "id": "nt-…" } または { "id": null }
GET/me/notifications/streamライブプッシュ — Server-Sent Events(text/event-stream)。下記参照

stream エンドポイントは JSON エンドポイントではないため、OpenAPI 仕様には含まれません。接続を開いたまま維持し、新着があるたびにペイロードなしのフレーム({"type":"notification","kind":…})を送出して、クライアントにフィードの再取得を促します。接続はサーバー側で 45 分で打ち切られます — 再接続して再認証してください。メンバーセッションと ea_user_* キーのみ。ea_agent_* キーは 403 になります。

MethodPath説明
POST/projects/{id}/importファイルソース: source=pivotal, jira, asana, gitlab, shortcut, trello, linear, plane, plane_json, eat。Multipart file=。同期 — 結果の件数で応答する。
POST/projects/{id}/import/jsonJSON ボディ。source=github はファイル不要 — ownerrepo、任意の token、およびオプトインフラグ include_pull_requests / include_milestones / include_releases / include_dependencies。ファイル系ソースは file_base64 を送る。非同期: 202 { import_id, status } を返す。サーバーは GitHub の GraphQL API 経由で取得し、この API は匿名の呼び出し元を拒否するため、GitHub には常にトークンが渡ります — あなたのものか、デプロイの共有トークンです。ガイドを参照してください。
GET/projects/{id}/imports/{import_id}ジョブをポーリング: statuspending → fetching → writing → done | failed と進み、取得中は progress_current / progress_total が、done になると結果の件数が得られる

インポートはプロジェクトごとに一度に 1 つだけ実行されます。実行中に 2 つ目の POST を送ると 409 import_already_running になります。dry_run: true(JSON ボディまたは dry_run=true multipart)は任意のソースをプレビューします。解析・解決・重複排除を行い、実際のインポートと同じ { imported, skipped, errors, unmatched } の件数を返してからロールバックします — 何も書き込まれません。上限: ボディ 10 MiB、およびファイル系ソースではインポートあたり 5,000 ストーリー(どちらかを超えると → 400、何も書き込まれません)。GitHub ソースに上限はありません — 単一トランザクションではなく分割してコミットするためです。再インポートはソース id ごとに冪等です — すでにインポート済みの行は重複せずスキップされます。

MethodPath説明
GET/projects/{id}/export/formats登録済みフォーマット: { id, name, content_type, drops, includes_archived }。任意のプロジェクトロール。
GET/projects/{id}/export/{format}1 つをダウンロード (manager)。交換用: eat(フル忠実度)、jirapivotalshortcuttrelloasanagitlablinearplaneplane_json。ドキュメント: pdfdocx
GET/projects/{id}/export/attachmentsすべての添付ファイルを閲覧可能な 1 つの zip として(ファイルは元の名前を保持。JSON + CSV マニフェスト) (manager)

ドキュメントエクスポート(pdfdocx)は追加のクエリパラメータを取ります: page_size=letter デフォルト / a4 / legal / folio)、from= / to=(ストーリーウィンドウの範囲 — RFC 3339 または素の YYYY-MM-DD。ストーリーは、その created または completed_at が範囲内に入る場合に対象になります)、include_icebox= / include_backlog=(どちらもデフォルト false。したがって共有可能なエクスポートにはスケジュール済み / 進行中の作業のみが表示されます)。交換用の CSV フォーマットはこれらを無視します。

MethodPath説明
GET / POST/projects/{id}/backups · GET …/backups/{snapshot_id} · …/backups/healthスナップショットの一覧、今すぐ 1 つ取得、1 つを読み取り、そして保持状況のヘルスサマリー
GET / POST/projects/{id}/restores · POST …/restores/partial · GET …/restores/{restore_id}スナップショット全体、またはその中の選択したテーブルを復元し、復元の状況をポーリング

これらの POSTsensitive のレート制限ティア(下記)に属します。

East Agile Tracker は MCP クライアント向けの OAuth 2.1 プロバイダーです。クライアントは /.well-known/oauth-authorization-server/.well-known/oauth-protected-resource/mcp でこれを発見し、あなたを /oauth/authorize(同意ページ)に送り、/oauth/token でコードを交換し、得られた ea_mcp_* トークンを使って /mcp で MCP を話します。付与(グラント)は /me/oauth_grants で一覧・取り消しできます。プロバイダーのエンドポイントには独自のレート制限ティアがあります。

wss://eastagiletracker.com/ws/control?token=<session JWT>

インタラクティブな UI のリモート操作({ "action": "get_state", "id": "req-1" })のため。トークンはブラウザのセッション JWT です — API キーはアップグレード前に 401 で拒否されます。データチャネルではありません — すべての読み取り/書き込みは REST を経由します。単一インスタンスのみ。レプリカ間でファンアウトされません。

書き込みエンドポイント(POSTPUTDELETE)は Idempotency-Key ヘッダーを受け付けます。同じキー + 同じボディはキャッシュされたレスポンスを再生します(24 時間のウィンドウ)。同じキー + 異なる ボディは 409 idempotency_conflict を返します。キーはそれを送信した認証情報にスコープされます。GET/HEAD/OPTIONS/openapi.json/docs/api/auth/*/attachments パスへの multipart アップロードには適用されません。ドメインとしての応答に至らずに終わったレスポンス — 401403404429、およびすべての 5xx — は決してキャッシュされないため、これらの後の再試行はハンドラーに到達します。400409412422 はドメインとしての応答であり、成功と同様に再生されます。

リスト系エンドポイントは cursor=<opaque>limit=<n> を受け付けます。設定された場合、レスポンスは { "items": [...], "next_cursor": "<str|null>" } です。next_cursor を渡し返してページングします。limit の上限はエンドポイントごとに異なります: ストーリー、コメント、プロジェクトは 200、イベントは 500、検索と監査ログは 1000 です。

cursor/limit なしの通常のリストがレスポンスを切り詰めた場合は、ヘッダーでそれを示します — X-Tracker-Pagination-TruncatedX-Tracker-Pagination-LimitX-Tracker-Pagination-OffsetX-Tracker-Pagination-Next-Offset。次のページを取得するには、最後のものを offset= として渡し返します。総件数のヘッダーはありません。

リスト系エンドポイントは、特定のフィールドのみを返すために fields=(カンマ区切り)を受け付けます。story_id は常に含まれます。未知のフィールド名は、問題のある名前を details.fields に入れた 400 validation_failed を返します。

GET /projects/123/stories?fields=story_id,name,current_state,owners

すべての JSON エラーは codeerror を持ち、一部は details を加えます。

{ "code": "invalid_transition",
"error": "Cannot move story from `unstarted` to `accepted`",
"details": { "from": "unstarted", "to": "accepted", "allowed": ["started"] } }
Statuscode発生する場合
400invalid_parameter不正な入力。メッセージは error 内、details なし(ほとんどの検証: 空白/長さ/null バイト/メール)
400validation_failed構造化された入力エラー。details.fields は問題のあるフィールド名の 配列
401unauthenticatedトークンの欠落/無効
403unauthorized_operation認証済みだがロールが不十分
404unfound_resource見つからない — 非メンバーにも返される
409conflictリソースの競合(例: 重複)
409idempotency_conflictIdempotency-Key が異なるボディで再利用された
409stale_write · import_already_runningexpected_updated_at 以降にストーリーが変更された · インポートがすでに実行中
412precondition_failedIf-Match がリソースの現在の ETag と一致しなかった。detailsexpectedcurrent を運ぶ
413request_too_largeボディがルートのサイズ上限を超えている
422invalid_transition不正な状態移動。details{ from, to, allowed } を運ぶ
429rate_limitedレート制限のあるルートで、この IP からのリクエストが多すぎる。Retry-After ヘッダー付き
500internal_errorサーバー障害 — 汎用メッセージ。再試行して安全
503not_configuredこのルートに必要な連携(SMS、オブジェクトストレージ、…)がデプロイに設定されていない

details.fields はフィールド名の JSON 配列(例: ["to"])で、max のような追加のキーを伴うこともあります。フィールド→メッセージのマップはありません。

{ "code": "validation_failed", "error": "unknown field(s): foo", "details": { "fields": ["foo"] } }

クライアント IP ごとに、少数のルートに対して適用されます。それ以外の認証済み API トラフィックにはレート制限はありません。デフォルト値(各ペアは持続レートとバーストで、オペレーターが調整可能):

  • Auth/api/auth/*: 0.5 req/s、バースト 20。
  • OAuth プロバイダー/oauth/*: 1 req/s、バースト 60。
  • Public/api/contact: 0.2 req/s、バースト 10。
  • Feedback/api/feedback: 3 段階の制限が重なる — 送信は 15 秒に 1 回、1 時間に 10 回、1 日に 36 回まで。
  • Avatars — 認証不要のアバターリダイレクト: 20 req/s、バースト 200。
  • Sensitive — バックアップと復元の POST: 約 0.002 req/s、バースト 5。

制限を超えると、Retry-After ヘッダーと標準の JSON エラーエンベロープ(code: "rate_limited")を伴う 429 が返されます。