Skip to main content
“Card” é o nome público do funil do Whatix — venda, suporte, cobrança, qualquer processo em etapas (o nome interno é “opportunity”, mas a API usa “card” por ser mais genérico). Um pipeline tem etapas (stages) ordenadas; cada card está numa etapa de um pipeline, tem um contato, um valor opcional e um status (open, won, lost).

Mapa mental

Todos os endpoints de card/pipeline exigem cards:read (leitura) ou cards:write (criar/mover) e enxergam a conta inteira — como um admin vendo o kanban completo, não só os cards do usuário do token.

Caso guiado: dashboard de marketing

Você quer montar um painel externo com: cards do mês por etapa, por origem (sourceId — de onde veio o lead, ex. Instagram Ads, indicação) e motivos de perda. Nenhum endpoint devolve isso pronto — você monta agregando as respostas.
1

Monte o funil com os pipelines

GET /v1/pipelines devolve os pipelines da sua conta com as etapas já ordenadas (stages[].order). Use isso para saber quais stageId existem e montar as colunas do funil antes de buscar os cards.
2

Busque os cards do período, paginando

GET /v1/cards filtra por pipelineId, createdAtAfter/createdAtBefore (offset de fuso obrigatório — veja Paginação e filtros). Pagine até hasMore: false:
A resposta também traz totalValue — soma de value de todos os cards que casam o filtro, não só da página atual. Útil pra um card de “valor total do funil” sem somar manualmente.
3

Agrupe por etapa e por origem

Cada card na resposta já vem com stage: { id, name } e source: { id, name } embutidos — não precisa de outra chamada pra resolver os nomes:
4

Resolva os motivos de perda

Pra um card com status: "lost", o objeto já traz lostReason: { id, name }. Se quiser a lista completa de motivos configurados (pra montar um filtro no seu painel, por exemplo), use GET /v1/lost-reasons:
5

Agende a atualização respeitando o rate limit

Rode a coleta a cada 15 minutos (ou o intervalo que fizer sentido pro seu painel). Com paginação de 100 cards por página, um pipeline com 500 cards no mês gasta 5 requisições — bem abaixo do limite de 120/min por token. Se você tem vários pipelines ou várias companies, distribua as chamadas em vez de disparar tudo no mesmo segundo:

Criar card por webhook de formulário

Quando um lead preenche um formulário externo, crie o card direto pelo número — sem precisar buscar o contactId antes. POST /v1/cards aceita phone como alternativa a contactId; o contato é criado/reaproveitado automaticamente:
Envie exatamente um entre contactId e phone — os dois juntos (ou nenhum) resultam em 400 ERR_CONTACT_IDENTIFIER_REQUIRED.
Envie sempre stageId ao criar um card. Se omitir, o card é criado sem etapa (stage: null) e não aparece nas colunas do kanban.
Se o pipeline tiver uma etapa que exige origem (sourceRequired) e você não enviar sourceId, a API responde 400 ERR_SOURCE_REQUIRED_FOR_STAGE — só quando stageId também é enviado no POST. Confira as etapas em GET /v1/pipelines antes de montar a integração.

Preenchendo campos personalizados

customFields aceita os campos personalizados do pipeline informado (ou globais da sua conta) — a chave é o name técnico do campo, o valor já no formato do tipo (select/multiselect precisam bater com as options cadastradas):
Campo inexistente, de outro pipeline/conta ou com valor inválido é ignorado — nunca falha a criação do card — e reportado em ignoredCustomFields ([{ name, reason }]) na resposta, presente só quando algum campo foi ignorado.

Mover card de etapa

PATCH /v1/cards/{cardId}/stage move exatamente como um arrastar-e-soltar no kanban: dispara as mesmas automações da etapa e atualiza em tempo real pra quem estiver com o kanban aberto.
stageId precisa ser do mesmo pipeline do card. Mover para etapa de outro pipeline devolve 422 ERR_STAGE_NOT_IN_PIPELINE — mover entre pipelines não é permitido pela API.

Erros comuns

Veja o catálogo completo de erros.