← HomeFleetPay / API

Verify a contracted driver's Pix key

Parameters, data structure and responses from the versioned contract.

GET/agregados/{documento}/chave-pix
conferirChavePixDoAgregadoSandbox Base: https://api.fleetpay.site/v1

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

Does the Pix key this contracted driver or carrier gave me match the one in your records?

Send the pair (document, key) and receive a yes/no answer. This check is useful before funds leave — especially when the key arrived by email, WhatsApp or a manually entered record.

The case this endpoint is designed to catch is situacao: "chave_de_outro_titular": the key is real, exists in your records and is registered for another contracted driver or carrier of yours. This is the pattern of key substitution — a scam in which payment succeeds but reaches the wrong account. A local if (chave === chaveQueTenhoNoERP) check does not catch it.

situacaoWhat to do
vinculadaProceed with payment.
chave_de_outro_titularStop. Confirm with the beneficiary through a channel you already used before.
nao_cadastradaCheck documento_possui_chave before deciding (below).

This is NOT a query to the Brazilian Central Bank's DICT

The response concerns what is registered in FleetPay, not ownership of the key in the payment scheme. vinculada: false means "this is not the key recorded here" — never "this key does not belong to this person." Treating false as proof of fraud blocks legitimate payments to someone who simply never registered an external key with us. That is why documento_possui_chave exists: with false, FleetPay has no key for this person and there is no discrepancy to identify; with true, the person has a registered key and it is different.

What is returned: yes/no about the pair you supplied. Neither a third party's key nor its owner is returned — for chave_de_outro_titular, titular is deliberately null to prevent verification from becoming a reverse key-to-person directory.

Send the key as you have it, with or without formatting: CPF, CNPJ and phone numbers are compared by digits (+55 is optional), and email/random keys are compared case-insensitively.

A document that does not belong to one of your contracted drivers or carriers returns 404, not 403 — the same rule as GET /agregados/{documento}, so this endpoint cannot become a CPF/CNPJ enumeration oracle.

Authentication

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

Parameters

documentopath · stringRequired

Contracted transport provider's CPF (11 digits) or CNPJ (14 digits). Accepts punctuation or no punctuation.

Constraints
{
  "type": "string"
}
chavequery · stringRequired

Pix key to check: CPF, CNPJ, email, phone (+55DDDNÚMERO) or random key (UUID).

Constraints
{
  "type": "string",
  "maxLength": 77
}

Responses

200 HTTP Response

Verification result

application/json

400 HTTP Response

Invalid request

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

No contractor with this tax identifier is linked to your company.

application/json

errorobjectOptional
429 HTTP Response

Request limit exceeded (limite_requisicoes). Wait for the interval specified in the Retry-After header before retrying. This may be a limit forwarded from the provider or FleetPay's own anti-abuse limit, counted per authenticated company and route group, with a short window for bursts and a long window for slower automated traffic. Limits are intentionally generous: genuine integrations, including large batches processed at once, should remain well below them. If yours reaches a limit, contact FleetPay.

application/json

errorobjectOptional
500 HTTP Response

Internal error (erro_interno)

application/json

errorobjectOptional
Complete Operation Definition
{
  "tags": [
    "Agregados"
  ],
  "summary": "Conferir a chave PIX de um agregado",
  "operationId": "conferirChavePixDoAgregado",
  "description": "**A chave PIX que este agregado me passou é a mesma que consta com vocês?**\n\nVocê manda o par (documento, chave) e recebe sim/não. É a conferência que vale a pena\nfazer **antes** de o dinheiro sair — principalmente quando a chave chegou por e-mail,\nWhatsApp ou num cadastro que alguém digitou.\n\n**O caso que este endpoint existe para pegar é `situacao: \"chave_de_outro_titular\"`:** a\nchave é real, está na sua base, e está cadastrada para **outro** agregado seu. É a\nassinatura da troca de chave — o golpe em que o pagamento sai certinho para a conta\nerrada. Um `if (chave === chaveQueTenhoNoERP)` do seu lado não pega isso.\n\n| `situacao` | O que fazer |\n|---|---|\n| `vinculada` | Segue o pagamento. |\n| `chave_de_outro_titular` | **Pare.** Confirme com o favorecido por um canal que você já usava antes. |\n| `nao_cadastrada` | Olhe `documento_possui_chave` antes de decidir (abaixo). |\n\n> ### Isto NÃO é uma consulta ao DICT do Bacen\n>\n> A resposta é sobre **o que está cadastrado na FleetPay**, não sobre a titularidade da\n> chave no arranjo de pagamentos. `vinculada: false` quer dizer \"não é a chave que consta\n> aqui\" — **nunca** \"esta chave não é dessa pessoa\". Tratar o `false` como prova de fraude\n> barra pagamento legítimo de agregado que simplesmente nunca cadastrou chave externa com\n> a gente. É para isso que existe o `documento_possui_chave`: com `false`, a FleetPay não\n> tem chave nenhuma dessa pessoa e não há divergência a apontar; com `true`, a pessoa tem\n> chave cadastrada e ela é **outra**.\n\n**O que sai daqui:** sim/não sobre o par que você mesmo mandou. Nem a chave de terceiro,\nnem o dono dela — em `chave_de_outro_titular` o `titular` vai `null` de propósito, para a\nconferência não virar um diretório reverso chave → pessoa.\n\nA chave pode ser mandada como você a tem, com ou sem máscara: comparamos CPF, CNPJ e\ntelefone por dígitos (o `+55` é opcional) e e-mail/chave aleatória sem diferenciar caixa.\n\n**Documento que não é seu agregado responde `404`, não `403`** — mesma regra do\n`GET /agregados/{documento}`, para o endpoint não virar oráculo de enumeração de CPF/CNPJ.\n",
  "parameters": [
    {
      "name": "documento",
      "in": "path",
      "required": true,
      "schema": {
        "type": "string"
      },
      "description": "CPF (11 dígitos) ou CNPJ (14 dígitos) do agregado. Aceita com ou sem pontuação."
    },
    {
      "name": "chave",
      "in": "query",
      "required": true,
      "schema": {
        "type": "string",
        "maxLength": 77
      },
      "description": "A chave PIX a conferir: CPF, CNPJ, e-mail, telefone (`+55DDDNÚMERO`) ou chave aleatória (UUID)."
    }
  ],
  "responses": {
    "200": {
      "description": "O resultado da conferência",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/RespostaConferenciaChavePix"
          }
        }
      }
    },
    "400": {
      "$ref": "#/components/responses/Erro400"
    },
    "401": {
      "$ref": "#/components/responses/Erro401"
    },
    "403": {
      "$ref": "#/components/responses/Erro403"
    },
    "404": {
      "description": "Nenhum agregado com este documento está vinculado à sua empresa.",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Erro"
          }
        }
      }
    },
    "429": {
      "$ref": "#/components/responses/Erro429"
    },
    "500": {
      "$ref": "#/components/responses/Erro500"
    }
  },
  "method": "GET",
  "path": "/agregados/{documento}/chave-pix"
}