Developer API
API de développeur

Le guide ultime de l'API du développeur

La surface API serveur-à-serveur vérifiée pour créer des intégrations Chirps sécurisées. Les flux de facturation et OAuth du tableau de bord, callbacks publics du widget, webhooks fournisseurs, tâches cron et routes internes sont volontairement exclus.

Developer API

1. Authentification et principes fondamentaux

URL de base : https://chirps.cc

Tous les points de terminaison de l'API nécessitent une clé API Chirps dans l'en-tête « Autorisation ». Vous pouvez générer une clé API à partir du gestionnaire d'API dans la section Développeur de votre tableau de bord.

http
Authorization: Bearer <YOUR_CHIRPS_API_KEY>

Exemple de demande :

bash
curl -X GET https://chirps.cc/api/billing/usage \
  -H "Authorization: Bearer <YOUR_CHIRPS_API_KEY>" \
  -H "Content-Type: application/json"

Gestion des erreurs standard

Code d'état, Description
Code d'étatDescription
'200 OK'La demande a abouti.
« 400 requêtes incorrectes »La validation de la charge utile JSON a échoué. Comprend un tableau de détails.
« 401 non autorisé »Jeton manquant ou expiré.
« 402 Paiement requis »L'espace de travail a atteint les limites de facturation.
403 ForbiddenL'utilisateur ne dispose pas des autorisations RBAC requises.
« 404 non trouvé »La ressource demandée n'existe pas.
« Erreur de serveur 500 »Erreur de plateforme inattendue.
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.

Portées et moindre privilège

Chaque clé est limitée aux portées sélectionnées. Utilisez des clés en lecture seule lorsque cela suffit et une clé distincte pour chaque intégration. Une portée d’écriture n’accorde pas automatiquement la portée de lecture correspondante.

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
Les clés API sont secrètes. Conservez-les côté serveur, ne les intégrez jamais à un site ou une application mobile et révoquez immédiatement toute clé exposée.

Limite des clés API

Chaque clé développeur est limitée par défaut à 300 requêtes par minute glissante, de façon atomique sur toutes les instances. Un refus renvoie 429 ; attendez la réinitialisation avant de relancer.

Developer API

2. Cycle de vie de l'assistant (création)

GET /api/assistants

Liste des assistants

Récupère une liste de tous les assistants associés à l'espace de travail de la clé API.

Créer un assistant

POST /api/assistants

Crée un nouvel assistant avec toutes les configurations de base.

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
}
Paramètre, Taper, Requis, Description
ParamètreTaperRequisDescription
businessNameChaîneOuiNom de l'entreprise (2 à 100 caractères).
businessUrlChaîneOuiURL valide du site Web de l'entreprise (max 500 caractères).
knowledgeBaseTypeÉnumérationOuiL'un des éléments suivants : "url", "document", "both", "none".
knowledgeBaseUrlChaîneNonDoit être fourni si le type est « url » ou « les deux ».
knowledgeBaseTextChaîneNonTexte brut si le type est « document » ou « les deux ».
knowledgeBaseFileNameChaîneNonNom du fichier téléchargé si vous fournissez du texte.
'langue'ChaîneOuiCode de langue (par exemple, "en", "es").
isMultiLanguageBooléenNonActivez la traduction automatique. Par défaut false.
tonePersonalityChaîneOuiPar exemple, « professionnel », « convivial ». Max 100 caractères.
isCustomPersonalityBooléenNonActivez la tonalité personnalisée. Par défaut false.
customPersonalityDescriptionChaîneNonInstructions de tonalité personnalisées si activées (max 2000 caractères).
additionalInstructionsChaîneNonInstructions d'invite de base (max 10 000 caractères).
supportEmailChaîneOuiAdresse e-mail valide pour l'escalade.
maxPagesNombreNonPages à explorer. Min 1, Max 100. Par défaut « 5 ».
maxDepthNombreNonProfondeur d'exploration. Min 1, Max 20. Par défaut « 2 ».
welcomeMessageDelayNombreNonDélai en secondes avant le message d'accueil. Min 0, Max 6. Par défaut « 2 ».

