Como podemos ajudar?

12. Contatos (VUC)
2 min
Criado por Leonora Alves em 16/06/2023 17:06
Atualizado por Maria Malheiro em 26/09/2025 08:04

‌A API Contatos (VUC) permite o consumo de dados relativos aos contatos, documentos, comunicações e interações registrados dentro do produto Zenvia Docs, para alimentar sistemas internos e outras plataformas.

Possibilita a consulta de interações com a audiência através de chamada de API.

Esta API é dividida em quatro rotas:

  • Contatos: informações relativas aos dados de perfil, contatos e os documentos enviados ao contato pesquisado. A busca é realizada através do ID, CPF ou CNPJ do contato.
  • Comunicações: lista de comunicações enviadas para o usuário com base no customerId.
  • Interações: eventos das comunicações com base no shootingId.
  • Download de documentos: download de documentos por meio da sua externalKey.

Pontos importantes:

  • Esta API será cobrada como um serviço extra e as cobranças são feitas para cada chamada realizada;
  • As consultas de contatos devem ser feitas a partir de variáveis únicas, como ID, CPF ou CNPJ;
  • As consultas das comunicações devem ser feitas com base no customerId;
  • As consultas dos eventos das comunicações devem ser feitas com base no shootingId;
  • O download de documentos deve ser feito com base na externalKey;
  • Para obter este serviço, solicite ao time que o atende que ative e gere uma chave API para poder efetuar chamadas e consultar os dados da sua conta.


⚠️ Atenção: A API Contatos (VUC) retorna dados no formato JSON, no qual os campos possuem tamanho variável. Caso sua estrutura de banco de dados possua limitação de tamanho dos campos, recomendamos que os campos do tipo string sejam criados com o tamanho máximo suportado por sua estrutura de banco de dados.

⚓Request - Contatos

 GET  URL: https://apicore.d1.cx/vuc/v1/contact/{id/cpf/cnpj}

Obs.: Caso o CNPJ possua formatação, é preciso adicionar o encode da ”/”(%2F). 

Parameters


Header

TenantIdstringIdentificação do tenant
AuthorizationstringBearer <Token>
Content-Typestringapplication/json

 

Queries

typestringTipo de consulta (ID, CPF ou CNPJ)

   

Responses

🟢 200  OK

idstringChave de identificação do customer
namestringNome
birthDatedateData de aniversário
cnpjstringCadastro Nacional de Pessoas Jurídicas
cpfstringCadastro de Pessoas Físicas
rgstringRegistro Geral
credCardstringNúmeros finais do cartão de crédito
createddateData de criação do contato
emailslist<email>Lista de e-mails do customer
email.addressstringEndereço de e-mail
email.kindstringTipo e-mail
phoneslist<phone>Lista de telefones do customer
phone.numberstringNúmero de telefone
phone.kindstringTipo de telefone (fixo, celular)
Addresseslist<address>Lista de endereços do customer
address.streetstringDescrição do endereço
address.numberstringNúmero do endereço
address.complementstringComplemento do endereço
address.neighborhoodstringBairro
address.citystringCidade
address.statestringSigla do Estado
address.zipCodestringCEP
address.kindstringLogradouro
address.geoCodelist<double>Geolocalização/Coordenadas
address.country.idstringIdentificação do país de acordo com a ISO3166-1
address.country.namestringNome do país
fileslist<file>Lista de arquivos
file.typestringLocalização do arquivo, ou seja, onde ele está armazenado
file.modestringIndica a forma como o arquivo será
disponibilizado dentro da comunicação
file.isMainboolIndica que é o arquivo principal dentro de um conjunto de arquivos enviados
file.filenamestringÉ o nome do arquivo
file.descriptionstringA descrição para um arquivo.
file.correlationIdstringÉ uma chave de identificação única do arquivo
file.dueDatedateData de vencimento do documento
file.documentNumberstringNúmero do documento
file.taglist<string>Tags do documento
file.movement.datedatetimeData do movimento
file.movement.fileNamestringNome do movimento
file.movement.lotstringNúmero do lote do documento
file.storagePathstringÉ o caminho onde o documento está armazenado no storage
file.linkstringLink do arquivo
file.groupDescriptionstringDescrição do arquivo
file.ccmPdfboolÉ o caminho onde o documento está armazenado no CCMPDF

 

 [{
     "id": "111.111.111-11",
     "name": "João da Silva",
     "birthDate": "1980-07-15T03:00:00.000Z",
     "cnpj": "22.333.333/4444-22",
     "cpf": "492.087.278-07",
     "rg": "12.345.678-0",
     "credCard": "345",
     "created": “2022-07-15T03: 00: 00.000Z”,
     "emails": [{
          "address": "joao@teste.com",
          "kind": "residential"
     }
     ],
     "phones": [{
          "number": "6135511902",
          "kind": "cellphone"
     }
     ],
     "addresses": [{
          "street": "Rua João da Silva Filho Junior",
          "number": "999",
          "complement": "Complemento",
          "neighborhood": "João da Silva Filho",
          "city": "São Paulo",
          "state": "SP",
          "zipCode": "12345-000",
          "country": {
          "id": "76",
          "name": "Brasil"
          },
          "kind": "residential",
          "geoCode": [
          -23.612667,
          -46.693859
          ]
     }
     ],
     "files": [{
          "type": "Storage",
          "mode": "Link",
          "isMain": true,
          "filename": "fatura directone",
          "description": "BOLETO",
          "correlationId": "46299F1DF4C9C9CCEDB4D49DAE6C254",
          "dueDate": "2021-02-01T03:00:00Z",
          "documentNumber": "1234567898524544",
          "tag": [
          “BOLETO”,
          “1VIA”
          ],
          "movement": {
          "date": "1980-07-15T03:00:00Z",
          "fileName": "abcd",
          "lot": "123"
          },
          "storagePath": "/meudiretorio",
          "link": "https://link.tipo.external",
          "groupDescription": "",
          "ccmPdf": false
     }]
   }
 ]

