
Contatos, dados do CRM, cadastro do cliente, pedidos feitos e o anúncio de onde o lead veio
Uma chave por empresa, no cabeçalho. A chave já diz de quem são os dados, então nenhum endpoint pede identificador de conta.
A chave é criada no painel, em Configurações e depois API, e aparece inteira uma única vez. Ela começa com whz_live_ e pode ficar presa a endereços de IP e ter data de vencimento.
Toda resposta usa o mesmo envelope: deu certo, vem success: true e o conteúdo em data; deu errado, vem error com código e mensagem. Listagem traz pagination e anda por cursor: mande em cursor o valor da chamada anterior e pare quando hasMore vier falso.
O teto é de 100 chamadas por minuto por chave, e cada resposta traz quanto sobrou nos cabeçalhos X-RateLimit. Datas saem em ISO 8601, no fuso UTC.
Escopos
contacts:readLer contatos, cadastro, pedidos e origem do anúnciocontacts:writeCriar e editar contatoscontacts:deleteArquivar contatoshttps://app.whazu.com.br/api/v1curl "https://app.whazu.com.br/api/v1/contacts?limit=5" \
-H "Authorization: Bearer whz_live_..."Contato e CRM vêm sempre. Cadastro, pedidos e origem do anúncio você pede em include, para não pagar consulta que não vai usar.
O básico da pessoa, sempre presente.
idIdentificador do contato na Whazu.nameNome como está salvo.phoneNumberTelefone com código do país, só dígitos.emailE-mail, quando houver.profilePictureUrlFoto do perfil do WhatsApp.firstMessageA primeira mensagem que a pessoa mandou.optInFalso quando a pessoa pediu para não receber mais.lastMessageAtÚltima mensagem trocada.createdAt e updatedAtEntrada e última alteração.Onde a pessoa está no funil e de quem ela é.
stageEtapa do funil.columnColuna do quadro do CRM: id, nome e papel.tagsEtiquetas aplicadas, com nome e cor.sellerNameVendedor responsável.assignedAtQuando o lead caiu para esse vendedor.productNameProduto ligado ao lead.sessionNameNúmero da empresa que atendeu.include=profileO que o card Dados do Cliente mostra no perfil. Vem do que o atendente digitou ou do que a venda trouxe.
cpfCPF do cliente.birthDateData de nascimento, no formato AAAA-MM-DD.genderM, F ou I.address.zipCEP.address.street e numberRua e número.address.complementComplemento.address.neighborhoodBairro.address.city e stateCidade e estado.include=ordersAs compras do contato nas plataformas conectadas: Yampi, Payt, Braip e B4You. Até 20, do mais novo para o mais antigo.
platformyampi, payt, braip ou b4you.orderIdIdentificador do pedido na plataforma.orderNumberNúmero do pedido, quando a plataforma manda.statusSituação informada pela plataforma.paymentMethodForma de pagamento.totalValor total, em reais.productNameProduto comprado.trackingCodeCódigo de rastreio, quando existe.createdAtData do pedido.include=originDe onde o lead veio: campanha, conjunto e anúncio. Do clique para WhatsApp saem o id do anúncio, o texto, a imagem e o texto do botão.
campaignId e campaignNameCampanha.adsetId e adsetNameConjunto de anúncios.adId e adNameAnúncio.ctwa.adIdId do anúncio clicado, como a Meta mandou no referral.ctwa.textTexto do anúncio.ctwa.imageUrlImagem do anúncio, já guardada por nós.ctwa.headlineTexto do botão do anúncio.{
"id": "b1f1c0e4-3a2d-4c19-9f7a-0d5c6e8b21aa",
"phoneNumber": "5511987654321",
"name": "Marina Alves",
"email": "marina@exemplo.com.br",
"stage": "pago",
"column": {
"id": "5d2b9a11-7c34-4e60-a8f2-91b7c3d5e0a4",
"name": "Pago",
"kind": "pago"
},
"tags": [
{
"id": "7c0a1e22-90b4-4d7f-8c11-2f9d3b5a6e01",
"name": "Quente",
"color": "#22d3ee"
}
],
"profilePictureUrl": "https://app.whazu.com.br/uploads/fotos/5511987654321.jpg",
"sessionName": "comercial",
"firstMessage": "Vi o anúncio, quero saber o preço",
"optIn": true,
"sellerName": "Camila",
"assignedAt": "2026-09-18T13:56:02.000Z",
"productName": "Kit Verão",
"lastMessageAt": "2026-09-18T14:02:11.000Z",
"createdAt": "2026-09-18T13:55:40.000Z",
"updatedAt": "2026-09-18T14:02:11.000Z",
"profile": {
"cpf": "12345678901",
"birthDate": "1991-03-24",
"gender": "F",
"address": {
"zip": "01310930",
"street": "Avenida Paulista",
"number": "1578",
"complement": "apto 71",
"neighborhood": "Bela Vista",
"city": "São Paulo",
"state": "SP"
}
},
"orders": [
{
"platform": "payt",
"orderId": "PT-8841203",
"orderNumber": null,
"status": "paid",
"paymentMethod": "pix",
"total": 259.9,
"productName": "Kit Verão",
"trackingCode": null,
"createdAt": "2026-09-18T14:10:55.000Z"
}
],
"origin": {
"campaignId": "23861234567890123",
"campaignName": "Verão 2026 · conversas",
"adsetId": "23861234567890456",
"adsetName": "Mulheres 25 a 44 · Sudeste",
"adId": "23861234567890789",
"adName": "Criativo 07 · depoimento",
"ctwa": {
"adId": "23861234567890789",
"text": "O Kit Verão chegou. Fale com a gente e garanta o seu.",
"imageUrl": "https://app.whazu.com.br/uploads/anuncios/23861234567890789.jpg",
"headline": "Enviar mensagem"
}
}
}/api/v1/contactsOs contatos não arquivados, do mais novo para o mais antigo, com filtro e paginação.
Escopo: contacts:read
Parâmetros de busca
searchstringProcura em nome, telefone e e-mail ao mesmo tempo.
phonestringTrecho do telefone.
tagstringNome exato da etiqueta.
stagestringEtapa do funil.
dateFromdata ISO 8601Criados a partir desta data.
dateTodata ISO 8601Criados até esta data.
cursorstringValor devolvido em pagination.cursor da chamada anterior.
limitinteiroDe 1 a 100. O padrão é 20.
curl "https://app.whazu.com.br/api/v1/contacts" \
-H "Authorization: Bearer whz_live_..."{
"success": true,
"data": [
{
"id": "b1f1c0e4-3a2d-4c19-9f7a-0d5c6e8b21aa",
"phoneNumber": "5511987654321",
"name": "Marina Alves",
"email": "marina@exemplo.com.br",
"stage": "pago",
"tags": [
{
"id": "7c0a1e22-90b4-4d7f-8c11-2f9d3b5a6e01",
"name": "Quente",
"color": "#22d3ee"
}
],
"profilePictureUrl": "https://app.whazu.com.br/uploads/fotos/5511987654321.jpg",
"optIn": true,
"lastMessageAt": "2026-09-18T14:02:11.000Z",
"createdAt": "2026-09-18T13:55:40.000Z",
"updatedAt": "2026-09-18T14:02:11.000Z"
}
],
"pagination": {
"cursor": "b1f1c0e4-3a2d-4c19-9f7a-0d5c6e8b21aa",
"hasMore": true
}
}/api/v1/contacts/{id}O contato inteiro. Com include você pede também o cadastro do cliente, os pedidos e a origem do anúncio.
Escopo: contacts:read
Parâmetros do caminho
iduuidIdentificador do contato.obrigatório
Parâmetros de busca
includestringBlocos extras, separados por vírgula: profile, orders, origin. O valor all liga os três. Sem o parâmetro vêm só contato e CRM.
curl "https://app.whazu.com.br/api/v1/contacts/b1f1c0e4-3a2d-4c19-9f7a-0d5c6e8b21aa?include=all" \
-H "Authorization: Bearer whz_live_..."{
"success": true,
"data": {
"id": "b1f1c0e4-3a2d-4c19-9f7a-0d5c6e8b21aa",
"phoneNumber": "5511987654321",
"name": "Marina Alves",
"email": "marina@exemplo.com.br",
"stage": "pago",
"column": {
"id": "5d2b9a11-7c34-4e60-a8f2-91b7c3d5e0a4",
"name": "Pago",
"kind": "pago"
},
"tags": [
{
"id": "7c0a1e22-90b4-4d7f-8c11-2f9d3b5a6e01",
"name": "Quente",
"color": "#22d3ee"
}
],
"profilePictureUrl": "https://app.whazu.com.br/uploads/fotos/5511987654321.jpg",
"sessionName": "comercial",
"firstMessage": "Vi o anúncio, quero saber o preço",
"optIn": true,
"sellerName": "Camila",
"assignedAt": "2026-09-18T13:56:02.000Z",
"productName": "Kit Verão",
"lastMessageAt": "2026-09-18T14:02:11.000Z",
"createdAt": "2026-09-18T13:55:40.000Z",
"updatedAt": "2026-09-18T14:02:11.000Z",
"profile": {
"cpf": "12345678901",
"birthDate": "1991-03-24",
"gender": "F",
"address": {
"zip": "01310930",
"street": "Avenida Paulista",
"number": "1578",
"complement": "apto 71",
"neighborhood": "Bela Vista",
"city": "São Paulo",
"state": "SP"
}
},
"orders": [
{
"platform": "payt",
"orderId": "PT-8841203",
"orderNumber": null,
"status": "paid",
"paymentMethod": "pix",
"total": 259.9,
"productName": "Kit Verão",
"trackingCode": null,
"createdAt": "2026-09-18T14:10:55.000Z"
}
],
"origin": {
"campaignId": "23861234567890123",
"campaignName": "Verão 2026 · conversas",
"adsetId": "23861234567890456",
"adsetName": "Mulheres 25 a 44 · Sudeste",
"adId": "23861234567890789",
"adName": "Criativo 07 · depoimento",
"ctwa": {
"adId": "23861234567890789",
"text": "O Kit Verão chegou. Fale com a gente e garanta o seu.",
"imageUrl": "https://app.whazu.com.br/uploads/anuncios/23861234567890789.jpg",
"headline": "Enviar mensagem"
}
}
}
}/api/v1/contacts/searchBusca por texto, telefone ou etiqueta. Pelo menos um dos três é obrigatório.
Escopo: contacts:read
Parâmetros de busca
qstringTexto procurado em nome, telefone e e-mail.
phonestringTrecho do telefone.
tagstringNome exato da etiqueta.
cursorstringValor devolvido em pagination.cursor.
limitinteiroDe 1 a 100. O padrão é 20.
Erros específicos
400 VALIDATION_ERROR Nenhum dos parâmetros q, phone ou tag foi enviado.curl "https://app.whazu.com.br/api/v1/contacts/search" \
-H "Authorization: Bearer whz_live_..."{
"success": true,
"data": [
{
"id": "b1f1c0e4-3a2d-4c19-9f7a-0d5c6e8b21aa",
"phoneNumber": "5511987654321",
"name": "Marina Alves",
"email": "marina@exemplo.com.br",
"stage": "pago",
"tags": [
"vip"
],
"optIn": true,
"lastMessageAt": "2026-09-18T14:02:11.000Z",
"createdAt": "2026-09-18T13:55:40.000Z"
}
],
"pagination": {
"cursor": null,
"hasMore": false
}
}/api/v1/contactsCadastra a pessoa e já coloca na coluna de entrada do funil, igual ao contato criado pela tela.
Escopo: contacts:write
Corpo da requisição
namestringNome, de 1 a 255 caracteres.obrigatório
phonestringTelefone com código do país.obrigatório
emailstringE-mail válido.
tagsarray de stringEtiquetas.
notesstringAnotação livre.
stagestringEtapa do funil. O padrão é new.
Erros específicos
409 CONFLICT Já existe contato com esse telefone.curl "https://app.whazu.com.br/api/v1/contacts" \
-X POST \
-H "Authorization: Bearer whz_live_..." \
-H "Content-Type: application/json" \
-d '{"name":"Marina Alves","phone":"5511987654321","email":"marina@exemplo.com.br","tags":["vip"]}'{
"success": true,
"data": {
"id": "b1f1c0e4-3a2d-4c19-9f7a-0d5c6e8b21aa",
"phoneNumber": "5511987654321",
"name": "Marina Alves",
"email": "marina@exemplo.com.br",
"stage": "new",
"tags": [
"vip"
],
"createdAt": "2026-09-18T13:55:40.000Z"
}
}/api/v1/contacts/{id}Altera só o que for enviado. O telefone não muda por aqui.
Escopo: contacts:write
Parâmetros do caminho
iduuidIdentificador do contato.obrigatório
Corpo da requisição
namestringNovo nome.
emailstringNovo e-mail.
tagsarray de stringSubstitui as etiquetas.
notesstringAnotação.
stagestringNova etapa do funil.
curl "https://app.whazu.com.br/api/v1/contacts/b1f1c0e4-3a2d-4c19-9f7a-0d5c6e8b21aa" \
-X PATCH \
-H "Authorization: Bearer whz_live_..." \
-H "Content-Type: application/json" \
-d '{"stage":"negociacao","notes":"Pediu proposta por e-mail"}'{
"success": true,
"data": {
"id": "b1f1c0e4-3a2d-4c19-9f7a-0d5c6e8b21aa",
"phoneNumber": "5511987654321",
"name": "Marina Alves",
"email": "marina@exemplo.com.br",
"stage": "negociacao",
"tags": [
"vip"
],
"createdAt": "2026-09-18T13:55:40.000Z",
"updatedAt": "2026-09-19T09:12:03.000Z"
}
}/api/v1/contacts/{id}O contato sai das listagens e o histórico continua guardado. Não é exclusão definitiva.
Escopo: contacts:delete
Parâmetros do caminho
iduuidIdentificador do contato.obrigatório
curl "https://app.whazu.com.br/api/v1/contacts/b1f1c0e4-3a2d-4c19-9f7a-0d5c6e8b21aa" \
-X DELETE \
-H "Authorization: Bearer whz_live_..."{
"success": true,
"data": {
"id": "b1f1c0e4-3a2d-4c19-9f7a-0d5c6e8b21aa",
"deleted": true
}
}O código HTTP diz o tipo do problema e o campo error.code diz o motivo. Trate pelo código, não pela mensagem.
400VALIDATION_ERRORAlgum campo não passou na validação.401UNAUTHORIZEDChave ausente, com formato errado, inativa, revogada ou vencida.402FORBIDDENConta bloqueada por falta de pagamento.403FORBIDDENA chave não tem o escopo exigido, ou o IP está fora da lista.404NOT_FOUNDO contato não existe nessa empresa.409CONFLICTJá existe contato com esse telefone.429RATE_LIMITEDPassou das 100 chamadas por minuto da chave.500INTERNAL_ERRORFalha do nosso lado. A chamada pode ser repetida.A mesma referência em arquivo, no padrão OpenAPI 3.1.
Postman, Insomnia, n8n, Make e agentes de inteligência artificial importam esse arquivo e montam as chamadas sozinhos. Ele é gerado da mesma fonte desta página, então não fica desatualizado.
curl -O https://app.whazu.com.br/documentacao/openapi.json