Kumionご利用ガイド
設定

API リファレンス

開発者API(REST)の全エンドポイントの一覧。認証、リクエスト、レスポンス、エラー、curl の例。

外部システムのエンジニア向けの、Kumion REST API の一覧です。キーの発行は「開発者API」を、ターミナルから使うときは同じページの CLI の項をご覧ください。

はじめに:Kumion の「API」は3種類あります

「API」という言葉は、次の3つの別のことを指して使われます。このページで説明するのは①だけです。

Kumion の 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_requiredIf-Match が必要なのに付いていません。
429回数制限を超えました。Retry-After の秒数だけ待ってください。

リビジョン(楽観ロック)

下書きを書き換える操作は、先に GET で読んだ revision を If-Match: <revision> ヘッダーに付けて送ります。読んだあとに別の人や別のプログラムが書き換えていると、何も保存されずに 409 が返ります。もう一度読み直して、やり直してください。

code状況
if_match_required428。If-Match がありません。
invalid_revision400。If-Match の値の形式が違います。
draft_revision_conflict409。エージェントの下書きが読んだあとに変わりました。
agent_revision_conflict409。エージェントの設定が変わりました。
staff_revision_conflict409。スタッフの情報が変わりました。
calendar_revision_conflict409。予約の受け付け設定が変わりました。
capture_spec_revision_conflict409。記録項目が変わりました。
fact_revision_conflict409。事実が変わりました。
document_revision_conflict409。資料が変わりました。

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

パス

名前型必須説明
agentIdstringはいエージェントの ID

レスポンス:revision、agent(id・name・workflowId・publishedAt・archivedAt・updatedAt)、draft(prompt・model・voice・graph など)、published(公開前は null)、publishState、live(operatingHours・offHoursPolicy)

エラー:403(agents:read の権限がない)

curl
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:必須

パス

名前型必須説明
agentIdstringはいエージェントの ID

本文

名前型必須説明
promptstring—新しいシステムプロンプト
graphobject—新しいフロー

レスポンス:agents.get と同じ形(保存後の revision を含む)

エラー:428 if_match_required、409 draft_revision_conflict(リビジョンの競合)、422:Webhook ノードを変える内容は受け付けません。、403(agents:write の権限がない)

curl
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

パス

名前型必須説明
agentIdstringはいエージェントの ID

クエリ

名前型必須説明
versionstring—出力する版。published(公開中・省略時)、draft(下書き)、または版番号(1, 2, …)
formatstring(pdf・docx・markdown)—出力する形式。省略すると pdf

レスポンス:JSON ではなくファイルです(Content-Disposition: attachment。ファイル名は 仕様書_{エージェント名}_{版}_{日付}.{拡張子})

エラー:403(agents:read の権限がない)

curl
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:必須

パス

名前型必須説明
agentIdstringはいエージェントの ID

本文

名前型必須説明
enabledbooleanはいtrue: 名前を呼ぶ / false: 呼ばない

レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)

エラー:428 if_match_required、409 draft_revision_conflict(リビジョンの競合)、403(agents:write の権限がない)

curl
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:必須

パス

名前型必須説明
agentIdstringはいエージェントの ID

本文

名前型必須説明
operatingHoursobject—{ mode: always | staffed | custom, hours?: 曜日ごとの時間 }。null で「いつでも出る」に戻す
offHoursPolicyobject—{ kind: answer | announce_end | route_to, text?, agent_id? }。null で「出て、時間外と伝える」に戻す

レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)

エラー:428 if_match_required、409 agent_revision_conflict(リビジョンの競合)、403(agents:live の権限がない)

curl
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
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

本文

名前型必須説明
templateIdstringはいテンプレートの ID(templates list で見る)
businessNamestringはい店名・会社名。あいさつとエージェント名に使う
namestring—エージェント名(省略すると店名)
urlstring—読み取るサイトの URL。同じサイトの最大 10 ページを読む
documentIdstring—解析済みの資料の ID(管理画面 の資料の画面でアップロードする)。url とは併用できない
idempotencyKeystring—同じ作成を二重に実行しないためのキー(1〜200文字)。送り直すときは同じ値を使う