🟠 401: Unauthorized

 {
     "code": 401,
     "message": "Jwt is expired"
 }
 {
     "message": "Jwt is missing",
     "code": 401
 }
 {
     "type": "about:blank",
     "title": "Unauthorized",
     "status": 401,
     "detail": "Authorization error. Check if key 'TenantId' exist in request header and if its value is valid",
     "instance": "/v1/contact/11111111111/shooting/648c74dbb85f839dd295b7a0/interactions",
     "errorCode": "ERROR_UNAUTHORIZED",
     "traceId": "0HMRGN8FJHRS0:00000002"
 }

🟠 400: Bad Request

 {
     "type": "about:blank",
     "title": "BadRequest",
     "status": 400,
     "detail": "Query parameter 'type' is not valid.",
     "instance": "/v1/contact/123/",
     "traceId": "0HMRGO7NO6KJA:00000005",
     "tenantId": "123"
 }
 {
     "type": "about:blank",
     "title": "BadRequest",
     "status": 400,
     "detail": "The 'id' cannot be null or empty.",
     "instance": "/v1/contact/%20/",
     "errorCode": null,
     "traceId": "0HMRGO7NO6KJA:00000005",
     "tenantId": "123"
 }

🟠 500: Internal Server Error

 {
     "type": "about:blank",
     "title": "InternalServerError",
     "status": 500,
     "detail": "An error occurred while trying to get the data, contact us for support.",
     "instance": "/v1/contact/123/",
     "errorCode": "INTERNAL_SERVICE_ERROR",
     "traceId": "0HMRGOKBF2INH:00000002",
     "tenantId": "123"
 }

⚓Request - Comunicações

 GET  URL: https://apicore.d1.cx/vuc/v1/contact/{id}/communications

Obs.: Caso o ID seja um CNPJ e possua formatação, é preciso adicionar o encode da ”/”(%2F).

Parameters

Header

TenantIdstringIdentificação do tenant
AuthorizationstringBearer <Token>
Content-Typestringapplication/json

 

Query

lookbackDaysinteger
Opcional. Define o período em dias para a busca. Se não for especificado, o padrão será 60 dias. 
O valor máximo permitido também é 60 dias.


Responses

🟢 200  OK

