Developer API
API do desenvolvedor

O guia definitivo da API do desenvolvedor

Este documento é a referência oficial e exaustiva da API para toda a plataforma Chirps AI. Mapeamos todos os endpoints seguros para desenvolvedores em todo o sistema. Você pode replicar programaticamente 100% da funcionalidade do painel sem cabeça.

Developer API

1. Autenticação e princípios básicos

URL base: https://chirps.cc

Todos os endpoints de API exigem uma chave de API Chirps no cabeçalho Authorization. Você pode gerar uma chave de API no API Manager na seção Desenvolvedor do seu painel.

http
Authorization: Bearer <YOUR_CHIRPS_API_KEY>

Exemplo de solicitação:

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

Tratamento de erros padrão

Código de statusDescrição
200 OKA solicitação foi bem-sucedida.
400 solicitação incorretaA carga JSON falhou na validação. Inclui uma matriz de detalhes.
401 Não autorizadoToken ausente ou expirado.
402 Pagamento necessárioO espaço de trabalho atingiu os limites de cobrança.
403 ProibidoO usuário não tem as permissões de RBAC necessárias.
404 não encontradoO recurso solicitado não existe.
500 Erro de servidorErro inesperado da plataforma.
Developer API

2. Ciclo de vida do assistente (criação)

GET /api/assistentes

Listar assistentes

Busca uma lista de todos os assistentes associados ao espaço de trabalho da chave de API.

Crie um assistente

POST /api/assistentes

Cria um novo assistente com todas as configurações básicas.

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
}
ParâmetroTipoObrigatórioDescrição
nomedaempresaCordaSimNome da empresa (2 a 100 caracteres).
businessUrlCordaSimURL válido do site comercial (máximo de 500 caracteres).
conhecimentoBaseTypeEnumSimUm de: "url", "documento", "ambos", "nenhum".
knowledgeBaseUrlCordaNãoDeve ser fornecido se o tipo for "url" ou "both".
conhecimentoBaseTextCordaNãoTexto bruto se o tipo for "document" ou "both".
knowledgeBaseFileNameCordaNãoNome do arquivo enviado se fornecer texto.
linguagemCordaSimCódigo do idioma (por exemplo, "en", "es").
isMultiLanguageBooleanoNãoAtive a tradução automática. Padrão falso.
tonePersonalidadeCordaSimPor exemplo, "profissional", "amigável". Máximo de 100 caracteres.
isCustomPersonalityBooleanoNãoAtive o tom personalizado. Padrão falso.
customPersonalityDescriptionCordaNãoInstruções de tom personalizado, se habilitadas (máximo de 2.000 caracteres).
Instruções adicionaisCordaNãoInstruções básicas de prompt (máximo de 10.000 caracteres).
suporteE-mailCordaSimEndereço de e-mail válido para escalonamento.
maxPagesNúmeroNãoPáginas para rastrear. Mínimo 1, Máx. 100. Padrão 5.
maxDepthNúmeroNãoProfundidade de rastreamento. Mínimo 1, Máx. 20. Padrão 2.
bem-vindoMessageDelayNúmeroNãoAtraso em segundos antes da saudação. Mínimo 0, Máx. 6. Padrão 2.

Excluir assistente

DELETE /api/assistants/:id

Exclui permanentemente o assistente e exclui em cascata todos os seus nós de conhecimento e histórico. Nenhuma carga útil necessária.

Developer API

3. Análise e estatísticas do assistente

Imediatamente após a criação e o uso, você pode buscar programaticamente as métricas de desempenho do assistente.

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

Obtenha estatísticas de uso, total de mensagens, leads capturados e métricas gerais de engajamento para o assistente especificado. O parâmetro range é opcional (número de dias, mínimo 7, máximo 365, padrão 30).