レスポンス:201。作った下書きエージェント

エラー:403(agents:write の権限がない)

curl
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:任意

パス

名前型必須説明
agentIdstringはいエージェントの ID

本文

名前型必須説明
acceptIntermittentboolean—一部の実行でだけ失敗した公開前チェック(code: intermittent)を承知のうえで公開する。毎回失敗した場合は効かない

レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)

エラー:公開前チェックが通らないと公開されず、失敗したケースが返ります。再実行でも失敗したものは acceptIntermittent では飛ばせません。、403(agents:publish の権限がない)

curl
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:必須

パス

名前型必須説明
agentIdstringはいエージェントの ID

クエリ

名前型必須説明
dryRunboolean—true / 1: 変更後の内容だけを返し、保存しない

本文

名前型必須説明
mountedbooleanはいtrue で予約を受け付ける、false で止める

レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)

エラー:428 if_match_required、409 draft_revision_conflict(リビジョンの競合)、403(agents:live の権限がない)

curl
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

パス

名前型必須説明
agentIdstringはいエージェントの ID

レスポンス:JSON オブジェクト

エラー:403(agents:read の権限がない)

curl
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:必須

パス

名前型必須説明
agentIdstringはいエージェントの ID

本文

名前型必須説明
captureSpecIdsobjectはいこのエージェントに紐づける記録項目の 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
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

パス

名前型必須説明
agentIdstringはいエージェントの ID

レスポンス:JSON オブジェクト

エラー:403(agents:read の権限がない)

curl
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:必須

パス

名前型必須説明
agentIdstringはいエージェントの ID

クエリ

名前型必須説明
dryRunboolean—true / 1: 変更後の内容だけを返し、保存しない

本文

名前型必須説明
personaPromptstring—通話AIの役割と口調
openingSpeechstring—最初の一言
noRouteSpeechstring—どの用件にも当てはまらないときの終話
leavesobject—用件ごとの変更(key / action / label / condition / transferContactKey / removeTransfer …)の配列
examplesstring-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
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:必須

パス

名前型必須説明
agentIdstringはいエージェントの ID

クエリ

名前型必須説明
dryRunboolean—true / 1: 変更後の内容だけを返し、保存しない

本文

名前型必須説明
opsobjectはい操作の配列(最大 20 件、書いた順に実行)。各要素は op に操作名、ほかにその操作の引数を書く

ops の要素

op項目
set_node_fieldnodeKey、field、value*
set_edge_wordsfromKey、toKey、condition、transitionSpeech、visibleWhen
add_steptype、name、between、next_condition、prompt、items、staff、before_speech、key
remove_stepnode*
connect_stepsfrom、to、condition*、speech、visible_when
reconnectfrom、to、new_to*、via_tool
disconnectfrom、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
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

パス

名前型必須説明
agentIdstringはいエージェントの ID

レスポンス:facts(配列。各事実の revision を facts.edit の If-Match に使います)

エラー:403(agents:read の権限がない)

curl
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:必須

パス

名前型必須説明
agentIdstringはいエージェントの ID
factIdstringはい資料の項目の ID(facts.list で見る)

本文

名前型必須説明
valuestringはい確定する値

レスポンス:fact(ETag ヘッダーに新しい revision)

エラー:428 if_match_required、409 fact_revision_conflict(リビジョンの競合)、409 fact_revision_conflict。、403(agents:live の権限がない)

curl
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

パス

名前型必須説明
agentIdstringはいエージェントの ID

本文

名前型必須説明
factIdsobject—確定する項目の ID の配列(省略: 全部。旧名の fieldIds も受け付ける)

レスポンス:JSON オブジェクト

エラー:403(agents:live の権限がない)

curl
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

パス

名前型必須説明
agentIdstringはいエージェントの ID

本文

