← HomeFleetPay / API

Check a vehicle with the toll operator

Parameters, data structure and responses from the versioned contract.

GET/consultas/veiculo-pedagio
consultarVeiculoPedagioSandbox Base: https://api.fleetpay.site/v1

Technical descriptions are translated from the versioned contract. Original identifiers and JSON are preserved; data examples are omitted.

What the specified operator knows about a license plate: whether the vehicle has a tag and whether a toll voucher can be issued for it.

The contract supports multiple operators

operadora is required; the four accepted values correspond to the four tag issuers in the market:

operadoraCurrently available
sem_pararSem PararYes
conectcarConectCarnot yet
veloeVeloenot yet
move_maisMove Maisnot yet

A real operator that is not yet supported returns 422 with operadora_indisponivel — different from the 400 for a nonexistent operator. This distinction matters: one means wait for support, while the other means correct the request. When a new operator is supported, your integration stays the same: the field and error code already exist.

Prerequisite for the querying company: completed tax registration, including an A1 digital certificate uploaded in Settings. Otherwise, the response is 422 with empresa_nao_habilitada.

Requires the consultas scope enabled in the dashboard.

The two questions are independent

Integrations often get this wrong, so the contract deliberately keeps the answers in separate fields:

tem_taghabilitado_vale_pedagio
automatic lanetruetrue
no tag, but eligible to travelfalsetrue
has a tag, blocked by the operatortruefalse

The latter two rows are the key point. A traditional toll voucher does not require a tag — a vehicle without one can still receive a voucher. A vehicle with a tag may be blocked by the operator for another reason.

Collapsing both fields into one makes your integration reject freight that could proceed.

tem_tag is a response, not an inference

Do not infer that a tag is absent because identificador_tag is null. tem_tag provides the answer; identificador_tag is the code and only accompanies vehicles with a tag.

404 is different from "no tag"

A plate unknown to the operator returns 404 veiculo_nao_encontrado, which requires a different action from a registered vehicle without a tag:

ResponseWhat to do
404register the vehicle with the toll operator
200 with tem_tag: falseissue a traditional toll voucher

Simulated sandbox mode

This query has no contracted operator behind it: in the sandbox environment, FleetPay generates a deterministic response that does not reflect any vehicle's real registration. Every response contains verificacao: "simulada" inside the data, not just the envelope, because a tem_tag saved in your database must retain the fact that no real query took place.

The request and response contract is already final: you can integrate now.

Only vehicles in the test dataset return results

A plate outside the dataset returns 404 — there is no generic response. A generic response existed for a day and was removed: any entered plate received a fabricated tag that looked real, while a saved tem_tag: true carries no warning that the plate never existed.

License plateState
TJD2D33has a tag, eligible — the automatic lane
AKS1I02no tag, yet eligible — traditional vouchers do not require tags
FTO0C61has a tag, not eligible — a tag alone does not authorize use
any other plate404 veiculo_nao_encontrado

Authentication

[
  {
    "oauth2": []
  },
  {
    "chaveApi": []
  }
]
Availability depends on the environment, enabled scopes and provider. This reference does not execute requests or collect credentials.

Parameters

placaquery · stringRequired

Legacy Brazilian (ABC1234) or Mercosur (ABC1D23) license plate, without separators.

Constraints
{
  "type": "string",
  "pattern": "^[A-Za-z]{3}[0-9][A-Za-z0-9][0-9]{2}$"
}
operadoraquery · stringRequired

The tag operator being queried. Currently only sem_parar is available; other operators return 422 operadora_indisponivel until supported.

Constraints
{
  "type": "string",
  "enum": [
    "sem_parar",
    "conectcar",
    "veloe",
    "move_mais"
  ]
}

Responses

200 HTTP Response

The operator's information for the license plate.

application/json

400 HTTP Response

validacao — the license plate is missing or does not match the accepted format.

application/json

errorobjectOptional
401 HTTP Response

Unauthenticated (autenticacao): missing, invalid or expired credentials, including an API key used in the wrong environment. A sandbox key is not valid in production, nor a production key in the sandbox; the error message indicates the expected environment.

application/json

errorobjectOptional
403 HTTP Response

Scope not enabled for these credentials

application/json

errorobjectOptional
404 HTTP Response

veiculo_nao_encontrado — the license plate is not registered with this operator. This is not the same as a registered vehicle without a tag: the former requires registering the vehicle with the operator; the latter requires issuing a traditional toll voucher.

application/json

errorobjectOptional
422 HTTP Response

operadora_indisponivel — the operator exists but is not yet supported; the message lists the available operators. Wait; do not change the request. empresa_nao_habilitada — the authenticated company has not yet completed its tax registration.

application/json

errorobjectOptional
503 HTTP Response

consulta_indisponivel — the operator could not be queried.

Never interpret this as "the vehicle has no tag." Recording a missing tag because the query failed would stop you from offering the automatic option to a truck that has one.

application/json

