Developer API
开发者API

终极开发者 API 指南

经过审查的服务器到服务器 API,用于构建安全的 Chirps 集成。控制台账单与 OAuth 流程、公共小组件回调、提供商 Webhook、Cron 任务和内部路由均有意排除。

Developer API

1. 认证及核心原则

基本 URL: https://chirps.cc

所有 API 端点都需要“授权”标头中的 Chirps API 密钥。您可以从仪表板的开发人员部分 中的 API 管理器生成 API 密钥。

http
Authorization: Bearer <YOUR_CHIRPS_API_KEY>

请求示例:

bash
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 RequestJSON 负载验证失败。包括一个详细信息数组。
401 Unauthorized令牌丢失或过期。
402 Payment Required工作区已达到计费限制。
《403 禁止》用户没有所需的 RBAC 权限。
404 Not Found请求的资源不存在。
500 Server Error意外的平台错误。
409 ConflictThe request conflicts with current state, such as a booking slot that is no longer available.
413 Payload Too LargeThe request exceeds the endpoint's documented size limit.
429 Too Many RequestsThe API-key request limit was reached; retry after the current window resets.
503 Service UnavailableA required safety or rate-limit dependency is unavailable. Retry with backoff; the request is rejected rather than processed without protection.

作用域与最小权限

每个密钥仅限于所选作用域。尽可能使用只读密钥,并为每个集成创建单独的密钥。写入作用域不会自动授予对应的读取作用域。

scopes
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:write
API key security
API 密钥属于机密信息。请仅保存在服务器端,切勿嵌入网站或移动应用;如有泄露,请立即撤销。

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

Developer API

2. 助理生命周期(创建)

GET /api/assistants

列出助理

获取与 API 密钥工作区关联的所有助手的列表。

创建助理

POST /api/assistants

创建具有所有基本配置的新助手。