channelstringCanal de comunicação
recipientstringDestinatário
customerIdstringChave de identificação do customer
journeyNamestringNome da jornada
journeyVersionstringVersão da jornada
journeyNodeKeystringChave do canal da jornada
journeyIdstringChave de identificação da jornada
correlationIdstringIdentificador único do disparo
shootingIdstringIdentificador do disparo

 

 [
   {
     "channel": "Sms",
     "recipient": "123456789",
     "customerId": "123",
     "journeyName": "Jornada Boleto",
     "journeyVersion": "543321",
     "journeyNodeKey":"111-222-333",
     "journeyId": "123",
     "correlationId": "123",
     "shootingId": "123"
   }
 ]

🟠 401: Unauthorized

 {
     "code": 401,
     "message": "Jwt is expired"
 }
 {
     "message": "Jwt is missing",
     "code": 401
 }
 {
     "type": "about:blank",
     "title": "Unauthorized",
     "status": 401,
     "detail": "Authorization error. Check if key 'TenantId' exist in request header and if its value is valid",
     "instance": "/v1/contact/11111111111/shooting/648c74dbb85f839dd295b7a0/interactions",
     "errorCode": "ERROR_UNAUTHORIZED",
     "traceId": "0HMRGN8FJHRS0:00000002"
 }

🟠 400: Bad Request

 {
     "type": "about:blank",
     "title": "BadRequest",
     "status": 400,
     "detail": "The 'id' cannot be null or empty.",
     "instance": "/v1/contact/%20/communications",
     "traceId": "0HMRGO7NO6KJA:00000005",
     "tenantId": "123"
 }


 {
    "type": "about:blank",
    "title": "BadRequest",
    "status": 400,
    "detail": "Days parameter must be at least 1.",
    "instance": "/v1/contact/123456/communications",
    "errorCode": "LOOKBACK_DAYS_INVALID",
    "traceId": "0HNF9AOV3A4LT:00000002",
    "tenantId": "123" 
 }
 {    
    "type": "about:blank",
    "title": "BadRequest",
    "status": 400,
    "detail": "Cannot retrieve data older than 60 days.",
    "instance": "/v1/contact/123456/communications",
    "errorCode": "LOOKBACK_DAYS_INVALID",
    "traceId": "0HNF9AOV3A4LU:00000002",
    "tenantId": "123"
}


🟠 500: Internal Server Error

 {
     "type": "about:blank",
     "title": "InternalServerError",
     "status": 500,
     "detail": "An error occurred while trying to get the data, contact us for support.",
     "instance": "/v1/contact/123/communications",
     "errorCode": "INTERNAL_SERVICE_ERROR",
     "traceId": "0HMRGOKBF2INH:00000002",
     "tenantId": "123"
 }

⚓Request - Interações

 GET  URL: https://apicore.d1.cx/vuc/v1/contact/{id}/shooting/{shootingId}/interactions

Obs.: Caso o ID seja um CNPJ e possua formatação, é preciso adicionar o encode da ”/”(%2F).

Parameters

Header

TenantIdstringIdentificação do tenant
AuthorizationstringBearer <Token>
Content-Typestringapplication/json

 

Query

lookbackDaysinteger
Opcional. Define o período em dias para a busca. Se não for especificado, o padrão será 60 dias. 
O valor máximo permitido também é 60 dias.


Responses

🟢 200  OK

channelstringCanal de comunicação
recipientstringDestinatário
customerIdstringChave de identificação do customer
journeyNamestringNome da jornada
journeyVersionstringVersão da jornada
journeyNodeKeystringChave do canal da jornada
journeyIdstringChave de identificação da jornada
correlationIdstringIdentificador único do disparo
shootingIdstringIdentificador do disparo
eventTypestringTipo do evento
datedatetimeData do evento
responsestringTexto de uma eventual resposta do destinatário para um SMS recebido
bouncestringDescrição detalhada do motivo do bounce
urlstringCaso seja um evento de clique aqui, é apresentado o link clicado
nodeNamestringNome do nó do canal
channelCertificatedKindstringTipo da certificação do canal
channelCertificatedUrlstringURL do laudo da certificação do canal

 

 [
   {
     "channel": "Sms",
     "recipient": "123456789",
     "customerId": "123",
     "journeyName": "Jornada Boleto",
     "journeyVersion": "543321",
     "journeyNodeKey":"111-222-333",
     "journeyId": "123",
     "correlationId": "123",
     "shootingId": "123",
     "eventType": "Click",
     "date": "2022-07-15T03:00:00.000Z",
     "response": "teste",
     "bounce": "error",
     "url": "https://arquivo.clicado.com/123",
     "nodeName": "Email Boleto v1",
     "channelCertificatedKind": "None",
     "channelCertificatedUrl": "https://arquivo.certificado/123"
   }
 ]