errorobjectOptional
Complete Operation Definition
{
  "tags": [
    "Consultas"
  ],
  "summary": "Consultar o veículo no operador de pedágio",
  "operationId": "consultarVeiculoPedagio",
  "description": "O que a **operadora informada** sabe sobre uma placa: se o veículo **carrega tag** e\nse dá para **emitir Vale-Pedágio** para ele.\n\n## O contrato é multi-operadora\n\n`operadora` é obrigatória, e as quatro aceitas são as quatro emissoras de tag do\nmercado:\n\n| `operadora` | | Disponível hoje |\n|---|---|---|\n| `sem_parar` | Sem Parar | **Sim** |\n| `conectcar` | ConectCar | ainda não |\n| `veloe` | Veloe | ainda não |\n| `move_mais` | Move Mais | ainda não |\n\nOperadora real ainda não atendida responde `422` com `operadora_indisponivel` — código\n**diferente** do `400` de operadora inexistente, e a distinção importa: um pede\naguardar a operadora entrar, o outro pede corrigir a chamada. Quando uma nova operadora\nfor atendida, nada muda na sua integração: o campo e o código de erro já existem.\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## As duas perguntas são independentes\n\nEsta é a parte que uma integração costuma errar, e o contrato as mantém em campos\nseparados de propósito:\n\n| | `tem_tag` | `habilitado_vale_pedagio` |\n|---|---|---|\n| via automática | `true` | `true` |\n| **sem tag, mas pode rodar** | `false` | `true` |\n| **com tag, bloqueado pelo operador** | `true` | `false` |\n\nAs duas linhas do meio são o ponto. O **Vale-Pedágio tradicional não exige tag** — um\nveículo sem tag continua podendo receber vale. E um veículo com tag pode estar\nbloqueado pelo operador por outro motivo.\n\nSe você colapsar os dois campos num só, sua integração vai **recusar frete que podia\nrodar**.\n\n## `tem_tag` é resposta, não inferência\n\nNão deduza a ausência de tag de `identificador_tag` vir nulo. `tem_tag` é a resposta;\n`identificador_tag` é o código, e só acompanha quem tem tag.\n\n## `404` é diferente de \"sem tag\"\n\nPlaca que o operador não conhece responde `404 veiculo_nao_encontrado` — e isso pede\numa providência diferente de um veículo cadastrado sem tag:\n\n| Resposta | O que fazer |\n|---|---|\n| `404` | cadastrar o veículo no operador de pedágio |\n| `200` com `tem_tag: false` | emitir o Vale-Pedágio tradicional |\n\n## Modo simulado em homologação\n\nEsta consulta **não tem operadora contratada** por trás: em homologação a resposta é\ngerada pela FleetPay, é determinística e **não reflete o cadastro real de nenhum\nveículo**. Cada resposta carrega `verificacao: \"simulada\"` — o campo viaja dentro do\ndado, e não só no envelope, porque um `tem_tag` gravado na sua base precisa carregar\nconsigo que nenhuma consulta real aconteceu.\n\nO contrato de request e response já é o definitivo: integre agora.\n\n### Só os veículos da massa de teste respondem\n\nPlaca fora da massa responde `404` — **não existe resposta genérica**. Ela existiu por\num dia e saiu: qualquer placa digitada recebia uma tag fabricada com cara de real, e um\n`tem_tag: true` gravado na sua base não carrega aviso de que a placa nem existia.\n\n| Placa | Estado |\n|---|---|\n| `TJD2D33` | com tag, habilitado — a via automática |\n| `AKS1I02` | **sem tag**, e ainda assim habilitado — o vale tradicional não exige tag |\n| `FTO0C61` | com tag, **não habilitado** — tag não autoriza por si |\n| qualquer outra placa | `404 veiculo_nao_encontrado` |\n",
  "parameters": [
    {
      "name": "placa",
      "in": "query",
      "required": true,
      "schema": {
        "type": "string",
        "pattern": "^[A-Za-z]{3}[0-9][A-Za-z0-9][0-9]{2}$"
      },
      "description": "Placa antiga (`ABC1234`) ou Mercosul (`ABC1D23`), sem separador.\n"
    },
    {
      "name": "operadora",
      "in": "query",
      "required": true,
      "schema": {
        "type": "string",
        "enum": [
          "sem_parar",
          "conectcar",
          "veloe",
          "move_mais"
        ]
      },
      "description": "A operadora de tag consultada. Hoje só `sem_parar` está disponível; as demais\nrespondem `422 operadora_indisponivel` até serem atendidas.\n"
    }
  ],
  "responses": {
    "200": {
      "description": "O que o operador tem para a placa.",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/RespostaVeiculoPedagio"
          }
        }
      }
    },
    "400": {
      "description": "`validacao` — a placa está fora do formato aceito, ou não foi informada.\n",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Erro"
          }
        }
      }
    },
    "401": {
      "$ref": "#/components/responses/Erro401"
    },
    "403": {
      "$ref": "#/components/responses/Erro403"
    },
    "404": {
      "description": "`veiculo_nao_encontrado` — a placa não está cadastrada nesta operadora. **Não** é\na mesma coisa que um veículo cadastrado sem tag: um pede cadastrar o veículo na\noperadora, o outro pede emitir o vale tradicional.\n",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Erro"
          }
        }
      }
    },
    "422": {
      "description": "`operadora_indisponivel` — a operadora existe, mas ainda não é atendida; a\nmensagem diz quais estão disponíveis. **Aguarde**, não corrija a chamada.\n`empresa_nao_habilitada` — a empresa autenticada ainda não concluiu o cadastro\nfiscal.\n",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Erro"
          }
        }
      }
    },
    "503": {
      "description": "`consulta_indisponivel` — não foi possível consultar o operador.\n\n**Nunca trate isto como \"o veículo não tem tag\".** Guardar ausência de tag porque a\nconsulta falhou faria você parar de oferecer a via automática a um caminhão que a tem.\n",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Erro"
          }
        }
      }
    }
  },
  "method": "GET",
  "path": "/consultas/veiculo-pedagio"
}