Skip to content

Contatos

A API de contatos permite gerenciar os contatos da sua empresa, incluindo campos personalizados e notas.

Listar Campos Personalizados

GET https://chat.mehub.app/api/v1/contacts/customfields

Retorna todos os campos personalizados disponíveis para cadastro de contatos.

Headers

NomeTipoObrigatórioDescrição
AuthorizationstringSimToken de autenticação. Ex: Bearer seu_token

Query Parameters

NomeTipoObrigatórioDescrição
pageintegerNãoNúmero da página. Default: 1
per_pageintegerNãoRegistros por página (máx: 100). Default: 20
namestringNãoFiltrar por nome do campo (busca parcial)
typestringNãoFiltrar por tipo: text, number, email, date, select
is_activebooleanNãoFiltrar 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

CampoTipoDescrição
idintegerID único do campo
namestringNome/identificador do campo
typestringTipo: text, number, email, date, select
placeholderstringTexto de placeholder do campo
optionsarray/nullOpções disponíveis (apenas para tipo select)
is_activebooleanSe o campo está ativo
orderintegerOrdem de exibição

Listar Contatos

GET https://chat.mehub.app/api/v1/contacts

Retorna todos os contatos da empresa autenticada.

Headers

NomeTipoObrigatórioDescrição
AuthorizationstringSimToken de autenticação. Ex: Bearer seu_token

Query Parameters

NomeTipoObrigatórioDescrição
pageintegerNãoNúmero da página. Default: 1
per_pageintegerNãoRegistros por página (máx: 100). Default: 20
namestringNãoFiltrar por nome (busca parcial)
phonestringNãoFiltrar por telefone (busca parcial)
tagintegerNãoFiltrar por ID da tag
blockedbooleanNãoFiltrar 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

CampoTipoDescrição
idintegerID único do contato
phonestringNúmero de telefone com código do país
namestringNome do contato
avatarstring/nullURL da foto do contato
typestringTipo do contato
blockedbooleanSe o contato está bloqueado
customfieldsobjectCampos personalizados preenchidos
tagsarrayTags vinculadas ao contato
created_atstringData de criação
updated_atstringData da última atualização

Visualizar Contato

GET https://chat.mehub.app/api/v1/contacts/{id}

Retorna os detalhes de um contato específico.

Headers

NomeTipoObrigatórioDescrição
AuthorizationstringSimToken de autenticação. Ex: Bearer seu_token

Path Parameters

NomeTipoObrigatórioDescrição
idintegerSimID 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

POST https://chat.mehub.app/api/v1/contacts

Cria um novo contato.

CampoTipoObrigatórioDescrição
phonestringSimNúmero de telefone com código do país
namestringNãoNome do contato
blockedbooleanNãoSe o contato está bloqueado. Default: false
customfieldsobjectNãoCampos personalizados
tagsarrayNãoArray 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

PUT https://chat.mehub.app/api/v1/contacts/{id}

Atualiza os dados de um contato existente.

Path Parameters

NomeTipoObrigatórioDescrição
idintegerSimID do contato

Request Body

CampoTipoObrigatórioDescrição
namestringNãoNome do contato
blockedbooleanNãoSe o contato está bloqueado
customfieldsobjectNãoCampos personalizados
tagsarrayNãoArray 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

DELETE https://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

NomeTipoObrigatórioDescrição
idintegerSimID 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

GET https://chat.mehub.app/api/v1/contacts/{id}/notes

Retorna todas as notas de um contato específico.

Headers

NomeTipoObrigatórioDescrição
AuthorizationstringSimToken de autenticação. Ex: Bearer seu_token

Path Parameters

NomeTipoObrigatórioDescrição
idintegerSimID do contato

Query Parameters

NomeTipoObrigatórioDescrição
pageintegerNãoNúmero da página. Default: 1
per_pageintegerNãoRegistros 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

CampoTipoDescrição
idintegerID único da nota
contentstringConteúdo da nota
userobjectUsuário que criou a nota
created_atstringData de criação

Criar Nota no Contato

POST https://chat.mehub.app/api/v1/contacts/{id}/notes

Adiciona uma nota a um contato.

Path Parameters

NomeTipoObrigatórioDescrição
idintegerSimID do contato

Request Body

CampoTipoObrigatórioDescrição
contentstringSimConteú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

POST https://chat.mehub.app/api/v1/contacts/verifynumber

Verifica se um número de telefone existe no WhatsApp e se pode receber mensagem no canal informado.

CampoTipoObrigatórioDescrição
phonestringSimNúmero com código do país. Ex: 5531900000000
channelstringSimToken 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

CampoTipoDescrição
validbooleanSe o número existe no WhatsApp
phonestringNúmero consultado
can_receive_messagebooleanSe pode receber mensagens
is_businessbooleanSe é conta Business
reasonstringMotivo quando valid é false