← InicioFleetPay / API

Consultar la flota de un transportista en ANTT

Parámetros, estructura de datos y respuestas del contrato versionado.

GET/consultas/frota
consultarFrotaBase de Pruebas: https://api.fleetpay.site/v1

Las descripciones técnicas se traducen del contrato versionado. Se conservan los identificadores y el JSON originales; se omiten los ejemplos de datos.

Verifica una lista de matrículas para determinar si cada una pertenece a la flota de un transportista en RNTRC (ANTT). La respuesta incluye pertence por matrícula (true/false, o null cuando ANTT no proporcionó una situación concluyente).

Requisito de la empresa que consulta: tener el registro fiscal completo, incluido el certificado digital A1 enviado en Configuración. En caso contrario, la respuesta es 422 con empresa_nao_habilitada.

Requiere el ámbito consultas habilitado en el panel.

Modo simulado en homologación

Esta consulta no tiene un proveedor contratado: en homologación, FleetPay genera una respuesta determinista sin efecto regulatorio. Los datos no proceden de ANTT ni reflejan la flota real del transportista. Cada elemento de frota incluye verificacao: "simulada", que identifica la naturaleza de la verificación por matrícula. El campo es opcional por definición: un elemento sin verificacao corresponde a una verificación real.

El contrato de solicitud y respuesta ya es definitivo: puede integrar ahora. Al incorporar el proveedor real, el comportamiento dejará de ser simulado sin cambiar el contrato.

El par documento + rntrc debe coincidir

Los dos parámetros plantean una sola pregunta: "la situación de ESTE registro de ESTE transportista". Un RNTRC que no corresponde al CPF/CNPJ indicado no identifica a un transportista para esta consulta. La respuesta es 400 con rntrc_nao_confere, nunca un 200 sobre el registro que se haya encontrado.

Es 400, no 503, porque la consulta se ejecutó y llegó a una conclusión: no hubo indisponibilidad. Tampoco es 404, porque el problema es la combinación de parámetros, no un recurso ausente en esa dirección.

Los valores de prueba siguientes están exentos de esta comprobación: deliberadamente no son el RNTRC de nadie.

El rechazo del par es distinto de pertence: null. null indica una matrícula con resultado inconcluso dentro de una flota existente; 400 indica que no hay un transportista sobre el cual responder para ese par. Por eso sustituye a toda la respuesta y no se devuelve por matrícula.

Valores de prueba

En modo simulado, estas matrículas siempre devuelven el mismo resultado; úselas para probar las rutas de error de su integración:

MatrículaRespuesta
ZZZ0X00Matrícula fuera de la flota del transportista: pertence: false
ZZZ9X99Situación inconclusa ante ANTT: pertence: null
cualquier otra matrícula válidaRespuesta de éxito

Autenticación

[
  {
    "oauth2": []
  },
  {
    "chaveApi": []
  }
]
La disponibilidad depende del entorno, los permisos habilitados y el proveedor. Esta referencia no ejecuta solicitudes ni recibe credenciales.

Parámetros

documentoquery · stringObligatorio

CPF (11 dígitos) o CNPJ (14 dígitos) del transportista consultado, solo dígitos.

Restricciones
{
  "type": "string",
  "pattern": "^([0-9]{11}|[0-9]{14})$"
}
rntrcquery · stringObligatorio

RNTRC del transportista consultado, con 8 o 9 dígitos.

Restricciones
{
  "type": "string",
  "pattern": "^[0-9]{8,9}$"
}
placasquery · arrayObligatorio

Matrículas que se verificarán (1 a 20). Envíe placas[]=ABC1D23&placas[]=XYZ4E56.

En homologación, ZZZ0X00 devuelve pertence: false y ZZZ9X99 devuelve pertence: null; cualquier otra matrícula válida devuelve éxito.

Restricciones
{
  "type": "array",
  "minItems": 1,
  "maxItems": 20,
  "items": {
    "type": "string",
    "pattern": "^[A-Za-z]{3}[0-9][A-Za-z0-9][0-9]{2}$"
  }
}

Respuestas

200 Respuesta HTTP

Estado de cada matrícula en la flota del transportista.

application/json

dataobjectOpcional
400 Respuesta HTTP

rntrc_nao_confere — el RNTRC informado no corresponde a este CPF/CNPJ, por lo que no hay una flota sobre la cual responder. validacao — alguna matrícula no cumple el formato Mercosur o falta un parámetro.

application/json

errorobjectOpcional
401 Respuesta HTTP

Sin autenticación (autenticacao): credencial ausente, inválida o vencida, incluida una clave API utilizada en el entorno incorrecto. La clave de homologación no es válida en producción, ni la de producción en homologación; el mensaje de error indica el entorno esperado.

application/json

errorobjectOpcional
403 Respuesta HTTP

Ámbito no habilitado para esta credencial

application/json

errorobjectOpcional
422 Respuesta HTTP

La empresa autenticada aún no completó el registro fiscal (empresa_nao_habilitada).

application/json

errorobjectOpcional
503 Respuesta HTTP

La consulta no está disponible temporalmente (consulta_indisponivel). Espera e inténtalo de nuevo.

application/json