json
{

  "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细绳是的公司名称(2-100 个字符)。
businessUrl细绳是的企业网站的有效 URL(最多 500 个字符)。
knowledgeBaseType枚举是的以下之一:“url”、“文档”、“两者”、“无”。
knowledgeBaseUrl细绳不如果类型是“url”或“both”,则必须提供。
knowledgeBaseText细绳不如果类型为“文档”或“两者”,则为原始文本。
knowledgeBaseFileName细绳不如果提供文本,则为上传文件的名称。
language细绳是的语言代码(例如“en”、“es”)。
isMultiLanguage布尔值不启用自动翻译。默认为“假”。
tonePersonality细绳是的例如,“专业”、“友好”。最多 100 个字符。
isCustomPersonality布尔值不启用自定义音调。默认为“假”。
customPersonalityDescription细绳不自定义提示音说明(如果启用)(最多 2000 个字符)。
additionalInstructions细绳不核心提示说明(最多 10000 个字符)。
supportEmail细绳是的用于升级的有效电子邮件地址。
maxPages数字不要抓取的页面。最小值 1,最大值 100。默认为“5”。
maxDepth数字不爬行深度。最小值 1,最大值 20。默认为“2”。
welcomeMessageDelay数字不问候前延迟几秒。最小值 0,最大值 6。默认为“2”。

删除助手

DELETE /api/assistants/:id

永久删除助手并级联删除其所有知识节点和历史记录。无需有效负载。

Creation validation and quota safety

Input, Contract
InputContract
knowledgeBaseUrlFor url or both: 1–20 comma-separated public HTTP(S) URLs, with at most 2,000 characters in total.
knowledgeBaseTextRequired for document or both; maximum 2,000,000 characters.
knowledgeBaseFileNameOptional source label; maximum 255 characters.
maxPages / maxDepthRequested 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.

Developer API

3. 助理分析与统计

创建和使用后,您可以立即以编程方式获取助手的性能指标。

GET /api/analytics/overview?assistantId=uuid&range=30

获取指定助理的使用情况统计信息、消息总数、捕获的潜在客户以及一般参与度指标。 range 参数是可选的(天数,最小值 7,最大值 365,默认 30)。

预期反应

json
{

  "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数字在要求的范围内每天的平均会话数。
liveNow数字当前由人工代理接管的活动对话数量。
onlineNow数字最近2分钟内主动与AI聊天的用户数量。
「每日系列」大批每日对象数组,包含每个日期的“对话”、“消息”、“潜在客户”和“预订”计数。
agentStats大批人工代理的性能指标,包括“messagesSent”和“csat”(客户满意度得分)。
Developer API

4. 知识与培训

创建助手后,您可以通过“知识节点”管理它的大脑。每个节点代表一块数据(爬行的 URL、上传的文档或手动文本片段)。

管理知识节点

GET /api/assistants/:id/nodes - 列出该助手的所有知识节点。

POST /api/assistants/:id/nodes - 手动注入新的知识块。

json
{

  "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 - 修改现有节点的内容或切换其活动状态。

json
{

  "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 并更新其内容。有效负载:{}。

人工智能培训

POST /api/assistants/:id/train - 编译所有 is_active 知识节点并使用 AI 编排器动态合成新的主系统提示。有效负载:{}。

Upload, crawl, and index consistency

Operation, Limits and guarantees
OperationLimits and guarantees
Manual nodeTitle: 1–200 characters; content: 1–200,000 characters; metadata: object up to 20,000 serialized characters.
File uploadPNG, JPEG, WebP, PDF, DOCX, TXT, or Markdown; maximum 10 MB. Failed extraction creates a disabled repairable node and returns vector_sync_pending: true.
Deep crawlmaxPages 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 / disableDisabled 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.
Safe replacement
Deep crawl and document re-indexing prepare replacement data before retiring the previous searchable copy. If preparation fails, existing knowledge remains available. A vector_sync_pending response means the record was saved but is not yet guaranteed searchable; call the sync endpoint or retry the edit.
Retired endpoint
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.
Developer API

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.

json
{
  "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
FieldType / boundsDefaultEffectPlan behavior
primaryColorhex color#000000十六进制颜色代码(例如“#000000”)。—
designPresetenumdefaultVisual system: default, legacy, corporate, corporate-soft, editorial.—
positionenumbottom-right“右下”、“左下”、“右上”、“左上”。—
themeenumlight“亮”或“暗”。—
fontFamilyenumdefault“默认”(国际)或“继承”。—
bubbleStyleenumcircle"circle"、"bar"、"drawer"、“品牌圆”、“品牌吧台”、“品牌抽屉”`​​。Branded launcher styles require custom-branding access.
bubbleTextstring (1–80)Chat with us显示在气泡旁边的文本(对于栏/抽屉样式)。—
customLogoUrlHTTP(S) URL or nullnull自定义标题徽标图像的 URL。Requires custom-branding access. Prefer HTTPS or the widget-logo upload endpoint.
titlestring (1–50)business name小部件标题中的标题。—
headerSubtitlestring (0–100)We typically reply instantly小部件标题中的副标题。—
welcomeMessagestring (0–300)Hi! How can I help you today?最初的问候语。—
welcomeMessagesarray (1–5)one greetingOrdered greeting objects with text (1–300) and delay in seconds (0–10).—
welcomeMessageDelaynumber (0–10)2问候前延迟几秒。—
welcomeSuggestionsstring[] (max 3)[]用于初始快速回复芯片的字符串数组。—
inputPlaceholderstring (1–100)Type your message...消息输入的占位符文本。—
languagelanguage codeassistant language小部件语言代码(例如“en”、“fr”)。—
showBrandingbooleantrueShow the Powered by Chirps attribution.Plans without branding removal always force true.
voiceEnabledbooleantrue启用语音通话。Plans without voice access always force false.
voiceModelstringplatform defaultRealtime voice model identifier. Normally leave unchanged so Chirps can use the supported platform model.—
voiceNameenumFenrir音频响应​​的语音标识。请参阅下面的可用声音。—
fileUploadEnabledbooleantrue允许用户上传附件。Plans without file uploads always force false.
dictationEnabledbooleantrue启用语音听写(语音转文本)。—
copilotEnabledbooleanplan defaultAllow the DOM-navigation Copilot experience.Plans without Copilot always force false.
pageVisibilityobject{ mode: all, paths: [] }确定小部件出现在哪些页面上(“mode”、“paths”)。—
humanizerEnabledbooleantrueApply the conversational response-style pass.—
promptInjectionProtectionEnabledbooleantrueScreen visitor and uploaded-file prompt injection attempts and keep lower-trust content from overriding assistant instructions.—
rateLimitEnabledbooleantrue启用聊天速率限制。默认为真。—
rateLimitMaxMessagesinteger (1–500)30窗口中的最大消息数。默认 30。—
rateLimitTimeWindowinteger minutes (1–1440)60时间窗口以分钟为单位。默认 60。—
privacyPolicyUrlHTTP(S) URLempty您的隐私政策的 URL。—
gdprConsentEnabledbooleanfalseShow the compact chat privacy notice before the visitor sends data.—
gdprDataMaskingEnabledbooleanfalse保存前屏蔽 PII。默认为 false。—
cookieConsentEnabledbooleanfalseEnable widget cookie preferences and consent UI.—
cookieConsentAnalyticsEnabledbooleantrueOffer 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

Public runtime configuration
The installed browser widget reads 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.
Plan enforcement
Chirps normalizes plan-gated settings on both write and public config reads. Custom branding, file uploads, voice, and Copilot cannot be enabled by bypassing the dashboard.
Developer API

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.

json
{
  "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
SectionAccepted propertiesRuntime behavior
formenabled, title, description, triggerRules, fields, submitLabelLead capture and structured intake through show_form.
bookingenabled, title, description, triggerRules, services_enabled, meetings_enabled, requiresScheduling, timezone, slotDuration, bufferMinutes, workingHours, blockedDates, categories, services, meeting_intake_fields, submitLabelMeeting or service scheduling through show_booking; supplied values can be prefilled and exact requested slots are verified.
cardenabled, ctaLabel, ctaUrl, description, triggerRulesTransactional rich-card behavior when verified product data exists.
csat_surveyenabled, title, description, triggerRulesThumbs-up/down feedback through show_csat_survey.
customArray of enabled, name, type, description, triggerRules, schema, isCustomPlan-gated custom tool-backed artifacts.

Field schema

Field, Type / bounds, Effect
FieldType / boundsEffect
keystringStable machine key used by prefilled_data and requested_fields.
labelstringVisitor-facing label.
typeenumtext, email, tel, textarea, number, date, url, dropdown, radio, checkbox, slider, select, or location.
requiredbooleanBlocks submission until a valid value is supplied.
placeholderstring (max 200)Optional hint shown inside the control.
optionsstring[]Choices for dropdown, radio, and select controls.
min, max, stepnumberNumeric and slider bounds.
geo_scopeobjectLocation boundary: worldwide, continent, country, state, city, or custom; optional value and map bounds.

Booking service schema

Field, Type / bounds, Effect
FieldType / boundsEffect
id, name, descriptionstringStable service identity and visitor-facing copy.
durationminutesService duration; the configured slot duration is the fallback.
category, pricestringOptional filtering and display metadata.
routing.typeenumvirtual, physical, or phone.
routing.platformenumgoogle_meet, teams, or custom for virtual services.
routing.link, routing.addressstringDestination appropriate to the selected routing type.
intake_fieldsfield[]Service-specific information requested during booking.

Validation limits and scheduling rules

Field, Type / bounds, Effect
FieldType / boundsEffect
fields, meeting_intake_fields, intake_fieldsmax 50 eachEvery field needs a unique machine key, label, and supported type.
services / categoriesmax 100 eachService IDs should remain stable after clients begin storing them.
slotDurationinteger 5–480 minutesLength of generated calendar slots.
bufferMinutesinteger 0–1440 minutesUnavailable gap inserted around bookings.
timezoneIANA time-zone nameBusiness schedule zone, for example Europe/Paris; visitor times are converted for display and calendar invitations.
workingHoursseven day objectsEach enabled day uses 24-hour HH:mm and must end after it starts.
blockedDatesYYYY-MM-DD[] (max 366)Dates unavailable in the business time zone.
custommax 20Custom tools are plan-gated; names and types are required.

Tool-call prefill behavior

Field, Type / bounds, Effect
FieldType / boundsEffect
prefilled_dataobjectValues already learned in chat, keyed by configured field key.
requested_fieldsstring[]Show only the configured fields relevant to this intent.
modemeeting or serviceSelect the general meeting flow or a configured service flow.
selected_service_idstringPreselect a configured service; never invent an ID.
requested_categoriesstring[]Restrict the visible service list to configured categories.
preferred_start_time_isoISO-8601Ask the widget to verify one visitor-requested instant before showing approval.
Structured delivery for custom clients
Artifacts originate from model tool calls. Non-streaming chat responses include an 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.
PUT versus PATCH
PUT requires complete built-in sections and replaces the configuration. PATCH merges each supplied built-in section with the current normalized configuration. Unknown top-level sections are rejected.
Developer API

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.

json
{
  "provider": "shopify",
  "name": "Shopify",
  "credentials": {}
}
  1. Install the workspace connector record with POST /api/assistants/:id/connectors; credentials must be omitted or {}.
  2. Read its exact field schema from GET /api/marketplace/connectors and activate it with POST /api/assistants/:id/connectors/:connectorId/activate.
  3. Send configValues, optional enabledTools, and optional instructions. Chirps verifies non-custom connectors and discovers the tools before saving the integration.
  4. Rotate secrets by calling the activation endpoint again. PUT only renames a named Custom API.
  5. Use DELETE /api/assistants/:id/connectors with { connectorId } to disable it for one assistant. Use the nested DELETE .../:connectorId only to permanently remove it from the workspace and every assistant.
Field, Type / bounds, Effect
FieldType / boundsEffect
configValuesobject (max 100 scalar values)Exact keys from the marketplace schema. Values are bounded and secrets are write-only.
enabledToolsstring[] (max 200)Optional allow-list of tools discovered from the verified connector.
instructionsstring (max 10,000)Assistant-specific constraints for tool use.
namestring (max 120)Optional rename during activation, supported only for named Custom APIs.
Credential handling
Connector secrets are write-only. API responses return safe metadata, never raw stored credentials. Use one least-privilege provider credential per integration. Remote SSE MCP and Custom API endpoints must use a publicly routable HTTPS URL; local and private-network targets are rejected.
Developer API

8. 集成与部署

配置并培训您的助手后,您可以通过两种主要方式来部署它:

选项 A:Web 嵌入(前端)

将助手集成到标准网站(WordPress、Shopify、React 等)的最简单方法。嵌入代码纯粹是确定性的。您不需要端点来获取它。只需将其放入站点的“<head>”即可:

html
<script>
  window.chirpsConfig = { assistantId: "YOUR_ASSISTANT_ID" };
</script>
<script src="https://chirps.cc/embed.js" async></script>

选项 B:无头集成(后端/CRM/机器人)

如果您正在构建自定义客户端(例如 Discord 机器人、Telegram 集成或本机 iOS 应用程序),您将不会使用 Web Embed。相反,您将直接与“/api/chat”端点交互。

POST /api/chat 或 /api/chat?stream=true

重要: 无头及服务器到服务器调用必须包含 Authorization: Bearer <YOUR_CHIRPS_API_KEY>。只有已安装的浏览器小组件使用与来源绑定的公开流程。切勿把 API 密钥放入前端 JavaScript。

json
{

  "assistantId": "123e4567-e89b-12d3-a456-426614174000",
  "sessionId": "unique-session-id-for-user",
  "conversationId": "optional-uuid",
  "message": "Hello, I need help with my billing."
}

*(如果“fileUploadEnabled”为 true,还支持带有“file”附件字段的“multipart/form-data”)。*

范围, 类型, 必需的, 描述
范围类型必需的描述
assistantId细绳是的助手的UUID。
sessionId细绳是的您生成此。 来自您自己的系统的唯一标识符,用于对聊天历史记录进行分组(例如,Discord 用户 ID、Telegram 聊天 ID 或随机 UUID)。
message细绳是的消息的文本内容(最多 5000 个字符)。
conversationId细绳不对话的 UUID(在您的第一个请求中返回)。
id细绳不可选的客户端消息 ID 以防止重复数据删除。

模式 1:标准 JSON 响应(默认)

通过向“/api/chat”发送 POST 请求(不带流参数),您可以等待完整的 AI 响应并接收标准 JSON 对象。

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)

通过将“?stream=true”附加到 URL,您将收到实时服务器发送事件 (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

暂停人工智能让人类接管。有效负载:{ "sessionId": "...", "isActive": true }

POST /api/chat/agent-message

发送人类消息。负载:{ "sessionId": "...", "message": "..." }

Complete chat response contract

json
{
  "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
EventPayload 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.
Enhanced streaming
Send 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.
Developer API

9. 高级助手设置

PATCH /api/assistants/:id

更新核心配置

修改助手的核心设置、角色和抓取范围。

json
{

  "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

永久删除助手,并级联删除所有知识节点、对话、消息。如果助手从未完全设置,则会退还每月创建配额。

Developer API

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 - 触发出站呼叫。有效负载:{ "phoneNumber": "+123...", "callReason": "Confirm the requested appointment", "conversationId": "optional-uuid" }

Developer API

11. 线索提取

GET /api/leads?assistantId=uuid&page=1&limit=50&status=new - 获取对话期间人工智能提取的分页、结构化线索。

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.

Developer API

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.

Developer API

13. 账户和账单使用

GET /api/billing/usage

检索工作区的计费周期使用情况、订阅计划限制和助理总数。 注意: 使用 API 密钥时,请求的范围将自动限定在 API 密钥的工作区;您不需要提供“teamId”。

响应(`200 OK`):

json
{

  "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"
}
Developer API

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.

Retries and idempotency
Only chat messages accept a stable client 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
MethodPathScopeRequestSuccessful result
GET/api/assistantsassistants:read—Assistant array; credential fields omitted
POST/api/assistantsassistants:writeAssistant creation JSONCreated assistant and setup identifiers
GET/api/assistants/:idassistants:read—Assistant configuration; secrets omitted
PATCH/api/assistants/:idassistants:writeSupported fields onlyUpdated assistant
DELETE/api/assistants/:idassistants:write—Deletion confirmation
GET/api/assistants/:id/setupassistants:read—Setup and crawl status
POST/api/assistants/:id/setupassistants:writeEmpty bodySSE setup progress stream
GET/api/analytics/overview?assistantId=:id&range=30analytics:readQuery: range 7–365Engagement, lead, booking and agent metrics

Knowledge and training

Method, Path, Scope, Request, Successful result
MethodPathScopeRequestSuccessful result
GET/api/assistants/:id/nodesknowledge:read—Knowledge node array
POST/api/assistants/:id/nodesknowledge:write{ title, refined_content, type?, metadata? }Stored and vectorized node
PATCH/api/assistants/:id/nodes/:nodeIdknowledge:write{ title?, refined_content?, is_active? }Updated and re-vectorized node
DELETE/api/assistants/:id/nodes/:nodeIdknowledge:write—Node deletion confirmation
POST/api/assistants/:id/nodes/:nodeId/re-crawlknowledge:writeEmpty bodyRefreshed URL node
POST/api/assistants/:id/nodes/uploadknowledge:writemultipart/form-data: file, title?Extracted knowledge node
POST/api/assistants/:id/nodes/deep-crawlknowledge:write{ maxPages? }SSE crawl progress stream
POST/api/assistants/:id/nodes/syncknowledge:writeEmpty bodyVector store synchronization result
POST/api/assistants/:id/trainknowledge:writeEmpty bodyCompiled assistant prompt
POST/api/assistants/:id/harvestknowledge:writeEmpty bodyConversation insights added to knowledge
POST/api/knowledge/urlsknowledge:writeDeprecatedAlways returns 410 with the assistant-scoped deep-crawl replacement path

Widget, artifacts and connectors

Method, Path, Scope, Request, Successful result
MethodPathScopeRequestSuccessful result
PATCH/api/assistants/:id/widget-configwidget:writePartial widget configurationNormalized widget configuration
POST/api/assistants/:id/widget-logowidget:writemultipart/form-data: file (PNG/JPEG/WebP, max 2 MB)Public logo URL
GET/api/assistants/:id/artifactsartifacts:read—Form, booking, card and CSAT configuration
PUT/api/assistants/:id/artifactsartifacts:writeComplete artifact configurationNormalized configuration
PATCH/api/assistants/:id/artifactsartifacts:writePartial artifact configurationMerged normalized configuration
GET/api/marketplace/connectorsconnectors:read—Installable connector definitions; no credentials
GET/api/assistants/:id/connectorsconnectors:read—Workspace connectors and assistant integrations
POST/api/assistants/:id/connectorsconnectors:write{ provider, name, credentials?: {} }Installed connector record; no operational access yet
PUT/api/assistants/:id/connectors/:connectorIdconnectors:write{ name } (named custom APIs only)Renamed connector; credentials omitted
DELETE/api/assistants/:id/connectorsconnectors:write{ connectorId }Connector disabled for this assistant only
DELETE/api/assistants/:id/connectors/:connectorIdconnectors:write—Workspace connector and all assistant integrations deleted
POST/api/assistants/:id/connectors/:connectorId/activateconnectors:write{ configValues, enabledTools?, instructions?, name? }Activated integration and tool list

Conversations, leads and bookings

Method, Path, Scope, Request, Successful result
MethodPathScopeRequestSuccessful result
POST/api/chat or /api/chat?stream=truechat:write{ assistantId, sessionId, message, conversationId?, id? }JSON reply with artifacts/sources or SSE token/artifacts/status/done events
GET/api/chat/sessions?assistantId=:idconversations:read—20 most recent session summaries
GET/api/assistants/:id/conversations?limit=20&status=activeconversations:readQuery: limit 1–50, status optionalConversation summaries
DELETE/api/assistants/:id/conversationsconversations:write{ conversationIds: [uuid] } (max 100)Deletion confirmation
POST/api/chat/toggle-agentconversations:write{ sessionId, isActive }Takeover state
POST/api/chat/agent-messageconversations:write{ sessionId, message }Stored human-agent message
POST/api/chat/typingconversations:write{ assistantId, sessionId, isTyping }Typing-state confirmation
POST/api/chat/followup-draftconversations:write{ conversationId|leadId, assistantId?, channel? }AI-generated draft; consumes AI-message usage
POST/api/chat/conversation-followupconversations:write{ conversationId|leadId, channel, recipient, subject?, message }Dispatched follow-up result
GET/api/leadsleads:readQuery: id, or assistantId with page, limit, statusLead detail with transcript or paginated leads; internal confirmation identifiers omitted
POST/api/leadsartifacts:writeArtifact submission JSONCaptured lead/booking result
PATCH/api/leadsleads:write{ leadId, status?, notes? }Updated lead
DELETE/api/leadsleads:write{ leadId } or { leadIds: [uuid] }Deletion count
GET/api/bookingsbookings:readQuery: id, or assistantId with start and endBooking detail or booking array; provider and idempotency identifiers omitted
DELETE/api/bookings/cancel?id=:idbookings:writeQuery: silent=true optionalCancellation and calendar-sync state
POST/api/bookings/reschedulebookings:write{ bookingId, newStartTime, newEndTime }Updated booking or available alternatives

Telephony and account

Method, Path, Scope, Request, Successful result
MethodPathScopeRequestSuccessful result
GET/api/phone-numberstelephony:read—Numbers and assignable assistants in this workspace
POST/api/phone-numbers/:subscriptionId/assigntelephony:write{ assistantId } or { assistantId: null }Routing update confirmation
POST/api/assistants/:id/outboundtelephony:write{ phoneNumber, callReason, conversationId? }Provider call SID and conversation ID
GET/api/billing/usagebilling:read—Workspace plan, limits and current usage
GET/api/metadata?url=:httpsUrlartifacts:readQuery: public HTTP(S) URLBounded page title, description and image metadata
准备好开始了吗?

启动你的助手
10 分钟后。

注册、在您的网站上进行培训、自定义警报并嵌入您的网站。