私たちが開発に使っているのと同じ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 | この資格情報が担当できるワークスペースと、それぞれでの役割。 |
会話 /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 | 未読に戻す:既読マークをお客さまの最後のメッセージの手前まで戻します。 |
連絡先 /contacts
| GET | / | 連絡先を一覧します。 |
| GET | /{id} | 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 | / | ナレッジソースと索引状態の一覧。 |
チャネル /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 が行いますが、待たずに実行できます。 |
人間のエージェントと部署 /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 を返します — 悪用者に検知方法は説明しません。 |
添付・デバイス・ワークスペース /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`。 |
本物の例
エージェントのメッセージを送信する(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`です。AIの確信度がワークスペースのしきい値を下回った瞬間に、会話の要約を載せて発火します。担当者を呼び出したり、別のシステムでチケットを開いたりできます。
今日、APIで操作できるチャネルはどれですか?
ウェブチャットは端から端まで稼働しており、このリファレンスのすべてが今日動きます。Telegramと以降のメッセージングチャネルは、提供され次第、同じ会話モデルに接続されます ― あなたの連携コードは変わりません。
SDKはありますか?
Flutter SDKが私たち自身のエージェント向けアプリを支えており、EnterpriseのホワイトラベルSDKの基盤でもあります。サーバー向けには、RESTの面を意図的にプレーンにしています ― どんなHTTPクライアントでもラッパーなしで動きます。
APIのバグや、このドキュメントの欠落はどこに報告すればいいですか?
l@inteligenciaviva.comへお書きください。嘘をつくドキュメントもバグです ― 同じ深刻度で扱います。