errorobjectOpcional
Definición Completa de la Operación
{
  "tags": [
    "Consultas"
  ],
  "summary": "Consultar a frota de um transportador (ANTT)",
  "operationId": "consultarFrota",
  "description": "Verifica, para uma lista de placas, se cada uma pertence à frota de um transportador no\nRNTRC (ANTT). A resposta traz, por placa, `pertence` (`true`/`false`, ou `null` quando a\nANTT não deu situação conclusiva).\n\n**Pré-requisito da empresa que consulta:** ter o cadastro fiscal concluído — com o\ncertificado digital A1 enviado em Configurações. Sem isso a resposta é `422` com\n`empresa_nao_habilitada`.\n\nExige o escopo `consultas` habilitado no painel.\n\n## Modo simulado em homologação\n\nEsta consulta **não tem provedor contratado** por trás: em homologação a resposta é\ngerada pela FleetPay, é determinística e **não tem efeito regulatório** — o dado não vem\nda ANTT e não reflete a frota real do transportador. Cada item de `frota` carrega\n`verificacao: \"simulada\"`, marcando a natureza da verificação por placa — e o campo é\nopcional por natureza: item **sem** `verificacao` é verificação real.\n\nO contrato de request e response já é o definitivo: integre agora. Quando o provedor real\nentrar, o comportamento deixa de ser simulado **sem mudança de contrato**.\n\n\n### O par `documento` + `rntrc` precisa conferir\n\nOs dois parâmetros são uma pergunta só: *\"a situação DESTE registro DESTE\ntransportador\"*. Um RNTRC que não seja o daquele CPF/CNPJ não descreve transportador\nnenhum, e a resposta é **`400` com `rntrc_nao_confere`** — nunca um `200` sobre o\ncadastro que por acaso foi encontrado.\n\nÉ `400` e não `503` porque a consulta rodou e concluiu: não houve indisponibilidade. E\nnão é `404` porque o que está errado é a **combinação** dos dois parâmetros, não um\nrecurso ausente no endereço.\n\nAs sentinelas abaixo são **isentas** dessa checagem — elas existem justamente para não\nserem o RNTRC de ninguém.\n\nRepare que a recusa do par é **diferente** de `pertence: null`. `null` é uma placa\ninconclusiva dentro de uma frota que existe; o `400` é a ausência de transportador\nsobre o qual responder — por isso ele não vem por placa, e sim no lugar da resposta\ninteira.\n\n### Sentinelas de teste\n\nEm modo simulado, estas placas respondem sempre a mesma coisa — use-as para exercitar o\ncaminho de erro da sua integração:\n\n| Placa | Resposta |\n|---|---|\n| `ZZZ0X00` | Placa fora da frota do transportador — `pertence: false` |\n| `ZZZ9X99` | Situação inconclusiva na ANTT — `pertence: null` |\n| qualquer outra placa válida | Resposta de sucesso |\n",
  "parameters": [
    {
      "name": "documento",
      "in": "query",
      "required": true,
      "schema": {
        "type": "string",
        "pattern": "^([0-9]{11}|[0-9]{14})$"
      },
      "description": "CPF (11 dígitos) ou CNPJ (14 dígitos) do transportador consultado, somente dígitos."
    },
    {
      "name": "rntrc",
      "in": "query",
      "required": true,
      "schema": {
        "type": "string",
        "pattern": "^[0-9]{8,9}$"
      },
      "description": "RNTRC do transportador consultado, com 8 ou 9 dígitos."
    },
    {
      "name": "placas",
      "in": "query",
      "required": true,
      "style": "form",
      "explode": true,
      "schema": {
        "type": "array",
        "minItems": 1,
        "maxItems": 20,
        "items": {
          "type": "string",
          "pattern": "^[A-Za-z]{3}[0-9][A-Za-z0-9][0-9]{2}$"
        }
      },
      "description": "Placas a verificar (1 a 20). Envie `placas[]=ABC1D23&placas[]=XYZ4E56`.\n\nEm homologação, `ZZZ0X00` devolve `pertence: false` e `ZZZ9X99` devolve\n`pertence: null`; qualquer outra placa válida devolve sucesso.\n"
    }
  ],
  "responses": {
    "200": {
      "description": "Situação de cada placa na frota do transportador.",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "documento": {
                    "type": "string"
                  },
                  "rntrc": {
                    "type": "string"
                  },
                  "frota": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "placa": {
                          "type": "string"
                        },
                        "pertence": {
                          "type": "boolean",
                          "nullable": true
                        },
                        "verificacao": {
                          "type": "string",
                          "description": "Natureza da verificação desta placa. Em homologação vem\n`simulada`: a situação não foi apurada na ANTT, foi gerada em\nmodo simulado e não tem efeito regulatório.\n\nO marcador viaja **dentro de cada item**, e não no envelope da\nresposta, para sobreviver a ingestões que guardam só a lista de\nplacas e descartam o envelope.\n\n**Trate o campo como opcional.** Ele só existe enquanto a\nverificação é simulada: item **sem** `verificacao` é verificação\nreal. Um parser que exija o campo quebra na virada para o\nprovedor real — leia por presença, não por obrigatoriedade.\n"
                        }
                      }
                    }
                  }
                }
              },
              "environment": {
                "$ref": "#/components/schemas/Environment"
              }
            }
          }
        }
      }
    },
    "400": {
      "description": "`rntrc_nao_confere` — o RNTRC informado não é o registro deste CPF/CNPJ, então não\nhá frota sobre a qual responder.\n`validacao` — alguma placa está fora do formato Mercosul, ou falta parâmetro.\n",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Erro"
          }
        }
      }
    },
    "401": {
      "$ref": "#/components/responses/Erro401"
    },
    "403": {
      "$ref": "#/components/responses/Erro403"
    },
    "422": {
      "description": "A empresa autenticada ainda não concluiu o cadastro fiscal (`empresa_nao_habilitada`).",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Erro"
          }
        }
      }
    },
    "503": {
      "description": "A consulta está temporariamente indisponível (`consulta_indisponivel`). Aguarde e tente de novo.",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Erro"
          }
        }
      }
    }
  },
  "method": "GET",
  "path": "/consultas/frota"
}