sparkcrm, alinhada ao OpenAPI do gateway. A árvore de chamadas segue o padrão client.<recurso>.<método>().
Para autenticação, instalação e exemplos iniciais, veja Começar com TypeScript.
Visão geral do cliente
Entrypoints
Canais de entrada configurados na organização (WhatsApp Business, WhatsApp Lite, Instagram, Telegram).client.entrypoints.list(params?)
HTTP: GET /v1/entrypoints
Retorno:
EntrypointListResponse com entrypoints[] (id, name, platform, funnelStepId, displayName?, state? em WhatsApp Lite).
client.entrypoints.retrieve(id)
HTTP: GET /v1/entrypoints/{id}
Retorno: EntrypointRetrieveResponse com entrypoint discriminado por platform (campos extras como isCoexistence no WhatsApp Business, state no Lite).
Chats
Conversas diretas (DM) no WhatsApp ou WhatsApp Lite. A plataforma é inferida peloentrypointId. O telefone é normalizado para E.164.
Use o upsert individual quando precisar dos IDs na hora. Use o lote quando for importar muitos contatos e puder esperar o processamento em background (a resposta não inclui chatId / leadId).
client.chats.upsert(body)
HTTP: POST /v1/chats → 201 (criado) ou 200 (já existia)
Retorno:
ChatUpsertResponse — chatId e leadId.
client.chats.upsertBatch(body)
HTTP: POST /v1/chats/batch → 202
Enfileira até 500 conversas para o mesmo canal. O Spark processa cada item em background com a mesma regra do upsert individual (cria ou atualiza). Itens com telefone inválido ou limite de plano são ignorados no processamento, sem falhar o lote inteiro.
Retorno:
ChatUpsertBatchResponse — { queued: number }. Não há IDs de chat ou lead nesta resposta.
O lote é assíncrono. Para reagir a conversas novas, use o webhook
chats.created.Forms (formulários)
Formulários de captação publicados com ID público de 16 caracteres. Conceito de produto: Formulários de captação.client.forms.retrieve(id)
HTTP: GET /v1/forms/{id}
Retorno: FormRetrieveResponse — form com name, description, flow (nós e conexões do canvas) e iframeEmbedAllowedOrigins.
client.forms.retrieveEmbedFramePolicy(id)
HTTP: GET /v1/forms/{id}/embed-frame-policy
Retorno: FormRetrieveEmbedFramePolicyResponse — lista de origens HTTPS permitidas para iframe (vazia = sem restrição por origem).
client.forms.submitResponse(id, body)
HTTP: POST /v1/forms/{id}/submit → 201
Retorno:
FormSubmitResponseResponse — submissionId e outcomes[] com platform, leadId, chatId por destino WhatsApp.
Messaging
client.messaging.uploadMedia(body)
HTTP: POST /v1/messaging/media (multipart)
Retorno:
MessagingUploadMediaResponse — array por arquivo: { success: true, id, name, url } ou { success: false, name }.
Use os id retornados em sendMessage (mediaIds ou audioId).
client.messaging.chats.listMessages(chatId, params?)
HTTP: GET /v1/messaging/chats/{chatId}
Retorno:
ChatListMessagesResponse — records[] (mensagem completa com text, type, status, media, sender, etc.) e nextCursor?.
Mensagens vêm mais recentes primeiro.
client.messaging.chats.sendMessage(chatId, body)
HTTP: POST /v1/messaging/chats/{chatId} → 204
Enviar modelo de mensagem (templates)
HTTP: POST /v1/messaging/chats/{chatId}/templates → 204
Corpo (espelha SendPublicTemplateBodyDto na API):
Variáveis automáticas não vão no body — o Spark preenche com dados do chat. Veja Modelos de mensagem.
Novas versões do
sparkcrm podem expor client.messaging.chats.sendTemplate(chatId, body) com o mesmo contrato. Confira o api.md da versão instalada.Campanhas (disparos em massa)
Criar, segmentar, iniciar e acompanhar campanhas de mensagem. Guia completo: Disparos pela API.client.messageTemplates.list()
HTTP: GET /v1/message-templates
Retorno: MessageTemplateListResponse com templates[] (id, name, isOfficial, metaTemplateStatus, …).
client.messageTemplates.retrieve(id)
HTTP: GET /v1/message-templates/{id}
Retorno: detalhe do template com items[] (texto, mídia) e commonVariables[] (variáveis manuais exigidas no start).
client.campaigns.getFilterSchema()
HTTP: GET /v1/campaigns/filters/schema
Retorno: catálogo de campos, operadores e regras de combinação para montar filtros de público-alvo.
client.campaigns.previewAudience(body)
HTTP: POST /v1/campaigns/audience-preview
Body: { filters?: CampaignFilter[] }
Retorno: { estimatedCount: number }
client.campaigns.create(body)
HTTP: POST /v1/campaigns
Body: name, platform, templateId, cadence, description?, filters?
Retorno: { campaignId, status: "draft" }
client.campaigns.start(id, body?)
HTTP: POST /v1/campaigns/{id}/start
Body: { commonVariables?: Record<string, string> } — variáveis manuais do template.
Retorno: { executionId, status: "processing" }
client.campaigns.retrieve(id) / client.campaigns.list()
HTTP: GET /v1/campaigns/{id} / GET /v1/campaigns
Detalhe com execuções ou lista resumida de campanhas.
client.campaigns.retrieveExecution(campaignId, executionId)
HTTP: GET /v1/campaigns/{id}/executions/{executionId}
Retorno: { status, targetCount, sentCount, failedCount, progress } — use para polling.
client.campaigns.cancel(id)
HTTP: POST /v1/campaigns/{id}/cancel
Cancela execução em andamento. Sem body; resposta 204.
Tabela rápida de métodos
Requisições fora do catálogo tipado
O cliente expõeget, post, put, patch, delete com as mesmas opções de retry, timeout e cabeçalhos — útil para endpoints novos antes de uma release do SDK:
// @ts-expect-error ou via query / body / headers explícitos, conforme a documentação avançada.
Tipos principais exportados
Importe desparkcrm ou use o namespace SparkCRM:
Lista completa no repositório: api.md.