名前型必須説明
turnsobject—来電者の台詞を順に並べた配列 [{ 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
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

パス

名前型必須説明
agentIdstringはいエージェントの ID
runIdstringはいテスト実行の ID

レスポンス:testRun(上の項目に structural・results・verdict が加わります)

エラー:403(tests:run の権限がない)

curl
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

パス

名前型必須説明
agentIdstringはいエージェントの ID

クエリ

名前型必須説明
limitnumber—件数(最大 50)

レスポンス:testRuns(結果を除いた testRun の配列)

エラー:403(tests:run の権限がない)

curl
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

本文

名前型必須説明
agentIdstringはいエージェントの ID
campaignContactIdstring—この連絡先として通話する
phoneNumberstring—発信先の国内電話番号(0 から始まる番号。例 0312345678。+81 など国際形式は 400)
variablesstring-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
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

クエリ

名前型必須説明
agentIdstring—このエージェントの通話だけ
channelstring—webcall / sip_did / trigger
fromstring—この時刻以降(ISO 8601)
tostring—この時刻より前(ISO 8601)
qstring—発信者番号、または通話 ID の先頭
contentstring—会話の内容(文字起こし)に含まれる語。from と to の両方が必要で、期間は上限あり。時間切れは 408
limitnumber—件数
offsetnumber—読み飛ばす件数

レスポンス:calls(通話の配列)・total・limit・offset

エラー:403(calls:read の権限がない)

curl
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

パス

名前型必須説明
callIdstringはい通話の ID

レスポンス:call(id・agentId・agentName・source・direction・portalDirection・disposition・endedReason・remoteE164・localE164・startedAt・answeredAt・endedAt・isVoicemail・ticketNo・hasTranscript・escalationTriggers など)

エラー:403(calls:read の権限がない)

curl
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

パス

名前型必須説明
callIdstringはい通話の ID

レスポンス:transcript

エラー:403(calls:read の権限がない)

curl
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/calls/CALL_ID/transcript' \
  -H 'Authorization: Bearer YOUR_API_KEY'

通話の発信者番号でお客様を登録(または既存のお客様に紐づけ)、同じ番号の未紐づけの通話もまとめて紐づける。すでに紐づいた通話は 409。

  • POST /api/v1/{tenantId}/calls/{callId}/contact
  • 権限:calls:write

パス

名前型必須説明
callIdstringはい通話の ID

本文

名前型必須説明
displayNamestringはい氏名(新規登録のときの表示名)

レスポンス:JSON オブジェクト

エラー:403(calls:write の権限がない)

curl
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

本文

名前型必須説明
agentIdstringはいエージェントの ID
phoneNumberstringはい発信先の国内電話番号(0 から始まる番号。例 0312345678。+81 など国際形式は 400)
scheduledAtstringはい発信日時(例: 2026-10-31T13:00:00+09:00。オフセット必須)
variablesstring-map—{{vars.<名前>}} に入る値。発信時に通話へ渡される(POST /calls の variables と同じ規則。必須の変数が空なら 400)

レスポンス:201。id・scheduledAt・phoneNumber・state

エラー:409:その番号にはすでに予約または発信中のものがあります。400:scheduledAt が過去、または時差なし。、403(calls:create の権限がない)

curl
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
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

パス

名前型必須説明
scheduledCallIdstringはい予約した発信の ID(scheduled_calls.list で見る)

レスポンス:id・state

エラー:404:予約が見つからないか、すでに発信されています。、403(calls:create の権限がない)

curl
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
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

本文

名前型必須説明
displayNamestringはいスタッフの名前
transferTargetstring—転送先の電話番号(転送できるようにするなら必須。空文字でクリア)
departmentstring—所属(空文字でクリア)
kanastring—よみがな(空文字でクリア)
emailstring—メールアドレス(空文字でクリア)
notestring—メモ。通話には出ない(空文字でクリア)
enabledboolean—false で転送先の候補から外す(省略すると有効)

レスポンス:201。staff(ETag ヘッダーに revision)

エラー:403(agents:write の権限がない)

curl
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:必須

パス

名前型必須説明
staffIdstringはいスタッフの ID(staff list で見る)

本文

名前型必須説明
displayNamestring—スタッフの名前
transferTargetstring—転送先の電話番号(空文字でクリア)
departmentstring—所属(空文字でクリア)
kanastring—よみがな(空文字でクリア)
emailstring—メールアドレス(空文字でクリア)
notestring—メモ。通話には出ない(空文字でクリア)
enabledboolean—false で転送先の候補から外す。転送中の通話には影響しない

レスポンス:staff(ETag ヘッダーに新しい revision)

エラー:428 if_match_required、409 staff_revision_conflict(リビジョンの競合)、400 invalid_revision、409 staff_revision_conflict。、403(agents:live の権限がない)

curl
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

クエリ

名前型必須説明
fromstring—例外日を読む期間の開始日(YYYY-MM-DD。省略すると今日)
tostring—例外日を読む期間の終了日(YYYY-MM-DD。省略すると from の400日後)

レスポンス:JSON オブジェクト

エラー:403(agents:read の権限がない)

curl
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:必須

クエリ

名前型必須説明
dryRunboolean—true / 1: 変更後の内容だけを返し、保存しない

本文

名前型必須説明
businessHoursobject—1週間ぶんの営業時間({ mon: [{ start, end }], … })。丸ごと置き換え
closedRulesobject—定休日の配列。丸ごと置き換え
observeJpHolidaysboolean—祝日を休業にするか

レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)

エラー:428 if_match_required、409 draft_revision_conflict(リビジョンの競合)、403(agents:live の権限がない)

curl
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:必須

パス

名前型必須説明
datestringはい例外日の日付(YYYY-MM-DD)

クエリ

名前型必須説明
dryRunboolean—true / 1: 変更後の内容だけを返し、保存しない

本文

名前型必須説明
kindstring(closed・open・inherit)はいclosed: 臨時休業 / open: 振替出勤 / inherit: 例外を消して曜日どおりに戻す
hoursobject—open のときの営業時間([{ start, end }])。省略すると曜日どおり
notestring—メモ。通話には出ない

レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)

