1. CRM
Khal Docs
  • Raiz
    • CRM
      • CRM — Overview
      • Genérico (data)
        • CRM - Genérico
        • Listar/filtrar registros (qualquer tabela do CRM)
        • Criar/atualizar registros (qualquer tabela do CRM)
        • Hard-delete (não permitido para tabelas company)
      • Empresas Relacionadas
        • CRM - Empresas relacionadas
        • Listar relacionamentos de uma empresa (ambas as direções)
        • Tipos de relacionamento disponíveis
        • Criar relacionamento entre duas empresas
        • Alterar o tipo do relacionamento
        • Inativar relacionamento (reversível)
        • Excluir relacionamento (hard-delete)
      • Ticket ↔ Empresa
        • CRM - Ticket <-> Empresa
        • Empresas elegíveis para o ticket
        • Vincular / trocar a empresa do ticket
      • Templates
        • CRM - Templates
        • Listar templates do tenant (apenas IDs, sem fields)
        • Detalhe completo do template (com fields)
        • Pesquisa formatada por scope (CRMSearchResult)
      • Empresas do cliente
        • Listar tipos de relacionamento
        • Listar empresas de um cliente
        • Vincular empresa ao cliente
        • Trocar a empresa principal
        • Alterar tipo de relacionamento
        • Inativar vínculo
        • Reativar vínculo
        • Excluir vínculo
    • Workflow
      • Workflow - Overview
      • Tickets
        • Workflow - Tickets
        • Criar ticket com auto-vínculo / criação de customer via contato
        • Detalhe completo do ticket (mensagens, SLA, fases, customer, empresa, business)
        • Criar ticket (básico, com integração CRM opcional)
        • Movimentar ticket entre fases (ou finalizar)
        • Atualizar dados do ticket (nome, descrição, valor)
        • Vincular cliente CRM a um ticket existente
        • Adicionar nota ou mensagem ao ticket
        • Atribuir ou transferir o responsável do ticket
      • Workspaces & Workflows
        • Workflow - Workspaces & Workflows
        • Listar workspaces e workflows acessíveis ao usuário
        • Listar fases de um workflow
        • Listar tickets de uma ou mais fases (paginado)
    • Webhooks
      • Eventos
        • 📨 [Contrato] Evento entregue na sua URL
        • Catálogo de eventos disponíveis
      • Assinaturas
        • Listar webhooks cadastrados
        • Criar webhook (o secret aparece UMA única vez)
        • Testar conectividade de uma URL
        • Detalhar webhook
        • Atualizar webhook
        • Ativar/desativar webhook (toggle)
        • Remover webhook (soft delete)
      • Entregas
        • Log de entregas de uma assinatura
        • Reprocessar uma entrega
        • Reprocessar TODAS as entregas com falha
      • Integrações
        • Voz IA (ElevenLabs)
          • Criar ou atualizar a integração de Voz IA
          • Consultar a integração de Voz IA
          • Alterar a integração de Voz IA (secret, toggle, allowlist)
          • Remover a integração de Voz IA
          • Webhook pós-chamada (chamado pelo provedor de voz)
    • Configurações
      • Canais
        • WhatsApp oficial
          • Listar conexões de WhatsApp (a tela Canais › WhatsApp oficial)
          • Listar números disponíveis de uma WABA
          • Criar conexão de WhatsApp oficial
          • Conectar o número oficial (ativar a conexão)
        • Telefonia
          • Anexar gravação de ligação (telefonia de terceiros)
          • Registrar CSAT de ligação
          • Consultar status da gravação enviada
      • Templates
        • WhatsApp oficial
          • Listar templates HSM (a tela Templates › WhatsApp oficial)
          • Criar template HSM (+ Novo modelo)
          • Detalhar template
          • Atualizar template
          • Excluir template
          • Sincronizar templates com a Meta
          • Upload de mídia para o header do template
        • RCS
          • Listar templates de RCS
      • Base de dados
        • Modelo de colunas do CSV
        • Importar base (CSV) para uma tabela do CRM
        • Acompanhar as importações (validar o resultado)
        • Erros de uma importação
        • Exportar os erros em planilha
    • Raiz
      • Workflow
        • Tarefas
          • Criar tarefa
          • Listar tarefas
          • Resumo de tarefas
          • Consultar tarefa
          • Editar tarefa
          • Concluir tarefa
          • Cancelar (excluir) tarefa
          • Silenciar alarme
          • Tarefas do ticket
  • Esquemas
    • LoginRequest
    • FilterOperator
    • WebhookSubscription
    • ClienteEmpresaTipo
    • LoginResponse
    • FilterCondition
    • WebhookSubscriptionResumo
    • ClienteEmpresa
    • Error
    • Pagination
    • WebhookDelivery
    • ErroRegra
    • FilterRequest
    • WebhookEventEnvelope
    • FilterResponse
    • SetMethod
    • SetRequest
    • DeleteRequest
    • SuccessEnvelope
    • ErrorEnvelope
    • Empresa
    • EmpresaResumo
    • EmpresaRelacionadaCreate
    • EmpresaRelacionada
    • TicketInfoResponse
  1. CRM