Supprimer l'assistant

DELETE /api/assistants/:id

Supprime définitivement l'assistant et supprime en cascade tous ses nœuds de connaissances et son historique. Aucune charge utile requise.

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. Assistant Analyses et statistiques

Immédiatement après la création et l'utilisation, vous pouvez récupérer par programme les mesures de performances de l'assistant.

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

Récupérez les statistiques d'utilisation, le nombre total de messages, les prospects capturés et les mesures d'engagement générales pour l'assistant spécifié. Le paramètre range est facultatif (nombre de jours, min 7, max 365, par défaut 30).

Réponse attendue

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
    }
  ]
}
Propriété, Taper, Description
PropriétéTaperDescription
totalConversationsNombreNombre total de sessions de chat gérées par l'assistant.
totalMessagesNombreNombre total de messages (utilisateur + IA) envoyés dans toutes les conversations.
totalLeadsNombreNombre total de leads uniques (nom, email, téléphone) extraits.
totalBookingsNombreNombre total de rendez-vous du calendrier réservés avec succès.
satisfactionRateNombrePourcentage (0-100) de commentaires positifs sur le total des notes.
avgMessagesPerSessionNombreNombre moyen de messages échangés par conversation.
avgSessionsPerDayNombreNombre moyen de conversations par jour dans la plage demandée.
liveNowNombreNombre de conversations actives actuellement reprises par un agent humain.
onlineNowNombreNombre d'utilisateurs discutant activement avec l'IA au cours des 2 dernières minutes.
dailySeriesTableauTableau d'objets quotidiens contenant le nombre de « conversations », de « messages », de « prospects » et de « réservations » par date.
agentStatsTableauMesures de performances pour les agents humains, notamment « messagesSent » et « csat » (score de satisfaction client).
Developer API

4. Connaissances et formation

Une fois un assistant créé, vous gérez son cerveau via des « Knowledge Nodes ». Chaque nœud représente un bloc de données (une URL analysée, un document téléchargé ou un extrait de texte manuel).

Gestion des nœuds de connaissances

GET /api/assistants/:id/nodes - Répertorie tous les nœuds de connaissances pour cet assistant.

POST /api/assistants/:id/nodes - Injectez manuellement un nouveau bloc de connaissances.

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 - Modifie le contenu d'un nœud existant ou bascule son état actif.

json
{

  "title": "Updated Return Policy",
  "refined_content": "We offer a 60-day return policy now...",
  "is_active": true
}

DELETE /api/assistants/:id/nodes/:nodeId - Supprime entièrement un bloc de connaissances.

POST /api/assistants/:id/nodes/:nodeId/re-crawl - Force le scraper à réexplorer l'URL associée à ce nœud et à mettre à jour son contenu. Charge utile : {}.

Formation IA

POST /api/assistants/:id/train - Compilez tous les nœuds de connaissances is_active et utilisez un orchestrateur d'IA pour synthétiser dynamiquement une nouvelle invite système maître. Charge utile : {}.

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. Apparence et comportement du widget

Tous les champs PATCH acceptés, leurs valeurs réelles, limites et règles de forfait.

PATCH /api/assistants/:id/widget-config