Resposta Esperada

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
    }
  ]
}
PropriedadeTipoDescrição
totalConversasNúmeroNúmero total de sessões de chat gerenciadas pelo assistente.
totalMensagensNúmeroNúmero total de mensagens (usuário + IA) enviadas em todas as conversas.
totalLeadsNúmeroNúmero total de leads únicos (nome, e-mail, telefone) extraídos.
total de reservasNúmeroNúmero total de compromissos do calendário agendados com sucesso.
taxa de satisfaçãoNúmeroPorcentagem (0-100) de avaliações de feedback positivo em relação ao total de avaliações.
avgMessagesPerSessionNúmeroNúmero médio de mensagens trocadas por conversa.
avgSessionsPerDayNúmeroNúmero médio de conversas por dia dentro do intervalo solicitado.
ao vivo agoraNúmeroNúmero de conversas ativas atualmente controladas por um agente humano.
onlineAgoraNúmeroNúmero de usuários conversando ativamente com a IA nos últimos 2 minutos.
série diáriaVariedadeMatriz de objetos diários contendo contagens de conversas, mensagens, leads e reservas por data.
agentStatsVariedadeMétricas de desempenho para agentes humanos, incluindo messagesSent e csat (pontuação de satisfação do cliente).
Developer API

4. Conhecimento e treinamento

Depois que um assistente é criado, você gerencia seu cérebro por meio de "Nós de conhecimento". Cada nó representa um pedaço de dados (um URL rastreado, um documento carregado ou um snippet de texto manual).

Gerenciando nós de conhecimento

GET /api/assistants/:id/nodes - Lista todos os nós de conhecimento deste assistente.

POST /api/assistants/:id/nodes - Injete manualmente um novo bloco de conhecimento.

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 - Modifique o conteúdo de um nó existente ou alterne seu estado ativo.

