Pular para o conteúdo

Com a API de contatos você pode gerenciar os contatos da sua empresa, incluindo campos personalizados e notas.

Listar Campos Personalizados

GET https://api.tinko.com.br/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). Default: todos
typestringNãoFiltrar por tipo: text, number, email, date, select. Default: todos
is_activebooleanNãoFiltrar por status ativo/inativo. Default: todos

Exemplo de requisição

Terminal window
curl -X GET "https://api.tinko.com.br/v1/contacts/customfields?is_active=true" \
-H "Authorization: Bearer SEU_TOKEN"

Response

{
"success": true,
"data": [
{
"id": "01arz3ndektsv4rrffq69g5fav",
"name": "cpf",
"type": "text",
"placeholder": "Digite o CPF",
"options": null,
"is_active": true,
"order": 1
},
{
"id": "01hxyz123abc456def789ghjkm",
"name": "data_nascimento",
"type": "date",
"placeholder": "Data de nascimento",
"options": null,
"is_active": true,
"order": 2
},
{
"id": "01j7m8n9p0q1r2s3t4u5v6w7x",
"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
idstringID 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://api.tinko.com.br/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). Default: todos
phonestringNãoFiltrar por telefone (busca parcial). Default: todos
tagstringNãoFiltrar por ID da tag. Default: todos
blockedbooleanNãoFiltrar por status de bloqueio. Default: todos

Exemplo de requisição

Terminal window
curl -X GET "https://api.tinko.com.br/v1/contacts?name=João&blocked=false" \
-H "Authorization: Bearer SEU_TOKEN"

Response

{
"success": true,
"data": [
{
"id": "01hxyz123abc456def789ghjkm",
"phone": "5511999999999",
"name": "João Silva",
"avatar": "https://exemplo.com/avatar.jpg",
"type": "whatsapp",
"blocked": false,
"customfields": {
"cpf": "123.456.789-00",
"plano": "Premium"
},
"tags": [
{
"id": "01j7m8n9p0q1r2s3t4u5v6w7x",
"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
idstringID 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://api.tinko.com.br/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
idstringSimID do contato

Exemplo de requisição

Terminal window
curl -X GET "https://api.tinko.com.br/v1/contacts/01hxyz123abc456def789ghjkm" \
-H "Authorization: Bearer SEU_TOKEN"

Response

{
"success": true,
"data": {
"id": "01hxyz123abc456def789ghjkm",
"phone": "5511999999999",
"name": "João Silva",
"avatar": "https://exemplo.com/avatar.jpg",
"type": "whatsapp",
"blocked": false,
"customfields": {
"cpf": "123.456.789-00",
"plano": "Premium"
},
"tags": [
{
"id": "01j7m8n9p0q1r2s3t4u5v6w7x",
"name": "Cliente VIP"
}
],
"created_at": "2025-10-29T10:30:00.000000Z",
"updated_at": "2025-10-29T10:30:00.000000Z"
}
}

Criar Contato

POST https://api.tinko.com.br/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

Terminal window
curl -X POST "https://api.tinko.com.br/v1/contacts" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"phone": "5511999999999",
"name": "João Silva",
"blocked": false,
"customfields": {
"cpf": "123.456.789-00",
"plano": "Premium"
},
"tags": ["01j7m8n9p0q1r2s3t4u5v6w7x", "01k8l9m0n1o2p3q4r5s6t7u8v9w"]
}'

Response

{
"success": true,
"message": "Contato criado com sucesso.",
"data": {
"id": "01hxyz123abc456def789ghjkm",
"phone": "5511999999999",
"name": "João Silva",
"avatar": null,
"type": "whatsapp",
"blocked": false,
"customfields": {
"cpf": "123.456.789-00",
"plano": "Premium"
},
"tags": [
{
"id": "01j7m8n9p0q1r2s3t4u5v6w7x",
"name": "Cliente VIP"
},
{
"id": "01k8l9m0n1o2p3q4r5s6t7u8v9w",
"name": "Novo"
}
],
"created_at": "2025-10-29T10:30:00.000000Z",
"updated_at": "2025-10-29T10:30:00.000000Z"
}
}

Erros

{
"success": false,
"message": "Erro de validação",
"errors": [
{
"code": "FIELD_REQUIRED",
"field": "phone",
"message": "O campo phone é obrigatório."
}
]
}
{
"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://api.tinko.com.br/v1/contacts/{id}

Atualiza os dados de um contato existente.

Path Parameters

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

Exemplo de requisição

Terminal window
curl -X PUT "https://api.tinko.com.br/v1/contacts/01hxyz123abc456def789ghjkm" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "João Silva",
"customfields": {
"cpf": "123.456.789-00",
"plano": "Básico"
},
"tags": ["01k8l9m0n1o2p3q4r5s6t7u8v9w"]
}'

Response

{
"success": true,
"message": "Contato atualizado com sucesso.",
"data": {
"id": "01hxyz123abc456def789ghjkm",
"phone": "5511999999999",
"name": "João Silva",
"avatar": "https://exemplo.com/avatar.jpg",
"type": "whatsapp",
"blocked": false,
"customfields": {
"cpf": "123.456.789-00",
"plano": "Básico"
},
"tags": [
{
"id": "01k8l9m0n1o2p3q4r5s6t7u8v9w",
"name": "Suporte"
}
],
"created_at": "2025-10-29T10:30:00.000000Z",
"updated_at": "2025-10-30T14:20:00.000000Z"
}
}

Erros

{
"success": false,
"message": "Contato não encontrado."
}

Excluir Contato

DELETE https://api.tinko.com.br/v1/contacts/{id}

Remove um contato e todos os chats vinculados a ele.

Path Parameters

NomeTipoObrigatórioDescrição
idstringSimID do contato

Exemplo de requisição

Terminal window
curl -X DELETE "https://api.tinko.com.br/v1/contacts/01hxyz123abc456def789ghjkm" \
-H "Authorization: Bearer SEU_TOKEN"

Response

{
"success": true,
"message": "Contato excluído com sucesso."
}

Erros

{
"success": false,
"message": "Contato não encontrado."
}

Listar Notas do Contato

GET https://api.tinko.com.br/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
idstringSimID 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

Terminal window
curl -X GET "https://api.tinko.com.br/v1/contacts/01hxyz123abc456def789ghjkm/notes" \
-H "Authorization: Bearer SEU_TOKEN"

Response

{
"success": true,
"data": [
{
"id": "01arz3ndektsv4rrffq69g5fav",
"content": "Cliente solicitou contato para renovação do plano.",
"user": {
"id": "01hxyz123abc456def789ghjkm",
"name": "João Silva"
},
"created_at": "2025-10-29T10:30:00.000000Z"
},
{
"id": "01j7m8n9p0q1r2s3t4u5v6w7x",
"content": "Enviado proposta por e-mail.",
"user": {
"id": "01hxyz123abc456def789ghjkm",
"name": "João Silva"
},
"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
idstringID da nota
contentstringConteúdo da nota
userobjectUsuário que criou a nota
created_atstringData de criação

Criar Nota no Contato

POST https://api.tinko.com.br/v1/contacts/{id}/notes

Adiciona uma nota a um contato.

Path Parameters

NomeTipoObrigatórioDescrição
idstringSimID do contato

Request Body

CampoTipoObrigatórioDescrição
contentstringSimConteúdo da nota

Exemplo de requisição

Terminal window
curl -X POST "https://api.tinko.com.br/v1/contacts/01hxyz123abc456def789ghjkm/notes" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"content": "Cliente solicitou contato para renovação do plano."
}'

Response

{
"success": true,
"message": "Nota criada com sucesso.",
"data": {
"id": "01arz3ndektsv4rrffq69g5fav",
"content": "Cliente solicitou contato para renovação do plano.",
"user": {
"id": "01hxyz123abc456def789ghjkm",
"name": "João Silva"
},
"created_at": "2025-10-29T10:30:00.000000Z"
}
}

Erros

{
"success": false,
"message": "Contato não encontrado."
}
{
"success": false,
"message": "Erro de validação",
"errors": [
{
"code": "FIELD_REQUIRED",
"field": "content",
"message": "O campo content é obrigatório."
}
]
}

Verificar Número

POST https://api.tinko.com.br/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: 5511999999999
channelstringSimToken do canal WhatsApp que fará a verificação

Exemplo de requisição

Terminal window
curl -X POST "https://api.tinko.com.br/v1/contacts/verifynumber" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"phone": "5511999999999",
"channel": "01arz3ndektsv4rrffq69g5fav"
}'

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

{
"success": true,
"data": {
"valid": true,
"phone": "5511999999999",
"can_receive_message": true,
"is_business": false
}
}

Número inválido

{
"success": true,
"data": {
"valid": false,
"phone": "5511999999999",
"can_receive_message": false,
"reason": "NUMBER_NOT_ON_WHATSAPP"
}
}

Erros

Canal desconectado

Status: 409

{
"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

{
"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