🟠 401: Unauthorized

 {
     "code": 401,
     "message": "Jwt is expired"
 }
 {
     "message": "Jwt is missing",
     "code": 401
 }
 {
     "type": "about:blank",
     "title": "Unauthorized",
     "status": 401,
     "detail": "Authorization error. Check if key 'TenantId' exist in request header and if its value is valid",
     "instance": "/v1/contact/123/shooting/123/interactions",
     "errorCode": "ERROR_UNAUTHORIZED",
     "traceId": "0HMRGN8FJHRS0:00000002"
 }

🟠 400: Bad Request

 {
     "type": "about:blank",
     "title": "BadRequest",
     "status": 400,
     "detail": "The 'id' cannot be null or empty.",
     "instance": "/v1/contact/%20/shooting/123/interactions",
     "traceId": "0HMRGO7NO6KJA:00000005",
     "tenantId": "123"
 }
 {
     "type": "about:blank",
     "title": "BadRequest",
     "status": 400,
     "detail": "The 'shootingId' cannot be null or empty.",
     "instance": "/v1/contact/123/shooting/%20/interactions",
     "traceId": "0HMRGO7NO6KJA:00000005",
     "tenantId": "123"
 }
{
    "type": "about:blank",
    "title": "BadRequest",
    "status": 400,
    "detail": "Days parameter must be at least 1.",
    "instance": "/v1/contact/123456/shooting/123/interactions",
    "errorCode": "LOOKBACK_DAYS_INVALID",
    "traceId": "0HNF9AOV3A4LT:00000002",
    "tenantId": "123"
}
{
    "type": "about:blank",
    "title": "BadRequest",
    "status": 400,
    "detail": "Cannot retrieve data older than 60 days.",
    "instance": "/v1/contact/123456/shooting/123/interactions",
    "errorCode": "LOOKBACK_DAYS_INVALID",
    "traceId": "0HNF9AOV3A4LU:00000002",
    "tenantId": "123"
}


🟠 500: Internal Server Error

 {
     "type": "about:blank",
     "title": "InternalServerError",
     "status": 500,
     "detail": "An error occurred while trying to get the data, contact us for support.",
     "instance": "/v1/contact/123/shooting/123/interactions",
     "errorCode": "INTERNAL_SERVICE_ERROR",
     "traceId": "0HMRGOKBF2INH:00000002",
     "tenantId": "123"
 }

⚓Request - Download de documentos

 GET  URL: https://apicore.d1.cx/vuc/v1/document/{externalKey}

Parameters

Header

TenantIdstringIdentificação do tenant
AuthorizationstringBearer <Token>
Content-Typestringapplication/json

 

Response Status

StatusDescrição
🟢 200  OKRequisição processada com sucesso.
🟠 401: UnauthorizedAcesso a API não foi autorizado. Verifique as credenciais de acesso ao serviço.
🟠 401: Not FoundA externalKey fornecida na requisição não foi encontrada
🔴 500: Internal Server ErrorFalha interna da aplicação.

Response Body

🟢 200  OK

Retorna um arquivo, com o Header Content-Type = application/pdf.

🟠 401: Unauthorized

 {
     "code": 401,
     "message": "Jwt is expired"
 }
 {
     "message": "Jwt is missing",
     "code": 401
 }
{
     "type": "about:blank",
     "title": "Unauthorized",
     "status": 401,
     "detail": "Authorization error. Check if key 'TenantId' exist in request header and if its value is valid",
     "instance": "/v1/contact/11111111111/shooting/648c74dbb85f839dd295b7a0/interactions",
     "errorCode": "ERROR_UNAUTHORIZED",
     "traceId": "0HMRGN8FJHRS0:00000002"
 }

🟠 404: Not Found

 {
     "type": "https://tools.ietf.org/html/rfc7231#section-6.5.4",
     "title": "Not Found",
     "status": 404,
     "traceId": "00-cf283f808fe81fa585fd46727c3060e0-ace9123413b91c1d-00"
 }

 

Este artigo resolveu sua dúvida?
Últimos artigos visitados