Tema Escuro
Contatos
A API de contatos permite gerenciar os contatos da sua empresa, incluindo campos personalizados e notas.
Listar Campos Personalizados
GEThttps://chat.mehub.app/api/v1/contacts/customfieldsRetorna todos os campos personalizados disponíveis para cadastro de contatos.
Headers
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| Authorization | string | Sim | Token de autenticação. Ex: Bearer seu_token |
Query Parameters
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| page | integer | Não | Número da página. Default: 1 |
| per_page | integer | Não | Registros por página (máx: 100). Default: 20 |
| name | string | Não | Filtrar por nome do campo (busca parcial) |
| type | string | Não | Filtrar por tipo: text, number, email, date, select |
| is_active | boolean | Não | Filtrar por status ativo/inativo |
Exemplo de requisição
bash
curl -X GET "https://chat.mehub.app/api/v1/contacts/customfields?is_active=true" \
-H "Authorization: Bearer SEU_TOKEN"Response
json
{
"success": true,
"data": [
{
"id": 1,
"name": "cpf",
"type": "text",
"placeholder": "Digite o CPF",
"options": null,
"is_active": true,
"order": 1
},
{
"id": 2,
"name": "data_nascimento",
"type": "date",
"placeholder": "Data de nascimento",
"options": null,
"is_active": true,
"order": 2
},
{
"id": 3,
"name": "plano",
"type": "select",
"placeholder": "Selecione o plano",
"options": ["Básico", "Intermediário", "Premium"],
"is_active": true,
"order": 3
}
],
"pagination": {
"total": 3,
"per_page": 20,
"current_page": 1,
"last_page": 1
}
}Campos do Response
| Campo | Tipo | Descrição |
|---|---|---|
| id | integer | ID único do campo |
| name | string | Nome/identificador do campo |
| type | string | Tipo: text, number, email, date, select |
| placeholder | string | Texto de placeholder do campo |
| options | array/null | Opções disponíveis (apenas para tipo select) |
| is_active | boolean | Se o campo está ativo |
| order | integer | Ordem de exibição |
Listar Contatos
GEThttps://chat.mehub.app/api/v1/contactsRetorna todos os contatos da empresa autenticada.
Headers
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| Authorization | string | Sim | Token de autenticação. Ex: Bearer seu_token |
Query Parameters
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| page | integer | Não | Número da página. Default: 1 |
| per_page | integer | Não | Registros por página (máx: 100). Default: 20 |
| name | string | Não | Filtrar por nome (busca parcial) |
| phone | string | Não | Filtrar por telefone (busca parcial) |
| tag | integer | Não | Filtrar por ID da tag |
| blocked | boolean | Não | Filtrar por status de bloqueio |
Exemplo de requisição
bash
curl -X GET "https://chat.mehub.app/api/v1/contacts?name=João&blocked=false" \
-H "Authorization: Bearer SEU_TOKEN"Response
json
{
"success": true,
"data": [
{
"id": 1,
"phone": "5531900000000",
"name": "João Silva",
"avatar": "https://exemplo.com/avatar.jpg",
"type": "whatsapp",
"blocked": false,
"customfields": {
"cpf": "123.456.789-00",
"plano": "Premium"
},
"tags": [
{
"id": 1,
"name": "Cliente VIP"
}
],
"created_at": "2025-10-29T10:30:00.000000Z",
"updated_at": "2025-10-29T10:30:00.000000Z"
}
],
"pagination": {
"total": 150,
"per_page": 20,
"current_page": 1,
"last_page": 8
}
}Campos do Response
| Campo | Tipo | Descrição |
|---|---|---|
| id | integer | ID único do contato |
| phone | string | Número de telefone com código do país |
| name | string | Nome do contato |
| avatar | string/null | URL da foto do contato |
| type | string | Tipo do contato |
| blocked | boolean | Se o contato está bloqueado |
| customfields | object | Campos personalizados preenchidos |
| tags | array | Tags vinculadas ao contato |
| created_at | string | Data de criação |
| updated_at | string | Data da última atualização |
Visualizar Contato
GEThttps://chat.mehub.app/api/v1/contacts/{id}Retorna os detalhes de um contato específico.
Headers
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| Authorization | string | Sim | Token de autenticação. Ex: Bearer seu_token |
Path Parameters
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | integer | Sim | ID do contato |
Exemplo de requisição
bash
curl -X GET "https://chat.mehub.app/api/v1/contacts/1" \
-H "Authorization: Bearer SEU_TOKEN"Response
json
{
"success": true,
"data": {
"id": 1,
"phone": "5531900000000",
"name": "João Silva",
"avatar": "https://exemplo.com/avatar.jpg",
"type": "whatsapp",
"blocked": false,
"customfields": {
"cpf": "123.456.789-00",
"plano": "Premium"
},
"tags": [
{
"id": 1,
"name": "Cliente VIP"
}
],
"created_at": "2025-10-29T10:30:00.000000Z",
"updated_at": "2025-10-29T10:30:00.000000Z"
}
}Criar Contato
POSThttps://chat.mehub.app/api/v1/contactsCria um novo contato.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| phone | string | Sim | Número de telefone com código do país |
| name | string | Não | Nome do contato |
| blocked | boolean | Não | Se o contato está bloqueado. Default: false |
| customfields | object | Não | Campos personalizados |
| tags | array | Não | Array com IDs das tags a vincular |
Para obter os IDs das tags disponíveis, veja: Listar Tags.
Para obter os campos personalizados disponíveis, veja: Listar Campos Personalizados.
Exemplo de requisição
bash
curl -X POST "https://chat.mehub.app/api/v1/contacts" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"phone": "5531900000000",
"name": "João Silva",
"blocked": false,
"customfields": {
"cpf": "123.456.789-00",
"plano": "Premium"
},
"tags": [1, 3]
}'Response
json
{
"success": true,
"message": "Contato criado com sucesso.",
"data": {
"id": 1,
"phone": "5531900000000",
"name": "João Silva",
"avatar": null,
"type": "whatsapp",
"blocked": false,
"customfields": {
"cpf": "123.456.789-00",
"plano": "Premium"
},
"tags": [
{
"id": 1,
"name": "Cliente VIP"
},
{
"id": 3,
"name": "Novo"
}
],
"created_at": "2025-10-29T10:30:00.000000Z",
"updated_at": "2025-10-29T10:30:00.000000Z"
}
}Erros
json
{
"success": false,
"message": "Erro de validação",
"errors": [
{
"code": "FIELD_REQUIRED",
"field": "phone",
"message": "O campo phone é obrigatório."
}
]
}json
{
"success": false,
"message": "Erro de validação",
"errors": [
{
"code": "DUPLICATE_ENTRY",
"field": "phone",
"message": "Já existe um contato com este telefone."
}
]
}Atualizar Contato
PUThttps://chat.mehub.app/api/v1/contacts/{id}Atualiza os dados de um contato existente.
Path Parameters
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | integer | Sim | ID do contato |
Request Body
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| name | string | Não | Nome do contato |
| blocked | boolean | Não | Se o contato está bloqueado |
| customfields | object | Não | Campos personalizados |
| tags | array | Não | Array com IDs das tags (substitui as existentes) |
Para obter os IDs das tags disponíveis, veja: Listar Tags.
Para obter os campos personalizados disponíveis, veja: Listar Campos Personalizados.
Nota
O número de telefone não pode ser alterado após a criação do contato.
Exemplo de requisição
bash
curl -X PUT "https://chat.mehub.app/api/v1/contacts/1" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "João da Silva",
"customfields": {
"cpf": "123.456.789-00",
"plano": "Básico"
},
"tags": [2]
}'Response
json
{
"success": true,
"message": "Contato atualizado com sucesso.",
"data": {
"id": 1,
"phone": "5531900000000",
"name": "João da Silva",
"avatar": "https://exemplo.com/avatar.jpg",
"type": "whatsapp",
"blocked": false,
"customfields": {
"cpf": "123.456.789-00",
"plano": "Básico"
},
"tags": [
{
"id": 2,
"name": "Suporte"
}
],
"created_at": "2025-10-29T10:30:00.000000Z",
"updated_at": "2025-10-30T14:20:00.000000Z"
}
}Erros
json
{
"success": false,
"message": "Contato não encontrado."
}Excluir Contato
DELETEhttps://chat.mehub.app/api/v1/contacts/{id}Remove um contato e todos os chats vinculados a ele.
Atenção
Ao excluir um contato, todos os chats e mensagens associados serão excluídos permanentemente.
Path Parameters
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | integer | Sim | ID do contato |
Exemplo de requisição
bash
curl -X DELETE "https://chat.mehub.app/api/v1/contacts/1" \
-H "Authorization: Bearer SEU_TOKEN"Response
json
{
"success": true,
"message": "Contato excluído com sucesso."
}Erros
json
{
"success": false,
"message": "Contato não encontrado."
}Listar Notas do Contato
GEThttps://chat.mehub.app/api/v1/contacts/{id}/notesRetorna todas as notas de um contato específico.
Headers
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| Authorization | string | Sim | Token de autenticação. Ex: Bearer seu_token |
Path Parameters
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | integer | Sim | ID do contato |
Query Parameters
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| page | integer | Não | Número da página. Default: 1 |
| per_page | integer | Não | Registros por página (máx: 100). Default: 20 |
Exemplo de requisição
bash
curl -X GET "https://chat.mehub.app/api/v1/contacts/1/notes" \
-H "Authorization: Bearer SEU_TOKEN"Response
json
{
"success": true,
"data": [
{
"id": 1,
"content": "Cliente solicitou contato para renovação do plano.",
"user": {
"id": 2,
"name": "Maria Souza"
},
"created_at": "2025-10-29T10:30:00.000000Z"
},
{
"id": 2,
"content": "Enviado proposta por e-mail.",
"user": {
"id": 3,
"name": "Carlos Lima"
},
"created_at": "2025-10-28T15:45:00.000000Z"
}
],
"pagination": {
"total": 2,
"per_page": 20,
"current_page": 1,
"last_page": 1
}
}Campos do Response
| Campo | Tipo | Descrição |
|---|---|---|
| id | integer | ID único da nota |
| content | string | Conteúdo da nota |
| user | object | Usuário que criou a nota |
| created_at | string | Data de criação |
Criar Nota no Contato
POSThttps://chat.mehub.app/api/v1/contacts/{id}/notesAdiciona uma nota a um contato.
Path Parameters
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | integer | Sim | ID do contato |
Request Body
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| content | string | Sim | Conteúdo da nota |
Exemplo de requisição
bash
curl -X POST "https://chat.mehub.app/api/v1/contacts/1/notes" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"content": "Cliente solicitou contato para renovação do plano."
}'Response
json
{
"success": true,
"message": "Nota criada com sucesso.",
"data": {
"id": 1,
"content": "Cliente solicitou contato para renovação do plano.",
"user": {
"id": 2,
"name": "Maria Souza"
},
"created_at": "2025-10-29T10:30:00.000000Z"
}
}Erros
json
{
"success": false,
"message": "Contato não encontrado."
}json
{
"success": false,
"message": "Erro de validação",
"errors": [
{
"code": "FIELD_REQUIRED",
"field": "content",
"message": "O campo content é obrigatório."
}
]
}Verificar Número
POSThttps://chat.mehub.app/api/v1/contacts/verifynumberVerifica se um número de telefone existe no WhatsApp e se pode receber mensagem no canal informado.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| phone | string | Sim | Número com código do país. Ex: 5531900000000 |
| channel | string | Sim | Token do canal WhatsApp que fará a verificação |
Exemplo de requisição
bash
curl -X POST "https://chat.mehub.app/api/v1/contacts/verifynumber" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"phone": "5531900000000",
"channel": "abc123def456"
}'Response
A requisição é considerada processada quando o canal está disponível para realizar a checagem. Nesse caso, o retorno é success: true e o resultado vem em data.valid.
Número válido
json
{
"success": true,
"data": {
"valid": true,
"phone": "5531900000000",
"can_receive_message": true,
"is_business": false
}
}Número inválido
json
{
"success": true,
"data": {
"valid": false,
"phone": "5531900000000",
"can_receive_message": false,
"reason": "NUMBER_NOT_ON_WHATSAPP"
}
}Erros
Canal desconectado
Status: 409
json
{
"success": false,
"message": "Canal WhatsApp desconectado.",
"errors": [
{
"code": "CHANNEL_DISCONNECTED",
"message": "O canal está desconectado. Reconecte o canal para realizar a verificação."
}
]
}Validação
Status: 422
json
{
"success": false,
"message": "Erro de validação",
"errors": [
{
"code": "FIELD_REQUIRED",
"field": "phone",
"message": "O campo phone é obrigatório."
}
]
}Campos do Response
| Campo | Tipo | Descrição |
|---|---|---|
| valid | boolean | Se o número existe no WhatsApp |
| phone | string | Número consultado |
| can_receive_message | boolean | Se pode receber mensagens |
| is_business | boolean | Se é conta Business |
| reason | string | Motivo quando valid é false |