Condutores
A API de Condutores gerencia o cadastro de condutores vinculados às empresas da organização. Use estes registros para indicar o infrator em uma infração de trânsito.
Propriedades
- Name
id- Type
- number
- Description
ID único do condutor.
- Name
tax_id- Type
- string | null
- Description
CPF do condutor (somente dígitos).
- Name
name- Type
- string | null
- Description
Nome completo.
- Name
license- Type
- string | null
- Description
Número de registro da CNH.
- Name
id_number- Type
- string | null
- Description
Número do documento de identidade (RG).
- Name
id_issuer- Type
- string | null
- Description
Órgão emissor e UF do RG (ex.:
SSP/SP).
- Name
phone- Type
- string | null
- Description
Telefone no formato internacional E.164, com
+e código do país (ex.:+5511987654321).
- Name
class- Type
- string | null
- Description
Categoria da CNH:
a,b,c,d,e,ab,ac,adouae.
- Name
issue_date- Type
- string | null
- Description
Data de emissão da CNH (
YYYY-MM-DD).
- Name
expiry_date- Type
- string | null
- Description
Data de validade da CNH (
YYYY-MM-DD).
- Name
first_license_date- Type
- string | null
- Description
Data da primeira habilitação (
YYYY-MM-DD).
- Name
birth_date- Type
- string | null
- Description
Data de nascimento (
YYYY-MM-DD).
- Name
toxicological_exam_expiry_date- Type
- string | null
- Description
Data de expiração do exame toxicológico (
YYYY-MM-DD).
- Name
toxicological_exam_status- Type
- enum | null
- Description
Status do exame toxicológico.
Valor Descrição validO exame está dentro da validade. expiredO exame está vencido. unknownStatus desconhecido
- Name
toxicological_collection- Type
- string | null
- Description
Data da coleta do exame toxicológico (
YYYY-MM-DD).
- Name
toxicological_observations- Type
- string | null
- Description
Observações do exame toxicológico.
- Name
document- Type
- object | null
- Description
CNH cadastrada.
nullquando o condutor ainda não tem arquivo.- Name
id- Type
- number
- Description
ID do arquivo.
- Name
name- Type
- string
- Description
Nome do arquivo.
- Name
mime- Type
- string
- Description
MIME type (
application/pdf,image/jpegouimage/png).
- Name
status- Type
- enum
- Description
Status da CNH.
Valor Descrição pendingAguardando o envio do arquivo. Status inicial na criação e na atualização do arquivo. reviewCNH em revisão. validCNH validada. invalidCNH inválida. Envie outra CNH em Atualizar Condutor. expiredCNH vencida. Envie outra CNH em Atualizar Condutor.
- Name
status_reason- Type
- enum | null
- Description
Justifica o
statusquando a CNH éinvalid. Énullempending,review,valideexpired.Valor Descrição illegibleA CNH está ilegível ou o documento não pôde ser confirmado. incompleteFaltam campos obrigatórios extraídos da CNH. wrong_document_typeO arquivo não é uma CNH. unsupported_formatFormato ou arquivo inválido (vazio, MIME não suportado). data_mismatchO CPF extraído não confere com o cadastro do condutor. duplicate_tax_idJá existe condutor com o mesmo CPF nesta empresa.
- Name
companies- Type
- object[]
- Description
Empresas da organização vinculadas ao condutor.
- Name
id- Type
- number
- Description
ID da empresa.
- Name
name- Type
- string | null
- Description
Nome da empresa.
- Name
tax_id- Type
- string | null
- Description
CNPJ da empresa.
- Name
created_at- Type
- string | null
- Description
Data de criação em ISO 8601.
- Name
updated_at- Type
- string | null
- Description
Data da última atualização em ISO 8601.
Listar Condutores
Retorna uma lista paginada dos condutores da organização.
Paginação
Use apenas um dos dois métodos:
- Name
pagination[page]- Type
- integer
- Description
Número da página (começando em 1). Use junto com
pagination[size].
- Name
pagination[size]- Type
- integer
- Description
Itens por página (máximo 100).
- Name
pagination[start]- Type
- integer
- Description
Índice do primeiro item (começando em 0). Use junto com
pagination[limit].
- Name
pagination[limit]- Type
- integer
- Description
Número máximo de itens (máximo 100).
Filtros
- Name
filters[tax_id][$eq]- Type
- string
- Description
CPF exato.
- Name
filters[name][$contains]- Type
- string
- Description
Nome contém o valor.
- Name
filters[company][id][$eq]- Type
- integer
- Description
Condutores vinculados a esta empresa.
- Name
filters[document_status][$eq]- Type
- enum
- Description
pending,review,valid,invalidouexpired.
Request
curl -G https://api.habilitar.me/v1/drivers \
-H "x-api-key: {token}" \
-d "pagination[page]=1" \
-d "pagination[size]=10"Response
{
"data": [
{
"id": 1,
"tax_id": "39053344705",
"name": "João da Silva",
"license": "01234567890",
"id_number": "2810416",
"id_issuer": "SSP/SP",
"phone": "+5511987654321",
"class": "ab",
"issue_date": "2022-05-10",
"expiry_date": "2032-05-10",
"first_license_date": "2012-05-10",
"birth_date": "1990-01-15",
"toxicological_exam_expiry_date": "2027-09-07",
"toxicological_exam_status": "valid",
"toxicological_collection": "2024-09-07",
"toxicological_observations": null,
"document": {
"id": 44,
"name": "cnh.pdf",
"mime": "application/pdf",
"status": "valid",
"status_reason": null
},
"companies": [
{
"id": 3,
"name": "Empresa Exemplo LTDA",
"tax_id": "12345678000190"
}
],
"created_at": "2024-01-15T10:30:00.000Z",
"updated_at": "2024-01-20T14:45:00.000Z"
}
],
"pagination": { "page": 1, "size": 10, "total": 1 },
"total": 1
}Detalhar Condutor
Retorna um condutor da organização. Condutores de outras organizações respondem 404.
Request
curl https://api.habilitar.me/v1/drivers/1 \
-H "x-api-key: {token}"Response
{
"data": {
"id": 1,
"tax_id": "39053344705",
"name": "João da Silva",
"license": "01234567890",
"id_number": "2810416",
"id_issuer": "SSP/SP",
"phone": "+5511987654321",
"class": "ab",
"issue_date": "2022-05-10",
"expiry_date": "2032-05-10",
"first_license_date": "2012-05-10",
"birth_date": "1990-01-15",
"toxicological_exam_expiry_date": "2027-09-07",
"toxicological_exam_status": "valid",
"toxicological_collection": "2024-09-07",
"toxicological_observations": null,
"document": {
"id": 44,
"name": "cnh.pdf",
"mime": "application/pdf",
"status": "valid",
"status_reason": null
},
"companies": [
{
"id": 3,
"name": "Empresa Exemplo LTDA",
"tax_id": "12345678000190"
}
],
"created_at": "2024-01-15T10:30:00.000Z",
"updated_at": "2024-01-20T14:45:00.000Z"
}
}Criar Condutor
Cria o condutor a partir da CNH.
Corpo da Requisição
- Name
document- Type
- object
- Required
- obrigatório
- Description
Metadados do arquivo da CNH para emitir a URL pré-assinada.
- Name
file_name- Type
- string
- Required
- obrigatório
- Description
Nome do arquivo (PDF, JPG ou PNG).
- Name
content_type- Type
- string
- Required
- obrigatório
- Description
application/pdf,image/jpegouimage/png.
- Name
size- Type
- integer
- Required
- obrigatório
- Description
Tamanho em bytes (máximo 50 MB).
- Name
companies- Type
- number[]
- Required
- obrigatório
- Description
IDs das empresas para vincular.
- Name
phone- Type
- string
- Description
Telefone no formato internacional E.164, com
+e código do país (ex.:+5511987654321).
Resposta
- Name
data.id- Type
- number
- Description
ID do condutor recém-criado.
- Name
data.phone- Type
- string | null
- Description
Telefone enviado na requisição, em E.164.
nullquando omitido.
- Name
data.companies- Type
- object[]
- Description
Empresas da organização vinculadas ao condutor.
- Name
id- Type
- number
- Description
ID da empresa.
- Name
name- Type
- string | null
- Description
Nome da empresa.
- Name
tax_id- Type
- string | null
- Description
CNPJ da empresa.
- Name
data.document- Type
- object
- Description
CNH recém-cadastrada. Status inicial
pending.- Name
id- Type
- number
- Description
ID do arquivo.
- Name
name- Type
- string
- Description
Nome do arquivo.
- Name
mime- Type
- string
- Description
MIME type (
application/pdf,image/jpegouimage/png).
- Name
status- Type
- enum
- Description
Status da CNH. No create é
pending.
- Name
status_reason- Type
- enum | null
- Description
nullenquanto o status não forinvalid.
- Name
upload- Type
- object
- Description
URL pré-assinada para o envio da CNH.
- Name
url- Type
- string
- Description
URL pré-assinada para o
PUTdo arquivo. Válida pelo tempo emexpires_in.
- Name
method- Type
- string
- Description
Sempre
PUT.
- Name
headers- Type
- object
- Description
Cabeçalhos obrigatórios no
PUT, incluindoContent-Type.
- Name
expires_in- Type
- number
- Description
Validade da URL, em segundos (15 minutos).
Request
curl -X POST https://api.habilitar.me/v1/drivers \
-H "Content-Type: application/json" \
-H "x-api-key: {token}" \
-d '{
"phone": "+5511987654321",
"companies": [3],
"document": {
"file_name": "cnh.pdf",
"content_type": "application/pdf",
"size": 245760
}
}'Response 201
{
"data": {
"id": 1,
"phone": "+5511987654321",
"companies": [
{ "id": 3, "name": "Empresa Exemplo LTDA", "tax_id": "12345678000190" }
],
"document": {
"id": 44,
"name": "cnh.pdf",
"mime": "application/pdf",
"status": "pending",
"status_reason": null,
"upload": {
"url": "https://media.example/put?X-Amz-Signature=...",
"method": "PUT",
"headers": { "Content-Type": "application/pdf" },
"expires_in": 900
}
}
}
}Implementação recomendada
O arquivo da CNH não precisa transitar pelos seus servidores. O frontend envia só os metadados; o binário vai direto à URL pré-assinada.
- O usuário seleciona o arquivo da CNH. O frontend lê
file_name,content_typeesizee envia esses dados ao backend. - O backend repassa as informações para a API habilitar.me em Criar Condutor.
- A API habilitar.me retorna o
iddo condutor e o objetodata.document, incluindo a URL pré-assinada emdata.document.upload(url,method,headers,expires_in). - O backend devolve essa URL ao frontend.
- O frontend envia o arquivo com
PUTna URL pré-assinada, usando oContent-Typededata.document.upload.headers.
A partir daí o documento é validado internamente. Um evento de webhook (driver.document.updated) informa o resultado. A validação pode levar alguns minutos.
Envie o arquivo da CNH via PUT na URL pré-assinada retornada em data.document.upload.url:
curl -X PUT "{data.document.upload.url}" \
-H "Content-Type: application/pdf" \
--data-binary @cnh.pdfSandbox
No ambiente sandbox, o título do arquivo (document.file_name sem a extensão) pode forçar o resultado da validação. O título deve ser exatamente valid, invalid ou expired — por exemplo valid.pdf, invalid.png ou expired.jpg.
- Name
valid- Type
- string
- Description
Define
document.statuscomovalid.
- Name
invalid- Type
- string
- Description
Define
document.statuscomoinvalid. Ostatus_reasonéillegible.
- Name
expired- Type
- string
- Description
Define
document.statuscomoexpired.
Exemplos: valid.pdf, invalid.png, expired.jpg.
Atualizar Condutor
Atualiza o documento e as informações de contato do condutor. Informe ao menos um campo.
Envie document para cadastrar ou substituir a CNH pelo mesmo fluxo do create: metadados no PATCH, binário na URL pré-assinada. Vale enviar só document. Sem document, a resposta permanece { data } do condutor, sem document.upload. Com arquivo novo, o status volta para pending.
Se a nova CNH não puder ser validada, o CPF extraído não coincidir com o cadastro, ou já existir outro condutor com o mesmo CPF nesta empresa, a extração resulta em document.status = invalid e document.status_reason descreve o motivo. A CNH anterior não é restaurada. CNH com expiry_date vencida resulta em expired.
Corpo da Requisição
- Name
phone- Type
- string
- Description
Telefone no formato internacional E.164, com
+e código do país (ex.:+5511987654321).
- Name
document- Type
- object
- Description
Metadados do arquivo da CNH para emitir a URL pré-assinada. Cadastra a CNH ou substitui a existente.
- Name
file_name- Type
- string
- Required
- obrigatório
- Description
Nome do arquivo (PDF, JPG ou PNG).
- Name
content_type- Type
- string
- Required
- obrigatório
- Description
application/pdf,image/jpegouimage/png.
- Name
size- Type
- integer
- Required
- obrigatório
- Description
Tamanho em bytes (máximo 50 MB).
Resposta
- Name
data.document.upload- Type
- object
- Description
Presente somente quando
documenté enviado no corpo. URL pré-assinada para o envio da CNH.- Name
url- Type
- string
- Description
URL pré-assinada para o
PUTdo arquivo. Válida pelo tempo emexpires_in.
- Name
method- Type
- string
- Description
Sempre
PUT.
- Name
headers- Type
- object
- Description
Cabeçalhos obrigatórios no
PUT, incluindoContent-Type.
- Name
expires_in- Type
- number
- Description
Validade da URL, em segundos (15 minutos).
Request
curl -X PATCH https://api.habilitar.me/v1/drivers/1 \
-H "Content-Type: application/json" \
-H "x-api-key: {token}" \
-d '{
"phone": "+5511987654321",
"document": {
"file_name": "cnh.pdf",
"content_type": "application/pdf",
"size": 245760
}
}'Response 200
{
"data": {
"id": 1,
"tax_id": "39053344705",
"name": "João da Silva",
"license": "01234567890",
"id_number": "2810416",
"id_issuer": "SSP/SP",
"phone": "+5511987654321",
"class": "ab",
"issue_date": "2022-05-10",
"expiry_date": "2032-05-10",
"first_license_date": "2012-05-10",
"birth_date": "1990-01-15",
"toxicological_exam_expiry_date": "2027-09-07",
"toxicological_exam_status": "valid",
"toxicological_collection": "2024-09-07",
"toxicological_observations": null,
"document": {
"id": 44,
"name": "cnh.pdf",
"mime": "application/pdf",
"status": "pending",
"status_reason": null,
"upload": {
"url": "https://media.example/put?X-Amz-Signature=...",
"method": "PUT",
"headers": { "Content-Type": "application/pdf" },
"expires_in": 900
}
},
"companies": [
{
"id": 3,
"name": "Empresa Exemplo LTDA",
"tax_id": "12345678000190"
}
],
"created_at": "2024-01-15T10:30:00.000Z",
"updated_at": "2024-01-20T14:45:00.000Z"
}
}Baixar Arquivo da CNH
Retorna uma URL GET pré-assinada (15 minutos) para o arquivo da CNH.
Parâmetros de URL
- Name
id- Type
- number
- Required
- obrigatório
- Description
ID do condutor.
Request
curl https://api.habilitar.me/v1/drivers/1/file \
-H "x-api-key: {token}"Response - 200
{
"data": {
"url": "https://media.example/get?X-Amz-Signature=..."
}
}Vincular Empresa
Vincula o condutor a uma empresa da organização. O id na URL é o do condutor.
Retorna 409 se o vínculo já existir e 400 se a empresa não pertencer à organização.
Corpo da Requisição
- Name
company_id- Type
- integer
- Required
- obrigatório
- Description
ID da empresa da organização.
Resposta
- Name
data- Type
- object
- Description
Condutor atualizado, com a empresa incluída em
companies.
Request
curl -X POST https://api.habilitar.me/v1/drivers/1/companies \
-H "Content-Type: application/json" \
-H "x-api-key: {token}" \
-d '{ "company_id": 3 }'Response 200
{
"data": {
"id": 1,
"tax_id": "39053344705",
"name": "João da Silva",
"companies": [
{
"id": 3,
"name": "Empresa Exemplo LTDA",
"tax_id": "12345678000190"
}
]
}
}Response 409
{
"error": "Conflict",
"message": "This driver is already linked to this company"
}Desvincular Empresa
Remove o vínculo do condutor com uma empresa. O cadastro permanece, inclusive quando este é o último vínculo. O id na URL é o do condutor.
Retorna 404 se o condutor não estiver vinculado a essa empresa, 400 se a empresa não pertencer à organização e 409 se houver indicação de infração nessa empresa.
Corpo da Requisição
- Name
company_id- Type
- integer
- Required
- obrigatório
- Description
ID da empresa da organização.
Resposta
- Name
data- Type
- object
- Description
Condutor atualizado, sem a empresa removida em
companies.
Request
curl -X DELETE https://api.habilitar.me/v1/drivers/1/companies \
-H "Content-Type: application/json" \
-H "x-api-key: {token}" \
-d '{ "company_id": 3 }'Response 409
{
"error": "Conflict",
"message": "This driver cannot be removed because it is linked to a traffic violation indication"
}Remover Condutor
Exclui o cadastro do condutor e o arquivo da CNH, removendo todos os vínculos com empresas.
Retorna 409 se o condutor estiver vinculado a uma indicação de infração.
Request
curl -X DELETE https://api.habilitar.me/v1/drivers/1 \
-H "x-api-key: {token}"Response 200
{
"data": null,
"deleted": true
}Response 409
{
"error": "Conflict",
"message": "This driver cannot be removed because it is linked to a traffic violation indication"
}Eventos de Webhook
Os eventos de condutor são enviados por webhook.
driver.created
Disparado quando um condutor é cadastrado.
O data segue o recurso de condutor. Com o upload da CNH no cadastro, document.status começa em pending.
Payload
{
"type": "driver.created",
"data": {
"id": 1,
"tax_id": null,
"name": null,
"license": null,
"id_number": null,
"id_issuer": null,
"phone": "+5511987654321",
"class": null,
"issue_date": null,
"expiry_date": null,
"first_license_date": null,
"birth_date": null,
"toxicological_exam_expiry_date": null,
"toxicological_exam_status": null,
"toxicological_collection": null,
"toxicological_observations": null,
"document": {
"id": 44,
"name": "cnh.pdf",
"mime": "application/pdf",
"status": "pending",
"status_reason": null
},
"companies": [
{
"id": 3,
"tax_id": "12345678000190",
"external_uid": "EMP",
"name": "Empresa Exemplo LTDA"
}
],
"created_at": "2024-01-15T10:30:00.000Z",
"updated_at": "2024-01-15T10:30:00.000Z"
}
}driver.updated
Disparado quando os dados do condutor são alterados.
Payload
{
"type": "driver.updated",
"data": {
"id": 1,
"tax_id": "39053344705",
"name": "João da Silva",
"license": "01234567890",
"id_number": "2810416",
"id_issuer": "SSP/SP",
"phone": "+5511987654321",
"class": "ab",
"issue_date": "2022-05-10",
"expiry_date": "2032-05-10",
"first_license_date": "2012-05-10",
"birth_date": "1990-01-15",
"toxicological_exam_expiry_date": "2027-09-07",
"toxicological_exam_status": "valid",
"toxicological_collection": "2024-09-07",
"toxicological_observations": null,
"document": {
"id": 44,
"name": "cnh.pdf",
"mime": "application/pdf",
"status": "valid",
"status_reason": null
},
"companies": [
{
"id": 3,
"tax_id": "12345678000190",
"external_uid": "EMP",
"name": "Empresa Exemplo LTDA"
}
],
"created_at": "2024-01-15T10:30:00.000Z",
"updated_at": "2024-01-20T14:45:00.000Z"
}
}driver.deleted
Disparado quando o condutor é removido. O payload é o estado do condutor imediatamente antes da exclusão.
Payload
{
"type": "driver.deleted",
"data": {
"id": 1,
"tax_id": "39053344705",
"name": "João da Silva",
"license": "01234567890",
"id_number": "2810416",
"id_issuer": "SSP/SP",
"phone": "+5511987654321",
"class": "ab",
"issue_date": "2022-05-10",
"expiry_date": "2032-05-10",
"first_license_date": "2012-05-10",
"birth_date": "1990-01-15",
"toxicological_exam_expiry_date": "2027-09-07",
"toxicological_exam_status": "valid",
"toxicological_collection": "2024-09-07",
"toxicological_observations": null,
"document": {
"id": 44,
"name": "cnh.pdf",
"mime": "application/pdf",
"status": "valid",
"status_reason": null
},
"companies": [
{
"id": 3,
"tax_id": "12345678000190",
"external_uid": "EMP",
"name": "Empresa Exemplo LTDA"
}
],
"created_at": "2024-01-15T10:30:00.000Z",
"updated_at": "2024-01-20T14:45:00.000Z"
}
}driver.document.updated
Disparado quando o status da validação da CNH muda (pending → review → valid, invalid ou expired).
Payload
{
"type": "driver.document.updated",
"data": {
"id": 1,
"tax_id": "39053344705",
"name": "João da Silva",
"license": "01234567890",
"id_number": "2810416",
"id_issuer": "SSP/SP",
"phone": "+5511987654321",
"class": "ab",
"issue_date": "2022-05-10",
"expiry_date": "2032-05-10",
"first_license_date": "2012-05-10",
"birth_date": "1990-01-15",
"toxicological_exam_expiry_date": "2027-09-07",
"toxicological_exam_status": "valid",
"toxicological_collection": "2024-09-07",
"toxicological_observations": null,
"document": {
"id": 44,
"name": "cnh.pdf",
"mime": "application/pdf",
"status": "valid",
"status_reason": null
},
"companies": [
{
"id": 3,
"tax_id": "12345678000190",
"external_uid": "EMP",
"name": "Empresa Exemplo LTDA"
}
],
"created_at": "2024-01-15T10:30:00.000Z",
"updated_at": "2024-01-20T14:45:00.000Z"
}
}