エラー:428 if_match_required、409 draft_revision_conflict(リビジョンの競合)、403(agents:live の権限がない)

curl
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

パス

名前型必須説明
agentIdstringはいエージェントの ID

レスポンス:JSON オブジェクト

エラー:403(agents:read の権限がない)

curl
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:必須

クエリ

名前型必須説明
dryRunboolean—true / 1: 変更後の内容だけを返し、保存しない

本文

名前型必須説明
defaultSlotMinutesnumber—1枠の長さ(分)。1〜1440。所要時間のない内容はこの長さになる
minLeadMinutesnumber—直前予約の締め切り(分)。0〜43200。0 は「いま予約できる」
maxAdvanceDaysnumber—何日先まで受け付けるか(日)。1〜730

レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)

エラー:428 if_match_required、409 draft_revision_conflict(リビジョンの競合)、403(agents:live の権限がない)

curl
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:必須

クエリ

名前型必須説明
dryRunboolean—true / 1: 追加後の内容だけを返し、保存しない

本文

名前型必須説明
namestringはい内容名(100文字以内)
durationMinutesnumber—所要時間(分)。1〜1440。null で枠の長さを使う(省略と同じ)

レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)

エラー:428 if_match_required、409 draft_revision_conflict(リビジョンの競合)、403(agents:live の権限がない)

curl
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:必須

パス

名前型必須説明
serviceIdstringはい内容の ID(booking get で見る)

クエリ

名前型必須説明
dryRunboolean—true / 1: 変更後の内容だけを返し、保存しない

本文

名前型必須説明
namestring—内容名(100文字以内)
durationMinutesnumber—所要時間(分)。1〜1440。null で枠の長さを使う設定に戻す

レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)

エラー:428 if_match_required、409 draft_revision_conflict(リビジョンの競合)、403(agents:live の権限がない)