json
{

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

DELETE /api/assistants/:id/nodes/:nodeId - Exclua totalmente um bloco de conhecimento.

POST /api/assistants/:id/nodes/:nodeId/re-crawl - Força o scraper a rastrear novamente o URL associado a este nó e atualizar seu conteúdo. Carga útil: {}.

Treinamento de IA

POST /api/assistants/:id/train - Compile todos os nós de conhecimento is_active e use um orquestrador de IA para sintetizar dinamicamente um novo prompt do Master System. Carga útil: {}.

Developer API

5. Aparência e configuração do widget

Personalize a interface do usuário do balão do assistente e da janela de bate-papo.

Atualizar a aparência do widget

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

json
{

  "primaryColor": "#000000",
  "position": "bottom-right",
  "language": "en",
  "welcomeMessage": "Hi! How can I help you today?",
  "title": "Acme Support",
  "theme": "light",
  "fontFamily": "default",
  "bubbleStyle": "circle",
  "bubbleText": "Chat with us",
  "headerSubtitle": "We typically reply instantly",
  "inputPlaceholder": "Type your message...",
  "privacyPolicyUrl": "https://acme.com/privacy",
  "voiceEnabled": true,
  "voiceName": "Fenrir",
  "welcomeMessageDelay": 2,
  "fileUploadEnabled": true,
  "dictationEnabled": true,
  "copilotEnabled": true,
  "welcomeSuggestions": ["Pricing plans", "Contact sales"],
  "pageVisibility": {
    "mode": "all",
    "paths": []
  }
}
ParâmetroTipoObrigatórioDescrição
primaryColorCordaNãoCódigo de cor hexadecimal (por exemplo, "#000000").
posiçãoEnumNão"inferior direito", "inferior esquerdo", "superior direito", "superior esquerdo".
linguagemCordaNãoCódigo de idioma do widget (por exemplo, "en", "fr").
mensagem de boas-vindasCordaNãoA mensagem de saudação inicial.
títuloCordaNãoO título no cabeçalho do widget.
temaEnumNão"claro" ou "escuro".
fonteFamíliaEnumNão"padrão" (Inter) ou "herdar".
estilobolhaEnumNão"círculo", "barra", "gaveta", "círculo de marca", "barra de marca", "gaveta de marca".
textobolhaCordaNãoTexto a ser exibido próximo ao balão (para estilos de barra/gaveta).
cabeçalhoSubtítuloCordaNãoLegenda no cabeçalho do widget.
inputPlaceholderCordaNãoTexto de espaço reservado para a entrada da mensagem.
privacyPolicyUrlCordaNãoURL para sua política de privacidade.
avatarUrlCordaNãoURL para imagem de avatar personalizada.
customLogoUrlCordaNãoURL para imagem do logotipo do cabeçalho personalizado.
voz habilitadaBooleanoNãoAtive chamadas de voz.
vozNomeCordaNãoA identidade de voz para respostas de áudio. Veja as vozes disponíveis abaixo.
bem-vindoMessageDelayNúmeroNãoAtraso em segundos antes da saudação.
fileUploadEnabledBooleanoNãoPermitir que os usuários carreguem anexos.
ditadoEnabledBooleanoNãoAtive o ditado de voz (fala para texto).
copilotEnabledBooleanoNãoHabilite chips de sugestão de copiloto.
bem-vindoSugestõesVariedadeNãoMatriz de strings para chips iniciais de resposta rápida.
visibilidade da páginaObjetoNãoDetermina em quais páginas o widget aparece (mode, paths).
rateLimitEnabledBooleanoNãoAtive a limitação de taxa de chat. Padrão verdadeiro.
rateLimitMaxMessagesNúmeroNãoMáximo de mensagens na janela. Padrão 30.
rateLimitTimeWindowNúmeroNãoJanela de tempo em minutos. Padrão 60.
gdprDataMaskingEnabledBooleanoNãoMascare PII antes de salvar. Padrão falso.

Nomes de voz disponíveis

  • Fêmea: Zephyr, Aoede, Core, Leda, Callirrhoe, Despina, Erinome, Laomedeia, Achernar, Pulcherrima, Gacrux, Algenib, Sulfat
  • Masculino: Puck, Charon, Fenrir, Orus, Enceladus, Iapetus, Umbriel, Algieba, Autonoe, Rasalgethi, Alnilam

Logotipo personalizado

POST /api/assistants/:id/widget-logo

Formato: multipart/form-data com campo file.

Developer API

6. Integração e implantação

Depois que seu assistente estiver configurado e treinado, você terá duas maneiras principais de implantá-lo:

Opção A: incorporação na Web (frontend)

A maneira mais fácil de integrar o assistente em um site padrão (WordPress, Shopify, React, etc.). O código incorporado é puramente determinístico. Você não precisa de um endpoint para buscá-lo. Basta colocar isso no <head> do seu site:

json
<script src="https://chirps.cc/widget.js" data-assistant-id="YOUR_ASSISTANT_ID_HERE"></script>

Opção B: Integrações Headless (Backend/CRMs/Bots)

Se você estiver construindo um cliente personalizado (como um bot Discord, uma integração Telegram ou um aplicativo iOS nativo), você NÃO usará o Web Embed. Em vez disso, você interagirá diretamente com o endpoint /api/chat.

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

Observação: Este endpoint é público e *não* requer o cabeçalho da chave de API Authorization: Bearer. A autenticação é tratada implicitamente por meio do assistantId.

json
{

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

*(Também suporta multipart/form-data com um campo file para anexos se fileUploadEnabled for verdadeiro).*

ParâmetroTipoObrigatórioDescrição
assistentIdCordaSimO UUID do assistente.
sessãoIdCordaSimVocê gera isso. Um identificador exclusivo do seu próprio sistema para agrupar o histórico de bate-papo (por exemplo, um ID de usuário do Discord, um ID de bate-papo do Telegram ou um UUID aleatório).
mensagemCordaSimO conteúdo de texto da mensagem (máximo de 5.000 caracteres).
conversaçãoIdCordaNãoO UUID da conversa (retornado na sua primeira solicitação).
idCordaNãoID de mensagem opcional do lado do cliente para evitar desduplicação.

Modo 1: resposta JSON padrão (padrão)

Ao enviar uma solicitação POST para /api/chat (sem o parâmetro stream), você aguarda a resposta completa da IA ​​e recebe um objeto JSON padrão.

json
{

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

*(Se is_active_agent: true for retornado, um humano assumiu o controle do bate-papo e message será null.)*

Modo 2: streaming de eventos enviados pelo servidor (?stream=true)

Ao anexar ?stream=true ao URL, você recebe um fluxo de eventos enviados pelo servidor (SSE) em tempo real. Seu código deve escutar estes tipos de eventos específicos:

  • `evento: token`: Contém {"text": "chunk"}. Disparado para cada parte do texto de resposta da IA.
  • `event: status`: Contém {"text": "Pesquisando na base de conhecimento..."}. Representa estados de execução da ferramenta de back-end.
  • `event: done`: Contém {"messageId": "uuid", "conversationId": "uuid", "message": "full text"}. Disparado quando a geração está completamente concluída.
  • `evento: erro`: Contém {"error": "Mensagem de erro"}. Disparado se ocorrerem limites de taxa ou erros.

Terminais de aquisição ao vivo

GET /api/chat/sessions

Recuperar sessões históricas.

POST /api/chat/toggle-agent

Pause a IA para controle humano. Carga útil: { "sessionId": "..." }

POST /api/chat/mensagem do agente

Envie uma mensagem humana. Carga útil: { "sessionId": "...", "message": "..." }

Developer API

7. Configurações avançadas do assistente

PATCH /api/assistants/:id

Atualizar configuração principal

Modifique as configurações principais, a personalidade e os limites de raspagem do assistente.

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

*Nota: Todos os campos são opcionais. Envie apenas os campos que deseja atualizar.*

Excluir assistente

DELETE /api/assistants/:id

Exclui permanentemente o assistente e distribui a exclusão em cascata para todos os nós de conhecimento, conversas e mensagens. Se o assistente nunca tiver sido totalmente configurado, isso reembolsará a cota mensal de criação.

Developer API

8. Telefonia e Voz

GET /api/phone-numbers - Lista os números disponíveis.

POST /api/phone-numbers/:id/assign - Provisione um número. Carga útil: {}

POST /api/assistants/:id/outbound - Aciona chamada de saída. Carga útil: { "to": "+123...", "message": "..." }

Developer API

9. Extração de leads

GET /api/leads?assistantId=uuid&page=1&limit=50&status=new - Busque leads estruturados e paginados que a IA extraiu durante as conversas.

GET /api/leads?id=leadId - Obtenha detalhes de um único lead, incluindo a transcrição completa da conversa.

Developer API

10. Reservas e calendário

GET /api/bookings?assistantId=uuid&start=ISO-8601&end=ISO-8601 - Recupera compromissos do calendário agendados pelo assistente, opcionalmente filtrados por data.

GET /api/bookings?id=bookingId - Obtenha detalhes de uma única reserva, incluindo a transcrição da conversa.

POST /api/bookings/cancel - Cancela uma reserva ativa. Carga útil: { "bookingId": "uuid" }

POST /api/bookings/reschedule - Ajuste uma reserva. Carga útil: { "bookingId": "uuid", "newTime": "ISO-8601" }

Developer API

11. Uso de conta e faturamento

GET /api/faturamento/uso

Recupere o uso do ciclo de cobrança do workspace, os limites do plano de assinatura e a contagem total de assistentes. Observação: Ao usar uma chave de API, a solicitação tem automaticamente como escopo o espaço de trabalho da chave de API; você não precisa fornecer um teamId.

Resposta (`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"
}
Pronto para começar?

Inicie seu assistente
em 10 minutos.

Cadastre-se, treine em seu site, personalize alertas e incorpore em seu site.