sparkcrm, que seguem a especificação OpenAPI da API. As chamadas usam o padrão client.<recurso>.<método>().
Para instalar e configurar o cliente, veja Começar com TypeScript.
Visão geral do cliente
Conexão do WhatsApp
Conecta um número da API oficial do WhatsApp à organização sem passar pelo painel. Guia completo: Conectar WhatsApp Business pela API.client.whatsappConnectionSessions.create(body)
Rota: POST /v1/entrypoints/whatsapp/connection-sessions (resposta 202).
Retorna
sessionId, status (pending), url e expiresAt.
client.whatsappConnectionSessions.retrieve(sessionId)
Rota: GET /v1/entrypoints/whatsapp/connection-sessions/{sessionId}.
Retorna status (pending, completed, failed ou expired), entrypoint quando a conexão termina e reason e message quando falha.
Entrypoints
Canais conectados à organização: WhatsApp Business, WhatsApp Lite, Instagram e Telegram.client.entrypoints.list(params?)
Rota: GET /v1/entrypoints.
Retorna
EntrypointListResponse com entrypoints[] (id, name, platform, funnelStepId, displayName? e, no WhatsApp Lite, state?).
client.entrypoints.retrieve(id)
Rota: GET /v1/entrypoints/{id}.
Retorna EntrypointRetrieveResponse com entrypoint. Os campos variam conforme platform, por exemplo isCoexistence no WhatsApp Business e state no WhatsApp Lite.
Chats
Conversas individuais no WhatsApp Business ou no WhatsApp Lite. A plataforma vem doentrypointId, e o telefone é normalizado para o formato E.164.
Use o upsert individual quando precisar dos IDs na resposta. Use o lote para importar muitos contatos quando puder esperar o processamento; a resposta do lote não traz chatId nem leadId.
client.chats.upsert(body)
Rota: POST /v1/chats. Responde 201 quando cria e 200 quando o chat já existia.
Retorna
ChatUpsertResponse com chatId e leadId.
client.chats.upsertBatch(body)
Rota: POST /v1/chats/batch (resposta 202).
Enfileira até 500 conversas do mesmo canal. Cada item segue a mesma regra do upsert individual. Itens com telefone inválido ou acima do limite do plano são ignorados, sem invalidar o restante do lote.
Retorna
ChatUpsertBatchResponse com { queued: number }.
O lote é processado em segundo plano. Para saber quando cada conversa nova é criada, assine o webhook
chats.created, descrito em Webhooks e tipos.Formulários
Formulários de captação publicados, identificados por um ID público de 16 caracteres. Veja Formulários de captação. Estes métodos aceitam a chave pública (pk_…) ou a secreta.
client.forms.retrieve(id)
Rota: GET /v1/forms/{id}.
Retorna FormRetrieveResponse com form: name, description, flow (etapas e conexões do formulário) e iframeEmbedAllowedOrigins.
client.forms.retrieveEmbedFramePolicy(id)
Rota: GET /v1/forms/{id}/embed-frame-policy.
Retorna FormRetrieveEmbedFramePolicyResponse com as origens https que podem exibir o formulário em iframe. Lista vazia significa sem restrição de origem.
client.forms.submitResponse(id, body)
Rota: POST /v1/forms/{id}/submit (resposta 201).
Retorna
FormSubmitResponseResponse com submissionId e outcomes[] (platform, leadId e chatId de cada destino).
Mensagens
client.messaging.uploadMedia(body)
Rota: POST /v1/messaging/media (multipart).
Retorna
MessagingUploadMediaResponse, uma lista com um item por arquivo: { success: true, id, name, url } ou { success: false, name }.
Use os id devolvidos em sendMessage (mediaIds ou audioId) ou como mídia de cabeçalho de um modelo oficial.
client.messaging.chats.listMessages(chatId, params?)
Rota: GET /v1/messaging/chats/{chatId}.
Retorna
ChatListMessagesResponse com records[] (mensagem completa: text, type, status, media, sender e outros campos) e nextCursor?. As mensagens vêm da mais recente para a mais antiga.
client.messaging.chats.sendMessage(chatId, body)
Rota: POST /v1/messaging/chats/{chatId} (resposta 204).
client.messaging.chats.sendMessageTemplate(chatId, body)
Rota: POST /v1/messaging/chats/{chatId}/templates (resposta 204).
Não envie as variáveis automáticas: o Spark preenche com os dados do chat. Veja Modelos de mensagem.
client.messaging.chats.messages.markAsRead(messageId, params)
Rota: POST /v1/messaging/chats/{chatId}/messages/{messageId}/read (resposta 204).
Marca uma mensagem recebida como lida. Informe o chat em params.chatId.
client.messaging.chats.messages.markAsReadAndType(messageId, params)
Rota: POST /v1/messaging/chats/{chatId}/messages/{messageId}/read-and-type (resposta 204).
Marca a mensagem como lida e mostra ao contato o indicador de digitação. Útil quando a resposta ainda vai levar alguns segundos.
Modelos de mensagem
Biblioteca de modelos internos e oficiais da organização. Guia completo: Modelos de mensagem pela API.client.messageTemplates.list()
Rota: GET /v1/message-templates.
Retorna MessageTemplateListResponse com templates[] (id, name, isOfficial, metaTemplateName, metaTemplateStatus, category, language, metaRejectedReason e outros campos).
client.messageTemplates.retrieve(id)
Rota: GET /v1/message-templates/{id}.
Retorna header, body, footer, buttons, variables, items[] e commonVariables[], a lista de variáveis manuais que você precisa informar ao enviar o modelo ou iniciar uma campanha.
client.messageTemplates.create(body)
Rota: POST /v1/message-templates (resposta 201).
Cria um modelo interno (isOfficial: false com items) ou um modelo oficial (isOfficial: true com número de WhatsApp, nome na Meta, categoria, idioma, corpo e variáveis). A resposta tem o mesmo formato de retrieve.
client.messageTemplates.update(id, body)
Rota: PATCH /v1/message-templates/{id}.
Mudar só o rótulo (name) não reenvia o modelo à Meta. Mudar o conteúdo (body, header, footer, buttons ou exemplos) de um modelo oficial aprovado ou rejeitado o coloca de novo em análise. Nome na Meta, idioma e categoria não podem ser alterados.
client.messageTemplates.delete(id)
Rota: DELETE /v1/message-templates/{id} (resposta 204).
Remove o modelo do Spark. Se ele for oficial, remove também esse idioma do modelo na Meta.
Campanhas
Disparos em massa para um público filtrado. Guia completo: Disparos de campanha pela API.client.campaigns.getFilterSchema()
Rota: GET /v1/campaigns/filters/schema.
Retorna os campos, operadores e regras de combinação aceitos nos filtros de público.
client.campaigns.previewAudience(body)
Rota: POST /v1/campaigns/audience-preview.
Recebe { filters?: Filter[] } e retorna { estimatedCount: number }, sem criar campanha.
client.campaigns.create(body)
Rota: POST /v1/campaigns (resposta 201).
Retorna
{ campaignId, status: "draft" }.
client.campaigns.start(id, body)
Rota: POST /v1/campaigns/{id}/start (resposta 202).
Recebe { commonVariables?: Record<string, string> } com as variáveis manuais do modelo. Envie {} se o modelo não tiver variáveis manuais. Só campanhas em draft podem ser iniciadas.
Retorna { executionId, status: "processing" }.
client.campaigns.list() e client.campaigns.retrieve(id)
Rotas: GET /v1/campaigns e GET /v1/campaigns/{id}.
list retorna a lista resumida de campanhas. retrieve retorna a campanha com o histórico de execuções.
client.campaigns.retrieveExecution(executionId, params)
Rota: GET /v1/campaigns/{id}/executions/{executionId}.
Informe a campanha em params.id. Retorna { id, status, targetCount, sentCount, failedCount, progress }, útil para acompanhar o envio.
client.campaigns.cancel(id)
Rota: POST /v1/campaigns/{id}/cancel (resposta 204).
Cancela uma campanha em andamento (processing). Não recebe corpo.
Tabela de métodos
Rotas sem método no SDK
O cliente expõeget, post, put, patch e delete, com as mesmas opções de retentativa, timeout e cabeçalhos. Use esses métodos para rotas novas que ainda não chegaram à versão instalada do SDK:
Principais tipos exportados
Importe do pacotesparkcrm ou use o namespace SparkCRM:
A lista completa está no api.md do repositório.