curl
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:必須

クエリ

名前型必須説明
dryRunboolean—true / 1: 追加後の内容だけを返し、保存しない

本文

名前型必須説明
namestringはい担当名(100文字以内)
enabledboolean—予約を受け付けるか。省略すると true
weeklyHoursobject—この担当の予約枠({ mon: [{ start, end }], … })。省略すると空で、枠を入れるまで予約は入らない
serviceIdsobject—この担当が受ける内容(booking get の services の ID)。省略すると未設定、[] はすべての内容、並べたときはその内容だけ

レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)

エラー:428 if_match_required、409 draft_revision_conflict(リビジョンの競合)、403(agents:live の権限がない)

curl
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:必須

パス

名前型必須説明
resourceIdstringはい担当の ID(booking get で見る)

クエリ

名前型必須説明
dryRunboolean—true / 1: 変更後の内容だけを返し、保存しない

本文

名前型必須説明
namestring—担当名(100文字以内)
enabledboolean—予約を受け付けるか。受付を止めるときは false
weeklyHoursobject—この担当の予約枠。丸ごと置き換え
serviceIdsobject—この担当が受ける内容。[] ですべての内容、並べたときはその内容だけ。この店舗の内容でない ID が混ざると全部拒否する

レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)

エラー:428 if_match_required、409 draft_revision_conflict(リビジョンの競合)、403(agents:live の権限がない)

curl
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

パス

名前型必須説明
agentIdstringはいエージェントの ID

クエリ

名前型必須説明
resourceIdstringはい担当の ID(booking get で見る)
datestringはい見たい日(YYYY-MM-DD)
serviceIdstring—内容の ID。所要時間にこの内容を使い、担当が受けない内容なら空になる
limitnumber—返す枠数(1〜20、省略すると6)

レスポンス:JSON オブジェクト

エラー:403(agents:read の権限がない)

curl
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
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

本文

名前型必須説明
keystring—設定のキー(英小文字・数字・_、2〜30文字)。省略するとサーバーが決める。作成後は変更できない
labelstringはい記録項目の名前(例: 予約内容)
scenariostring—どんな通話のあとに残すか(1文)
instructionstring—記録するときの指示。省略すると自動で作る
confirmationMessagestring—記録したあとにお客様へ伝える一言。省略すると「記録しました」
fieldsobjectはい記録する項目の配列(最大10件、うち summary は3件まで)。要素は label・type(text/datetime/select/boolean)ほか
enabledboolean—記録に使うか。省略すると有効

レスポンス:JSON オブジェクト

エラー:403(agents:write の権限がない)

curl
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:必須

パス

名前型必須説明
specIdstringはい記録項目の ID(capture-specs list で見る)

本文

名前型必須説明
labelstring—記録項目の名前
scenariostring—どんな通話のあとに残すか。null で「場面なし」に戻す
instructionstring—記録するときの指示。省略した場合は、自動生成された指示だけが項目に合わせて作り直される
confirmationMessagestring—記録したあとの一言。null で「記録しました」に戻す
fieldsobject—記録する項目の配列(まるごと置き換え。最大10件、うち summary は3件まで)
enabledboolean—記録に使うか。false で記録を止める(過去の記録は残る)

レスポンス:更新後の内容と新しい revision(ETag ヘッダーにも同じ値)

エラー:428 if_match_required、409 capture_spec_revision_conflict(リビジョンの競合)、400 invalid_revision、409 capture_spec_revision_conflict。、403(agents:live の権限がない)

curl
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

クエリ

名前型必須説明
dryRunboolean—true / 1: 検証と使用量の見積もりだけを返し、ジョブも作らずモデルも呼ばない

本文

名前型必須説明
titlestringはい資料の名前(200文字まで)
idempotencyKeystringはい同じ送信を区別するキー(1〜200文字)。同じキーと同じ内容は同じジョブを返す
templateIdstring—抽出を合わせたいオンボーディングテンプレートの ID(agents templates list で見る)
rawTextstring—資料の本文(32,000文字まで)。ファイルと同時には指定できず、どちらか一方が必要

