Гадаад холболтын API (зөвхөн унших)
Өөрийн системээс байгууллагынхаа гишүүд болон өнөөдрийн хийх ажлыг унших API. Түлхүүр, хүсэлт, хязгаар, алдаа.
Сүүлд шинэчилсэн: 2026-10-15
外部のシステムが、サーバー間でAddnessの組織の情報を読むためのAPIです。読めるのは次の2つだけです。
- 組織のメンバーの一覧
- メンバー全員の今やるべきToDoと、そのToDoに関係するゴールの階層(日付を指定できます)
書き込み・通知・チャットなど、ほかの情報はこのキーでは読めません。
試験公開中です: このAPIは、Addnessが公開を決めた組織でだけ使えます。公開されていない組織では、APIキーを作る画面に「種類」の欄が出ず、連携用APIキーを作れません。すでにあるキーで呼んでも 403
EXTERNAL_INTEGRATION_FEATURE_DISABLEDになります。公開を止めたときもキーは失効せず、再開すると同じキーで読めます。
MCP連携との違い
- 使うもの: 外部連携APIは自社のシステム(サーバー)。MCP連携はあなたが使うAIエージェント。
- 名義: 外部連携APIは組織に1つの連携(ボット)で、組織のメンバーにはなりません。MCP連携はログインしたあなた本人。
- できること: 外部連携APIはメンバーの一覧と今やるべきToDoを読むだけ。MCP連携はあなたの権限の範囲で、ゴールの読み書きなど。
- 認証: 外部連携APIは組織に固定のキー(
Authorization: Bearer)。MCP連携はブラウザでのログイン(OAuth)。
AIからAddnessを使うときはMCP連携を使います。連携用APIキーは、MCPでもほかのAPIでも使えません(403 AUTH_API_KEY_RESOURCE_RESTRICTED)。
キーを用意する
- 組織の管理者が、組織の設定 › 連携の「開発者向け」にある「APIキー」で「新規作成」を押し、「種類」で「連携用APIキー」を選びます。
- 名前(100文字まで)とキーの有効期限を入れて、「作成する」を押します。有効期限は30日・90日・365日から選び、無期限は選べません。
- キー(
sk-で始まる文字列)は、作ったときに1回だけ表示されます。閉じると二度と表示できないので、その場で外部システムに設定してください。
連携用APIキーは組織に1つだけ作れます。作成済みの組織では「連携用APIキー」を選べず、「作成済みです。一覧から更新してください。」と表示されます。APIキーの一覧の「更新」でキーを入れ替えます。キーは作った組織だけで使えます。
- キーの更新: APIキーの一覧で、連携用APIキーの「更新」を押して新しいキーを発行します。古いキーには「入れ替え中」と期限が表示され、「今の期限」と「更新から7日後」の早い方まで並行して使えます。
- キーの失効: APIキーの一覧で失効したキーは、すぐに使えなくなります(401)。最後の1本を失効すると、新しく作るまで外部システムは読み取れません。
- 組織の削除: すべてのキーが使えなくなります。
呼び方
接続先は https://vt.api.addness.com です。すべての要求で、キーを Authorization ヘッダーに付けます。
curl -H "Authorization: Bearer sk-xxxxxxxx" \
"https://vt.api.addness.com/api/v1/external/organizations/{組織ID}/members"
{組織ID}には、キーを作った組織のIDを書きます。別の組織を指定すると 403AUTH_API_KEY_ORG_MISMATCHです。X-Organization-IDヘッダーは不要です。付けるなら同じ組織IDにします。- 使えるのは次の2つの
GETだけです。- メンバーの一覧:
GET /api/v1/external/organizations/{組織ID}/members - 今やるべきToDo:
GET /api/v1/external/organizations/{組織ID}/today-todos
- メンバーの一覧:
メンバーの一覧
GET /api/v1/external/organizations/{組織ID}/members?limit=100&cursor=…
| 引数 | 内容 |
|---|---|
limit | 1ページの人数。既定100、最大200 |
cursor | 前のページの nextCursor。省略すると最初のページ |
{
"members": [
{"memberId": "0b6f0e8e-…", "name": "山田 花子", "isGuest": false, "isExternal": false}
],
"nextCursor": "MGI2ZjBl…"
}
| 項目 | 意味 |
|---|---|
memberId | 組織メンバーのID。今やるべきToDoの memberId と同じ値です |
name | 組織での表示名 |
isGuest | ゲストのメンバー |
isExternal | 別の組織から参加しているメンバー(この組織での情報だけを返します) |
- 並びは
memberIdの順です。 - 人のメンバーだけを返します。AIエージェントと、組織を抜けたメンバーは含みません。
- メールアドレス・ユーザーID・アバター・上司・タグは返しません。
今やるべきToDo
GET /api/v1/external/organizations/{組織ID}/today-todos?date=2026-10-05&limit=50&cursor=…
| 引数 | 内容 |
|---|---|
date | 活動日(YYYY-MM-DD)。省略すると今日 |
limit | 1ページの人数。既定20、最大50。人数やToDoの量によっては、20人や50人のページでも10秒を超えて 504 になることがあります。504 が出たら limit を小さくして読みます |
cursor | 前のページの nextCursor |
{
"activityDate": "2026-10-05",
"timezone": "Asia/Tokyo",
"members": [
{
"memberId": "0b6f0e8e-…",
"todos": [
{"todoId": "7d1c2b0a-…", "kind": "goal", "objectiveId": "c3a0f4c2-…", "createdAt": "2026-10-04T23:30:00Z"}
],
"goals": [
{"id": "9f0a1b2c-…", "parentId": null, "orderNo": 1, "title": "第3四半期の目標", "status": "NONE", "completedAt": null, "isWaitingOnOther": false},
{"id": "c3a0f4c2-…", "parentId": "9f0a1b2c-…", "orderNo": 2, "title": "週次の振り返りを書く", "status": "COMPLETED", "completedAt": "2026-10-05T02:10:00Z", "isWaitingOnOther": false}
]
}
],
"nextCursor": null
}
todos は「誰が何を今やるべきToDoに選んだか」、goals はそのゴールの件名・親子・状態です。ゴールの件名と状態は goals が正本で、todos の行は objectiveId だけを持ちます。
todos に入るのは、ゴールから入れた行(kind: "goal")だけです。ゴールに紐づかない自由ToDo(Goalタスクを実行した行と、繰り返しの予定の実績も含みます)は返しません。
| 項目 | 意味 |
|---|---|
kind | 常に goal(ゴールから入れた行) |
objectiveId | ゴールのID。goals[].id と突き合わせます |
createdAt | 今やるべきToDoに入れた時刻(UTC) |
- メンバーの集合はメンバーの一覧と同じです。ToDoが無いメンバーも、空の
todos・goalsで返します。 - 1人の行の並びは、Addnessの画面と同じです(手動の並び順、次に入れた順)。1人あたりのToDoは最大800行です。
ゴールの階層(goals)
goals は、メンバーページの「今やるべきToDo」欄の木を作る材料です。
| 項目 | 意味 |
|---|---|
id | ゴールのID。todos[].objectiveId と突き合わせます |
parentId | 同じ goals の中の親のID。親が無ければ null(木の根) |
orderNo | 兄弟の並び順(昇順)。同じ値なら配列の順を保ちます |
title | 件名。当日は今の件名、過去の日はその日に保存された件名 |
status | NONE・IN_PROGRESS・COMPLETED。当日はそのメンバーのその日の実行記録があればそちら、無ければゴールの状態。完了日時があれば COMPLETED |
completedAt | 完了日時(UTC)。COMPLETED のときだけ |
isWaitingOnOther | 他の担当者の仕事を待っている行(本人のゴールの直下にある、他担当の未完了のゴール) |
goals に入るのは、その日のToDoのゴールと、その子孫・祖先のうち画面の候補(本人の担当ゴールとその祖先、その日に完了したゴール、他担当の待ち行)に入るものだけです。組織のゴールの木全体は入りません。担当者・説明文・期限・数値は返しません。
goals を全部そのまま並べても「今やるべきToDo」欄にはなりません。画面と同じ木にするには、次の順で組み立てます。
todosのobjectiveIdを起点にします(同じゴールのToDoが複数あっても木の行は1つ)。起点はgoalsに必ずあります。画面の候補に入らないゴールは、parentId: nullの根としてgoalsの末尾にあります。組織の外か削除済みのゴールだけはgoalsに無いので、そのToDoは件名無しで扱います。- 起点から
parentIdを子の方向にたどり、goalsの中の子孫を全部足します。 - 起点ごとに直上の親を足します。別々の起点の枝が同じ祖先で合流するときは、その共通の祖先と、そこまでの間のゴールも足します。足した祖先は文脈の行(画面では灰色)です。
goalsに無い親は追わず、その子を根にします。 - 兄弟は
orderNoの昇順(同じ値は配列の順)で並べ、根から深さ優先で表示します。深さは組み立てた木で数え直します。 - 完了した行も同じ位置に残します。
isWaitingOnOtherの行は、親の下に「待ち」として表示します。
ページを最後まで読む
どちらのAPIも、応答の nextCursor を次の要求の cursor に渡し、nextCursor が null になるまで読みます。
- ページは人数(
limit)だけで切ります。ToDoの行数では切りません。 cursorの中身には依存しないでください。読めないcursorは 400INVALID_REQUESTです。
日付の決まり
- 日は組織のタイムゾーン(応答の
timezone。設定が無ければAsia/Tokyo)の午前4時で切り替わります。 - 今日(
dateを省略、または今日の日付): 今の一覧です。未完了の行は、完了するか外すまで日をまたいで残ります。 - 過去の日: その日に入れた行と、その日に完了した行です。その日に画面に見えていた一覧とは、次の点で一致しません。
- 前の日から持ち越して未完了のまま残っていた行と、あとで外した(削除した)行は出ません。
- ゴールの件名・親・状態(
goals)はその日に保存されたもので、今のゴールの状態では上書きしません。保存が無い日はgoalsが空です。
- 未来の日: 指定できません(400
INVALID_REQUEST)。 - 時刻(
createdAt・completedAt)はすべてUTCです。
制限
| 対象 | 上限 |
|---|---|
| キー1本 | 6,000回/時(一時的に2,000回まで超えられます。サーバー1台あたりの目安) |
| 連携1つ | 200回/分 |
| 今やるべきToDoの頻度 | 組織ごとに120回/時(一時的に20回まで超えられます。サーバー1台あたり) |
| 今やるべきToDoの同時数 | 組織で2本(サーバー1台あたり4本) |
| 今やるべきToDoの1ページ | 10秒 |
- 超えると 429(1ページの時間切れは 504)を返します。コードは下の「エラー」を見てください。
- 拒否された要求も同じ枠を使います。
- 429・504 のときは、
Retry-After(秒)のあとで再試行します。504 のときはlimitを小さくします。 - 並列は2本以下にします。1巡の要求数は「人数÷
limit(切り上げ)」ページ分で、limitを小さくすると1巡のページ数は増えます。 - 1時間の要求(1巡のページ数×巡回数)が120回に収まるよう、人数と
limitに合わせて間隔を延ばします。たとえばlimitを50にしたとき、120人なら1巡3回なので5分に1回程度(1時間36回)で収まります。600人なら1巡12回なので、5分に1回では1時間144回になって上限を超えます。6分より長い間隔にしてください。再試行も回数に入るので、余裕を持たせます。
エラー
エラーの本文は {"error": "理由", "code": "コード"} です。判定には code を使います。
400
INVALID_REQUEST:limitが範囲外、cursorが読めない、dateの形式が違う、未来の日AUTH_ORGANIZATION_ID_INVALID: path の組織IDがUUIDでない
401
AUTH_INVALID_API_KEYなど: キーが無い・無効・失効・期限切れ(連携や組織の削除を含む)
403
AUTH_API_KEY_ORG_MISMATCH: 別の組織を指定したAUTH_API_KEY_RESOURCE_RESTRICTED: 連携用APIキーでないキーで呼んだ。または連携用APIキーでこの2本以外を呼んだAUTH_EXTERNAL_INTEGRATION_KEY_REQUIRED: ログインのセッションで呼んだEXTERNAL_INTEGRATION_FEATURE_DISABLED: 組織でこのAPIが公開されていない(キーは有効なまま)EXTERNAL_INTEGRATION_INACTIVE: 最後のキーの失効などで、連携が削除されている
429(Retry-After 秒のあとで再試行)
API_KEY_RATE_LIMIT_EXCEEDED・RATE_LIMIT_EXCEEDED: キー・連携のレート制限を超えたEXTERNAL_READ_BUSY: 今やるべきToDoの同時数の上限に当たったEXTERNAL_GOALS_RATE_LIMITED: 今やるべきToDoの頻度の上限(組織ごとに120回/時)に当たった
504(Retry-After 秒のあとで、limit を小さくして再試行)
EXTERNAL_READ_TIMEOUT: 今やるべきToDoの1ページが10秒に収まらなかった
Өмнөх хуудас
Одоо ашиглаж буй хэрэгслүүдтэйгээ хамт ашиглах
Дараагийн хуудас
Гишүүдийн жагсаалтын хуудас
Энэ хэсгийн нийтлэлүүд— Багийн удирдлага
Энэ нийтлэл танд хэрэг болсон уу?