CRM — Overview

API multi-tenant pra ler/escrever dados do CRM (empresa, cliente, negócios,
tabelas customizadas) via header api-key. Todos os endpoints abaixo respondem
no host do tenant (https://api-<tenant>.atendimento.khal.ai) — a api-key
já carrega o contexto multi-tenant.

Quickstart em 60 segundos#

1.
Configure api-key no Environment do Apidog (variável api-key).
2.
Liste empresas pra pegar IDs:
3.
Pegue um id da resposta e use nos demais endpoints (relacionamentos, vínculo com ticket).

Conceitos rápidos#

Tenant (multi-empresa)#

Cada cliente da Khal roda em um host próprio: https://api-<tenant>.atendimento.khal.ai.
A api-key está atrelada ao tenant — não precisa trocar de tenant; resolve sozinho.

Scopes#

O CRM separa as tabelas por scope:
ScopeTabelasO que é
customercliente, avaliacaoPessoa que consome / é atendida.
contactcontatoCanais do cliente (phone, email, WhatsApp, …).
businessnegociacaoOportunidade/deal vinculada a 1 cliente.
companyempresa, empresas_relacionadas, + tabelas customizadas (financeiro, contrato, …)Empresa B2B (CNPJ). cliente.id_empresa é a FK que liga cliente → empresa.
catalog(custom por tenant)Catálogos auxiliares (listas de opções).

Autenticação#

Todas as rotas exigem o header api-key:
api-key: <SEU_TOKEN>
Sem header → 401. A api-key resolve tenant + permissões automaticamente.
No Apidog, defina a variável api-key no Environment e os exemplos {{api-key}}
são preenchidos automaticamente em todos os endpoints.

Endpoints centrais#

Genérico (qualquer tabela do CRM)#

RotaPra que serve
POST /api/v2/crm/data/filterListar/filtrar (qualquer tabela).
POST /api/v2/crm/data/setCriar (method:"post") ou atualizar (method:"patch").
POST /api/v2/crm/data/deleteHard-delete (bloqueado para tabela company — use soft-delete).

Específicos de Empresa (subpasta Empresas Relacionadas)#

RotaPra que serve
GET /api/v2/empresa-relacionadas/typesTipos válidos pra tipo_de_relacionamento.
GET /api/v2/empresa-relacionadas/by-empresa/{id}?onlyActive=trueListar relacionamentos (ambas direções).
POST /api/v2/empresa-relacionadasCriar vínculo direcional empresa→empresa.
PATCH /api/v2/empresa-relacionadas/{id}/typeAlterar tipo.
PATCH /api/v2/empresa-relacionadas/{id}/inactivateInativar (reversível).
DELETE /api/v2/empresa-relacionadas/{id}Hard-delete (irreversível).

Ticket ↔ Empresa (subpasta Ticket ↔ Empresa)#

RotaPra que serve
GET /api/v2/ticket/{id}/empresasEmpresas elegíveis pro vínculo (cliente direto + relacionadas).
PUT /api/v2/ticket/{id}/empresaVincular/trocar a empresa do ticket.
GET /api/v2/ticket/info/{id}Detalhe do ticket (customer + empresa + business).

Formato das respostas#

Não é uniforme — preste atenção em qual estilo o endpoint usa:
EndpointsFormatoExemplo
/crm/data/filter, /crm/data/setArray nu (sem envelope)[{...}, {...}]
Todos os outros (/empresa-relacionadas/*, /ticket/*, /data/delete)Envelope {ok, data}{"ok":true,"data":[...]}
Erros 4xx/5xx{"error":"..."} (mscrm direto) ou {"ok":false,"message":"..."} (envelope)varia
Cada endpoint mostra o formato real no exemplo de resposta — sempre confira lá.

Operadores de filtro (em /crm/data/filter e /crm/data/set patch)#

OperadorSignificadoTipo de value
=igualstring / number / boolean
!= ou <>diferentestring / number / boolean
> < >= <=comparação numérica/datanumber / date
inestá na listaarray
Comparação exata (não há LIKE/fuzzy). Pra busca textual livre, use o endpoint de search dedicado (fora desta API).

Tipos de value#

string: aspas obrigatórias ("texto").
CNPJ / CPF no banco é sem formatação — use "11111111000111", não "11.111.111/0001-11".
number: sem aspas (12, 12.5).
boolean: true / false (sem aspas — "true" quebra).
date: ISO-8601 ("2026-01-01T00:00:00Z").
array: usado só com in ([1,2,3]).

Paginação#

Objeto aninhado (não plano): {"page": {"page": 0, "limit": 100}} — page começa em 0, não 1. Default 100/página, máximo 1000.

Soft-delete e auditoria (escopo company)#

Tabelas do scope company (incl. tabelas customizadas, ex: financeiro/contrato):
Hard-delete via /data/delete é bloqueado (400). Pra "remover", use data/set patch:
Inativar (reversível, some dos seletores): {"payload": {"ativo": false}}.
Soft-delete (destrutivo, auditável): {"payload": {"ativo": false, "deleted_at": "<ISO-8601>"}}.
Reads filtram deleted_at IS NULL automaticamente — registros soft-deletados somem do data/filter.
Toda mutação grava trilha em crm_data_audit (interno, sem endpoint público de leitura).

Fluxo típico: vincular uma empresa nova a um ticket#

1.
POST /api/v2/crm/data/set method:"post" table:"empresa" — cria a empresa, anota o id.
2.
(opcional) POST /api/v2/empresa-relacionadas — vincula essa empresa a outra existente.
3.
GET /api/v2/ticket/{id}/empresas — confirma que a empresa nova apareceu na lista de elegíveis.
4.
PUT /api/v2/ticket/{id}/empresa {"id_empresa_crm": <id>} — vincula ao ticket. Se já havia outra empresa, o vínculo anterior é inativado.
5.
GET /api/v2/ticket/info/{id} — valida que data.empresa agora reflete a empresa nova.

Erros comuns#

HTTPCausa típicaResposta típica
400Payload inválido (campo errado, operator desconhecido, patch sem filter, hard-delete em tabela company){"error":"..."}
401Header api-key ausente ou inválido{"tokenError":"..."}
404Recurso inexistente (relacionamento, ticket){"ok":false,"message":"..."}
422Invariante violado (self-relation, duplicata, empresa inativa em vínculo){"ok":false,"message":"..."}
500Bug interno — abrir ticket no time de plataforma com o correlation_id da respostavaria
Modificado em 2026-11-04 03:01:25
Próxima página
CRM - Genérico
Built with