Полное руководство по API для разработчиков
Проверенный серверный API для создания безопасных интеграций Chirps. Биллинг и OAuth панели, публичные callback-методы виджета, webhooks провайдеров, cron-задачи и внутренние маршруты намеренно исключены.
1. Аутентификация и основные принципы
Базовый URL: https://chirps.cc
Для всех конечных точек API требуется ключ API Chirps в заголовке Authorization. Вы можете сгенерировать ключ API в диспетчере API в [разделе «Разработчики» на панели управления] (https://chirps.cc/dashboard/developers).
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 | Нить | Да | Название компании (2-100 символов). |
businessUrl | Нить | Да | Действительный URL-адрес бизнес-сайта (максимум 500 символов). |
knowledgeBaseType | Перечисление | Да | Один из: `"url", "document", "both", "none". |
knowledgeBaseUrl | Нить | Нет | Должен быть указан, если тип — «url» или «both». |
knowledgeBaseText | Нить | Нет | Необработанный текст, если тип — «документ» или «оба». |
knowledgeBaseFileName | Нить | Нет | Имя загруженного файла при предоставлении текста. |
language | Нить | Да | Код языка (например, "en", "es"). |
isMultiLanguage | логическое значение | Нет | Включите автоматический перевод. По умолчанию «ложь». |
tonePersonality | Нить | Да | Например, «профессиональный», «дружелюбный». Макс. 100 символов. |
isCustomPersonality | логическое значение | Нет | Включить собственный тон. По умолчанию «ложь». |
customPersonalityDescription | Нить | Нет | Пользовательские инструкции по тону, если они включены (максимум 2000 символов). |
additionalInstructions | Нить | Нет | Основные подсказки (максимум 10 000 символов). |
supportEmail | Нить | Да | Действительный адрес электронной почты для эскалации. |
maxPages | Число | Нет | Страницы для сканирования. Мин. 1, макс. 100. По умолчанию «5». |
maxDepth | Число | Нет | Глубина сканирования. Мин. 1, макс. 20. По умолчанию «2». |
welcomeMessageDelay | Число | Нет | Задержка в секундах перед приветствием. Мин. 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 | Число | Общее количество сообщений (пользователь + ИИ), отправленных во всех разговорах. |
totalLeads | Число | Общее количество извлеченных уникальных потенциальных клиентов (имя, адрес электронной почты, телефон). |
totalBookings | Число | Общее количество успешно забронированных встреч в календаре. |
satisfactionRate | Число | Процент (0–100) положительных отзывов от общего числа оценок. |
avgMessagesPerSession | Число | Среднее количество сообщений, которыми обмениваются за разговор. |
avgSessionsPerDay | Число | Среднее количество разговоров в день в запрошенном диапазоне. |
liveNow | Число | Количество активных разговоров, которые в данный момент ведет агент-человек. |
onlineNow | Число | Количество пользователей, активно общавшихся с ИИ за последние 2 минуты. |
dailySeries | Множество | Массив ежедневных объектов, содержащий количество разговоров, сообщений, потенциальных клиентов и заказов на дату. |
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-адрес, связанный с этим узлом, и обновить его содержимое. Полезная нагрузка: {}.
Обучение искусственному интеллекту
POST /api/assistants/:id/train — скомпилируйте все узлы знаний is_active и используйте оркестратор ИИ для динамического синтеза нового приглашения главной системы. Полезная нагрузка: {}.
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 | Шестнадцатеричный код цвета (например, "#000000"). | — |
designPreset | enum | default | Visual system: default, legacy, corporate, corporate-soft, editorial. | — |
position | enum | bottom-right | "bottom-right""внизу слева", "bottom-left""вверху слева"`. | — |
theme | enum | light | «светлый» или «темный». | — |
fontFamily | enum | default | "default" (Inter) или "inherit". | — |
bubbleStyle | enum | circle | "circle""бар""bar""ящик""drawer""фирменный-круг", "branded-circle", "branded-bar". | 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: [] } | Определяет, на каких страницах отображается виджет («режим», «пути»). | — |
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 | Включите ограничение скорости чата. По умолчанию правда. | — |
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 перед сохранением. По умолчанию ложь. | — |
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. Интеграция и развертывание
После того как ваш помощник настроен и обучен, у вас есть два основных способа его развертывания:
Вариант А: веб-встраивание (интерфейс)
Самый простой способ интегрировать помощника в стандартный сайт (WordPress, Shopify, React и т. д.). Код для внедрения является чисто детерминированным. Вам не нужна конечная точка для его получения. Просто добавьте это в <head> вашего сайта:
<script>
window.chirpsConfig = { assistantId: "YOUR_ASSISTANT_ID" };
</script>
<script src="https://chirps.cc/embed.js" async></script>Вариант Б: Безголовая интеграция (бэкэнд/CRM/боты)
Если вы создаете собственный клиент (например, бот Discord, интеграцию Telegram или собственное приложение для iOS), вы НЕ будете использовать Web Embed. Вместо этого вы будете напрямую взаимодействовать с конечной точкой /api/chat.
POST /api/chat или /api/chat?stream=true
Важно: headless-вызовы и запросы между серверами должны содержать Authorization: Bearer <YOUR_CHIRPS_API_KEY>. Только установленный браузерный виджет использует публичный поток с проверкой origin. Никогда не помещайте 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 с полем file для вложений, если fileUploadEnabled имеет значение true).*
| Параметр | Тип | Необходимый | Описание |
|---|---|---|---|
assistantId | Нить | Да | UUID помощника. |
sessionId | Нить | Да | Вы создаете это. Уникальный идентификатор из вашей собственной системы для группировки истории чата (например, идентификатор пользователя Discord, идентификатор чата Telegram или случайный UUID). |
message | Нить | Да | Текстовое содержание сообщения (максимум 5000 символов). |
conversationId | Нить | Нет | UUID разговора (возвращается в первом запросе). |
id | Нить | Нет | Необязательный идентификатор сообщения на стороне клиента для предотвращения дедупликации. |
Режим 1: стандартный ответ JSON (по умолчанию)
Отправляя запрос POST в /api/chat (без параметра потока), вы ожидаете полного ответа 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)
Добавляя ?stream=true к URL-адресу, вы получаете поток событий, отправленных сервером (SSE) в реальном времени. Ваш код должен прослушивать следующие типы событий:
- `event: token`: Содержит
{"text": "chunk"}. Запускается для каждого фрагмента текста ответа ИИ. - `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
{
"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 – инициировать исходящий вызов. Полезная нагрузка: { "phoneNumber": "+123...", "callReason": "Confirm the requested appointment", "conversationId": "optional-uuid" }
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.
12. Бронирование и календарь
GET /api/bookings?assistantId=uuid&start=ISO-8601&end=ISO-8601 – получение встреч в календаре, запланированных помощником, с возможностью фильтрации по дате.
GET /api/bookings?id=bookingId — получение сведений об одном бронировании, включая стенограмму разговора.
DELETE /api/bookings/cancel?id=bookingId - Отменяет активное бронирование. Добавляйте &silent=true только если интеграция намеренно отключает резервное письмо Chirps об отмене.
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 ОК»):
{
"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. Полный каталог endpoints
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 |
Запустите своего помощника
через 10 минут.
Зарегистрируйтесь, тренируйтесь на своем сайте, настраивайте оповещения и встраивайте их на свой сайт.