Envoyez uniquement les champs à modifier. L’API refuse les clés inconnues et les structures invalides au lieu d’enregistrer une configuration inutilisable.

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"
}
Champ, Type / limites, Défaut, Effet, Règle du forfait
ChampType / limitesDéfautEffetRègle du forfait
primaryColorhex color#000000Code couleur hexadécimal (par exemple, « #000000 » ).—
designPresetenumdefaultVisual system: default, legacy, corporate, corporate-soft, editorial.—
positionenumbottom-right"bottom-right", "bottom-left", "top-right", "top-left".—
themeenumlight"light" ou "dark".—
fontFamilyenumdefault"default" (Inter) ou "inherit".—
bubbleStyleenumcircle"circle", "bar", "drawer", "branded-circle", "branded-bar", "branded-drawer".Branded launcher styles require custom-branding access.
bubbleTextstring (1–80)Chat with usTexte à afficher à côté de la bulle (pour les styles barre/tiroir).—
customLogoUrlHTTP(S) URL or nullnullURL vers l’image du logo d’en-tête personnalisé.Requires custom-branding access. Prefer HTTPS or the widget-logo upload endpoint.
titlestring (1–50)business nameLe titre dans l'en-tête du widget.—
headerSubtitlestring (0–100)We typically reply instantlySous-titre dans l'en-tête du widget.—
welcomeMessagestring (0–300)Hi! How can I help you today?Le message de bienvenue initial.—
welcomeMessagesarray (1–5)one greetingOrdered greeting objects with text (1–300) and delay in seconds (0–10).—
welcomeMessageDelaynumber (0–10)2Délai en secondes avant le message d'accueil.—
welcomeSuggestionsstring[] (max 3)[]Tableau de chaînes pour les puces de réponse rapide initiales.—
inputPlaceholderstring (1–100)Type your message...Texte d'espace réservé pour la saisie du message.—
languagelanguage codeassistant languageCode de langue du widget (par exemple, "en", "fr").—
showBrandingbooleantrueShow the Powered by Chirps attribution.Plans without branding removal always force true.
voiceEnabledbooleantrueActivez les appels vocaux.Plans without voice access always force false.
voiceModelstringplatform defaultRealtime voice model identifier. Normally leave unchanged so Chirps can use the supported platform model.—
voiceNameenumFenrirL'identité vocale pour les réponses audio. Voir les voix disponibles ci-dessous.—
fileUploadEnabledbooleantrueAutoriser les utilisateurs à télécharger des pièces jointes.Plans without file uploads always force false.
dictationEnabledbooleantrueActiver la dictée vocale (parole en texte).—
copilotEnabledbooleanplan defaultAllow the DOM-navigation Copilot experience.Plans without Copilot always force false.
pageVisibilityobject{ mode: all, paths: [] }Détermine sur quelles pages le widget apparaît (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.—
rateLimitEnabledbooleantrueActivez la limitation du taux de discussion. Vrai par défaut.—
rateLimitMaxMessagesinteger (1–500)30Max messages dans la fenêtre. Par défaut 30.—
rateLimitTimeWindowinteger minutes (1–1440)60Fenêtre de temps en minutes. Par défaut 60.—
privacyPolicyUrlHTTP(S) URLemptyURL vers votre politique de confidentialité.—
gdprConsentEnabledbooleanfalseShow the compact chat privacy notice before the visitor sends data.—
gdprDataMaskingEnabledbooleanfalseMasquez les informations personnelles avant de les enregistrer. Faux par défaut.—
cookieConsentEnabledbooleanfalseEnable widget cookie preferences and consent UI.—
cookieConsentAnalyticsEnabledbooleantrueOffer optional analytics in cookie preferences. Analytics events remain blocked until the visitor affirmatively consents.—

Correspondance des pages

Utilisez un chemin exact comme /pricing ou /* pour les descendants comme /docs/*. include affiche uniquement les correspondances, exclude les masque et all ignore les chemins.

Voix disponibles

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. Artefacts interactifs

Configuration complète des formulaires, réservations, cartes, CSAT et outils personnalisés.

GET /api/assistants/:id/artifacts · PUT /api/assistants/:id/artifacts · PATCH /api/assistants/:id/artifacts

Les artefacts sont pilotés par des outils. Le modèle appelle l’outil activé et Chirps rend l’interface ; n’envoyez jamais de chaînes {{ARTIFACT: ...}}.

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, Propriétés acceptées, Comportement
SectionPropriétés acceptéesComportement
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

Champ, Type / limites, Effet
ChampType / limitesEffet
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

Champ, Type / limites, Effet
ChampType / limitesEffet
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

Champ, Type / limites, Effet
ChampType / limitesEffet
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

Champ, Type / limites, Effet
ChampType / limitesEffet
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. Connecteurs et outils

Découvrez les schémas des fournisseurs, stockez les identifiants en sécurité puis activez uniquement les outils nécessaires.

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.
Champ, Type / limites, Effet
ChampType / limitesEffet
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. Intégration et déploiement

Une fois votre assistant configuré et formé, vous disposez de deux manières principales de le déployer :

Option A : intégration Web (frontend)

Le moyen le plus simple d'intégrer l'assistant dans un site Web standard (WordPress, Shopify, React, etc.). Le code intégré est purement déterministe. Vous n'avez pas besoin d'un point de terminaison pour le récupérer. Déposez simplement ceci dans le <head> de votre site :

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

Option B : intégrations sans tête (Backend / CRM / Bots)

Si vous créez un client personnalisé (comme un bot Discord, une intégration Telegram ou une application iOS native), vous n'utiliserez PAS Web Embed. Au lieu de cela, vous interagirez directement avec le point de terminaison /api/chat.

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

Important : les appels headless et serveur-à-serveur doivent inclure Authorization: Bearer <YOUR_CHIRPS_API_KEY>. Seul le widget installé dans le navigateur utilise le flux public lié à l’origine. Ne placez jamais une clé API dans du JavaScript côté client.

json
{

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

*(Prend également en charge multipart/form-data avec un champ file pour les pièces jointes si fileUploadEnabled est vrai).*

Paramètre, Taper, Requis, Description
ParamètreTaperRequisDescription
assistantIdChaîneOuiL'UUID de l'assistant.
sessionIdChaîneOuiVous générez ceci. Un identifiant unique de votre propre système pour regrouper l'historique des discussions (par exemple, un identifiant d'utilisateur Discord, un identifiant de discussion Telegram ou un UUID aléatoire).
'message'ChaîneOuiLe contenu textuel du message (max 5 000 caractères).
conversationIdChaîneNonL'UUID de la conversation (renvoyé dans votre première requête).
idChaîneNonID de message côté client facultatif pour empêcher la déduplication.

Mode 1 : réponse JSON standard (par défaut)

En envoyant une requête POST à ​​/api/chat (sans le paramètre stream), vous attendez la réponse complète de l'IA et recevez un objet JSON standard.

json
{

  "message": "Here is the information you requested...",
  "conversationId": "uuid-of-conversation",
  "messageId": "uuid-of-message"
}

*(Si is_active_agent: true est renvoyé, un humain a repris le chat et message sera null.)*

Mode 2 : diffusion en continu des événements envoyés par le serveur (?stream=true)

En ajoutant « ?stream=true » à l'URL, vous recevez un flux d'événements envoyés par le serveur (SSE) en temps réel. Votre code doit écouter ces types d'événements spécifiques :

  • `event: token` : contient {"text": "chunk"}. Déclenché pour chaque morceau du texte de réponse de l'IA.
  • `event: status` : contient {"text": "Searching knowledge base..."}. Représente les états d’exécution de l’outil backend.
  • `event: done` : contient {"messageId": "uuid", "conversationId": "uuid", "message": "full text"}. Lancé lorsque la génération est complètement terminée.
  • `event: error` : contient {"error": "Error message"}. Lancé si des limites de débit ou des erreurs se produisent.

Points de terminaison de reprise en direct

GET /api/chat/sessions

Récupérez les sessions historiques.

POST /api/chat/toggle-agent

Suspendez l’IA pour la prise de contrôle humaine. Charge utile : { "sessionId": "...", "isActive": true }

POST /api/chat/agent-message

Envoyez un message humain. Charge utile : { "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. Paramètres avancés de l'assistant

PATCH /api/assistants/:id

Mettre à jour la configuration principale

Modifiez les paramètres de base, la personnalité et les limites de grattage de l'assistant.

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
  }
}

*Remarque : Tous les champs sont facultatifs. Envoyez uniquement les champs que vous souhaitez mettre à jour.*

Supprimer l'assistant

DELETE /api/assistants/:id

Supprime définitivement l’assistant et répercute la suppression sur tous les nœuds de connaissances, conversations et messages. Si l'assistant n'a jamais été complètement configuré, cela rembourse le quota de création mensuel.

Developer API

10. Téléphonie et voix

GET /api/phone-numbers - Liste les numéros disponibles.

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 - Déclenche un appel sortant. Charge utile : { "phoneNumber": "+123...", "callReason": "Confirm the requested appointment", "conversationId": "optional-uuid" }

Developer API

11. Extraction de prospects

GET /api/leads?assistantId=uuid&page=1&limit=50&status=new - Récupère les pistes paginées et structurées que l'IA extraites lors des conversations.

GET /api/leads?id=leadId - Récupère les détails d'un seul prospect, y compris la transcription complète de la conversation.

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. Réservations et calendrier

GET /api/bookings?assistantId=uuid&start=ISO-8601&end=ISO-8601 - Récupère les rendez-vous du calendrier programmés par l'assistant, éventuellement filtrés par date.

GET /api/bookings?id=bookingId - Récupère les détails d'une seule réservation, y compris la transcription de la conversation.

DELETE /api/bookings/cancel?id=bookingId - Annule une réservation active. Ajoutez &silent=true uniquement si votre intégration doit volontairement supprimer l’e-mail d’annulation de secours de Chirps.

POST /api/bookings/reschedule - Ajustez une réservation. Charge utile : { "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. Utilisation du compte et de la facturation

GET /api/billing/usage

Récupérez l’utilisation du cycle de facturation de l’espace de travail, les limites du plan d’abonnement et le nombre total d’assistants. Remarque : Lors de l'utilisation d'une clé API, la requête est automatiquement étendue à l'espace de travail de la clé API ; vous n'avez pas besoin de fournir un teamId.

Réponse (`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. Catalogue complet des endpoints

La surface vérifiée et compatible avec les clés API. Les chemins et propriétés JSON ne sont jamais traduits.

Ce qui appartient à l’API développeur publique

Ces routes acceptent une clé API Chirps à portée limitée et appliquent la frontière de son espace de travail. Les routes de facturation/OAuth du tableau de bord, callbacks du widget, webhooks fournisseurs, tâches cron et routes MCP internes sont volontairement exclues.

Relances et idempotence
Seuls les messages de chat acceptent un id client stable pour éviter les doublons. Ne relancez pas automatiquement les autres écritures sauf si la réponse l’autorise clairement. 402 indique un quota atteint, 429 une limitation et 5xx peut être transitoire.

Assistants

Méthode, Chemin, Portée, Requête, Résultat réussi
MéthodeCheminPortéeRequêteRésultat réussi
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

Connaissances et entraînement

Méthode, Chemin, Portée, Requête, Résultat réussi
MéthodeCheminPortéeRequêteRésultat réussi
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, artefacts et connecteurs

Méthode, Chemin, Portée, Requête, Résultat réussi
MéthodeCheminPortéeRequêteRésultat réussi
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, prospects et réservations

Méthode, Chemin, Portée, Requête, Résultat réussi
MéthodeCheminPortéeRequêteRésultat réussi
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

Téléphonie et compte

Méthode, Chemin, Portée, Requête, Résultat réussi
MéthodeCheminPortéeRequêteRésultat réussi
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
Prêt à commencer ?

Lancez votre assistant
en 10 minutes.

Inscrivez-vous, formez sur votre site, personnalisez les alertes et intégrez sur votre site web.