私たちが開発に使っているのと同じAPIの上で開発する
プラットフォームが行うすべて ― 会話、連絡先、AIエージェント、知識、アナリティクス ― は、このREST APIで動いています。この裏に、より優れた非公開APIはありません:これがそのものです。ベースURL: `https://api.inteligenciaviva.com/v1`。
クイックスタート:60秒で最初のリクエスト
ワークスペースでAPIキーを作成し、エクスポートして、会話を一覧してみてください。キーはワークスペースごとにスコープされ、読み取り専用または読み書き可能にできます。
curl https://api.inteligenciaviva.com/v1/workspaces/WORKSPACE_ID/conversations \
-H "Authorization: Bearer sk_live_..."
すべてのレスポンスはJSONです。コレクションのエンドポイントは`data`配列を返します。エラーは`code`と`message`を持つ`error`オブジェクトと、対応するHTTPステータスを返します。
無料API ― アカウント不要、キー不要
無料の層もAPIを話します。`POST /v1/free/widget-snippet`は、無料ページのビジュアルジェネレーターが組み立てるのとまったく同じ設定を受け取り、貼り付け可能なHTMLスニペットを返します ― 認証も登録も不要です。クライアントのサイト向けにウィジェットを一括生成したり、スケジュール変更時にCIから埋め込みを再生成したり、あるいは1セントも払う前にAPIに触れてみるために使ってください。
curl -X POST https://api.inteligenciaviva.com/v1/free/widget-snippet \
-H "Content-Type: application/json" \
-d @widget-config.json
# → { "snippet": "<link rel=\"stylesheet\" ..." }
認証
すべてのリクエストは、`Authorization`ヘッダーにBearerトークンとしてAPIキーを載せます。キーの作成と失効はAPI自体またはダッシュボードから、ワークスペース単位で行います ― キーを失効させると、そのアクセスは即座に切断されます。
アカウントレベルのセッションエンドポイント(`/v1/auth`配下の登録、ログイン、Googleサインイン、チケット交換、プロフィール、アカウント削除)は私たち自身のアプリを支えています。サーバー間の連携では、ユーザーセッションよりも常にワークスペースのAPIキーを優先してください。
Authorization: Bearer sk_live_...
リソースリファレンス
以下のすべてのルートは、特記なき限り`https://api.inteligenciaviva.com/v1/workspaces/{workspaceId}`からぶら下がります。これは現在のバックエンドに実際にマウントされている面です ― 願望ではありません。
横断受信トレイ /inbox
| GET | /conversations | この資格情報が担当するすべてのワークスペースの会話を、活動順の単一リストで返します。 |
| GET | /conversations/{id} | どのワークスペースにあるかを知らずに会話を探します。workspace_id を返します。 |
| GET | /workspaces | この資格情報が担当できるワークスペースと、それぞれでの役割。 |
| GET | /visitantes | すべてのワークスペースで「いま」閲覧中の訪問者と、読んでいるページ、すでに会話中かどうか。履歴ではなくその瞬間のスナップショットなので、ページングはありません。応答しないワークスペースがあってもリストは返り、`casas_sin_responder` に入ります。 |
会話 /conversations
| GET | / | 会話を一覧します。状態でフィルタできます。 |
| GET | /{id} | 1件の会話を、その状態、チャネル、連絡先、担当割り当てとともに返します。 |
| GET | /{id}/messages | メッセージ履歴(訪問者、人間のエージェント、AI、システム)。 |
| POST | /{id}/messages | エージェントとして会話にメッセージを送信します。 |
| POST | /{id}/assign | 会話を人間のエージェントまたは部署に割り当てます。 |
| POST | /{id}/resolve | 会話をクローズします。AIが単独でクローズした場合、課金対象の解決として数えられます。 |
| POST | / | ウィジェット外から会話を開きます(既存スレッドの移行など)。 |
| GET | /{id}/ai-turns | 「その根拠は?」— AI の各ターンの記録:根拠、モデル、所要時間、引き継ぎの理由。 |
| GET | /{id}/portal-case | この会話がポータルのサポート板に開いた案件の状態と返信。状態は向こうで変わるため、都度取得します。 |
| POST | /{id}/read | チームが既読にします(未読カウンタ)。 |
| POST | /{id}/reopen | クローズした会話を履歴ごと再開します。これがないと誤操作は取り消せませんでした。 |
| POST | /{id}/archive | アーカイブ/解除。閉じることも失うこともなく受信箱から外れます。本文は {valor:true|false}。 |
| POST | /{id}/pin | 上部に固定/解除。固定したものは受信箱の1ページ目の先頭に並びます。本文: {valor:true|false}。 |
| POST | /{id}/mute | N時間だけ通知をミュート。{horas:null} で解除します。 |
| POST | /{id}/unread | 未読に戻す:既読マークをお客さまの最後のメッセージの手前まで戻します。 |
| POST | /{id}/typing | 顧客側への「入力中…」表示。WhatsApp では Meta に、Web チャットでは訪問者のウィジェットに届きます。本文なし。常に 204(対応しないチャネルでは何もしません)。会話が存在しなければ 404。 |
| POST | /{id}/messages/{messageId}/forward | メッセージを同じワークスペースの別の会話へ転送します。添付は共有ではなくコピーされます。本文:`{to_conversation_id}`。エージェントのメッセージとして送信されます。 |
| PUT | /{id}/messages/{messageId}/reaction | WhatsApp のメッセージに絵文字でリアクションします。事業者側の以前のリアクションを置き換え、`{emoji:null}` で外します。WhatsApp(Meta の API)のみ、かつ Meta が確認済みのメッセージのみ。それ以外は 400。 |
| POST | /{id}/location | WhatsApp で位置情報を送信します:`{lat, lon, name?, address?, reply_to_message_id?}`。先に Meta へ送り、Meta が拒否した場合はスレッドに何も残りません。WhatsApp のみ。 |
| POST | /{id}/contact-card | WhatsApp で連絡先カードを送信します:`{name:{formatted_name}, phones?, emails?, reply_to_message_id?}`。位置情報と同じく、先に Meta、次にスレッド。WhatsApp のみ。 |
| GET | /{id}/copiloto | エージェントのコパイロット:この会話について AI が提案した内容と、AI とのやり取り。チーム専用で、顧客には表示されません。 |
| POST | /{id}/copiloto | この会話について AI に非公開で質問します(`{content}`、最大 4,000 文字)。AI は顧客ではなくエージェントに答え、チャネルには何も送られません。応答できない場合は 503 `copilot_unavailable`。 |
| POST | /{id}/copiloto/{sugerenciaId}/enviar | コパイロットの提案を、そのまま、または編集して顧客に送ります(`{content}` は任意)。人間の作成者を伴うエージェントのメッセージとして送信されます。提案は一度しか送れず、2 回目は 409 `ya_enviada`。 |
| POST | /{id}/resumen | 会話(未解決・解決済みのどちらでも)の要約を依頼し、連絡先のプロフィールを更新します。KIT のタスク 1 件分の費用がかかりますが、新しいメッセージがないまま再依頼しても再課金されません。要約がない場合は理由(`motivo`、`codigo`)を返します。 |
連絡先 /contacts
| GET | / | 連絡先を一覧します。 |
| GET | /{id} | 1件の連絡先を、そのアイデンティティと会話履歴とともに返します。 |
| GET | /{id}/historial | 最近の問い合わせ内容:要約付きの最新の会話(`?limit=`、最大 25 件)、合計、連絡先のプロフィール。開いただけでは欠けているプロフィールは生成されません(費用がかかるため)。`?generar=1` で明示的に依頼します。 |
AIエージェント /ai-agents
| GET | / | ワークスペースのAIエージェントを一覧します。 |
| POST | / | AIエージェントを作成します:指示、部署、確信度のしきい値。 |
| PATCH | /{id} | 指示、しきい値、部署を更新します。 |
| GET | /{id}/knowledge-sources | このエージェントに接続された知識ソース。 |
| POST | /{id}/knowledge-sources | このエージェントに知識ソースを接続します。 |
| GET | /{aiAgentId} | AI エージェント 1 件:指示、確信度のしきい値、ツール、部門。 |
知識(RAG) /knowledge-sources
| POST | /document | ドキュメントを、回答の根拠となる知識としてインデックスします。 |
| POST | /url | URLをインデックスします。 |
| GET | /{id} | ソースの状態とメタデータ。 |
| DELETE | /{id} | ソースとそのベクトルを削除します。 |
| POST | /{id}/reindex | URL のソースを削除せずに読み直します。取得に失敗した場合は何も変更されません。 |
| GET | / | ナレッジソースと索引状態の一覧。 |
ビジネス情報シート /ficha
| GET | / | ユニットを一覧表示(?estado= と ?tipo= で絞り込み)。帯のしきい値も返します。 |
| POST | / | ユニットを作成:質問、言い換え、承認済みの回答、URL、言語。管理者または API キーは公開し、エージェントは提案します。AI が公開することはありません。 |
| GET | /{id} | ユニットを取得。 |
| PATCH | /{id} | ユニットを編集。質問や言い換えを変えると埋め込みを再計算します。 |
| DELETE | /{id} | ユニットを削除(管理者)。 |
| POST | /{id}/aprobar | 提案を承認:有効になり、承認者が記録されます(管理者)。 |
| POST | /{id}/rechazar | 提案を却下(管理者)。 |
| POST | /probar | プレビュー:質問に対して情報シートが何を答えるか、スコアと帯付きで表示(提案を含めることも可)。 |
| POST | /recalcular | 欠けている、またはテキストと一致しない埋め込みを再計算(管理者)。 |
チャネル /channels
| GET | / | チャネルを一覧します。今日稼働しているのはウェブチャットとAPI。追加のチャネルは提供され次第つながります。 |
| PUT | /{id}/credentials | チャネルの認証情報を設定します。 |
| PUT | /{id}/status | チャネルを有効化または無効化します。 |
| POST | / | チャネルを作成します。 |
| GET | /{channelId} | チャネル 1 件(種別・状態・設定)。 |
| GET | /{channelId}/snippet | 顧客がサイトに貼る 1 行。それ以外はすべてここで設定します。 |
| GET | /{channelId}/config | チャット設定:公開中のもの(`config`)と、このチャネルが上書きするもの(`settings`)。別物です。 |
| PUT | /{channelId}/config | 設定を保存します。保存と公開は同一の手順:CDN が失敗すれば PUT も失敗します。 |
| POST | /{channelId}/config/publish | 設定を変更せずに CDN へ再公開します。 |
| POST | /{channelId}/avatar | アシスタントの顔画像をアップロード(512 KB 以下)。R2 に保存し CDN が配信します。 |
| POST | /republicar-todos | ワークスペースの全チャネルを再公開します。文言パック変更時は cron が行いますが、待たずに実行できます。 |
| PUT | /{channelId}/modo | チャネルの対応モード:`{modo:"humano"|"hibrido"|"ia"}`。AI が顧客と話すかどうかを決めます。WhatsApp・Telegram・メール・ウィジェットなど全種類のチャネルで有効。管理者のみ。 |
| PUT | /{channelId}/auto | チャネルの自動メッセージ:`{bienvenida, fueraDeHorario}`(各最大 1,000 文字、`null` で削除)。営業時間外のメッセージはチャネルの営業時間を使います。管理者のみ。 |
| PUT | /{channelId}/tarjeta | このチャネルからエージェントが送れる連絡先カード:`{tarjetaContacto:{name:{formatted_name}, phones?, emails?}}`。電話番号かメールを少なくとも 1 つ含めます。`null` で削除。WhatsApp のみ。管理者のみ。 |
| PUT | /{channelId}/horario | 対応時間:`{officeHours:{tz, dias:{lun:[["09:00","17:00"]], …}, festivos:["MM-DD" または "YYYY-MM-DD"]}}`。`null` で削除(24 時間対応)。解釈できない内容は、何が誤っているかを示して 400 で拒否されます。サーバーが計算した `abiertoAhora` を返します。管理者のみ。 |
人間のエージェントと部署 /agents · /departments
| GET | /agents | ワークスペース内の人間のエージェントを一覧します。 |
| POST | /agents/{userId}/departments | エージェントを部署に所属させます。 |
| GET | /departments | 部署を一覧します。 |
| PUT | /departments/{id}/routing-rules | 受信する会話のルーティングルールを設定します。 |
| POST | /agents | ワークスペースに人を招待します(役割と部門つき)。 |
| GET | /agents/{userId} | チームメンバー 1 名。 |
| POST | /departments | 部門をルーティング規則つきで作成します。 |
| GET | /departments/{id} | 部門 1 件。 |
Webhook・キー・課金・アナリティクス /webhooks · /api-keys · /billing · /analytics
| POST | /webhooks | エンドポイントを登録します。署名用シークレットは一度だけ受け取れます。 |
| DELETE | /webhooks/{id} | エンドポイントを削除します。 |
| POST | /api-keys | キーを作成します(読み取り専用または読み書き)。 |
| DELETE | /api-keys/{id} | キーを即座に失効させます。 |
| GET | /billing/subscription | プラン、含まれるAI解決件数、今期の利用量。 |
| GET | /analytics | ワークスペースの集計メトリクス。 |
| GET | /webhooks | Webhook のエンドポイント一覧。 |
| GET | /webhooks/{id}/deliveries | Webhook の配信履歴(再試行を含む)。失敗の原因がどちら側かを示します。 |
| GET | /api-keys | キー一覧。秘密値は返しません(接頭辞のみ)。 |
エージェント用ツール /conversations/{id} · /canned-responses · /tags · /presence
| GET | /conversations/{id}/notes | 会話の内部メモ。訪問者には決して表示されません。 |
| POST | /conversations/{id}/notes | 内部メモを追加します。 |
| DELETE | /conversations/{id}/notes/{noteId} | 内部メモを削除します。 |
| GET | /canned-responses | ワークスペースの定型返信(ショートカット付き)。 |
| POST | /canned-responses | 定型返信を作成します。 |
| PATCH | /canned-responses/{cannedId} | 定型返信を編集します。 |
| DELETE | /canned-responses/{cannedId} | 定型返信を削除します。 |
| POST | /presence | 在席のハートビート。人が対応可能であることを示します。セッション専用 — API キーによる送信は画面を見ている人ではないため、400 で拒否されます。 |
| GET | /presence | 現在オンラインの担当者がいるか。引き継ぎが待つか転送されるかを決めます。 |
| GET | /ai-usage | ワークスペースの日次推論使用量と、消費の多い会話。 |
| GET | /tags | ワークスペースのタグ。 |
| GET | /conversations/{id}/tags | 会話に付いたタグ。 |
| POST | /conversations/{id}/tags | 会話にタグを付けます。存在しない場合は作成します。 |
| DELETE | /conversations/{id}/tags/{tagId} | 会話からタグを外します。 |
| POST | /conversations/{id}/transfer | 会話を部門へ転送します。ルーティング規則より優先され、手動の転送は自動で取り消されません。 |
| POST | /contacts/{contactId}/block | 連絡先をブロックします。詳細なしの 403 を返します — 悪用者に検知方法は説明しません。 |
| GET | /canned-responses/categories | 定型返信ですでに使われているカテゴリ(自由入力)。オートコンプリート用です。 |
| POST | /canned-responses/{cannedId}/use | 定型返信が使われたことを記録します(使用回数と最終使用日時)。存在してもしなくても常に 204。操作ではなく利用状況の計測です。 |
添付・デバイス・ワークスペース /conversations/{id}/attachments · /devices · /workspaces
| POST | /conversations/{id}/attachments | エージェントとして添付をアップロード。厳格な許可リストと 10 MB 制限:ブラウザが実行できるものは通しません。 |
| GET | /conversations/{id}/attachments | 会話の添付一覧。 |
| GET | /attachments/{attachmentId} | 添付をダウンロード。厳格なヘッダーと `nosniff` 付き。インライン表示は画像と音声のみ。 |
| POST | /devices/register | デバイスのプッシュトークンを登録します(AI 引き継ぎ時の通知用)。ワークスペース接頭辞の外:`/v1/devices/register`。 |
| POST | /workspaces | ワークスペースを作成します。接頭辞の外:`/v1/workspaces`。 |
| GET | /workspaces/{workspaceId}/retencion/ensayo | 削除の予行演習:保持期間の設定で削除される会話・添付の件数(とバイト数)を、何も削除せずに返します。`?days=` でまだ保存していない期間を試せます。管理者かつ `analytics:read` が必要。完全なルート:`/v1/workspaces/{workspaceId}/retencion/ensayo`。 |
ライブ訪問者とリアルタイム /visitantes · /stream-ticket
| GET | /visitantes | このワークスペースのサイトをいま閲覧中の訪問者:ページ、言語、閲覧開始時刻、チャットを開いているか・会話中か。 |
| POST | /visitantes/{visitorId}/invitar | 訪問者をチャットに招待します。`{mensaje}` は任意(省略時は訪問者の言語でのウィジェットの挨拶)。会話は作らず AI も消費しません。会話は訪問者が返信したときに始まります。離脱済みなら 404 `no_esta`、すでに会話中なら 409 `ya_conversa`。 |
| POST | /stream-ticket | トークンを URL に含めずに `?ticket=` でストリームの WebSocket を開くためのチケット。有効期間 60 秒、使用は 1 回限り。セッションでも API キーでも使えます。 |
KIT の機能 /conversations/{id}/kit
| GET | / | この会話で実行した KIT のタスクとその状態。一覧を取得すると保留中のタスクも確認されます。 |
| GET | /catalogo | 添付(`?attachment_id=`)またはスレッドに対して実行できる KIT の機能を検索付き(`?q=`、`?lang=`)で返します。読み取り専用で費用はかかりません。 |
| POST | / | 添付またはスレッドに対して KIT の機能を実行します(`{action, attachment_id?, params?}`)。結果は顧客ではなく「内部メモ」として戻ります。KIT のウォレットから費用がかかりますが、同じ依頼が二重に課金されることはありません。タスクをキューに入れて 202。 |
電話(VOICE) /voice
| GET | /llamadas | ワークスペースの電話システムの通話履歴(`?limite=` 最大 200、ページングは `?antes_de=`)。スコープ `voice:read`。電話システムのないワークスペースでは 404。 |
| GET | /llamadas-en-curso | いま進行中の通話。 |
| GET | /aparcadas | 保留(パーク)中で、誰かが取るのを待っている通話。 |
| GET | /grabaciones/{id}/audio | 録音の音声。API 経由で配信され(公開リンクなし)、キャッシュされません。誰が聞いたかを電話システムが記録します。 |
| GET | /extensiones | パネルが電話として使える内線(予約済みの内線は表示されません)。 |
| POST | /webphone-sesion | ブラウザを内線の電話として登録します(`{extension_id}`)。電話システムが毎回ローテーションする短期の SIP 資格情報を返します。スコープ `voice:write`。電話システムのキーはサーバーの外に出ません。 |
本物の例
エージェントのメッセージを送信する(curl)
curl -X POST \
https://api.inteligenciaviva.com/v1/workspaces/$WS/conversations/$CONV/messages \
-H "Authorization: Bearer $IV_KEY" \
-H "Content-Type: application/json" \
-d '{"content": "Hi! I checked your order — it ships tomorrow."}'会話を一覧する(JavaScript)
const res = await fetch(
`https://api.inteligenciaviva.com/v1/workspaces/${WS}/conversations`,
{ headers: { Authorization: `Bearer ${process.env.IV_KEY}` } }
);
const { data } = await res.json();Webhookの署名を検証する(Node)
import { createHmac, timingSafeEqual } from "node:crypto";
function verify(secret, rawBody, header, toleranceSec = 300) {
const { t, v1 } = Object.fromEntries(
header.split(",").map((p) => p.split("="))
);
if (Math.abs(Date.now() / 1000 - Number(t)) > toleranceSec) return false;
const expected = createHmac("sha256", secret)
.update(`${t}.${rawBody}`)
.digest("hex");
return timingSafeEqual(Buffer.from(expected), Buffer.from(v1));
}
Webhook
HTTPSエンドポイントを登録すると、すべてのイベントを署名付きでPOSTします。ヘッダーは`iv-signature: t=<unix>,v1=<hex>`で、`v1`はエンドポイントのシークレットによる`<timestamp>.<raw body>`のHMAC-SHA256です ― 5分より古いものは拒否してください(リプレイ対策)。配信に失敗した場合は、新しい署名で最大5回まで自動的に再試行されます。
| conversation.created | いずれかのチャネルで新しい会話が始まりました。 |
| message.created | メッセージが届きました(訪問者、人間、AI、システム)。 |
| handoff.requested | AIが人間を必要と判断しました ― まさにその瞬間に、要約付きで。 |
| conversation.resolved | 会話がクローズされました。AIが単独でクローズしたかどうかも伝えます。 |
すべての配信とそのステータスは記録されます ― 信頼できないWebhookは、無いよりも悪いからです。
リアルタイムストリーミング
ライブUIのためには、ワークスペースのストリームに対してWebSocketを開き、会話イベントを発生と同時に受信してください ― 私たち自身のエージェント向けアプリが使っているのと同じチャネルです。
wss://api.inteligenciaviva.com/v1/workspaces/{workspaceId}/stream
エラーと制限
エラーは慣例どおりのHTTPです: `400`不正なリクエスト、`401`キーの欠落または無効、`403`スコープのないキー、`404`このワークスペースにないリソース、`429`レート制限(ジッターを入れてバックオフし再試行)、`5xx`私たちの責任 ― 冪等なリクエストは再試行してください。ボディには常に`error.code`と、人間向けの`error.message`が含まれます。レート制限はキー単位で、実際の連携には十分に寛大です。
よくある質問
このドキュメントは願望ですか、それとも実際の面ですか?
実際のものです。現在のバックエンドにマウントされているルートに対して書かれています。ここで「近日公開」とあるものは、まだ存在しません ― 私たちは実体のないものをドキュメント化しません。
APIを使うには有料プランが必要ですか?
はい ― APIは有料プラットフォームの一部です(Proに含まれます)。無料のウィジェットとWordPressプラグインはクライアントサイドで動作し、APIをまったく必要としません。
読み取り専用キーと読み書きキーの違いは?
読み取り専用キーは一覧と取得はできますが、変更は決してできません ― ダッシュボードやBIに最適です。読み書きキーはメッセージ、連絡先、AIエージェント、設定を作成できます。
新着メッセージの通知はポーリングとWebhookのどちらで受け取るべきですか?
サーバーにはWebhook(`message.created`)、ライブUIにはWebSocketストリームです。ポーリングも動作しますが、リアルタイムに到達する前にレート制限に当たるでしょう。
Webhookがあなたたちから来たことを、正確にはどう検証しますか?
エンドポイントのシークレットで`<t>.<raw body>`のHMAC-SHA256を再計算し、`iv-signature`ヘッダーの`v1`値と一定時間比較で照合してください。`t`が300秒より古ければ拒否します。動作するコードがこのページにあります。
自分のWebhookエンドポイントがダウンしていたら?
失敗した配信を記録し、新しいタイムスタンプと署名で最大5回まで自動的に再試行します。その間にエンドポイントが削除または無効化されていれば、再試行はきれいに停止します。
AIから自前のエスカレーションシステムへ引き継げますか?
はい ― そのために`handoff.requested`があります。会話が担当者に渡った瞬間(訪問者が求めた、危機や苛立ちの兆候があった、または回答がナレッジに基づいていなかった)に、会話の要約とともに発火するので、誰かに知らせたり、別のシステムでチケットを作成したりできます。
今日、APIで操作できるチャネルはどれですか?
ウェブチャットは端から端まで稼働しており、このリファレンスのすべてが今日動きます。Telegramと以降のメッセージングチャネルは、提供され次第、同じ会話モデルに接続されます ― あなたの連携コードは変わりません。
SDKはありますか?
Flutter SDKが私たち自身のエージェント向けアプリを支えており、EnterpriseのホワイトラベルSDKの基盤でもあります。サーバー向けには、RESTの面を意図的にプレーンにしています ― どんなHTTPクライアントでもラッパーなしで動きます。
APIのバグや、このドキュメントの欠落はどこに報告すればいいですか?
l@inteligenciaviva.comへお書きください。嘘をつくドキュメントもバグです ― 同じ深刻度で扱います。