ファイルは multipart の files で送ります(rawText とは同時に指定できません)。

レスポンス:JSON オブジェクト

エラー:400 unsupported_content_type、413 document_too_large、403(外部送信が許可されていない契約)。、403(agents:write の権限がない)

curl
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

パス

名前型必須説明
jobIdstringはいジョブの ID(documents upload が返す)

レスポンス:job

エラー:403(agents:read の権限がない)

curl
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

パス

名前型必須説明
documentIdstringはい資料の ID(documents jobs get が返す)

レスポンス:JSON オブジェクト

エラー:403(agents:read の権限がない)

curl
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:必須

パス

名前型必須説明
documentIdstringはい置き換える資料の ID

クエリ

名前型必須説明
dryRunboolean—true / 1: 変更内容と影響だけを返し、何も書き換えない

本文

名前型必須説明
sourceDocumentIdstringはい新しい内容の元になる資料の ID(同じ店舗の、抽出済みで、どこにも使われていないもの)
sourceRevisionstringはい元になる資料の 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
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

パス

名前型必須説明
documentIdstringはい資料の ID

レスポンス:JSON オブジェクト

エラー:403(agents:read の権限がない)

curl
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

パス

名前型必須説明
documentIdstringはい資料の ID

クエリ

名前型必須説明
fromnumberはい比べる元の版
tonumberはい比べる先の版

レスポンス:JSON オブジェクト

エラー:403(agents:read の権限がない)

curl
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

パス

名前型必須説明
documentIdstringはい資料の ID

本文

名前型必須説明
versionnumberはい戻したい版の番号(documents history で見る)

レスポンス:JSON オブジェクト

エラー:403(agents:live の権限がない)

curl
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

クエリ

名前型必須説明
qstring—名前・電話番号などの検索語
limitnumber—件数
offsetnumber—読み飛ばす件数

レスポンス:JSON オブジェクト

エラー:403(contacts:read の権限がない)

curl
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

パス

名前型必須説明
contactIdstringはいお客様の ID(contacts list で見る)

レスポンス:JSON オブジェクト

エラー:403(contacts:read の権限がない)

curl
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

本文

名前型必須説明
displayNamestringはい表示名
phonestring—電話番号
kanastring—よみがな
departmentstring—所属
emailstring—メールアドレス
notestring—メモ
topicsobject—話題の一覧(文字列の配列)
customstring-map—独自項目(contact_fields list の ID → 値)

レスポンス:JSON オブジェクト

エラー:403(contacts:write の権限がない)

curl
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

パス

名前型必須説明
contactIdstringはいお客様の ID(contacts list で見る)

本文

名前型必須説明
displayNamestring—表示名
phonestring—電話番号(空文字でクリア)
kanastring—よみがな(null でクリア)
departmentstring—所属(null でクリア)
emailstring—メールアドレス(null でクリア)
notestring—メモ(null でクリア)
enabledboolean—false で無効にする
topicsobject—話題の一覧(文字列の配列)
customstring-map—独自項目(ID → 値)

レスポンス:JSON オブジェクト

エラー:403(contacts:write の権限がない)

curl
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

パス

名前型必須説明
contactIdstringはいお客様の ID(contacts list で見る)

クエリ

名前型必須説明
limitnumber—件数
offsetnumber—読み飛ばす件数

レスポンス:JSON オブジェクト

エラー:403(contacts:read の権限がない)

curl
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
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

パス

名前型必須説明
callIdstringはい通話の ID

レスポンス:JSON オブジェクト

エラー:403(calls:read の権限がない)

curl
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

パス

名前型必須説明
callIdstringはい通話の ID

本文

名前型必須説明
typeIdstringはいマークの種類の ID(call-marks list で見る)
citationIdstring—原因の項目の ID(「誤案内」のとき。この通話で参照されたものだけ)
notestring—メモ

