API リファレンス
開発者API(REST)の全エンドポイントの一覧。認証、リクエスト、レスポンス、エラー、curl の例。
外部システムのエンジニア向けの、Kumion REST API の一覧です。キーの発行は「開発者API」を、ターミナルから使うときは同じページの CLI の項をご覧ください。
はじめに:Kumion の「API」は3種類あります
「API」という言葉は、次の3つの別のことを指して使われます。このページで説明するのは①だけです。
| 向き | できること | 説明の場所 | |
|---|---|---|---|
| ① | 御社システム → Kumion | 御社のシステムから、通話の開始、通話記録と文字起こしの取得、営業時間や予約設定の変更などをします。 | このページ |
| ② | 通話中の Kumion → 御社システム | 通話の最中に、エージェントが御社のシステム(会員、予約、チケットなど)を調べたり、書き込んだりします。管理画面の「ツール」で設定します。御社に用意いただくのは、御社自身のAPIです。Kumion から API をお渡しするものではありません。 | 「ツール」 |
| ③ | Kumion の内部 | 聞き取り、回答の作成、音声の合成は Kumion の内部の仕組みです。対外公開していません。御社が単独で呼び出すことも、その必要もありません。 | なし |
よくある誤解
この API には、「文字を送って Kumion に読み上げさせる」APIや、「AI に直接質問して回答を受け取る」APIはありません(用意している API は下の一覧のとおりです)。エージェントに人と話させたいときは、calls.create で通話を始めます。Web コールにも、電話番号を指定した発信にもできます。
共通事項
ベース URL とテナント ID
すべてのパスは https://app.kumion.jp/api/v1/{tenantId} から始まります。{tenantId} は、管理画面の URL の /tenants/ の次の部分です。「設定」→「開発者API」の画面にある curl の例にも入っています。以降の各項のパスは、この /api/v1/{tenantId} の後ろだけを書いています。
認証
Authorization: Bearer <APIキー> ヘッダーを付けます。
| キーの種類 | 発行する場所 | 有効期限 |
|---|---|---|
| サービスキー | 「設定」→「開発者API」 | 発行時に指定した日まで |
| 個人キー | kumion auth login(CLI) | 最長 12 時間(組織のキーポリシーでより短いことがあります) |
各エンドポイントには必要な権限(agents:read など)があります。キーに権限がないと 403 になります。
リクエストとレスポンス
- 本文は JSON(
Content-Type: application/json)です。文字コードは UTF-8 です。 - 時刻は ISO 8601 です。一覧の
limitは省略時 20、最大 100、offsetで続きを取ります。 - エラーの本文は
{ "error": "日本語の説明", "code": "..." }です。codeが付かないエラーもあります。想定外のエラー(500 番台)は、定型の文言とrequestIdだけを返します。問い合わせにはこのrequestIdをお知らせください。
共通のエラー
| ステータス | 意味 |
|---|---|
| 401 | キーが無効です。キーがない・誤り・失効・期限切れ・テナント ID の形式違いは、区別せず同じ応答です。 |
| 403 | このテナントは利用できない状態、またはキーに必要な権限がありません。 |
| 404 | 指定した ID が見つかりません(ID の形式が違う場合も同じです)。 |
428 if_match_required | If-Match が必要なのに付いていません。 |
| 429 | 回数制限を超えました。Retry-After の秒数だけ待ってください。 |
リビジョン(楽観ロック)
下書きを書き換える操作は、先に GET で読んだ revision を If-Match: <revision> ヘッダーに付けて送ります。読んだあとに別の人や別のプログラムが書き換えていると、何も保存されずに 409 が返ります。もう一度読み直して、やり直してください。
| code | 状況 |
|---|---|
if_match_required | 428。If-Match がありません。 |
invalid_revision | 400。If-Match の値の形式が違います。 |
draft_revision_conflict | 409。エージェントの下書きが読んだあとに変わりました。 |
agent_revision_conflict | 409。エージェントの設定が変わりました。 |
staff_revision_conflict | 409。スタッフの情報が変わりました。 |
calendar_revision_conflict | 409。予約の受け付け設定が変わりました。 |
capture_spec_revision_conflict | 409。記録項目が変わりました。 |
fact_revision_conflict | 409。事実が変わりました。 |
document_revision_conflict | 409。資料が変わりました。 |
dryRun(保存せずに確認)
dryRun=true を付けられるエンドポイントでは、保存せずに、変わる内容(changes)・その影響(consequences)・注意(warnings)だけが返ります。dryRun を持つのは、各項の「クエリ」の表に dryRun があるものです。
回数制限
| 対象 | 上限 |
|---|---|
| 下書きや即時反映の書き換え(1 キーあたり) | 1 分に 30 回 |
公開(agents.publish) | 1 時間に 10 回 |
テスト実行の開始(test_runs.start) | 1 時間に 30 回 |
仕様書の取得(agents.spec.get) | 1 分に 20 回 |
資料の抽出(documents.upload) | 1 時間に 10 回、同時に 1 件 |
超えると 429 と Retry-After が返ります。
権限(スコープ)
| 権限 | できること |
|---|---|
agents:read | エージェント・フロー・資料・設定の読み取り |
agents:write | 下書きの書き換え、エージェントの作成、資料のアップロード |
agents:live | 公開せずに次の通話から反映される書き換え |
agents:publish | 公開 |
tests:run | テスト実行の開始と結果の読み取り |
calls:read | 通話履歴の読み取り |
calls:create | 通話の開始、発信の予約 |
calls:write | 通話へのマーク・お客様のひもづけ・折り返しリスト(発信はしません) |
contacts:read/contacts:write | お客様の読み取り/書き込み |
captures:read/captures:write | 通話の要約(記録)の読み取り/対応状況の変更 |
analytics:read | 分析の数値の読み取り |
通話の終了通知(Webhook)
通話の終了などを外部の URL へ送る機能(アウトバウンド Webhook)は、この API にはありません。通話の結果は GET /calls/{callId} で取得してください。
次の各項の curl の例では、TENANT_ID と YOUR_API_KEY を置き換えてください。
agents
agents.list
エージェントの一覧(ID・名前・公開済みかどうか)を見る。
GET /api/v1/{tenantId}/agents- 権限:
agents:read
レスポンス:agents(id・name・publishedAt の配列)
エラー:403(agents:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/agents' \
-H 'Authorization: Bearer YOUR_API_KEY'agents.get
エージェント 1 件の下書きと公開中の版(プロンプト・フロー・各種の設定)と、受付時間・時間外の対応を見る。
GET /api/v1/{tenantId}/agents/{agentId}- 権限:
agents:read
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
agentId | string | はい | エージェントの ID |
レスポンス:revision、agent(id・name・workflowId・publishedAt・archivedAt・updatedAt)、draft(prompt・model・voice・graph など)、published(公開前は null)、publishState、live(operatingHours・offHoursPolicy)
エラー:403(agents:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/agents/AGENT_ID' \
-H 'Authorization: Bearer YOUR_API_KEY'agents.patch
エージェントの下書き(プロンプト・フロー)を書き換える。公開するまで通話には反映されない。
PATCH /api/v1/{tenantId}/agents/{agentId}- 権限:
agents:write If-Match:必須
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
agentId | string | はい | エージェントの ID |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
prompt | string | — | 新しいシステムプロンプト |
graph | object | — | 新しいフロー |
レスポンス:agents.get と同じ形(保存後の revision を含む)
エラー:428 if_match_required、409 draft_revision_conflict(リビジョンの競合)、422:Webhook ノードを変える内容は受け付けません。、403(agents:write の権限がない)
curl -X PATCH 'https://app.kumion.jp/api/v1/TENANT_ID/agents/AGENT_ID' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'If-Match: REVISION' \
-H 'Content-Type: application/json' \
-d '{"prompt": "値"}'agents.spec.get
エージェントの応対仕様書(設定をまとめた文書)を、PDF・Word(docx)・Markdown のいずれかでダウンロードする。版は公開中(省略時)・下書き・版番号から選べる。店舗・予約・記録項目・資料・転送先・通知は版に含まれない設定のため、出力日時点の内容になる。本文はファイルとして返る(JSON ではない)。
GET /api/v1/{tenantId}/agents/{agentId}/spec- 権限:
agents:read
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
agentId | string | はい | エージェントの ID |
クエリ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
version | string | — | 出力する版。published(公開中・省略時)、draft(下書き)、または版番号(1, 2, …) |
format | string(pdf・docx・markdown) | — | 出力する形式。省略すると pdf |
レスポンス:JSON ではなくファイルです(Content-Disposition: attachment。ファイル名は 仕様書_{エージェント名}_{版}_{日付}.{拡張子})
エラー:403(agents:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/agents/AGENT_ID/spec' \
-H 'Authorization: Bearer YOUR_API_KEY'agents.opening_name.set
開始の挨拶で、番号から分かったお客様の名前を呼ぶかどうかを切り替える。公開するまで通話には反映されない。
PATCH /api/v1/{tenantId}/agents/{agentId}/opening-name- 権限:
agents:write If-Match:必須
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
agentId | string | はい | エージェントの ID |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
enabled | boolean | はい | true: 名前を呼ぶ / false: 呼ばない |
レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)
エラー:428 if_match_required、409 draft_revision_conflict(リビジョンの競合)、403(agents:write の権限がない)
curl -X PATCH 'https://app.kumion.jp/api/v1/TENANT_ID/agents/AGENT_ID/opening-name' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'If-Match: REVISION' \
-H 'Content-Type: application/json' \
-d '{"enabled": true}'agents.availability.set
エージェントの受付時間(いつ電話に出るか)と、時間外の電話への対応を書き換える。公開は不要で、保存した時点で公開中の電話に反映される。
PATCH /api/v1/{tenantId}/agents/{agentId}/availability- 権限:
agents:live If-Match:必須
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
agentId | string | はい | エージェントの ID |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
operatingHours | object | — | { mode: always | staffed | custom, hours?: 曜日ごとの時間 }。null で「いつでも出る」に戻す |
offHoursPolicy | object | — | { kind: answer | announce_end | route_to, text?, agent_id? }。null で「出て、時間外と伝える」に戻す |
レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)
エラー:428 if_match_required、409 agent_revision_conflict(リビジョンの競合)、403(agents:live の権限がない)
curl -X PATCH 'https://app.kumion.jp/api/v1/TENANT_ID/agents/AGENT_ID/availability' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'If-Match: REVISION' \
-H 'Content-Type: application/json' \
-d '{"operatingHours": {}}'agents.templates.list
オンボーディングのテンプレートを一覧する。テンプレートから作成するときの templateId をここで見る。
GET /api/v1/{tenantId}/agent-templates- 権限:
agents:read
レスポンス:JSON オブジェクト
エラー:403(agents:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/agent-templates' \
-H 'Authorization: Bearer YOUR_API_KEY'agents.create_from_template
テンプレートから、下書きのエージェントを作る。店名は必須で、URL か解析済みの資料を渡すと、読み取れた事実だけが入り、読み取れなかった事実は「まだない情報」として返る。URL を渡すと外部サイトを読み、モデルを複数回呼ぶ。同じ idempotencyKey で送り直すと、最初の作成結果を返す(二重に作らない)。
POST /api/v1/{tenantId}/agents/from-template- 権限:
agents:write
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
templateId | string | はい | テンプレートの ID(templates list で見る) |
businessName | string | はい | 店名・会社名。あいさつとエージェント名に使う |
name | string | — | エージェント名(省略すると店名) |
url | string | — | 読み取るサイトの URL。同じサイトの最大 10 ページを読む |
documentId | string | — | 解析済みの資料の ID(管理画面 の資料の画面でアップロードする)。url とは併用できない |
idempotencyKey | string | — | 同じ作成を二重に実行しないためのキー(1〜200文字)。送り直すときは同じ値を使う |
レスポンス:201。作った下書きエージェント
エラー:403(agents:write の権限がない)
curl -X POST 'https://app.kumion.jp/api/v1/TENANT_ID/agents/from-template' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"templateId": "TEMPLATE_ID", "businessName": "店名"}'agents.publish
下書きを公開前チェックに通したうえで公開する。チェックを省くことはできない。例外は acceptIntermittent: 一部の実行でだけ失敗した(code: intermittent)チェックに限り、承知のうえで公開できる。毎回失敗するチェックは拒否される。
POST /api/v1/{tenantId}/agents/{agentId}/publish- 権限:
agents:publish If-Match:任意
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
agentId | string | はい | エージェントの ID |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
acceptIntermittent | boolean | — | 一部の実行でだけ失敗した公開前チェック(code: intermittent)を承知のうえで公開する。毎回失敗した場合は効かない |
レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)
エラー:公開前チェックが通らないと公開されず、失敗したケースが返ります。再実行でも失敗したものは acceptIntermittent では飛ばせません。、403(agents:publish の権限がない)
curl -X POST 'https://app.kumion.jp/api/v1/TENANT_ID/agents/AGENT_ID/publish' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'If-Match: REVISION' \
-H 'Content-Type: application/json' \
-d '{"acceptIntermittent": true}'agents.booking.set
このエージェントが予約を受けるかどうかを切り替える。受付を始めるときは、担当が1人以上いることと、受付サマリーの「仮受付」の約束が取り下げられることが同じ書き込みで決まる。公開は不要で、次の通話から予約のツールが使われる(止めたときも次の通話から)。
PATCH /api/v1/{tenantId}/agents/{agentId}/booking- 権限:
agents:live If-Match:必須
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
agentId | string | はい | エージェントの ID |
クエリ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
dryRun | boolean | — | true / 1: 変更後の内容だけを返し、保存しない |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
mounted | boolean | はい | true で予約を受け付ける、false で止める |
レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)
エラー:428 if_match_required、409 draft_revision_conflict(リビジョンの競合)、403(agents:live の権限がない)
curl -X PATCH 'https://app.kumion.jp/api/v1/TENANT_ID/agents/AGENT_ID/booking' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'If-Match: REVISION' \
-H 'Content-Type: application/json' \
-d '{"mounted": true}'agents.capture.get
このエージェントが通話のあとに記録する項目(記録項目)と、書き換えるときに必要な revision、そしてこのエージェントが実際に記録できる状態かどうか(readiness)を見る。readiness はこのエージェントだけで判定する(店舗の他のエージェントが記録できていても、このエージェントに紐づいていなければ記録されない)。
GET /api/v1/{tenantId}/agents/{agentId}/capture- 権限:
agents:read
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
agentId | string | はい | エージェントの ID |
レスポンス:JSON オブジェクト
エラー:403(agents:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/agents/AGENT_ID/capture' \
-H 'Authorization: Bearer YOUR_API_KEY'agents.capture.set
このエージェントが記録する項目を、指定した組でまるごと置き換える。[] ですべて外す(記録項目自体は残る)。同じ ID を複数指定しても1つとして扱い、この店舗にない ID が1つでも混ざっていれば、1つも変えずに拒否する。公開は不要で、次の通話の終了時から反映される。revision は agents capture get が返した値。
PATCH /api/v1/{tenantId}/agents/{agentId}/capture- 権限:
agents:live If-Match:必須
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
agentId | string | はい | エージェントの ID |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
captureSpecIds | object | はい | このエージェントに紐づける記録項目の ID の配列(capture-specs list で見る)。[] ですべて外す |
レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)
エラー:428 if_match_required、409 agent_revision_conflict(リビジョンの競合)、400 unknown_capture_spec、409 agent_revision_conflict。、403(agents:live の権限がない)
curl -X PATCH 'https://app.kumion.jp/api/v1/TENANT_ID/agents/AGENT_ID/capture' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'If-Match: REVISION' \
-H 'Content-Type: application/json' \
-d '{"captureSpecIds": []}'flow
flow.get
エージェントの下書きのフローを、キャンバスのアシスタントと同じ形(用件・言い方・聞く項目)で読む。どこを直すフローか(用件か、ステップか)、転送できるスタッフ、公開前の指摘も返る。
GET /api/v1/{tenantId}/agents/{agentId}/flow- 権限:
agents:read
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
agentId | string | はい | エージェントの ID |
レスポンス:JSON オブジェクト
エラー:403(agents:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/agents/AGENT_ID/flow' \
-H 'Authorization: Bearer YOUR_API_KEY'flow.update
用件フロー(用件ごとの言い方・条件・聞く項目と、担当者への転送)を、キャンバスのアシスタントと同じ形で直す。渡した項目だけが変わり、公開するまで通話には反映されない。
PATCH /api/v1/{tenantId}/agents/{agentId}/flow- 権限:
agents:write If-Match:必須
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
agentId | string | はい | エージェントの ID |
クエリ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
dryRun | boolean | — | true / 1: 変更後の内容だけを返し、保存しない |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
personaPrompt | string | — | 通話AIの役割と口調 |
openingSpeech | string | — | 最初の一言 |
noRouteSpeech | string | — | どの用件にも当てはまらないときの終話 |
leaves | object | — | 用件ごとの変更(key / action / label / condition / transferContactKey / removeTransfer …)の配列 |
examples | string-map | — | 用件キー → お客様が最初に言う一文 |
レスポンス:保存後の内容と新しい revision。dryRun=true のときは保存せず、revision・changes・consequences・warnings を返します
エラー:428 if_match_required、409 draft_revision_conflict(リビジョンの競合)、422 not_workflow_bound(フロー形式のエージェントではない)、422 flow_edit_refused(opIndex・reason)、422 flow_edit_blocked(reasons)。、403(agents:write の権限がない)
curl -X PATCH 'https://app.kumion.jp/api/v1/TENANT_ID/agents/AGENT_ID/flow' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'If-Match: REVISION' \
-H 'Content-Type: application/json' \
-d '{"personaPrompt": "値"}'flow.edit_steps
ステップごとの形のフローを、ステップの追加・削除・つなぎ方・各ステップの設定・振り分けの一言まで、まとめて直す。書いた順に実行し、1 件でも断られたら何も保存しない。用件ごとの形のフローは flow.update で直す。公開するまで通話には反映されない。
POST /api/v1/{tenantId}/agents/{agentId}/flow/steps- 権限:
agents:write If-Match:必須
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
agentId | string | はい | エージェントの ID |
クエリ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
dryRun | boolean | — | true / 1: 変更後の内容だけを返し、保存しない |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
ops | object | はい | 操作の配列(最大 20 件、書いた順に実行)。各要素は op に操作名、ほかにその操作の引数を書く |
ops の要素
| op | 項目 |
|---|---|
set_node_field | nodeKey、field、value* |
set_edge_words | fromKey、toKey、condition、transitionSpeech、visibleWhen |
add_step | type、name、between、next_condition、prompt、items、staff、before_speech、key |
remove_step | node* |
connect_steps | from、to、condition*、speech、visible_when |
reconnect | from、to、new_to*、via_tool |
disconnect | from、to、via_tool |
レスポンス:flow.update と同じ。dryRun=true では revision・changes・consequences・warnings・added
エラー:428 if_match_required、409 draft_revision_conflict(リビジョンの競合)、422 not_workflow_bound、422 flow_edit_refused(opIndex・reason。1 件でも断られると何も保存されません)、422 flow_edit_blocked(reasons)。、403(agents:write の権限がない)
curl -X POST 'https://app.kumion.jp/api/v1/TENANT_ID/agents/AGENT_ID/flow/steps' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'If-Match: REVISION' \
-H 'Content-Type: application/json' \
-d '{"ops": []}'facts
facts.list
エージェントの資料から取り出した事実(料金・メニューなど)を、確定の状態と一緒に一覧する。
GET /api/v1/{tenantId}/agents/{agentId}/facts- 権限:
agents:read
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
agentId | string | はい | エージェントの ID |
レスポンス:facts(配列。各事実の revision を facts.edit の If-Match に使います)
エラー:403(agents:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/agents/AGENT_ID/facts' \
-H 'Authorization: Bearer YOUR_API_KEY'facts.edit
資料の事実を 1 件、新しい値で確定する。公開は不要で、保存した時点で通話に反映される。
PATCH /api/v1/{tenantId}/agents/{agentId}/facts/{factId}- 権限:
agents:live If-Match:必須
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
agentId | string | はい | エージェントの ID |
factId | string | はい | 資料の項目の ID(facts.list で見る) |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
value | string | はい | 確定する値 |
レスポンス:fact(ETag ヘッダーに新しい revision)
エラー:428 if_match_required、409 fact_revision_conflict(リビジョンの競合)、409 fact_revision_conflict。、403(agents:live の権限がない)
curl -X PATCH 'https://app.kumion.jp/api/v1/TENANT_ID/agents/AGENT_ID/facts/FACT_ID' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'If-Match: REVISION' \
-H 'Content-Type: application/json' \
-d '{"value": "新しい値"}'facts.confirm
未確認の事実を、候補の値のまま確定する。factIds を省くとすべて(候補が割れている項目は確定せず、一覧で返す)。
POST /api/v1/{tenantId}/agents/{agentId}/facts/confirm- 権限:
agents:live
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
agentId | string | はい | エージェントの ID |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
factIds | object | — | 確定する項目の ID の配列(省略: 全部。旧名の fieldIds も受け付ける) |
レスポンス:JSON オブジェクト
エラー:403(agents:live の権限がない)
curl -X POST 'https://app.kumion.jp/api/v1/TENANT_ID/agents/AGENT_ID/facts/confirm' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"factIds": {}}'test_runs
test_runs.start
下書きに対してリグレッションテストを実行する(公開はしない)。turns を付けると、グラフの例文ではなく与えた来電者の台詞を順に流す再生(replay)になる。
POST /api/v1/{tenantId}/agents/{agentId}/test-runs- 権限:
tests:run
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
agentId | string | はい | エージェントの ID |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
turns | object | — | 来電者の台詞を順に並べた配列 [{ caller }]。30 句・1 句 500 文字・合計 6,000 文字まで(超えると 400 replay_too_long)。台詞は実際の通話の内容を含みうる。結果はテスト実行に残り、保持期間は通常のテスト実行と同じ |
レスポンス:202 と Location ヘッダー。testRun(id・agentId・status・kind・startedAt・finishedAt・draftRevision・casesTotal・casesDone)
エラー:409 test_run_in_progress(実行中のテストがある)、400 replay_too_long(台詞が 30 句・1 句 500 文字・合計 6,000 文字を超えた)。、403(tests:run の権限がない)
curl -X POST 'https://app.kumion.jp/api/v1/TENANT_ID/agents/AGENT_ID/test-runs' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"turns": {}}'test_runs.get
テスト実行 1 件の状態と失敗したケースを見る。
GET /api/v1/{tenantId}/agents/{agentId}/test-runs/{runId}- 権限:
tests:run
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
agentId | string | はい | エージェントの ID |
runId | string | はい | テスト実行の ID |
レスポンス:testRun(上の項目に structural・results・verdict が加わります)
エラー:403(tests:run の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/agents/AGENT_ID/test-runs/RUN_ID' \
-H 'Authorization: Bearer YOUR_API_KEY'test_runs.list
最近のテスト実行を新しい順に見る。
GET /api/v1/{tenantId}/agents/{agentId}/test-runs- 権限:
tests:run
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
agentId | string | はい | エージェントの ID |
クエリ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
limit | number | — | 件数(最大 50) |
レスポンス:testRuns(結果を除いた testRun の配列)
エラー:403(tests:run の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/agents/AGENT_ID/test-runs' \
-H 'Authorization: Bearer YOUR_API_KEY'calls
calls.create
エージェントとの Web テスト通話を始める。電話番号を指定すると、その番号へ発信する。
POST /api/v1/{tenantId}/calls- 権限:
calls:create
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
agentId | string | はい | エージェントの ID |
campaignContactId | string | — | この連絡先として通話する |
phoneNumber | string | — | 発信先の国内電話番号(0 から始まる番号。例 0312345678。+81 など国際形式は 400) |
variables | string-map | — | {{vars.<名前>}} に入る値。エージェントが必須にした変数が空のときは 400(code: missing_variables、missing に変数名) |
レスポンス:電話番号あり:202、callLogId・agentId・agentName・direction(outbound)・status(dialing)。電話番号なし(Webコール):callLogId・agentId・agentName・roomName・livekitUrl・token
エラー:400(国際形式・0 で始まらない番号・発信できない番号種別。「国際電話には発信できません。国内の電話番号(0から始まる番号)を指定してください。」)、429 Retry-After 付き(発信の回数制限)、403(calls:create の権限がない)
curl -X POST 'https://app.kumion.jp/api/v1/TENANT_ID/calls' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"agentId": "AGENT_ID", "phoneNumber": "0312345678"}'calls.list
通話履歴を新しい順に見る(1 ページ 20 件、最大 100 件)。各通話に、通話の結果・終了したノード・通話時間・転送の有無・記録された項目名が付く。
GET /api/v1/{tenantId}/calls- 権限:
calls:read
クエリ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
agentId | string | — | このエージェントの通話だけ |
channel | string | — | webcall / sip_did / trigger |
from | string | — | この時刻以降(ISO 8601) |
to | string | — | この時刻より前(ISO 8601) |
q | string | — | 発信者番号、または通話 ID の先頭 |
content | string | — | 会話の内容(文字起こし)に含まれる語。from と to の両方が必要で、期間は上限あり。時間切れは 408 |
limit | number | — | 件数 |
offset | number | — | 読み飛ばす件数 |
レスポンス:calls(通話の配列)・total・limit・offset
エラー:403(calls:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/calls' \
-H 'Authorization: Bearer YOUR_API_KEY'calls.get
通話 1 件の発信元・着信/発信(portalDirection:管理画面 の通話履歴と同じ分類。direction は元の値)・時刻・終了理由・文字起こしの有無に加え、通話の結果・終了したノード・通話時間・転送の有無・記録された項目名を見る。引き継ぎのきっかけ(escalationTriggers:caller_request / failure / no_response を起きた順に)も付く。
GET /api/v1/{tenantId}/calls/{callId}- 権限:
calls:read
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
callId | string | はい | 通話の ID |
レスポンス:call(id・agentId・agentName・source・direction・portalDirection・disposition・endedReason・remoteE164・localE164・startedAt・answeredAt・endedAt・isVoicemail・ticketNo・hasTranscript・escalationTriggers など)
エラー:403(calls:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/calls/CALL_ID' \
-H 'Authorization: Bearer YOUR_API_KEY'calls.transcript
通話 1 件で、発信者とエージェントが話した内容を見る。担当者に転送した通話は、転送後に担当者が話した内容が handoffSegment に別に付く(turns は AI の部分のまま)。契約により外部送信できないテナントは文字起こしを行わず、status: not_sent だけが返る。
GET /api/v1/{tenantId}/calls/{callId}/transcript- 権限:
calls:read
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
callId | string | はい | 通話の ID |
レスポンス:transcript
エラー:403(calls:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/calls/CALL_ID/transcript' \
-H 'Authorization: Bearer YOUR_API_KEY'calls.link_contact
通話の発信者番号でお客様を登録(または既存のお客様に紐づけ)、同じ番号の未紐づけの通話もまとめて紐づける。すでに紐づいた通話は 409。
POST /api/v1/{tenantId}/calls/{callId}/contact- 権限:
calls:write
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
callId | string | はい | 通話の ID |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
displayName | string | はい | 氏名(新規登録のときの表示名) |
レスポンス:JSON オブジェクト
エラー:403(calls:write の権限がない)
curl -X POST 'https://app.kumion.jp/api/v1/TENANT_ID/calls/CALL_ID/contact' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"displayName": "山田 太郎"}'scheduled_calls
scheduled_calls.create
指定した日時に、エージェントが電話番号へ自動で発信するよう予約する。日時にはタイムゾーンのオフセットが必要。発信は一度だけで、自動の再発信はしない。
POST /api/v1/{tenantId}/scheduled-calls- 権限:
calls:create
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
agentId | string | はい | エージェントの ID |
phoneNumber | string | はい | 発信先の国内電話番号(0 から始まる番号。例 0312345678。+81 など国際形式は 400) |
scheduledAt | string | はい | 発信日時(例: 2026-10-31T13:00:00+09:00。オフセット必須) |
variables | string-map | — | {{vars.<名前>}} に入る値。発信時に通話へ渡される(POST /calls の variables と同じ規則。必須の変数が空なら 400) |
レスポンス:201。id・scheduledAt・phoneNumber・state
エラー:409:その番号にはすでに予約または発信中のものがあります。400:scheduledAt が過去、または時差なし。、403(calls:create の権限がない)
curl -X POST 'https://app.kumion.jp/api/v1/TENANT_ID/scheduled-calls' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"agentId": "AGENT_ID", "phoneNumber": "0312345678", "scheduledAt": "2026-12-01T13:00:00+09:00"}'scheduled_calls.list
API で予約した発信を、予約日時の新しい順に最大 100 件見る。各行に状態(scheduled / dialing / done など)と理由が付く。
GET /api/v1/{tenantId}/scheduled-calls- 権限:
calls:read
レスポンス:scheduledCalls(id・phoneNumber・scheduledAt・state・reason の配列)
エラー:403(calls:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/scheduled-calls' \
-H 'Authorization: Bearer YOUR_API_KEY'scheduled_calls.cancel
まだ発信していない予約を取り消す。発信中・発信済みの予約は取り消せない。
DELETE /api/v1/{tenantId}/scheduled-calls/{scheduledCallId}- 権限:
calls:create
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
scheduledCallId | string | はい | 予約した発信の ID(scheduled_calls.list で見る) |
レスポンス:id・state
エラー:404:予約が見つからないか、すでに発信されています。、403(calls:create の権限がない)
curl -X DELETE 'https://app.kumion.jp/api/v1/TENANT_ID/scheduled-calls/SCHEDULED_CALL_ID' \
-H 'Authorization: Bearer YOUR_API_KEY'staff
staff.list
転送先にできるスタッフの一覧(ID・転送先のキー・名前・所属・転送先・有効かどうか)を見る。
GET /api/v1/{tenantId}/staff- 権限:
agents:read
レスポンス:staff(配列)
エラー:403(agents:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/staff' \
-H 'Authorization: Bearer YOUR_API_KEY'staff.create
スタッフを登録する。転送先のキーは登録時に自動で付き、応答で返る。キーは指定できない。
POST /api/v1/{tenantId}/staff- 権限:
agents:write
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
displayName | string | はい | スタッフの名前 |
transferTarget | string | — | 転送先の電話番号(転送できるようにするなら必須。空文字でクリア) |
department | string | — | 所属(空文字でクリア) |
kana | string | — | よみがな(空文字でクリア) |
email | string | — | メールアドレス(空文字でクリア) |
note | string | — | メモ。通話には出ない(空文字でクリア) |
enabled | boolean | — | false で転送先の候補から外す(省略すると有効) |
レスポンス:201。staff(ETag ヘッダーに revision)
エラー:403(agents:write の権限がない)
curl -X POST 'https://app.kumion.jp/api/v1/TENANT_ID/staff' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"displayName": "山田 太郎"}'staff.update
スタッフの名前・転送先・有効/無効を書き換える。公開は不要で、保存した時点から次の通話に反映される。キーは変更できない。
PATCH /api/v1/{tenantId}/staff/{staffId}- 権限:
agents:live If-Match:必須
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
staffId | string | はい | スタッフの ID(staff list で見る) |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
displayName | string | — | スタッフの名前 |
transferTarget | string | — | 転送先の電話番号(空文字でクリア) |
department | string | — | 所属(空文字でクリア) |
kana | string | — | よみがな(空文字でクリア) |
email | string | — | メールアドレス(空文字でクリア) |
note | string | — | メモ。通話には出ない(空文字でクリア) |
enabled | boolean | — | false で転送先の候補から外す。転送中の通話には影響しない |
レスポンス:staff(ETag ヘッダーに新しい revision)
エラー:428 if_match_required、409 staff_revision_conflict(リビジョンの競合)、400 invalid_revision、409 staff_revision_conflict。、403(agents:live の権限がない)
curl -X PATCH 'https://app.kumion.jp/api/v1/TENANT_ID/staff/STAFF_ID' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'If-Match: REVISION' \
-H 'Content-Type: application/json' \
-d '{"displayName": "山田 太郎"}'store_hours
store_hours.get
店舗の営業時間・定休日・祝日休みと、期間内の例外日(臨時休業・振替出勤)を、書き換えるときに必要な revision と一緒に見る。まだ予約設定を開いていない店舗では、初期値を返す(設定は作らない)。
GET /api/v1/{tenantId}/store-hours- 権限:
agents:read
クエリ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
from | string | — | 例外日を読む期間の開始日(YYYY-MM-DD。省略すると今日) |
to | string | — | 例外日を読む期間の終了日(YYYY-MM-DD。省略すると from の400日後) |
レスポンス:JSON オブジェクト
エラー:403(agents:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/store-hours' \
-H 'Authorization: Bearer YOUR_API_KEY'store_hours.update
店舗の営業時間・定休日・祝日休みを書き換える。公開は不要で、保存した時点から次の通話に反映される。営業時間は1週間ぶん、定休日は配列まるごとの置き換え(省略した項目は変えない)。
PATCH /api/v1/{tenantId}/store-hours- 権限:
agents:live If-Match:必須
クエリ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
dryRun | boolean | — | true / 1: 変更後の内容だけを返し、保存しない |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
businessHours | object | — | 1週間ぶんの営業時間({ mon: [{ start, end }], … })。丸ごと置き換え |
closedRules | object | — | 定休日の配列。丸ごと置き換え |
observeJpHolidays | boolean | — | 祝日を休業にするか |
レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)
エラー:428 if_match_required、409 draft_revision_conflict(リビジョンの競合)、403(agents:live の権限がない)
curl -X PATCH 'https://app.kumion.jp/api/v1/TENANT_ID/store-hours' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'If-Match: REVISION' \
-H 'Content-Type: application/json' \
-d '{"businessHours": {}}'store_hours.exceptions.set
1日の例外を設定する。closed は臨時休業、open は振替出勤(時間を省略するとその曜日の営業時間のまま)、inherit は例外を消して曜日どおりに戻す。公開は不要で、次の通話に反映される。
PATCH /api/v1/{tenantId}/store-hours/exceptions/{date}- 権限:
agents:live If-Match:必須
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
date | string | はい | 例外日の日付(YYYY-MM-DD) |
クエリ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
dryRun | boolean | — | true / 1: 変更後の内容だけを返し、保存しない |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
kind | string(closed・open・inherit) | はい | closed: 臨時休業 / open: 振替出勤 / inherit: 例外を消して曜日どおりに戻す |
hours | object | — | open のときの営業時間([{ start, end }])。省略すると曜日どおり |
note | string | — | メモ。通話には出ない |
レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)
エラー:428 if_match_required、409 draft_revision_conflict(リビジョンの競合)、403(agents:live の権限がない)
curl -X PATCH 'https://app.kumion.jp/api/v1/TENANT_ID/store-hours/exceptions/DATE_ID' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'If-Match: REVISION' \
-H 'Content-Type: application/json' \
-d '{"kind": "closed"}'booking
booking.get
エージェントの予約設定(1枠の長さ・直前予約の締め切り・何日先まで)と、予約できる内容(メニュー)・担当、このエージェントが予約を受け付けているかどうかを、書き換えるときに必要な revision と一緒に見る。まだ予約設定を使っていない店舗では初期値を返す(設定は作らない)。
GET /api/v1/{tenantId}/agents/{agentId}/booking- 権限:
agents:read
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
agentId | string | はい | エージェントの ID |
レスポンス:JSON オブジェクト
エラー:403(agents:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/agents/AGENT_ID/booking' \
-H 'Authorization: Bearer YOUR_API_KEY'booking.calendar.update
予約の枠の長さ・直前予約の締め切り・何日先まで受け付けるかを書き換える。公開は不要で、次の通話の空き枠から反映される(省略した項目は変えない)。
PATCH /api/v1/{tenantId}/booking/calendar- 権限:
agents:live If-Match:必須
クエリ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
dryRun | boolean | — | true / 1: 変更後の内容だけを返し、保存しない |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
defaultSlotMinutes | number | — | 1枠の長さ(分)。1〜1440。所要時間のない内容はこの長さになる |
minLeadMinutes | number | — | 直前予約の締め切り(分)。0〜43200。0 は「いま予約できる」 |
maxAdvanceDays | number | — | 何日先まで受け付けるか(日)。1〜730 |
レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)
エラー:428 if_match_required、409 draft_revision_conflict(リビジョンの競合)、403(agents:live の権限がない)
curl -X PATCH 'https://app.kumion.jp/api/v1/TENANT_ID/booking/calendar' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'If-Match: REVISION' \
-H 'Content-Type: application/json' \
-d '{"defaultSlotMinutes": 1}'booking.services.create
予約できる内容(メニュー)を 1 件追加する。所要時間を省略すると枠の長さを使う。公開は不要で、次の通話から予約できる内容として使われる。
POST /api/v1/{tenantId}/booking/services- 権限:
agents:live If-Match:必須
クエリ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
dryRun | boolean | — | true / 1: 追加後の内容だけを返し、保存しない |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
name | string | はい | 内容名(100文字以内) |
durationMinutes | number | — | 所要時間(分)。1〜1440。null で枠の長さを使う(省略と同じ) |
レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)
エラー:428 if_match_required、409 draft_revision_conflict(リビジョンの競合)、403(agents:live の権限がない)
curl -X POST 'https://app.kumion.jp/api/v1/TENANT_ID/booking/services' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'If-Match: REVISION' \
-H 'Content-Type: application/json' \
-d '{"name": "名前"}'booking.services.update
予約できる内容(メニュー)の名前と所要時間を書き換える。所要時間に null を渡すと枠の長さを使う設定に戻る。公開は不要で、次の通話から反映される。
PATCH /api/v1/{tenantId}/booking/services/{serviceId}- 権限:
agents:live If-Match:必須
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
serviceId | string | はい | 内容の ID(booking get で見る) |
クエリ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
dryRun | boolean | — | true / 1: 変更後の内容だけを返し、保存しない |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
name | string | — | 内容名(100文字以内) |
durationMinutes | number | — | 所要時間(分)。1〜1440。null で枠の長さを使う設定に戻す |
レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)
エラー:428 if_match_required、409 draft_revision_conflict(リビジョンの競合)、403(agents:live の権限がない)
curl -X PATCH 'https://app.kumion.jp/api/v1/TENANT_ID/booking/services/SERVICE_ID' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'If-Match: REVISION' \
-H 'Content-Type: application/json' \
-d '{"name": "名前"}'booking.resources.create
予約を受ける担当(スタッフ・科など)を1件追加する。予約枠(weeklyHours)と、その担当が受ける内容(serviceIds)を同じ書き込みで決める。serviceIds を省略すると未設定、[] は「すべての内容」、並べたときはその内容だけ。この店舗の内容でない ID が1つでも混ざると、担当ごと作らずに拒否する。公開は不要で、次の通話から使われる。
POST /api/v1/{tenantId}/booking/resources- 権限:
agents:live If-Match:必須
クエリ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
dryRun | boolean | — | true / 1: 追加後の内容だけを返し、保存しない |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
name | string | はい | 担当名(100文字以内) |
enabled | boolean | — | 予約を受け付けるか。省略すると true |
weeklyHours | object | — | この担当の予約枠({ mon: [{ start, end }], … })。省略すると空で、枠を入れるまで予約は入らない |
serviceIds | object | — | この担当が受ける内容(booking get の services の ID)。省略すると未設定、[] はすべての内容、並べたときはその内容だけ |
レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)
エラー:428 if_match_required、409 draft_revision_conflict(リビジョンの競合)、403(agents:live の権限がない)
curl -X POST 'https://app.kumion.jp/api/v1/TENANT_ID/booking/resources' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'If-Match: REVISION' \
-H 'Content-Type: application/json' \
-d '{"name": "名前"}'booking.resources.update
担当の名前・予約枠・受付の有無・受ける内容を書き換える(省略した項目は変えない)。serviceIds に [] を渡すと「すべての内容」に戻り、並べたときはその内容だけになる。担当を休ませるときは enabled=false(予約の記録は消さない)。公開は不要で、次の通話から反映される。
PATCH /api/v1/{tenantId}/booking/resources/{resourceId}- 権限:
agents:live If-Match:必須
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
resourceId | string | はい | 担当の ID(booking get で見る) |
クエリ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
dryRun | boolean | — | true / 1: 変更後の内容だけを返し、保存しない |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
name | string | — | 担当名(100文字以内) |
enabled | boolean | — | 予約を受け付けるか。受付を止めるときは false |
weeklyHours | object | — | この担当の予約枠。丸ごと置き換え |
serviceIds | object | — | この担当が受ける内容。[] ですべての内容、並べたときはその内容だけ。この店舗の内容でない ID が混ざると全部拒否する |
レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)
エラー:428 if_match_required、409 draft_revision_conflict(リビジョンの競合)、403(agents:live の権限がない)
curl -X PATCH 'https://app.kumion.jp/api/v1/TENANT_ID/booking/resources/RESOURCE_ID' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'If-Match: REVISION' \
-H 'Content-Type: application/json' \
-d '{"name": "名前"}'booking.slots.list
指定した担当の、指定した1日の空き枠を見る(省略時は6件、最大20件)。通話の空き枠照会と同じ計算(予約枠・営業時間・定休日・例外日・内容の所要時間・すでに入っている予約)を使う。予約は取らず、他の人の予約の中身も返さない。
GET /api/v1/{tenantId}/agents/{agentId}/booking/slots- 権限:
agents:read
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
agentId | string | はい | エージェントの ID |
クエリ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
resourceId | string | はい | 担当の ID(booking get で見る) |
date | string | はい | 見たい日(YYYY-MM-DD) |
serviceId | string | — | 内容の ID。所要時間にこの内容を使い、担当が受けない内容なら空になる |
limit | number | — | 返す枠数(1〜20、省略すると6) |
レスポンス:JSON オブジェクト
エラー:403(agents:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/agents/AGENT_ID/booking/slots?resourceId=RESOURCE_ID&date=2026-12-01' \
-H 'Authorization: Bearer YOUR_API_KEY'capture_specs
capture_specs.list
通話のあとに記録する項目(記録項目)の一覧を、書き換えるときに必要な revision と、その項目を使っているエージェントと一緒に見る。
GET /api/v1/{tenantId}/capture-specs- 権限:
agents:read
レスポンス:captureSpecs(配列)
エラー:403(agents:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/capture-specs' \
-H 'Authorization: Bearer YOUR_API_KEY'capture_specs.create
記録項目を1つ作る。どのエージェントにもまだ紐づかないので、通話には影響しない(紐づけは agents capture set)。記録の指示(instruction)を省略すると、名前・場面・項目から自動で作る(モデルは呼ばない)。項目は10件、一覧に出す項目は3件まで。有効なサマリー設定はアカウント全体で20件まで。key は省略すると自動で付き、あとから変更できない。
POST /api/v1/{tenantId}/capture-specs- 権限:
agents:write
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
key | string | — | 設定のキー(英小文字・数字・_、2〜30文字)。省略するとサーバーが決める。作成後は変更できない |
label | string | はい | 記録項目の名前(例: 予約内容) |
scenario | string | — | どんな通話のあとに残すか(1文) |
instruction | string | — | 記録するときの指示。省略すると自動で作る |
confirmationMessage | string | — | 記録したあとにお客様へ伝える一言。省略すると「記録しました」 |
fields | object | はい | 記録する項目の配列(最大10件、うち summary は3件まで)。要素は label・type(text/datetime/select/boolean)ほか |
enabled | boolean | — | 記録に使うか。省略すると有効 |
レスポンス:JSON オブジェクト
エラー:403(agents:write の権限がない)
curl -X POST 'https://app.kumion.jp/api/v1/TENANT_ID/capture-specs' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"label": "項目名", "fields": []}'capture_specs.update
記録項目を書き換える(省略した項目は変えない)。公開は不要で、この項目を使っているすべてのエージェントの次の通話から反映される。key は変更できない。手で書いた記録の指示(instruction)は、項目を変えても書き換えない。
PATCH /api/v1/{tenantId}/capture-specs/{specId}- 権限:
agents:live If-Match:必須
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
specId | string | はい | 記録項目の ID(capture-specs list で見る) |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
label | string | — | 記録項目の名前 |
scenario | string | — | どんな通話のあとに残すか。null で「場面なし」に戻す |
instruction | string | — | 記録するときの指示。省略した場合は、自動生成された指示だけが項目に合わせて作り直される |
confirmationMessage | string | — | 記録したあとの一言。null で「記録しました」に戻す |
fields | object | — | 記録する項目の配列(まるごと置き換え。最大10件、うち summary は3件まで) |
enabled | boolean | — | 記録に使うか。false で記録を止める(過去の記録は残る) |
レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)
エラー:428 if_match_required、409 capture_spec_revision_conflict(リビジョンの競合)、400 invalid_revision、409 capture_spec_revision_conflict。、403(agents:live の権限がない)
curl -X PATCH 'https://app.kumion.jp/api/v1/TENANT_ID/capture-specs/SPEC_ID' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'If-Match: REVISION' \
-H 'Content-Type: application/json' \
-d '{"label": "項目名"}'documents
documents.upload
資料のテキスト、またはファイル(.txt / .md / .pdf / .docx / .xlsx、10ファイル・20MiBまで)をアップロードし、抽出をジョブとして受け付ける(202 で返る)。進み具合は documents jobs get で見る。抽出はモデルを使うため、1キーあたり1時間10回まで(店舗の上限も超えない)、同時に実行できるのは1キー1件・1店舗2件まで。書き込む前に dryRun で回数と文字数の見積もりを見られる。
POST /api/v1/{tenantId}/documents- 権限:
agents:write
クエリ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
dryRun | boolean | — | true / 1: 検証と使用量の見積もりだけを返し、ジョブも作らずモデルも呼ばない |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
title | string | はい | 資料の名前(200文字まで) |
idempotencyKey | string | はい | 同じ送信を区別するキー(1〜200文字)。同じキーと同じ内容は同じジョブを返す |
templateId | string | — | 抽出を合わせたいオンボーディングテンプレートの ID(agents templates list で見る) |
rawText | string | — | 資料の本文(32,000文字まで)。ファイルと同時には指定できず、どちらか一方が必要 |
ファイルは multipart の files で送ります(rawText とは同時に指定できません)。
レスポンス:JSON オブジェクト
エラー:400 unsupported_content_type、413 document_too_large、403(外部送信が許可されていない契約)。、403(agents:write の権限がない)
curl -X POST 'https://app.kumion.jp/api/v1/TENANT_ID/documents' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-F 'title=資料名' -F 'idempotencyKey=unique-key-001' -F 'files=@./manual.pdf'documents.jobs.get
アップロードした抽出ジョブの状態(queued / running / succeeded / failed / timed_out)と、できあがった資料の ID、エラーを見る。締切を過ぎたジョブは timed_out として返る。この読み取りは何も書き換えない。
GET /api/v1/{tenantId}/documents/jobs/{jobId}- 権限:
agents:read
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
jobId | string | はい | ジョブの ID(documents upload が返す) |
レスポンス:job
エラー:403(agents:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/documents/jobs/JOB_ID' \
-H 'Authorization: Bearer YOUR_API_KEY'documents.get
資料1件の概要・どのエージェントやフローのノードが使っているか(references)・抽出された項目(候補・出典・確認状態)・revision を見る。本文そのものは返さない。revision は資料・項目・確認状態が変わると変わる。
GET /api/v1/{tenantId}/documents/{documentId}- 権限:
agents:read
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
documentId | string | はい | 資料の ID(documents jobs get が返す) |
レスポンス:JSON オブジェクト
エラー:403(agents:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/documents/DOCUMENT_ID' \
-H 'Authorization: Bearer YOUR_API_KEY'documents.replace
資料の中身と項目を、別の資料(同じ店舗の、抽出済みで、どのエージェントにも使われていないもの)で置き換える。ID は変わらないので、その資料を使っているエージェントは次の通話から新しい内容になる。新しい項目はすべて未確認から始まり、前の確認は引き継がない。新しい資料にない情報は、空の項目として残る。確認や編集が入っていれば revision が変わるので、そのときは 409 で何も書き換えない。モデルは呼ばない。
POST /api/v1/{tenantId}/documents/{documentId}/replace- 権限:
agents:live If-Match:必須
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
documentId | string | はい | 置き換える資料の ID |
クエリ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
dryRun | boolean | — | true / 1: 変更内容と影響だけを返し、何も書き換えない |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
sourceDocumentId | string | はい | 新しい内容の元になる資料の ID(同じ店舗の、抽出済みで、どこにも使われていないもの) |
sourceRevision | string | はい | 元になる資料の revision(documents get が返す値) |
レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)
エラー:428 if_match_required、409 document_revision_conflict(リビジョンの競合)、404/400 source_not_found、400 same_document、422 unsupported_document_mode、422 source_not_extracted、409 source_referenced、409 source_revision_conflict、409 document_revision_conflict。、403(agents:live の権限がない)
curl -X POST 'https://app.kumion.jp/api/v1/TENANT_ID/documents/DOCUMENT_ID/replace' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'If-Match: REVISION' \
-H 'Content-Type: application/json' \
-d '{"sourceDocumentId": "DOCUMENT_ID", "sourceRevision": "REVISION"}'documents.history
資料の変更履歴(版の一覧)を見る。
GET /api/v1/{tenantId}/documents/{documentId}/history- 権限:
agents:read
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
documentId | string | はい | 資料の ID |
レスポンス:JSON オブジェクト
エラー:403(agents:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/documents/DOCUMENT_ID/history' \
-H 'Authorization: Bearer YOUR_API_KEY'documents.version_diff
資料の 2 つの版を、通話のモデルが読める行として並べて見る。
GET /api/v1/{tenantId}/documents/{documentId}/version-diff- 権限:
agents:read
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
documentId | string | はい | 資料の ID |
クエリ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
from | number | はい | 比べる元の版 |
to | number | はい | 比べる先の版 |
レスポンス:JSON オブジェクト
エラー:403(agents:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/documents/DOCUMENT_ID/version-diff?from=1&to=2' \
-H 'Authorization: Bearer YOUR_API_KEY'documents.rollback
資料を過去の版の内容に戻す。履歴は書き換えず、戻した内容が新しい版になる。公開は不要で、保存した時点から次の通話に反映される。
POST /api/v1/{tenantId}/documents/{documentId}/rollback- 権限:
agents:live
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
documentId | string | はい | 資料の ID |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
version | number | はい | 戻したい版の番号(documents history で見る) |
レスポンス:JSON オブジェクト
エラー:403(agents:live の権限がない)
curl -X POST 'https://app.kumion.jp/api/v1/TENANT_ID/documents/DOCUMENT_ID/rollback' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"version": 2}'contacts
contacts.list
お客様(連絡先)を見る。名前・読み・電話番号などで絞り込める(1 ページ 20 件、最大 100 件)。スタッフは staff list。
GET /api/v1/{tenantId}/contacts- 権限:
contacts:read
クエリ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
q | string | — | 名前・電話番号などの検索語 |
limit | number | — | 件数 |
offset | number | — | 読み飛ばす件数 |
レスポンス:JSON オブジェクト
エラー:403(contacts:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/contacts' \
-H 'Authorization: Bearer YOUR_API_KEY'contacts.get
お客様 1 人の情報と電話番号を見る。
GET /api/v1/{tenantId}/contacts/{contactId}- 権限:
contacts:read
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
contactId | string | はい | お客様の ID(contacts list で見る) |
レスポンス:JSON オブジェクト
エラー:403(contacts:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/contacts/CONTACT_ID' \
-H 'Authorization: Bearer YOUR_API_KEY'contacts.create
お客様を登録する。保存した時点で連絡先に載る。電話番号が同じお客様がいれば 409。
POST /api/v1/{tenantId}/contacts- 権限:
contacts:write
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
displayName | string | はい | 表示名 |
phone | string | — | 電話番号 |
kana | string | — | よみがな |
department | string | — | 所属 |
email | string | — | メールアドレス |
note | string | — | メモ |
topics | object | — | 話題の一覧(文字列の配列) |
custom | string-map | — | 独自項目(contact_fields list の ID → 値) |
レスポンス:JSON オブジェクト
エラー:403(contacts:write の権限がない)
curl -X POST 'https://app.kumion.jp/api/v1/TENANT_ID/contacts' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"displayName": "山田 太郎"}'contacts.update
お客様の情報を書き換える。指定した項目だけが変わる。
PATCH /api/v1/{tenantId}/contacts/{contactId}- 権限:
contacts:write
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
contactId | string | はい | お客様の ID(contacts list で見る) |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
displayName | string | — | 表示名 |
phone | string | — | 電話番号(空文字でクリア) |
kana | string | — | よみがな(null でクリア) |
department | string | — | 所属(null でクリア) |
email | string | — | メールアドレス(null でクリア) |
note | string | — | メモ(null でクリア) |
enabled | boolean | — | false で無効にする |
topics | object | — | 話題の一覧(文字列の配列) |
custom | string-map | — | 独自項目(ID → 値) |
レスポンス:JSON オブジェクト
エラー:403(contacts:write の権限がない)
curl -X PATCH 'https://app.kumion.jp/api/v1/TENANT_ID/contacts/CONTACT_ID' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"displayName": "山田 太郎"}'contacts.calls
お客様に紐づく通話(本人からの通話と、そのお客様に転送した通話)を新しい順に見る。
GET /api/v1/{tenantId}/contacts/{contactId}/calls- 権限:
contacts:read
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
contactId | string | はい | お客様の ID(contacts list で見る) |
クエリ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
limit | number | — | 件数 |
offset | number | — | 読み飛ばす件数 |
レスポンス:JSON オブジェクト
エラー:403(contacts:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/contacts/CONTACT_ID/calls' \
-H 'Authorization: Bearer YOUR_API_KEY'contact_fields
contact_fields.list
お客様の独自項目の定義を見る(contacts の custom に入れるときの ID)。
GET /api/v1/{tenantId}/contact-fields- 権限:
contacts:read
レスポンス:JSON オブジェクト
エラー:403(contacts:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/contact-fields' \
-H 'Authorization: Bearer YOUR_API_KEY'call_marks
call_marks.list
通話に付いたマークと、選べるマークの種類、「誤案内」の原因に選べる項目を見る。
GET /api/v1/{tenantId}/calls/{callId}/marks- 権限:
calls:read
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
callId | string | はい | 通話の ID |
レスポンス:JSON オブジェクト
エラー:403(calls:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/calls/CALL_ID/marks' \
-H 'Authorization: Bearer YOUR_API_KEY'call_marks.set
通話にマークを付ける。同じ種類を付け直すとメモと原因の項目が置き換わる。原因の項目を選べるのは「誤案内」だけ。
POST /api/v1/{tenantId}/calls/{callId}/marks- 権限:
calls:write
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
callId | string | はい | 通話の ID |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
typeId | string | はい | マークの種類の ID(call-marks list で見る) |
citationId | string | — | 原因の項目の ID(「誤案内」のとき。この通話で参照されたものだけ) |
note | string | — | メモ |
レスポンス:JSON オブジェクト
エラー:403(calls:write の権限がない)
curl -X POST 'https://app.kumion.jp/api/v1/TENANT_ID/calls/CALL_ID/marks' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"typeId": "MARK_TYPE_ID"}'call_marks.clear
通話からマークを外す。
DELETE /api/v1/{tenantId}/calls/{callId}/marks/{typeId}- 権限:
calls:write
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
callId | string | はい | 通話の ID |
typeId | string | はい | マークの種類の ID |
レスポンス:JSON オブジェクト
エラー:403(calls:write の権限がない)
curl -X DELETE 'https://app.kumion.jp/api/v1/TENANT_ID/calls/CALL_ID/marks/TYPE_ID' \
-H 'Authorization: Bearer YOUR_API_KEY'call_marks.types.create
テナント独自のマークの種類を追加する(「誤案内」「クレーム」は最初からある)。
POST /api/v1/{tenantId}/call-mark-types- 権限:
calls:write
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
name | string | はい | マークの名前 |
レスポンス:JSON オブジェクト
エラー:403(calls:write の権限がない)
curl -X POST 'https://app.kumion.jp/api/v1/TENANT_ID/call-mark-types' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"name": "名前"}'callback_lists
callback_lists.create
選んだ通話から発信リストの下書きを作る。発信はしない。開始(エージェントの選択)は発信リストの画面で行う。
POST /api/v1/{tenantId}/callback-lists- 権限:
calls:write
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
callIds | object | はい | 通話 ID の配列 |
name | string | — | リストの名前 |
レスポンス:JSON オブジェクト
エラー:403(calls:write の権限がない)
curl -X POST 'https://app.kumion.jp/api/v1/TENANT_ID/callback-lists' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"callIds": ["CALL_ID"]}'captures
captures.list
通話中に記録されたサマリー(予約・伝言など)を新しい順に見る(1 ページ 20 件、最大 100 件)。対応状況・期間・項目の値で絞れる。
GET /api/v1/{tenantId}/captures- 権限:
captures:read
クエリ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
type | string | — | サマリー定義のキー |
specId | string | — | サマリー定義の ID |
agentId | string | — | このエージェントが記録したものだけ |
field | string | — | 項目のキー(value と組) |
value | string | — | その項目の値(field と組) |
q | string | — | 検索語 |
status | string(open・done・dismissed) | — | 対応状況 |
from | string | — | この時刻以降(ISO 8601) |
to | string | — | この時刻以前(ISO 8601) |
limit | number | — | 件数 |
offset | number | — | 読み飛ばす件数 |
レスポンス:JSON オブジェクト
エラー:403(captures:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/captures' \
-H 'Authorization: Bearer YOUR_API_KEY'captures.update
サマリーの対応状況と対応メモを書き換える。担当者は画面で決める。対応状況の変更は変更履歴に API キーの名前で残る。
PATCH /api/v1/{tenantId}/captures/{captureId}- 権限:
captures:write
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
captureId | string | はい | サマリーの ID(captures list で見る) |
本文
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
status | string(open・done・dismissed) | — | 対応状況 |
handledNote | string | — | 対応メモ(1000 文字まで。null でクリア) |
レスポンス:JSON オブジェクト
エラー:403(captures:write の権限がない)
curl -X PATCH 'https://app.kumion.jp/api/v1/TENANT_ID/captures/CAPTURE_ID' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"status": "open"}'captures.status_log
サマリーの対応状況の変更履歴(誰が・いつ・何から何へ)を新しい順に見る。
GET /api/v1/{tenantId}/captures/{captureId}/status-log- 権限:
captures:read
パス
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
captureId | string | はい | サマリーの ID(captures list で見る) |
レスポンス:JSON オブジェクト
エラー:403(captures:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/captures/CAPTURE_ID/status-log' \
-H 'Authorization: Bearer YOUR_API_KEY'analytics
analytics.get
分析画面の集計を見る。絞り込みは calls list と同じ。specId と fieldKey を一緒に渡すと、その選択式の項目の分布も付く。
GET /api/v1/{tenantId}/analytics- 権限:
analytics:read
クエリ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
agentId | string | — | このエージェントの通話だけ |
channel | string | — | webcall / sip_did / trigger |
from | string | — | この時刻以降(ISO 8601) |
to | string | — | この時刻より前(ISO 8601) |
specId | string | — | サマリー定義の ID(fieldKey と組) |
fieldKey | string | — | 選択式の項目のキー(specId と組) |
レスポンス:JSON オブジェクト
エラー:403(analytics:read の権限がない)
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/analytics' \
-H 'Authorization: Bearer YOUR_API_KEY'