究極の開発者 API ガイド
安全な Chirps 連携を構築するために検証されたサーバー間 API です。ダッシュボード専用の請求・OAuth、公開ウィジェットコールバック、プロバイダー Webhook、Cron、内部ルートは意図的に除外しています。
1. 認証とコア原則
ベースURL: https://chirps.cc
すべてのAPIエンドポイントは、AuthorizationヘッダーにChirps APIキーを必要とします。APIキーは、ダッシュボードの開発者セクションにあるAPIマネージャーから生成できます。
Authorization: Bearer <YOUR_CHIRPS_API_KEY>リクエスト例:
curl -X GET https://chirps.cc/api/billing/usage \
-H "Authorization: Bearer <YOUR_CHIRPS_API_KEY>" \
-H "Content-Type: application/json"標準的なエラー処理
| ステータスコード | 説明 |
|---|---|
200 OK | リクエストは成功しました。 |
400 Bad Request | JSONペイロードの検証に失敗しました。詳細配列が含まれます。 |
401 Unauthorized | トークンが不足しているか、期限切れです。 |
402 Payment Required | ワークスペースが請求制限に達しました。 |
403 Forbidden | ユーザーに必要なRBAC権限がありません。 |
404 Not Found | 要求されたリソースは存在しません。 |
500 Server Error | 予期せぬプラットフォームエラーです。 |
409 Conflict | The request conflicts with current state, such as a booking slot that is no longer available. |
413 Payload Too Large | The request exceeds the endpoint's documented size limit. |
429 Too Many Requests | The API-key request limit was reached; retry after the current window resets. |
503 Service Unavailable | A required safety or rate-limit dependency is unavailable. Retry with backoff; the request is rejected rather than processed without protection. |
スコープと最小権限
各キーは選択されたスコープだけに制限されます。可能な限り読み取り専用キーを使い、連携ごとに別のキーを作成してください。書き込みスコープに対応する読み取り権限は自動では含まれません。
assistants:read
assistants:write
analytics:read
artifacts:read
artifacts:write
billing:read
bookings:read
bookings:write
chat:write
connectors:read
connectors:write
conversations:read
conversations:write
knowledge:read
knowledge:write
leads:read
leads:write
telephony:read
telephony:write
widget:writeAPI-key rate limit
Each developer key is limited to 300 requests per rolling minute by default. The limit is atomic across all application instances and can be changed by the platform with API_KEY_RATE_LIMIT_PER_MINUTE. A rejected request returns 429; retry only after the window resets.
2. アシスタントのライフサイクル(作成)
GET /api/assistants
アシスタントの一覧表示
APIキーのワークスペースに関連付けられたすべてのアシスタントのリストを取得します。
アシスタントの作成
POST /api/assistants
すべての基本設定を持つ新しいアシスタントを作成します。
{
"businessName": "Acme Corp",
"businessUrl": "https://acme.com",
"knowledgeBaseType": "both",
"knowledgeBaseUrl": "https://acme.com/help",
"knowledgeBaseText": "Raw text content of a document...",
"knowledgeBaseFileName": "company_handbook.pdf",
"language": "en",
"isMultiLanguage": false,
"tonePersonality": "professional",
"isCustomPersonality": false,
"supportEmail": "[email protected]",
"maxPages": 5,
"maxDepth": 2,
"welcomeMessageDelay": 2
}| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
businessName | String | はい | ビジネス名(2~100文字)。 |
businessUrl | String | はい | ビジネスウェブサイトの有効なURL(最大500文字)。 |
knowledgeBaseType | Enum | はい | 次のいずれか: "url"、"document"、"both"、"none"。 |
knowledgeBaseUrl | String | いいえ | タイプが"url"または"both"の場合に指定する必要があります。 |
knowledgeBaseText | String | いいえ | タイプが"document"または"both"の場合の生テキスト。 |
knowledgeBaseFileName | String | いいえ | テキストを提供する場合は、アップロードされたファイルの名前。 |
language | String | はい | 言語コード(例: "en"、"es")。 |
isMultiLanguage | Boolean | いいえ | 自動翻訳を有効にします。デフォルトはfalseです。 |
tonePersonality | String | はい | 例: "professional"、"friendly"。最大100文字。 |
isCustomPersonality | Boolean | いいえ | カスタムトーンを有効にします。デフォルトはfalseです。 |
customPersonalityDescription | String | いいえ | カスタムトーンが有効な場合の指示(最大2000文字)。 |
additionalInstructions | String | いいえ | コアプロンプトの指示(最大10000文字)。 |
supportEmail | String | はい | エスカレーション用の有効なメールアドレス。 |
maxPages | Number | いいえ | クロールするページ数。最小1、最大100。デフォルトは5です。 |
maxDepth | Number | いいえ | クロール深度。最小1、最大20。デフォルトは2です。 |
welcomeMessageDelay | Number | いいえ | 挨拶までの遅延時間(秒)。最小0、最大6。デフォルトは2です。 |
アシスタントの削除
DELETE /api/assistants/:id
アシスタントを完全に削除し、そのすべてのナレッジノードと履歴を連鎖的に削除します。ペイロードは不要です。
Creation validation and quota safety
| Input | Contract |
|---|---|
knowledgeBaseUrl | For url or both: 1–20 comma-separated public HTTP(S) URLs, with at most 2,000 characters in total. |
knowledgeBaseText | Required for document or both; maximum 2,000,000 characters. |
knowledgeBaseFileName | Optional source label; maximum 255 characters. |
maxPages / maxDepth | Requested values are bounded by both the documented hard limits and the workspace plan. |
Creation allowance is reserved atomically before insertion, so concurrent requests cannot exceed the monthly quota. Database insertion failures refund that reservation. A created assistant starts inactive in developer mode; call the setup endpoint and wait for its successful terminal event before publishing it.
3. アシスタント分析と統計
アシスタントの作成と利用後すぐに、そのパフォーマンス指標をプログラムで取得できます。
GET /api/analytics/overview?assistantId=uuid&range=30
指定されたアシスタントの利用統計、総メッセージ数、獲得リード数、および一般的なエンゲージメント指標を取得します。range パラメータはオプションです(日数、最小7日、最大365日、デフォルト30日)。
期待されるレスポンス
{
"totalConversations": 1245,
"totalMessages": 8420,
"totalLeads": 156,
"totalBookings": 42,
"satisfactionRate": 94,
"avgMessagesPerSession": 6.7,
"avgSessionsPerDay": 41.5,
"liveNow": 3,
"onlineNow": 12,
"dailySeries": [
{
"date": "2026-07-15",
"conversations": 45,
"messages": 310,
"leads": 5,
"bookings": 2
}
],
"agentStats": [
{
"name": "Jane Doe",
"messagesSent": 120,
"csat": 98
}
]
}| プロパティ | 型 | 説明 |
|---|---|---|
totalConversations | 数値 | アシスタントが処理したチャットセッションの総数。 |
totalMessages | 数値 | すべての会話で送信されたメッセージ(ユーザー + AI)の総数。 |
totalLeads | 数値 | 抽出されたユニークなリード(名前、メールアドレス、電話番号)の総数。 |
totalBookings | 数値 | 正常に予約されたカレンダーアポイントメントの総数。 |
satisfactionRate | 数値 | 総評価数に対する肯定的なフィードバック評価の割合(0-100)。 |
avgMessagesPerSession | 数値 | 会話あたりの平均メッセージ交換数。 |
avgSessionsPerDay | 数値 | リクエストされた範囲内での1日あたりの平均会話数。 |
liveNow | 数値 | 現在、人間のエージェントが引き継いでいるアクティブな会話の数。 |
onlineNow | 数値 | 過去2分以内にAIと活発にチャットしているユーザーの数。 |
dailySeries | 配列 | 日付ごとの conversations、messages、leads、bookings のカウントを含む日次オブジェクトの配列。 |
agentStats | 配列 | messagesSent および csat(顧客満足度スコア)を含む、人間のエージェントのパフォーマンス指標。 |
4. ナレッジとトレーニング
アシスタントが作成されたら、「ナレッジノード」を介してその頭脳を管理します。各ノードは、データのチャンク(クロールされたURL、アップロードされたドキュメント、または手動のテキストスニペット)を表します。
ナレッジノードの管理
GET /api/assistants/:id/nodes - このアシスタントのすべてのナレッジノードを一覧表示します。
POST /api/assistants/:id/nodes - 新しいナレッジブロックを手動で挿入します。
{
"title": "Return Policy",
"refined_content": "We offer a 30-day return policy for all unused items...",
"type": "text",
"metadata": {}
}PATCH /api/assistants/:id/nodes/:nodeId - 既存のノードのコンテンツを変更するか、そのアクティブ状態を切り替えます。
{
"title": "Updated Return Policy",
"refined_content": "We offer a 60-day return policy now...",
"is_active": true
}DELETE /api/assistants/:id/nodes/:nodeId - ナレッジブロックを完全に削除します。
POST /api/assistants/:id/nodes/:nodeId/re-crawl - スクレイパーにこのノードに関連付けられたURLを再クロールさせ、そのコンテンツを更新するよう強制します。ペイロード: {}。
AIトレーニング
POST /api/assistants/:id/train - すべてのis_activeナレッジノードをコンパイルし、AIオーケストレーターを使用して新しいマスターシステムプロンプトを動的に合成します。ペイロード: {}。
Upload, crawl, and index consistency
| Operation | Limits and guarantees |
|---|---|
| Manual node | Title: 1–200 characters; content: 1–200,000 characters; metadata: object up to 20,000 serialized characters. |
| File upload | PNG, JPEG, WebP, PDF, DOCX, TXT, or Markdown; maximum 10 MB. Failed extraction creates a disabled repairable node and returns vector_sync_pending: true. |
| Deep crawl | maxPages is a positive integer capped by the plan (100 hard maximum); depth is capped at 20. Only public HTTP(S) destinations are allowed, including redirects and browser subrequests. |
| Enable / disable | Disabled nodes are removed from the vector index and are also filtered at retrieval time. Re-enable or edit an active node to rebuild its vectors. |
vector_sync_pending response means the record was saved but is not yet guaranteed searchable; call the sync endpoint or retry the edit.POST /api/knowledge/urls is retained only to return an explicit 410 Gone; it never stores data. Migrate to POST /api/assistants/:id/nodes/deep-crawl.5. ウィジェットの外観と動作
Every accepted PATCH field, its real default, bounds, plan behavior, and nested shape.
PATCH /api/assistants/:id/widget-config
Send only the fields you want to change. The API rejects unknown keys and invalid nested data instead of silently storing configuration the widget cannot use.
{
"designPreset": "corporate-soft",
"primaryColor": "#1972F5",
"theme": "dark",
"bubbleStyle": "branded-drawer",
"bubbleText": "Talk to our team",
"welcomeMessages": [
{
"text": "Hello! How can I help?",
"delay": 1.5
}
],
"welcomeSuggestions": [
"View pricing",
"Book a demo"
],
"pageVisibility": {
"mode": "exclude",
"paths": [
"/checkout/*"
]
},
"voiceEnabled": true,
"voiceName": "Aoede",
"copilotEnabled": true,
"gdprConsentEnabled": true,
"privacyPolicyUrl": "https://example.com/privacy"
}| Field | Type / bounds | Default | Effect | Plan behavior |
|---|---|---|---|---|
primaryColor | hex color | #000000 | 16進数カラーコード(例: "#000000")。 | — |
designPreset | enum | default | Visual system: default, legacy, corporate, corporate-soft, editorial. | — |
position | enum | bottom-right | "bottom-right"、"bottom-left"、"top-right"、"top-left"。 | — |
theme | enum | light | "light" または "dark"。 | — |
fontFamily | enum | default | "default" (Inter) または "inherit"。 | — |
bubbleStyle | enum | circle | "circle"、"bar"、"drawer"、"branded-circle"、"branded-bar"、"branded-drawer"。 | Branded launcher styles require custom-branding access. |
bubbleText | string (1–80) | Chat with us | バブルの横に表示するテキスト(バー/ドロワースタイル用)。 | — |
customLogoUrl | HTTP(S) URL or null | null | カスタムヘッダーロゴ画像へのURL。 | Requires custom-branding access. Prefer HTTPS or the widget-logo upload endpoint. |
title | string (1–50) | business name | ウィジェットヘッダーのタイトル。 | — |
headerSubtitle | string (0–100) | We typically reply instantly | ウィジェットヘッダーのサブタイトル。 | — |
welcomeMessage | string (0–300) | Hi! How can I help you today? | 最初の挨拶メッセージ。 | — |
welcomeMessages | array (1–5) | one greeting | Ordered greeting objects with text (1–300) and delay in seconds (0–10). | — |
welcomeMessageDelay | number (0–10) | 2 | 挨拶までの遅延時間(秒単位)。 | — |
welcomeSuggestions | string[] (max 3) | [] | 最初のクイック返信チップ用の文字列の配列。 | — |
inputPlaceholder | string (1–100) | Type your message... | メッセージ入力のプレースホルダーテキスト。 | — |
language | language code | assistant language | ウィジェットの言語コード(例: "en"、"fr")。 | — |
showBranding | boolean | true | Show the Powered by Chirps attribution. | Plans without branding removal always force true. |
voiceEnabled | boolean | true | 音声通話を有効にします。 | Plans without voice access always force false. |
voiceModel | string | platform default | Realtime voice model identifier. Normally leave unchanged so Chirps can use the supported platform model. | — |
voiceName | enum | Fenrir | 音声応答の音声識別名。利用可能な音声は以下を参照してください。 | — |
fileUploadEnabled | boolean | true | ユーザーが添付ファイルをアップロードできるようにします。 | Plans without file uploads always force false. |
dictationEnabled | boolean | true | 音声入力(音声認識)を有効にします。 | — |
copilotEnabled | boolean | plan default | Allow the DOM-navigation Copilot experience. | Plans without Copilot always force false. |
pageVisibility | object | { mode: all, paths: [] } | ウィジェットが表示されるページを決定します(mode、paths)。 | — |
humanizerEnabled | boolean | true | Apply the conversational response-style pass. | — |
promptInjectionProtectionEnabled | boolean | true | Screen visitor and uploaded-file prompt injection attempts and keep lower-trust content from overriding assistant instructions. | — |
rateLimitEnabled | boolean | true | チャットのレート制限を有効にします。デフォルトはtrueです。 | — |
rateLimitMaxMessages | integer (1–500) | 30 | ウィンドウ内の最大メッセージ数。デフォルトは30です。 | — |
rateLimitTimeWindow | integer minutes (1–1440) | 60 | 時間枠(分単位)。デフォルトは60です。 | — |
privacyPolicyUrl | HTTP(S) URL | empty | プライバシーポリシーへのURL。 | — |
gdprConsentEnabled | boolean | false | Show the compact chat privacy notice before the visitor sends data. | — |
gdprDataMaskingEnabled | boolean | false | 保存前にPIIをマスクします。デフォルトはfalseです。 | — |
cookieConsentEnabled | boolean | false | Enable widget cookie preferences and consent UI. | — |
cookieConsentAnalyticsEnabled | boolean | true | Offer optional analytics in cookie preferences. Analytics events remain blocked until the visitor affirmatively consents. | — |
Page visibility matching
Use exact paths such as /pricing, or append /* to include descendants such as /docs/*. include shows only matches; exclude hides matches; all ignores paths. Full URLs are normalized to their pathname by the widget.
Available voice names
Zephyr, Aoede, Kore, Leda, Callirrhoe, Despina, Erinome, Laomedeia, Achernar, Pulcherrima, Gacrux, Algenib, Sulafat, Puck, Charon, Fenrir, Orus, Enceladus, Iapetus, Umbriel, Algieba, Autonoe, Rasalgethi, Alnilam, Schedar, Sadachbia, Achird, Zubenelgenubi, Sadaltager
GET /api/assistants/:id/widget-config without an API key. That read is intentionally origin-bound to the authorized business domain in production mode and returns plan-normalized public configuration. It is not a server-to-server developer endpoint; never treat it as a way to read private assistant settings.6. インタラクティブアーティファクト
The complete configuration model for forms, bookings, cards, CSAT, and custom tools.
GET /api/assistants/:id/artifacts · PUT /api/assistants/:id/artifacts · PATCH /api/assistants/:id/artifacts
Artifacts are tool-driven UI. The model calls the enabled tool and Chirps renders it; integrations must send configuration JSON, never {{ARTIFACT: ...}} strings.
{
"form": {
"enabled": true,
"title": "Request a quote",
"description": "Collect the details needed for a quote.",
"triggerRules": "When a visitor explicitly asks for a quote.",
"fields": [
{
"key": "name",
"label": "Full name",
"type": "text",
"required": true,
"placeholder": "Jane Doe"
},
{
"key": "email",
"label": "Work email",
"type": "email",
"required": true
}
],
"submitLabel": "Request quote"
},
"booking": {
"enabled": true,
"title": "Book a consultation",
"description": "Choose an available time.",
"triggerRules": "When a visitor asks to book a meeting.",
"services_enabled": false,
"meetings_enabled": true,
"requiresScheduling": true,
"timezone": "Europe/Paris",
"slotDuration": 30,
"bufferMinutes": 10,
"workingHours": {
"monday": {
"enabled": true,
"start": "09:00",
"end": "17:00"
},
"tuesday": {
"enabled": true,
"start": "09:00",
"end": "17:00"
},
"wednesday": {
"enabled": true,
"start": "09:00",
"end": "17:00"
},
"thursday": {
"enabled": true,
"start": "09:00",
"end": "17:00"
},
"friday": {
"enabled": true,
"start": "09:00",
"end": "17:00"
},
"saturday": {
"enabled": false,
"start": "10:00",
"end": "14:00"
},
"sunday": {
"enabled": false,
"start": "10:00",
"end": "14:00"
}
},
"blockedDates": [
"2026-12-25"
],
"meeting_intake_fields": [
{
"key": "email",
"label": "Email",
"type": "email",
"required": true
}
],
"submitLabel": "Book meeting"
},
"card": {
"enabled": false,
"ctaLabel": "View details",
"ctaUrl": "",
"description": "",
"triggerRules": ""
},
"csat_survey": {
"enabled": true,
"title": "How was your experience?",
"description": "One-click feedback.",
"triggerRules": "Only after the request is resolved."
},
"custom": []
}| Section | Accepted properties | Runtime behavior |
|---|---|---|
form | enabled, title, description, triggerRules, fields, submitLabel | Lead capture and structured intake through show_form. |
booking | enabled, title, description, triggerRules, services_enabled, meetings_enabled, requiresScheduling, timezone, slotDuration, bufferMinutes, workingHours, blockedDates, categories, services, meeting_intake_fields, submitLabel | Meeting or service scheduling through show_booking; supplied values can be prefilled and exact requested slots are verified. |
card | enabled, ctaLabel, ctaUrl, description, triggerRules | Transactional rich-card behavior when verified product data exists. |
csat_survey | enabled, title, description, triggerRules | Thumbs-up/down feedback through show_csat_survey. |
custom | Array of enabled, name, type, description, triggerRules, schema, isCustom | Plan-gated custom tool-backed artifacts. |
Field schema
| Field | Type / bounds | Effect |
|---|---|---|
key | string | Stable machine key used by prefilled_data and requested_fields. |
label | string | Visitor-facing label. |
type | enum | text, email, tel, textarea, number, date, url, dropdown, radio, checkbox, slider, select, or location. |
required | boolean | Blocks submission until a valid value is supplied. |
placeholder | string (max 200) | Optional hint shown inside the control. |
options | string[] | Choices for dropdown, radio, and select controls. |
min, max, step | number | Numeric and slider bounds. |
geo_scope | object | Location boundary: worldwide, continent, country, state, city, or custom; optional value and map bounds. |
Booking service schema
| Field | Type / bounds | Effect |
|---|---|---|
id, name, description | string | Stable service identity and visitor-facing copy. |
duration | minutes | Service duration; the configured slot duration is the fallback. |
category, price | string | Optional filtering and display metadata. |
routing.type | enum | virtual, physical, or phone. |
routing.platform | enum | google_meet, teams, or custom for virtual services. |
routing.link, routing.address | string | Destination appropriate to the selected routing type. |
intake_fields | field[] | Service-specific information requested during booking. |
Validation limits and scheduling rules
| Field | Type / bounds | Effect |
|---|---|---|
fields, meeting_intake_fields, intake_fields | max 50 each | Every field needs a unique machine key, label, and supported type. |
services / categories | max 100 each | Service IDs should remain stable after clients begin storing them. |
slotDuration | integer 5–480 minutes | Length of generated calendar slots. |
bufferMinutes | integer 0–1440 minutes | Unavailable gap inserted around bookings. |
timezone | IANA time-zone name | Business schedule zone, for example Europe/Paris; visitor times are converted for display and calendar invitations. |
workingHours | seven day objects | Each enabled day uses 24-hour HH:mm and must end after it starts. |
blockedDates | YYYY-MM-DD[] (max 366) | Dates unavailable in the business time zone. |
custom | max 20 | Custom tools are plan-gated; names and types are required. |
Tool-call prefill behavior
| Field | Type / bounds | Effect |
|---|---|---|
prefilled_data | object | Values already learned in chat, keyed by configured field key. |
requested_fields | string[] | Show only the configured fields relevant to this intent. |
mode | meeting or service | Select the general meeting flow or a configured service flow. |
selected_service_id | string | Preselect a configured service; never invent an ID. |
requested_categories | string[] | Restrict the visible service list to configured categories. |
preferred_start_time_iso | ISO-8601 | Ask the widget to verify one visitor-requested instant before showing approval. |
artifacts array; streaming responses emit event: artifacts with { artifacts: [...] }. Chirps also keeps compatibility tags in message text for existing widgets and stored history. New clients should consume the structured field/event and treat message text as display copy.7. コネクターとツール
Discover provider schemas at runtime, store credentials securely, then activate only the tools an assistant needs.
Start with GET /api/marketplace/connectors. Its provider definitions are the source of truth for credential fields, configuration fields, available tools, defaults, and required values; this keeps custom and future providers discoverable without a documentation release.
{
"provider": "shopify",
"name": "Shopify",
"credentials": {}
}- Install the workspace connector record with
POST /api/assistants/:id/connectors;credentialsmust be omitted or{}. - Read its exact field schema from
GET /api/marketplace/connectorsand activate it withPOST /api/assistants/:id/connectors/:connectorId/activate. - Send
configValues, optionalenabledTools, and optionalinstructions. Chirps verifies non-custom connectors and discovers the tools before saving the integration. - Rotate secrets by calling the activation endpoint again.
PUTonly renames a named Custom API. - Use
DELETE /api/assistants/:id/connectorswith{ connectorId }to disable it for one assistant. Use the nestedDELETE .../:connectorIdonly to permanently remove it from the workspace and every assistant.
| Field | Type / bounds | Effect |
|---|---|---|
configValues | object (max 100 scalar values) | Exact keys from the marketplace schema. Values are bounded and secrets are write-only. |
enabledTools | string[] (max 200) | Optional allow-list of tools discovered from the verified connector. |
instructions | string (max 10,000) | Assistant-specific constraints for tool use. |
name | string (max 120) | Optional rename during activation, supported only for named Custom APIs. |
8. 連携とデプロイ
アシスタントの設定とトレーニングが完了したら、主に2つの方法でデプロイできます。
オプションA: ウェブ埋め込み (フロントエンド)
アシスタントを標準的なウェブサイト(WordPress、Shopify、Reactなど)に統合する最も簡単な方法です。埋め込みコードは完全に決定論的です。取得するためのエンドポイントは必要ありません。サイトの<head>にこれを追加するだけです。
<script>
window.chirpsConfig = { assistantId: "YOUR_ASSISTANT_ID" };
</script>
<script src="https://chirps.cc/embed.js" async></script>オプションB: ヘッドレス連携 (バックエンド / CRM / ボット)
カスタムクライアント(Discordボット、Telegram連携、ネイティブiOSアプリなど)を構築している場合、ウェブ埋め込みは使用しません。代わりに、/api/chatエンドポイントと直接やり取りします。
POST /api/chat または /api/chat?stream=true
重要: ヘッドレスおよびサーバー間の呼び出しには Authorization: Bearer <YOUR_CHIRPS_API_KEY> が必要です。公開のオリジン制限フローを使うのは、設置済みブラウザーウィジェットだけです。APIキーをフロントエンドJavaScriptに入れないでください。
{
"assistantId": "123e4567-e89b-12d3-a456-426614174000",
"sessionId": "unique-session-id-for-user",
"conversationId": "optional-uuid",
"message": "Hello, I need help with my billing."
}*(multipart/form-dataがtrueの場合、添付ファイル用にfileフィールドを持つfileUploadEnabledもサポートします。)*
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
assistantId | String | はい | アシスタントのUUID。 |
sessionId | String | はい | ご自身で生成してください。 チャット履歴をグループ化するための、ご自身のシステムからのユニークな識別子(例:DiscordユーザーID、TelegramチャットID、またはランダムなUUID)。 |
message | String | はい | メッセージのテキストコンテンツ(最大5000文字)。 |
conversationId | String | いいえ | 会話のUUID(最初のリクエストで返されます)。 |
id | String | いいえ | 重複排除を防ぐためのオプションのクライアント側メッセージID。 |
モード1: 標準JSONレスポンス (デフォルト)
/api/chatにPOSTリクエストを送信する(ストリームパラメーターなしで)と、完全なAI応答を待ち、標準のJSONオブジェクトを受け取ります。
{
"message": "Here is the information you requested...",
"conversationId": "uuid-of-conversation",
"messageId": "uuid-of-message"
}*(is_active_agent: trueが返された場合、人間がチャットを引き継いでおり、messageはnullになります。)*
モード2: サーバー送信イベントストリーミング (?stream=true)
URLに?stream=trueを追加すると、リアルタイムのサーバー送信イベント(SSE)ストリームを受信します。コードは以下の特定のイベントタイプをリッスンする必要があります。
- `event: token`:
{"text": "chunk"}を含みます。AIの応答テキストの各チャンクに対して発火します。 - `event: status`:
{"text": "Searching knowledge base..."}を含みます。バックエンドツールの実行状態を表します。 - `event: done`:
{"messageId": "uuid", "conversationId": "uuid", "message": "full text"}を含みます。生成が完全に完了したときに発火します。 - `event: error`:
{"error": "Error message"}を含みます。レート制限またはエラーが発生した場合に発火します。
ライブ引き継ぎエンドポイント
GET /api/chat/sessions
過去のセッションを取得します。
POST /api/chat/toggle-agent
人間による引き継ぎのためにAIを一時停止します。ペイロード: { "sessionId": "...", "isActive": true }
POST /api/chat/agent-message
人間のメッセージを送信します。ペイロード: { "sessionId": "...", "message": "..." }
Complete chat response contract
{
"message": "I've opened the booking calendar for you.",
"messageId": "uuid",
"conversationId": "uuid",
"artifacts": [
{
"type": "booking",
"title": "Book a consultation"
}
],
"sources": []
}A human takeover returns { message: null, conversationId, is_active_agent: true }. A streaming request can therefore return JSON before an SSE stream begins; check the response Content-Type.
Complete SSE event reference
| Event | Payload and behavior |
|---|---|
token | { text } — committed assistant text chunk. |
status | { text } — tool or retrieval progress for user-facing status UI. |
artifacts | { artifacts: [...] } — structured tool-generated UI payloads. |
sources | { sources, tag } — structured citations when enhanced streaming is enabled. |
provisional | { text } — temporary pre-tool text with X-Chirps-Stream-Version: 2. |
reset | {} — discard accumulated provisional text. |
commit | {} — commit accumulated provisional text. |
done | { messageId, conversationId, message } — authoritative final message. |
error | { error } — terminal generation error. |
X-Chirps-Stream-Version: 2 to receive provisional/reset/commit and structured source events. Clients that do not implement those events should omit the header and rely on token, artifacts, done, and error.9. 高度なアシスタント設定
PATCH /api/assistants/:id
コア設定の更新
アシスタントのコア設定、ペルソナ、およびスクレイピング範囲を変更します。
{
"business_name": "Acme Corp",
"business_url": "acme.com",
"business_description": "We sell anvils.",
"system_prompt": "You are a helpful assistant.",
"language": "en",
"tone_personality": "Friendly",
"support_email": "[email protected]",
"additional_instructions": "Never mention the Roadrunner.",
"is_multi_language": true,
"is_dev_mode": false,
"is_active": true,
"max_pages": 15,
"max_depth": 2,
"widget_config_merge": {
"rateLimitEnabled": true
}
}*注: すべてのフィールドはオプションです。更新したいフィールドのみを送信してください。*
アシスタントの削除
DELETE /api/assistants/:id
アシスタントを完全に削除し、すべてのナレッジノード、会話、メッセージに削除をカスケードします。アシスタントが完全に設定されていなかった場合、月間作成クォータが返金されます。
10. 電話機能と音声
GET /api/phone-numbers - 利用可能な番号を一覧表示します。
POST /api/phone-numbers/:subscriptionId/assign assigns an already-purchased Chirps phone subscription to an assistant. Send { "assistantId": "uuid" }; send { "assistantId": null } to unassign it. This endpoint does not purchase or provision a new number.
POST /api/assistants/:id/outbound - 発信をトリガーします。 Payload: { "phoneNumber": "+123...", "callReason": "Confirm the requested appointment", "conversationId": "optional-uuid" }
11. リード抽出
GET /api/leads?assistantId=uuid&page=1&limit=50&status=new - AIが会話中に抽出した、ページ分割された構造化リードを取得します。
GET /api/leads?id=leadId - 完全な会話トランスクリプトを含む、単一リードの詳細を取得します。
Public lead response
Lead objects contain id, assistant_id, conversation_id, session_id, name, email, phone, status, notes, artifact_id, ai_score, ai_summary, form_data, created_at, and the assistant business name. Internal voice-confirmation/idempotency identifiers are never returned.
12. 予約とカレンダー
GET /api/bookings?assistantId=uuid&start=ISO-8601&end=ISO-8601 - アシスタントによってスケジュールされたカレンダーの予定を取得します。日付でフィルタリングすることも可能です。
GET /api/bookings?id=bookingId - 会話のトランスクリプトを含む、単一の予約の詳細を取得します。
DELETE /api/bookings/cancel?id=bookingId - 有効な予約をキャンセルします。Chirpsの代替キャンセルメールを連携側で意図的に抑止する場合に限り、&silent=true を追加してください。
POST /api/bookings/reschedule - 予約を調整します。ペイロード: { "bookingId": "uuid", "newStartTime": "ISO-8601", "newEndTime": "ISO-8601" }
Public booking response and time zones
Booking objects contain the public appointment, guest, status, notes, and timestamp fields plus business_timezone. Times are ISO-8601 instants; format them in the viewer's time zone while preserving the returned business zone for schedule context. Internal confirmation IDs, provider calendar-event IDs, and database range columns are omitted.
13. アカウントと請求の使用状況
GET /api/billing/usage
ワークスペースの請求サイクル使用状況、サブスクリプションプランの制限、およびアシスタントの総数を取得します。注: APIキーを使用する場合、リクエストは自動的にAPIキーのワークスペースにスコープされるため、teamIdを提供する必要はありません。
レスポンス (`200 OK`):
{
"planName": "Pro",
"periodStr": "2023-10-01",
"assistantCount": 3,
"usage": {
"message_count": 1450,
"harvest_count": 12,
"recrawl_count": 5,
"train_count": 2,
"assistants_created_count": 1,
"voice_minutes_used": 0,
"sms_count": 0,
"email_count": 0,
"whatsapp_count": 0
},
"limits": {
"messages": 5000,
"assistants": 5,
"training": 50,
"recrawls": 20
},
"workspaceOwnerId": "uuid"
}14. 完全なエンドポイント一覧
The reviewed, API-key-compatible surface. Paths and JSON property names are never translated.
What belongs in the public developer API
These routes accept a scoped Chirps API key and enforce its workspace boundary. Dashboard-only billing/OAuth routes, browser widget callbacks, provider webhooks, cron jobs, and internal MCP routes are intentionally excluded.
id for duplicate protection. Do not automatically retry other write operations unless the response is clearly safe to retry. 402 means a plan quota was reached; 429 means throttled; 5xx may be transient.Assistants
| Method | Path | Scope | Request | Successful result |
|---|---|---|---|---|
GET | /api/assistants | assistants:read | — | Assistant array; credential fields omitted |
POST | /api/assistants | assistants:write | Assistant creation JSON | Created assistant and setup identifiers |
GET | /api/assistants/:id | assistants:read | — | Assistant configuration; secrets omitted |
PATCH | /api/assistants/:id | assistants:write | Supported fields only | Updated assistant |
DELETE | /api/assistants/:id | assistants:write | — | Deletion confirmation |
GET | /api/assistants/:id/setup | assistants:read | — | Setup and crawl status |
POST | /api/assistants/:id/setup | assistants:write | Empty body | SSE setup progress stream |
GET | /api/analytics/overview?assistantId=:id&range=30 | analytics:read | Query: range 7–365 | Engagement, lead, booking and agent metrics |
Knowledge and training
| Method | Path | Scope | Request | Successful result |
|---|---|---|---|---|
GET | /api/assistants/:id/nodes | knowledge:read | — | Knowledge node array |
POST | /api/assistants/:id/nodes | knowledge:write | { title, refined_content, type?, metadata? } | Stored and vectorized node |
PATCH | /api/assistants/:id/nodes/:nodeId | knowledge:write | { title?, refined_content?, is_active? } | Updated and re-vectorized node |
DELETE | /api/assistants/:id/nodes/:nodeId | knowledge:write | — | Node deletion confirmation |
POST | /api/assistants/:id/nodes/:nodeId/re-crawl | knowledge:write | Empty body | Refreshed URL node |
POST | /api/assistants/:id/nodes/upload | knowledge:write | multipart/form-data: file, title? | Extracted knowledge node |
POST | /api/assistants/:id/nodes/deep-crawl | knowledge:write | { maxPages? } | SSE crawl progress stream |
POST | /api/assistants/:id/nodes/sync | knowledge:write | Empty body | Vector store synchronization result |
POST | /api/assistants/:id/train | knowledge:write | Empty body | Compiled assistant prompt |
POST | /api/assistants/:id/harvest | knowledge:write | Empty body | Conversation insights added to knowledge |
POST | /api/knowledge/urls | knowledge:write | Deprecated | Always returns 410 with the assistant-scoped deep-crawl replacement path |
Widget, artifacts and connectors
| Method | Path | Scope | Request | Successful result |
|---|---|---|---|---|
PATCH | /api/assistants/:id/widget-config | widget:write | Partial widget configuration | Normalized widget configuration |
POST | /api/assistants/:id/widget-logo | widget:write | multipart/form-data: file (PNG/JPEG/WebP, max 2 MB) | Public logo URL |
GET | /api/assistants/:id/artifacts | artifacts:read | — | Form, booking, card and CSAT configuration |
PUT | /api/assistants/:id/artifacts | artifacts:write | Complete artifact configuration | Normalized configuration |
PATCH | /api/assistants/:id/artifacts | artifacts:write | Partial artifact configuration | Merged normalized configuration |
GET | /api/marketplace/connectors | connectors:read | — | Installable connector definitions; no credentials |
GET | /api/assistants/:id/connectors | connectors:read | — | Workspace connectors and assistant integrations |
POST | /api/assistants/:id/connectors | connectors:write | { provider, name, credentials?: {} } | Installed connector record; no operational access yet |
PUT | /api/assistants/:id/connectors/:connectorId | connectors:write | { name } (named custom APIs only) | Renamed connector; credentials omitted |
DELETE | /api/assistants/:id/connectors | connectors:write | { connectorId } | Connector disabled for this assistant only |
DELETE | /api/assistants/:id/connectors/:connectorId | connectors:write | — | Workspace connector and all assistant integrations deleted |
POST | /api/assistants/:id/connectors/:connectorId/activate | connectors:write | { configValues, enabledTools?, instructions?, name? } | Activated integration and tool list |
Conversations, leads and bookings
| Method | Path | Scope | Request | Successful result |
|---|---|---|---|---|
POST | /api/chat or /api/chat?stream=true | chat:write | { assistantId, sessionId, message, conversationId?, id? } | JSON reply with artifacts/sources or SSE token/artifacts/status/done events |
GET | /api/chat/sessions?assistantId=:id | conversations:read | — | 20 most recent session summaries |
GET | /api/assistants/:id/conversations?limit=20&status=active | conversations:read | Query: limit 1–50, status optional | Conversation summaries |
DELETE | /api/assistants/:id/conversations | conversations:write | { conversationIds: [uuid] } (max 100) | Deletion confirmation |
POST | /api/chat/toggle-agent | conversations:write | { sessionId, isActive } | Takeover state |
POST | /api/chat/agent-message | conversations:write | { sessionId, message } | Stored human-agent message |
POST | /api/chat/typing | conversations:write | { assistantId, sessionId, isTyping } | Typing-state confirmation |
POST | /api/chat/followup-draft | conversations:write | { conversationId|leadId, assistantId?, channel? } | AI-generated draft; consumes AI-message usage |
POST | /api/chat/conversation-followup | conversations:write | { conversationId|leadId, channel, recipient, subject?, message } | Dispatched follow-up result |
GET | /api/leads | leads:read | Query: id, or assistantId with page, limit, status | Lead detail with transcript or paginated leads; internal confirmation identifiers omitted |
POST | /api/leads | artifacts:write | Artifact submission JSON | Captured lead/booking result |
PATCH | /api/leads | leads:write | { leadId, status?, notes? } | Updated lead |
DELETE | /api/leads | leads:write | { leadId } or { leadIds: [uuid] } | Deletion count |
GET | /api/bookings | bookings:read | Query: id, or assistantId with start and end | Booking detail or booking array; provider and idempotency identifiers omitted |
DELETE | /api/bookings/cancel?id=:id | bookings:write | Query: silent=true optional | Cancellation and calendar-sync state |
POST | /api/bookings/reschedule | bookings:write | { bookingId, newStartTime, newEndTime } | Updated booking or available alternatives |
Telephony and account
| Method | Path | Scope | Request | Successful result |
|---|---|---|---|---|
GET | /api/phone-numbers | telephony:read | — | Numbers and assignable assistants in this workspace |
POST | /api/phone-numbers/:subscriptionId/assign | telephony:write | { assistantId } or { assistantId: null } | Routing update confirmation |
POST | /api/assistants/:id/outbound | telephony:write | { phoneNumber, callReason, conversationId? } | Provider call SID and conversation ID |
GET | /api/billing/usage | billing:read | — | Workspace plan, limits and current usage |
GET | /api/metadata?url=:httpsUrl | artifacts:read | Query: public HTTP(S) URL | Bounded page title, description and image metadata |