レスポンス:JSON オブジェクト

エラー:403(calls:write の権限がない)

curl
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

パス

名前型必須説明
callIdstringはい通話の ID
typeIdstringはいマークの種類の ID

レスポンス:JSON オブジェクト

エラー:403(calls:write の権限がない)

curl
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

本文

名前型必須説明
namestringはいマークの名前

レスポンス:JSON オブジェクト

エラー:403(calls:write の権限がない)

curl
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

本文

名前型必須説明
callIdsobjectはい通話 ID の配列
namestring—リストの名前

レスポンス:JSON オブジェクト

エラー:403(calls:write の権限がない)

curl
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

クエリ

名前型必須説明
typestring—サマリー定義のキー
specIdstring—サマリー定義の ID
agentIdstring—このエージェントが記録したものだけ
fieldstring—項目のキー(value と組)
valuestring—その項目の値(field と組)
qstring—検索語
statusstring(open・done・dismissed)—対応状況
fromstring—この時刻以降(ISO 8601)
tostring—この時刻以前(ISO 8601)
limitnumber—件数
offsetnumber—読み飛ばす件数

レスポンス:JSON オブジェクト

エラー:403(captures:read の権限がない)

curl
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

パス

名前型必須説明
captureIdstringはいサマリーの ID(captures list で見る)

本文

名前型必須説明
statusstring(open・done・dismissed)—対応状況
handledNotestring—対応メモ(1000 文字まで。null でクリア)

レスポンス:JSON オブジェクト

エラー:403(captures:write の権限がない)

curl
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

パス

名前型必須説明
captureIdstringはいサマリーの ID(captures list で見る)

レスポンス:JSON オブジェクト

エラー:403(captures:read の権限がない)

curl
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

クエリ

名前型必須説明
agentIdstring—このエージェントの通話だけ
channelstring—webcall / sip_did / trigger
fromstring—この時刻以降(ISO 8601)
tostring—この時刻より前(ISO 8601)
specIdstring—サマリー定義の ID(fieldKey と組)
fieldKeystring—選択式の項目のキー(specId と組)

レスポンス:JSON オブジェクト

エラー:403(analytics:read の権限がない)

curl
curl -X GET 'https://app.kumion.jp/api/v1/TENANT_ID/analytics' \
  -H 'Authorization: Bearer YOUR_API_KEY'

On this page

はじめに:Kumion の「API」は3種類ありますよくある誤解共通事項ベース URL とテナント ID認証リクエストとレスポンス共通のエラーリビジョン(楽観ロック)dryRun(保存せずに確認)回数制限権限(スコープ)通話の終了通知(Webhook)agentsagents.listagents.getagents.patchagents.spec.getagents.opening_name.setagents.availability.setagents.templates.listagents.create_from_templateagents.publishagents.booking.setagents.capture.getagents.capture.setflowflow.getflow.updateflow.edit_stepsfactsfacts.listfacts.editfacts.confirmtest_runstest_runs.starttest_runs.gettest_runs.listcallscalls.createcalls.listcalls.getcalls.transcriptcalls.link_contactscheduled_callsscheduled_calls.createscheduled_calls.listscheduled_calls.cancelstaffstaff.liststaff.createstaff.updatestore_hoursstore_hours.getstore_hours.updatestore_hours.exceptions.setbookingbooking.getbooking.calendar.updatebooking.services.createbooking.services.updatebooking.resources.createbooking.resources.updatebooking.slots.listcapture_specscapture_specs.listcapture_specs.createcapture_specs.updatedocumentsdocuments.uploaddocuments.jobs.getdocuments.getdocuments.replacedocuments.historydocuments.version_diffdocuments.rollbackcontactscontacts.listcontacts.getcontacts.createcontacts.updatecontacts.callscontact_fieldscontact_fields.listcall_markscall_marks.listcall_marks.setcall_marks.clearcall_marks.types.createcallback_listscallback_lists.createcapturescaptures.listcaptures.updatecaptures.status_loganalyticsanalytics.get