Guia de Abastecimento

Guia de Abastecimento

Identificar o ponto de abastecimento (o visor da bomba), reservá-lo, autorizar a bomba, acompanhar por callbacks e informar o pagamento. Nos pontos de abastecimento que aceitam troca de preço, a autorização leva o preço que você definir.

Quem participa

Você chama a API da ConectTec por HTTP. A ConectTec encaminha os comandos ao concentrador do posto e devolve o que acontece na pista chamando o seu servidor de callback.

Seu sistema app ou backend API ConectTec api.conecttec.com.br Posto concentrador e bomba Seu servidor de callback você chama: QR code, reserva, autorização, pagamento resposta HTTP (201 = recebido) a ConectTec encaminha o comando ao concentrador o posto informa o que ocorreu a ConectTec chama você: callback de status e de entrega cada callback é enviado uma vez reserveId e authId ligam os dois lados
Nas setas de cima você chama a API. Na de baixo a ConectTec chama o seu servidor de callback. O reserveId e o authId ligam os dois lados.

O fluxo em um minuto

O caminho feliz tem 16 passos. O visor da bomba mostra o que o cliente vê no posto. No exemplo, o cliente abastece 30,00 L de gasolina no ponto de abastecimento 3 do posto 4021 e paga R$ 182,70 (R$ 6,09 por litro, com R$ 0,20 de desconto sobre a tabela de R$ 6,29).

Antes de começar

No cadastro a ConectTec entrega a chave de API, o identificador de provedor (providerId) e a lista de postos que você pode usar, cada um com o seu stationId. Você informa a base de callback. A ConectTec também libera, rota por rota, o que o seu cadastro pode chamar: rota não liberada responde 401 sem corpo. O detalhe está em Credenciais e ambiente. A homologação acontece em produção, num posto de testes: Homologação e entrada em produção.

Sete regras valem para todo o guia:

  1. O 201 só confirma recebimento. Reserva e autorização respondem 201 assim que a ConectTec recebe o pedido; o resultado chega por callback. Sem o callback de reserva (reason 0): Se a confirmação não chegar.
  2. Cada callback é enviado uma vez, no momento do evento. Processe cada callback pelo reason; um estado final não volta atrás, e ignore um reason 0 ou 4 que chegue depois de um estado final. Veja Contrato dos callbacks.
  3. Responda exatamente HTTP 200 em menos de 5 segundos. 201, 202, 204 e redirecionamento não contam como recebido, e o corpo da resposta não é lido. Veja Contrato dos callbacks.
  4. Antes de repetir um POST, confira o estado da operação anterior. Resposta 500 recebida significa que nada foi criado: tente uma vez. Timeout, 502, 503 ou 504: espere o callback ou a janela do 406. A entrega tem consulta (Conciliar e recuperar entregas). Veja Erros e diagnóstico.
  5. O preço aplicado vem em price da entrega. O de tabela vem em pricewithoutdiscount. Cobre pelo total da entrega. Veja Troca de preço e desconto e Receber a entrega.
  6. Ponto de abastecimento ocupado responde 406. Depois de uma reserva sua, o ponto de abastecimento só aceita nova reserva sua quando a reserva termina (abastecimento gravado ou callback de encerramento) ou passam reserveTimeOut mais 120 s. Veja Reservar o ponto de abastecimento.
  7. Cada entrega fica disponível em GET /Delivery/ByAuthId. Se o posto perde a conexão no meio do abastecimento, o concentrador guarda a entrega e a envia quando a conexão volta, com o dateTime do abastecimento. Veja Conciliar e recuperar entregas.

Autenticação do callback

Autentique o callback pelo segmento secreto na base de callback (por exemplo https://integracao.suaempresa.com.br/conecttec/8f3k2m9q, sem barra no final), HTTPS e a conferência do reserveId e do authId contra as suas operações. Descarte o que não reconhecer, mas responda 200.

Suas duas primeiras chamadas

A consulta do QR code confirma chave, liberação da rota e vínculo com o posto. Sem o código de um QR do posto de testes, use GET /V6/ForecourtMap/ById/{stationId}, que usa só o stationId do cadastro.

GET/QRCodeInformation/{codigo}SecretKeyAuthorization

O codigo tem 7 dígitos numéricos, com zeros à esquerda.

{
  "fuelPointNumber": 3,
  "stationId": 4021
}
HTTPQuando aconteceO que fazer
400O código não tem 7 dígitos.Mande os 7 dígitos.
401Chave ausente ou inválida, rota não liberada para o seu cadastro, código inexistente ou inválido, ou posto não vinculado a você.Se a chave está certa, peça à ConectTec que confira a liberação da rota e o vínculo do posto.
500Formato inválido, ou erro ao processar.Com o código no formato ^[0-9]{7}$, repita uma vez; persistindo, acione o suporte com o código e o horário.

Com o stationId e o fuelPointNumber na mão, a segunda chamada reserva o ponto de abastecimento. O reserveId da resposta 201 aparece em todos os callbacks seguintes.

POST/V4/Delivery/ReserveSecretKeyAuthorization
POST /V4/Delivery/Reserve
SecretKeyAuthorization: <SUA_CHAVE>
Content-Type: application/json

{
  "stationId": 4021,
  "fuelPointNumber": 3,
  "providerId": "<SEU_PROVIDER_ID>",
  "reserveTimeOut": 60
}
{
  "reserveId": "b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f",
  "providerId": "7d1e4c2a-5b3f-4e8a-9c6d-2f1a0b9e8d7c",
  "canInovice": false,
  "canReceipt": false,
  "fuelPoint": {
    "preset": true,
    "block": true,
    "configPrice": true,
    "card": false,
    "tag": false,
    "term": false,
    "fuelPointNumber": 3,
    "hoses": [
      { "hoseNumber": 1, "fuel": { "name": "Gasolina Comum", "imagePath": null, "fuelType": 5, "fuelTypeDescription": "gasolina" } },
      { "hoseNumber": 2, "fuel": { "name": "Etanol", "imagePath": null, "fuelType": 1, "fuelTypeDescription": "etanol" } }
    ]
  }
}

O campo se chama canInovice, com essa grafia, e é assim que a API devolve.

Erros da reserva: Reservar o ponto de abastecimento. Callbacks de status: Acompanhar e cancelar.

Conceitos

O vocabulário da pista e do fluxo de abastecimento, com o campo da API que corresponde a cada termo.

A pista: posto, ponto de abastecimento e bico

Um posto tem uma ou mais bombas. Cada bomba tem um ou mais visores, e cada visor é controlado por uma CPU. A API chama o visor de ponto de abastecimento (o visor da bomba) e o identifica por fuelPointNumber. Um ponto de abastecimento tem um ou mais bicos, identificados por hoseNumber. Cada bico entrega um combustível (fuelType) e guarda até quatro preços, um por nível. Você reserva e autoriza o ponto de abastecimento; combustível e preço são do bico.

Posto Exemplo stationId: 4021 Bomba sem campo próprio Ponto de abastecimento 3 fuelPointNumber: 3 qrcode: 0004217 Bico 1 hoseNumber: 1 gasolina (fuelType 5) nível 1: R$ 6,29 nível 2: R$ 6,19 Bico 2 hoseNumber: 2 etanol (fuelType 1) nível 1: R$ 4,39 nível 2: R$ 4,29 Concentrador (ConectTec) conversa com as bombas do posto
O posto de exemplo 4021 com a bomba que contém o ponto de abastecimento 3. O ponto de abastecimento tem dois bicos, cada um com dois níveis de preço.

Na autorização por bico você escolhe o bico; na autorização por tipo, escolhe o combustível e a ConectTec libera todos os bicos desse combustível no ponto de abastecimento (Autorizar o abastecimento). O hoseNumber é o número físico do bico e é o mesmo na reserva, nos callbacks e na entrega. No callback de status ele é uma lista ([0] quando o bico não é identificado); na entrega é um inteiro.

Glossário

TermoCampo ou rotaO que éNo posto de exemplo
Identificador de provedorproviderIdGUID que a ConectTec entrega no cadastro. Identifica sua empresa.7d1e4c2a-5b3f-4e8a-9c6d-2f1a0b9e8d7c
Chave de APIcabeçalho SecretKeyAuthorizationSegredo que autentica cada chamada. Valor cru no cabeçalho, sem Bearer. Veja Credenciais e ambiente.<SUA_CHAVE>
PostostationIdNúmero inteiro que identifica o posto como a ConectTec informa a você no cadastro.4021 (Posto Exemplo)
Concentradorsem campoEquipamento da ConectTec instalado no posto.sem campo
Ponto de abastecimentofuelPointNumberO visor da bomba, controlado por uma CPU. É a unidade que você reserva e autoriza. Tem um ou mais bicos.3
BicohoseNumberBico físico do ponto de abastecimento. Cada um entrega um combustível.1 e 2
CombustívelfuelTypeInteiro de 0 a 16. Valores usados aqui: 5 gasolina, 1 etanol. A tabela completa está em Enumerações e limites.bico 1: 5; bico 2: 1
Nível de preçoprice, price2, price3, price4 no mapa de pistaAté quatro preços por bico (preço 1 a 4, em R$ por litro). 0 indica nível não usado. O que cada nível representa é decisão do posto.gasolina: 6,29 e 6,19; etanol: 4,39 e 4,29
ReservareserveIdGUID de 36 caracteres, com hífens, que identifica a reserva do ponto de abastecimento.b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f
AutorizaçãoauthIdGUID de 36 caracteres que identifica a liberação da bomba, com preço e limite.c3a9e1f7-5d2b-4c8a-b6e4-0f1d3a5c7e9b
Entregacallback FuelPoint/DeliveryO registro final do abastecimento: volume, preço, total e encerrantes.30,00 L a R$ 6,09 = R$ 182,70
EncerranteETotStart, ETotEndTotalizador da bomba antes e depois do abastecimento. A diferença é o volume que passou pela bomba.vêm na entrega
Callback de statusV3/FuelPoint/StatusChamada que a ConectTec faz no seu servidor a cada atualização do ponto de abastecimento durante uma reserva ou autorização sua. Os estados 5 e 6 saem só na recusa do posto (reason 1); o reason 10 não é enviado. O callback sai para reservas e autorizações suas, com a base cadastrada e a rota liberada. Veja Contrato dos callbacks.sem exemplo
Callback de entregaFuelPoint/DeliveryChamada que a ConectTec faz no seu servidor quando o abastecimento termina.sem exemplo
Base de callbackinformada no cadastroURL do seu servidor. A ConectTec acrescenta o caminho de cada callback.https://integracao.suaempresa.com.br/conecttec/8f3k2m9q
QR code do ponto de abastecimentoqrcodeCódigo de 7 dígitos numéricos impresso no ponto de abastecimento, com zeros à esquerda. Resolve para stationId e fuelPointNumber.0004217

De onde vem o stationId

O stationId é o número que a ConectTec informa a você quando vincula o posto ao seu cadastro. A lista de postos vem no cadastro. Para postos com QR code, GET /QRCodeInformation/{codigo} devolve o stationId e o fuelPointNumber do ponto de abastecimento. Veja Descobrir posto e ponto de abastecimento.

Reserva, autorização e entrega

O abastecimento passa por três registros, nesta ordem.

Reserva. Você pede ao posto que separe um ponto de abastecimento para o seu cliente (POST /V4/Delivery/Reserve). A reserva não libera a bomba, não fixa preço e não define limite. Ela garante que o concentrador aceitou o ponto de abastecimento para você e devolve a lista de bicos. A resposta 201 só confirma que a ConectTec recebeu o pedido. A confirmação do posto chega por callback de status com reason 0. A reserva vive por reserveTimeOut segundos (de 1 a 120, escolhido por você). Se o prazo termina sem autorização, o callback traz reason 2. O posto também pode recusar a reserva (reason 1); veja a linha "Se falha" abaixo.

Autorização. Sobre uma reserva já confirmada, você libera a bomba (POST /V2/Delivery/AuthorizeByFuelType ou POST /V2/Delivery/Authorize) e informa o preço por nível, o limite e a periodicidade das atualizações. É aqui que você aplica desconto: o preço vai no corpo da autorização. O preço aplicado vem em price da entrega, e o de tabela em pricewithoutdiscount. Mande uma autorização por reserva. A resposta 201 também só confirma o recebimento; o posto confirma com reason 4. A autorização vive por authTimeOut segundos (de 1 a 200). Se o cliente não abastecer nesse prazo, chega reason 6. Veja Autorizar o abastecimento e Troca de preço e desconto.

Entrega. É o resultado real: o que a bomba entregou. A ConectTec chama o callback FuelPoint/Delivery no seu servidor com volume, preço aplicado, total e encerrantes. A entrega não tem prazo de validade. Se o posto perde a conexão no meio do abastecimento, o concentrador guarda a entrega e a envia quando a conexão volta, com o dateTime do abastecimento. Cada callback é enviado uma vez, e a entrega fica disponível em GET /Delivery/ByAuthId (Contrato dos callbacks). No exemplo do guia, o cliente abastece 30,00 L de gasolina a R$ 6,09 (R$ 6,29 menos o desconto de R$ 0,20) e a entrega traz total de R$ 182,70, com R$ 188,70 sem o desconto. Veja Receber a entrega e Conciliar e recuperar.

ReservaAutorizaçãoEntrega
IdentificadorreserveIdauthIdchega no callback com reserveId e authId
O que garanteo ponto de abastecimento está separado para vocêa bomba está liberada com seu preço e limiteo que foi abastecido de fato
Quanto vivereserveTimeOut, obrigatório, de 1 a 120 sauthTimeOut, obrigatório, de 1 a 200 ssem prazo; é o registro final
Como você confirmacallback de status, reason 0callback de status, reason 4callback de entrega
Se falhareason 1 (recusada), 2 (expirou), 3 (cancelada), 12 (interrompida)reason 5, 6, 7, 13sem entrega; concilie. Tabela completa em Acompanhar e cancelar

O papel do concentrador

O concentrador é o equipamento da ConectTec que liga a ConectTec às bombas do posto. Reserva, autorização e cancelamento passam por ele, e você não fala com ele diretamente. Se o posto perde a conexão no meio do abastecimento, o concentrador guarda a entrega e a envia quando a conexão volta. O campo stationStatus do mapa de pista indica se o concentrador do posto está conectado; a disponibilidade do ponto de abastecimento vem na resposta da reserva.

Exemplo: ler o ponto de abastecimento 3 do posto 4021

Mapa de pista do posto 4021 filtrado no ponto de abastecimento 3. O parâmetro fuelpointNumber é opcional; sem ele a resposta traz todos os pontos de abastecimento.

GET/V6/ForecourtMap/ById/{stationId}SecretKeyAuthorization
GET /V6/ForecourtMap/ById/4021?fuelpointNumber=3
SecretKeyAuthorization: <SUA_CHAVE>
{
  "station": {
    "crtlVersion": "1.0.0.0",
    "version": "1.0",
    "canInvoice": false,
    "canReceipt": false,
    "name": "Posto Exemplo",
    "shortName": "Exemplo",
    "cnpj": "11222333000181",
    "street": "Avenida das Bombas",
    "number": 1200,
    "city": "São Paulo",
    "state": "SP",
    "postalCode": "01000000",
    "latitude": -23.55052,
    "longitude": -46.633308,
    "brand": "Exemplo",
    "stationStatus": true,
    "fuelPoints": [
      {
        "preset": true,
        "block": true,
        "configPrice": true,
        "card": false,
        "tag": false,
        "term": false,
        "fuelPointNumber": 3,
        "qrcode": "0004217",
        "hoses": [
          {
            "hoseNumber": 1,
            "fuel": {
              "name": "Gasolina Comum",
              "imagePath": null,
              "fuelType": 5,
              "fuelTypeDescription": "gasolina"
            },
            "price": 6.29,
            "price2": 6.19,
            "price3": 0,
            "price4": 0,
            "updateDate": "2026-11-03T08:10:41"
          },
          {
            "hoseNumber": 2,
            "fuel": {
              "name": "Etanol",
              "imagePath": null,
              "fuelType": 1,
              "fuelTypeDescription": "etanol"
            },
            "price": 4.39,
            "price2": 4.29,
            "price3": 0,
            "price4": 0,
            "updateDate": "2026-11-03T08:10:41"
          }
        ]
      }
    ]
  }
}
  • price a price4 são os níveis 1 a 4; aqui só os níveis 1 e 2 existem. O mapa traz o último preço registrado pela ConectTec. O preço de tabela que vale para autorizar chega no callback de status da reserva (reason 0); se o bico vier como [0], autorize sem desconto, no preço de tabela. O preço aplicado é o price da entrega.
  • configPrice: o ponto de abastecimento aceita preço diferente do de tabela (Troca de preço e desconto). preset: aceita limite de valor ou de volume na autorização.
  • Ordene fuelPoints por fuelPointNumber e hoses por hoseNumber.
  • stationStatus false indica concentrador desconectado.

Erros do mapa de pista

Decida pelo status HTTP.

HTTPQuando aconteceO que fazer
400stationId igual a 0 ou que não é um inteiro.Use o número que a ConectTec informou.
401Chave ausente ou inválida; posto não vinculado ao seu cadastro; rota não liberada para você.Confira a chave e o stationId. Se ambos estão certos, peça à ConectTec que confirme o vínculo do posto e a liberação da rota.
500Posto sem nenhum ponto de abastecimento cadastrado, ou fuelpointNumber que não existe no posto.Trate como mapa vazio. Se o posto deveria ter o ponto de abastecimento, avise a ConectTec.
500Erro ao processar.Repita uma vez; persistindo, acione o suporte com o stationId e o horário.

Regras de todas as chamadas: Visão geral. Estados do ponto de abastecimento e da reserva: Máquinas de estado.

Credenciais e ambiente

O que a ConectTec entrega no cadastro, o que você precisa enviar, como autenticar cada chamada e quais regras valem para todos os endpoints.

O que você recebe e o que você envia no cadastro

O cadastro é feito pela ConectTec. Depois dele, você recebe o que a tabela abaixo lista.

Você recebePara que serve
Chave de APIVai no cabeçalho SecretKeyAuthorization de toda chamada. Identifica você. Existe uma chave por cadastro.
providerIdGUID de 36 caracteres que identifica o seu cadastro. Vai no corpo da reserva e é o dono de toda reserva e autorização que você cria.
Postos liberados, com o stationId de cada umO stationId é o número do posto como a ConectTec informa a você, o mesmo em toda rota e em todo callback. A lista dos seus postos vem no cadastro.
Nível de preço do postoQual nível de preço (1 a 4) o posto aplica ao seu cadastro e à sua forma de pagamento. Veja Troca de preço e desconto.
Rotas liberadasA lista de rotas que a sua chave pode chamar (veja Rotas). Cada rota é liberada separadamente.
Base de callback registradaA URL para a qual a ConectTec envia os callbacks.

Você envia à ConectTec:

Você enviaRegras
Base de callback URL HTTPS pública, com certificado emitido por autoridade conhecida (certificado autoassinado não é aceito). Inclua um segmento secreto no caminho e não termine com barra. Exemplo: https://integracao.suaempresa.com.br/conecttec/8f3k2m9q. A ConectTec acrescenta o caminho de cada callback ao final, e uma barra a mais produz // no caminho.

Com a base do exemplo, a ConectTec chama estes dois endereços no seu servidor:

  • POST https://integracao.suaempresa.com.br/conecttec/8f3k2m9q/V3/FuelPoint/Status (veja Acompanhar e cancelar)
  • POST https://integracao.suaempresa.com.br/conecttec/8f3k2m9q/FuelPoint/Delivery (veja Receber a entrega)

Autenticação do callback

Autentique o callback pelo segmento secreto na base de callback, HTTPS e a conferência do reserveId ou do authId contra as suas operações, não por IP de origem; responda 200 mesmo ao descartar o que não reconhecer. Cada callback é enviado uma vez, no momento do evento. Veja Contrato dos callbacks.

Ambiente único e homologação no posto de testes

Existe um único ambiente, o de produção, em https://api.conecttec.com.br. Não há sandbox separado. A sua homologação acontece nesse mesmo endereço, com a chave restrita a um posto de testes: a ConectTec informa o stationId dele no cadastro.

  1. Cadastro. Você recebe a chave, o providerId e o stationId do posto de testes.
  2. Homologação. Você implementa e valida o fluxo completo somente nesse posto. Siga o roteiro de Homologação e entrada em produção.
  3. Aprovação. A ConectTec revisa o resultado.
  4. Produção. Depois da aprovação, a ConectTec vincula os postos reais ao seu cadastro e informa os stationId de cada um.

A chave só alcança os postos vinculados ao seu cadastro, antes e depois da homologação. Qualquer outro posto responde 401 no mapa de pista e na consulta por QR code, e 404 na reserva.

O posto de testes é real

As chamadas chegam a um concentrador de verdade: a reserva ocupa o ponto de abastecimento e a autorização libera a bomba. Antes de repetir um POST, confira o estado da operação anterior.

Autenticar uma chamada

Toda chamada leva o cabeçalho SecretKeyAuthorization com a chave de API crua, exatamente como a ConectTec entregou: sem Bearer, aspas ou espaços, com a caixa original. A API lê só o cabeçalho SecretKeyAuthorization. A API é só de servidor para servidor.

GET/V6/ForecourtMap/ById/4021SecretKeyAuthorization

Esta consulta serve de teste de credencial: com chave correta, rota liberada e posto vinculado, a resposta é 200. Outras respostas: 400 se stationId não for inteiro válido; 500 se o posto não tem pontos de abastecimento cadastrados ou se o cadastro do posto está incompleto. Detalhes em Erros do mapa de pista.

Ver a resposta 200 de exemplo
{
  "station": {
    "crtlVersion": "1.0.0.0",
    "version": "1.0",
    "canInvoice": false,
    "canReceipt": false,
    "name": "Posto Exemplo",
    "shortName": "Exemplo",
    "cnpj": "11222333000181",
    "street": "Avenida das Bombas",
    "number": 1200,
    "city": "São Paulo",
    "state": "SP",
    "postalCode": "01000000",
    "latitude": -23.55052,
    "longitude": -46.633308,
    "brand": "Exemplo",
    "stationStatus": true,
    "fuelPoints": [
      {
        "preset": true,
        "block": true,
        "configPrice": true,
        "card": false,
        "tag": false,
        "term": false,
        "fuelPointNumber": 3,
        "qrcode": "0004217",
        "hoses": [
          {
            "hoseNumber": 1,
            "fuel": { "name": "Gasolina Comum", "imagePath": null, "fuelType": 5, "fuelTypeDescription": "gasolina" },
            "price": 6.29,
            "price2": 6.19,
            "price3": 0,
            "price4": 0,
            "updateDate": "2026-11-03T08:10:41"
          },
          {
            "hoseNumber": 2,
            "fuel": { "name": "Etanol", "imagePath": null, "fuelType": 1, "fuelTypeDescription": "etanol" },
            "price": 4.39,
            "price2": 4.29,
            "price3": 0,
            "price4": 0,
            "updateDate": "2026-11-03T08:10:41"
          }
        ]
      }
    ]
  }
}

Os campos, os níveis de preço e o significado de cada valor estão em Descobrir posto e ponto de abastecimento.

Entender o 401

A API usa 401 para toda negativa de acesso. Decida pelo status.

HTTPQuando aconteceO que fazer
401O cabeçalho SecretKeyAuthorization não foi enviado ou está vazio.Envie o cabeçalho; confira se um proxy não o remove.
401A chave está errada: espaço ou quebra de linha sobrando, prefixo Bearer, caractere trocado na cópia.Reenvie a chave crua, sem espaços nas pontas. Se persistir, peça à ConectTec para conferir a chave.
401A chave é válida, mas a rota que você chamou não está liberada para o seu cadastro.Confira a tabela de Rotas ou peça a liberação à ConectTec.
401O posto não está vinculado ao seu cadastro, ou o stationId não é o número que a ConectTec informou a você. No mapa de pista: 401. Na reserva (POST /V4/Delivery/Reserve): 404.Confira o stationId contra a lista do cadastro. Em homologação, só o posto de testes responde.
401O providerId da reserva não é o do seu cadastro, o reserveId é de outro cadastro, ou o authId não existe ou é de outro cadastro. Um reserveId que não existe volta como 500, na linha abaixo.Use identificadores devolvidos às suas chamadas e o providerId do seu cadastro.
500Identificador malformado: reserveId ou providerId que não é um GUID, ou reserveId que não existe.Confira o formato (GUID de 36 caracteres) e se o reserveId é de uma reserva sua.

Convenções de dados

TemaRegra
FormatoJSON em UTF-8, com Content-Type: application/json nas requisições com corpo.
Caixa dos camposRespostas e callbacks usam camelCase (stationId, fuelPointNumber). O callback de entrega tem três exceções, que você deve ler exatamente assim: ETotStart, ETotEnd e pricewithoutdiscount (veja Receber a entrega). Nomes de campo das requisições e rotas na URL não diferenciam caixa; os exemplos do guia usam a grafia recomendada.
Campos desconhecidosA ConectTec pode acrescentar campos a respostas e callbacks.
EnumeraçõesEnumerações numéricas: fuelType (0 a 16), reason, transactionStatus e demais. Exceção: limitType, que é o texto "$" (valor) ou "V" (volume). Descrições em texto, como fuelTypeDescription, são informativas.
Datas: callback de entregaISO 8601 com a hora local do posto e deslocamento fixo, como 2026-11-03T14:22:05-03:00.
Datas: consulta de conciliaçãodateTime vem sem deslocamento, como 2026-11-03T14:22:05: é a hora local do posto, sem fuso, e não UTC.
Datas: mapa de pistaupdateDate também vem sem deslocamento e serve só para comparar com o valor anterior; não o converta nem o use como horário do posto.
Datas que você enviaISO 8601 com deslocamento (-03:00 ou Z).
DecimaisPonto como separador, sem separador de milhar, como número JSON e não como texto: 6.29. Preço por litro tem até 3 casas decimais.
GUIDsreserveId e authId são GUIDs de 36 caracteres, com hífens e minúsculas: b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f. Compare exatamente como recebidos.
InteirosstationId e fuelPointNumber. hoseNumber é inteiro no mapa de pista, na reserva e na entrega, e lista de inteiros na autorização por bico e no callback de status.
Tempo de resposta e nova tentativaReserva e autorização aguardam o encaminhamento ao posto antes de responder. Após timeout, 502, 503 ou 504, aguarde o callback ou o fim da janela do 406 (reserveTimeOut + 120 s) antes de repetir o POST. Um 500 com resposta recebida significa que nada foi criado, e você pode tentar uma vez. Para recuperar entregas, veja Conciliar e recuperar.

Rotas

Cada rota é liberada separadamente. Base https://api.conecttec.com.br, cabeçalho SecretKeyAuthorization. Os dois callbacks marcados como recebidos são chamadas da ConectTec à sua base de callback, sem credencial.

RotaPara que serveSeção
GET /V6/ForecourtMap/ById/{stationId}Mapa de pista: pontos de abastecimento, bicos, combustíveis, preços de tabela e QR code de cada ponto de abastecimento.Descobrir posto e ponto de abastecimento
GET /QRCodeInformation/{codigo}Resolve o QR code impresso no ponto de abastecimento em stationId e fuelPointNumber.Descobrir posto e ponto de abastecimento
POST /V4/Delivery/ReserveReserva o ponto de abastecimento para o seu cliente. O 201 só confirma o recebimento; o resultado vem por callback.Reservar o ponto de abastecimento
POST /V2/Delivery/AuthorizeByFuelTypeAutoriza o abastecimento escolhendo o combustível (forma padrão). Aceita preço alterado.Autorizar o abastecimento e Troca de preço e desconto
POST /V2/Delivery/AuthorizeAutoriza escolhendo o bico, quando você precisa dessa precisão.Autorizar o abastecimento
POST /Delivery/StopCancela uma reserva ou interrompe uma autorização em andamento. O resultado chega por callback.Acompanhar e cancelar
POST /V3/Delivery/TransactionStatusInforma o estado do pagamento do abastecimento.Informar o pagamento
GET /Delivery/ByAuthIdConsulta uma entrega pelo authId da sua autorização.Conciliar e recuperar
POST {base}/V3/FuelPoint/Status recebidoCallback de status do ponto de abastecimento, enviado pela ConectTec ao seu servidor.Acompanhar e cancelar
POST {base}/FuelPoint/Delivery recebidoCallback de abastecimento concluído, o registro final com volume, preço e total.Receber a entrega

Erros e campos de cada rota estão na seção indicada. Visão consolidada em Erros e diagnóstico e Enumerações e limites.

Pontos de atenção

Chave exposta ou troca de chave

A troca da chave e a alteração da base de callback são feitas pela ConectTec, pelo contato do cadastro. Em caso de vazamento, avise-a na hora e combine o momento da troca. Informe também o volume esperado (abastecimentos por dia e pico) no cadastro.

Passo 1 de 6

Descobrir posto e ponto de abastecimento

Antes de reservar, você precisa saber qual stationId e qual fuelPointNumber o cliente está olhando. O QR code do ponto de abastecimento (o visor da bomba) entrega os dois. O mapa de pista descreve o posto inteiro: pontos de abastecimento, bicos, combustíveis e preços de tabela.

Qual rota usar

SituaçãoRotaDevolve
O cliente leu o QR code de um ponto de abastecimentoGET /QRCodeInformation/{codigo}O stationId e o fuelPointNumber do ponto de abastecimento. Só isso.
Você quer listar pontos de abastecimento, bicos, combustíveis e preços de um posto, ou conferir se o concentrador está onlineGET /V6/ForecourtMap/ById/{stationId}O mapa de pista do posto, com todos os pontos de abastecimento (ou um só, com o filtro fuelpointNumber).

O QR resolve o ponto de abastecimento; o mapa mostra os combustíveis dele. Para só reservar, o mapa é dispensável: a reserva devolve os bicos do ponto de abastecimento.

A lista de stationId autorizados vem do cadastro (veja Credenciais e ambiente).

O que é o stationId

stationId é o número do posto como a ConectTec informa a você, um inteiro. É o mesmo valor em todas as rotas e callbacks. Posto não vinculado ao seu cadastro responde 401. Termos em Conceitos.

Consultar um QR code

GET/QRCodeInformation/{codigo}SecretKeyAuthorization

Cada ponto de abastecimento tem um QR code impresso. Esta rota traduz o código em posto e ponto de abastecimento.

Formato do código

O código tem sempre 7 dígitos numéricos, com zeros à esquerda (0004217). Os zeros fazem parte do código; sem eles a consulta responde 400. Um código identifica o ponto de abastecimento, não o bico.

O conteúdo impresso no QR pode trazer mais que os 7 dígitos. O conteúdo do QR do seu cadastro é combinado com a ConectTec; envie à rota só os 7 caracteres do código (^[0-9]{7}$). Letras voltam como 500; tamanho errado volta como 400.

Requisição

CampoOndeTipoObrigatórioDescrição
SecretKeyAuthorizationcabeçalhotextosimSua chave de API, valor cru, sem Bearer.
codigocaminhotexto, 7 caracteressimO código do QR, com zeros à esquerda.

Resposta

CampoTipoSempre presenteDescrição
stationIdinteirosimO posto do ponto de abastecimento, no mesmo identificador que você usa em todas as rotas.
fuelPointNumberinteirosimO número do ponto de abastecimento. É o valor de fuelPointNumber na reserva.
{
  "fuelPointNumber": 3,
  "stationId": 4021
}

Erros do QR code

HTTPQuando aconteceO que fazer
400O código não tem exatamente 7 caracteres.Mantenha os zeros à esquerda.
401Chave ausente ou inválida; código inexistente ou inválido; QR de um posto que não está vinculado ao seu cadastro; rota não liberada para o seu cadastro.Se persistir em vários códigos válidos, confira chave e liberação da rota com a ConectTec.
500O código tem letras, ou o cadastro do ponto de abastecimento está incompleto.Se o código for numérico e válido, avise a ConectTec com o código e o horário.

QR inexistente responde 401.

Consultar o mapa de pista

GET/V6/ForecourtMap/ById/{stationId}SecretKeyAuthorization

Devolve o cadastro do posto: dados do posto, pontos de abastecimento, bicos, combustíveis e preços. O estado do ponto de abastecimento não vem aqui: chega pelos callbacks de status.

Requisição

CampoOndeTipoObrigatórioDescrição
SecretKeyAuthorizationcabeçalhotextosimSua chave de API.
stationIdcaminhointeirosimO posto. Zero ou valor não numérico responde 400.
fuelpointNumberqueryinteironãoFiltra por um ponto de abastecimento. Omitido (ou 0) devolve todos os pontos de abastecimento do posto.

Resposta

{
  "station": {
    "crtlVersion": "1.0.0.0",
    "version": "1.0",
    "canInvoice": false,
    "canReceipt": false,
    "name": "Posto Exemplo",
    "shortName": "Exemplo",
    "cnpj": "11222333000181",
    "street": "Avenida das Bombas",
    "number": 1200,
    "city": "São Paulo",
    "state": "SP",
    "postalCode": "01000000",
    "latitude": -23.55052,
    "longitude": -46.633308,
    "brand": "Exemplo",
    "stationStatus": true,
    "fuelPoints": [
      {
        "preset": true,
        "block": true,
        "configPrice": true,
        "card": false,
        "tag": false,
        "term": false,
        "fuelPointNumber": 3,
        "qrcode": "0004217",
        "hoses": [
          {
            "hoseNumber": 1,
            "fuel": {
              "name": "Gasolina Comum",
              "imagePath": null,
              "fuelType": 5,
              "fuelTypeDescription": "gasolina"
            },
            "price": 6.29,
            "price2": 6.19,
            "price3": 0,
            "price4": 0,
            "updateDate": "2026-11-03T08:10:41"
          },
          {
            "hoseNumber": 2,
            "fuel": {
              "name": "Etanol",
              "imagePath": null,
              "fuelType": 1,
              "fuelTypeDescription": "etanol"
            },
            "price": 4.39,
            "price2": 4.29,
            "price3": 0,
            "price4": 0,
            "updateDate": "2026-11-03T08:10:41"
          }
        ]
      },
      {
        "preset": true,
        "block": true,
        "configPrice": true,
        "card": false,
        "tag": false,
        "term": false,
        "fuelPointNumber": 4,
        "qrcode": "0004225",
        "hoses": [
          {
            "hoseNumber": 1,
            "fuel": {
              "name": "Gasolina Comum",
              "imagePath": null,
              "fuelType": 5,
              "fuelTypeDescription": "gasolina"
            },
            "price": 6.29,
            "price2": 6.19,
            "price3": 0,
            "price4": 0,
            "updateDate": "2026-11-03T08:10:41"
          },
          {
            "hoseNumber": 2,
            "fuel": {
              "name": "Etanol",
              "imagePath": null,
              "fuelType": 1,
              "fuelTypeDescription": "etanol"
            },
            "price": 4.39,
            "price2": 4.29,
            "price3": 0,
            "price4": 0,
            "updateDate": "2026-11-03T08:10:41"
          }
        ]
      }
    ]
  }
}

As datas vêm sem fuso (2026-11-03T08:10:41); use só para comparar com outra leitura do mesmo campo.

Campos do mapa de pista

Todos os campos estão presentes em toda resposta. Cadastro incompleto: texto vem null ou vazio; número do endereço, latitude e longitude vêm 0.

Objeto station

CampoTipoSempre presenteDescrição
name, shortNametexto ou nullsimNome e nome curto do posto, como cadastrados.
cnpjtexto ou nullsimCNPJ do posto. O identificador é o stationId.
street, number, city, state, postalCodetexto ou null; number é inteirosimEndereço. number é o número do endereço, não o do posto; vem 0 se vazio.
latitude, longitudedecimalsimCoordenadas. O par 0, 0 significa "sem coordenada cadastrada".
brandtextosimBandeira. Texto vazio quando o posto não tem bandeira cadastrada.
stationStatusbooleanosimtrue quando o concentrador do posto está online. Ver stationStatus.
crtlVersion, versiontextosimVersões do software do concentrador. Informativos.
canInvoice, canReceiptbooleanosimCapacidade do posto de emitir nota e recibo. Fora deste fluxo.
fuelPointslista de pontos de abastecimentosimLista todos os pontos de abastecimento cadastrados. Ordene por fuelPointNumber.

Objeto fuelPoints[] (ponto de abastecimento)

CampoTipoSempre presenteDescrição
fuelPointNumberinteirosimNúmero do ponto de abastecimento. É o valor de fuelPointNumber em reserva, autorização e callbacks.
qrcodetexto, 7 caracteressimCódigo do QR impresso neste ponto de abastecimento, com zeros à esquerda. É o mesmo valor aceito por /QRCodeInformation.
presetbooleanosimO ponto de abastecimento aceita limite de valor ou de volume na autorização.
blockbooleanosimO ponto de abastecimento declara suporte a bloquear ou parar o abastecimento. O resultado de Stop é o que vale.
configPricebooleanosimO ponto de abastecimento aceita preço diferente do de tabela na autorização. É o sinal de que a troca de preço funciona neste ponto de abastecimento. Com false, a bomba pode não aplicar o preço enviado.
card, tag, termbooleanosimO ponto de abastecimento tem leitor de cartão, antena de tag e terminal associado. Informativos, fora deste fluxo.
hoseslista de bicossimBicos do ponto de abastecimento.

Objeto hoses[] (bico)

CampoTipoSempre presenteDescrição
hoseNumberinteirosimNúmero do bico no ponto de abastecimento, o mesmo da autorização por bico e dos callbacks. Ordene por hoseNumber.
fuel.fuelTypeinteiro, 0 a 16simTipo do combustível, tabela abaixo. É a chave para casar descontos; fuel.name varia entre postos.
fuel.fuelTypeDescriptiontextosimDescrição curta do tipo (gasolina, etanol). Texto vazio se fuelType estiver fora de 0 a 16.
fuel.nametexto ou nullsimNome comercial, texto livre do cadastro do posto. Para exibir ao cliente.
fuel.imagePathtexto ou nullsimEndereço de uma imagem do combustível, quando cadastrada.
pricedecimal, R$ por litrosimPreço de tabela do nível 1.
price2, price3, price4decimal, R$ por litrosimPreços dos níveis 2 a 4. 0 significa que o nível não existe neste bico. O que cada nível representa (por exemplo, forma de pagamento) é decisão do posto.
updateDatedata e hora, sem fusosimData do último registro do preço. Não é a hora em que a bomba mudou de preço.
Tabela de fuelType (0 a 16)
fuelTypeCombustívelfuelTypeDescription
0Outraoutra
1Etanoletanol
2Etanol aditivadoetanolAditivada
3Etanol premiumetanolPremium
4Etanol premium aditivadoetanolPremiumAditivada
5Gasolinagasolina
6Gasolina aditivadagasolinaAditivada
7Gasolina premiumgasolinaPremium
8Gasolina premium aditivadagasolinaPremiumAditivada
9Diesel S10dieselS10
10Diesel S50dieselS50
11Diesel S500dieselS500
12Diesel S1200dieselS1200
13Diesel marítimodieselMaritimo
14Querosenequerosene
15GNVgnv
16Arlaarla

Valor fora de 0 a 16 é desconhecido; use fuel.name.

stationStatus: o concentrador está online?

stationStatus vale true quando o concentrador do posto mantém conexão com a ConectTec. Indica se o concentrador do posto está conectado; a disponibilidade do ponto de abastecimento vem na resposta da reserva.

Preço do mapa e preço da reserva

O preço do mapa é o último registrado, não o da bomba: serve de referência para exibição ("a partir de R$ 6,29") e não para calcular desconto. Pode diferir do preço de tabela da reserva.

O preço que vale para a reserva chega no callback de status de confirmação (reason 0), com os preços por nível de cada bico. É esse que você usa para calcular descontos e enviar na autorização. Se a confirmação vier com hoseNumber [0], autorize sem desconto, no preço de tabela. O preço aplicado é o price da entrega, e o de tabela vem em pricewithoutdiscount.

Erros do mapa de pista

HTTPQuando aconteceO que fazer
500O posto existe no seu vínculo, mas não tem nenhum ponto de abastecimento cadastrado, ou o filtro fuelpointNumber não corresponde a nenhum ponto de abastecimento.Avise a ConectTec se o posto deveria ter pontos de abastecimento.
400stationId igual a 0, não numérico ou fora do intervalo de inteiro de 32 bits.Use o stationId do cadastro, inteiro maior que zero.
401Chave ausente ou inválida; posto não vinculado ao seu cadastro; rota não liberada para o seu cadastro.Confira o stationId contra a lista do cadastro e a liberação da rota V6/ForecourtMap/ById.
500Erro ao processar a consulta deste posto.Repita uma vez após alguns segundos. Se persistir, acione o suporte da ConectTec com o stationId e o horário.

Tabela geral em Erros e diagnóstico.

O QR só muda de ponto de abastecimento se a ConectTec o reassociar; estrutura do posto muda raramente; stationStatus muda quando o posto cai ou volta.

Passo 2 de 6

Reservar o ponto de abastecimento

Segure um ponto de abastecimento para o seu cliente por alguns segundos, antes de autorizar o abastecimento. O 201 da chamada confirma o recebimento; a confirmação da reserva chega no callback de status.

Para que serve e quando chamar

A reserva trava o ponto de abastecimento (o visor da bomba) para você e devolve o reserveId, usado em todo o resto do fluxo. O callback de confirmação traz os preços de tabela do ponto de abastecimento, que você precisa para autorizar e trocar o preço. Chame quando o cliente já escolheu o posto e o ponto de abastecimento (Descobrir posto e ponto de abastecimento). O ponto de abastecimento fica preso para você até a reserva fechar.

Requisição

POST/V4/Delivery/ReserveSecretKeyAuthorization assíncrono

Cada chamada aceita cria uma reserva nova, com outro reserveId.

CampoTipoObrigatórioDescrição
stationIdinteirosimID do posto como a ConectTec informou a você no cadastro. É o mesmo valor que volta nos callbacks.
fuelPointNumberinteirosimNúmero do ponto de abastecimento (o visor da bomba), não o do bico. Você o obtém no mapa de pista ou no QR code.
providerIdstring (GUID)simSeu identificador de provedor. Tem que ser o dono da chave de API usada na chamada, senão a resposta é 401.
reserveTimeOutinteirosimQuanto tempo, em segundos, a reserva vale se ninguém autorizar. Aceita de 1 a 120; fora disso, 400.
POST /V4/Delivery/Reserve
SecretKeyAuthorization: <SUA_CHAVE>
Content-Type: application/json

{
  "stationId": 4021,
  "fuelPointNumber": 3,
  "providerId": "<SEU_PROVIDER_ID>",
  "reserveTimeOut": 60
}

Resposta 201

A resposta descreve o ponto de abastecimento e entrega o reserveId. Ela não traz preço: o preço de tabela vem no callback de confirmação.

O 201 confirma o recebimento do pedido

A reserva do ponto de abastecimento é confirmada pelo callback com reason 0. Autorizar antes do callback com reason 0 responde 400.

CampoTipoSempre presenteDescrição
reserveIdstring (GUID, 36 caracteres)simIdentificador da reserva. Volta em todos os callbacks dela.
providerIdstringsimEco do providerId enviado.
canInovicebooleanosimIndica se o posto está habilitado para nota fiscal. O campo se chama canInovice, não canInvoice.
canReceiptbooleanosimIndica se o posto está habilitado para recibo.
fuelPoint.fuelPointNumberinteirosimNúmero do ponto de abastecimento reservado.
fuelPoint.presetbooleanosimO ponto de abastecimento aceita abastecimento com limite pré-definido (valor ou volume). Veja Autorizar o abastecimento.
fuelPoint.blockbooleanosimO ponto de abastecimento suporta bloqueio.
fuelPoint.configPricebooleanosimO ponto de abastecimento aceita o preço enviado na autorização. Se for false, o preço aplicado é o price da entrega. Veja Troca de preço e desconto.
fuelPoint.cardbooleanosimO ponto de abastecimento tem leitor de cartão cadastrado.
fuelPoint.tagbooleanosimO ponto de abastecimento tem leitor de tag cadastrado.
fuelPoint.termbooleanosimO ponto de abastecimento tem terminal cadastrado.
fuelPoint.hoses[]listasimTodos os bicos cadastrados no ponto de abastecimento. Ordene por hoseNumber.
fuelPoint.hoses[].hoseNumberinteirosimNúmero do bico. É o valor que aparece em hoseNumber[] nos callbacks e que você envia na autorização por bico.
fuelPoint.hoses[].fuel.namestringsimNome do combustível para exibição.
fuelPoint.hoses[].fuel.imagePathstring ou nullsimCaminho de uma imagem do combustível.
fuelPoint.hoses[].fuel.fuelTypeinteirosimTipo do combustível, de 0 a 16. Tabela completa em Descobrir posto e ponto de abastecimento.
fuelPoint.hoses[].fuel.fuelTypeDescriptionstringsimDescrição curta do tipo, por exemplo gasolina ou etanolAditivada.
{
  "reserveId": "b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f",
  "providerId": "7d1e4c2a-5b3f-4e8a-9c6d-2f1a0b9e8d7c",
  "canInovice": false,
  "canReceipt": false,
  "fuelPoint": {
    "preset": true,
    "block": true,
    "configPrice": true,
    "card": false,
    "tag": false,
    "term": false,
    "fuelPointNumber": 3,
    "hoses": [
      {
        "hoseNumber": 1,
        "fuel": { "name": "Gasolina Comum", "imagePath": null, "fuelType": 5, "fuelTypeDescription": "gasolina" }
      },
      {
        "hoseNumber": 2,
        "fuel": { "name": "Etanol", "imagePath": null, "fuelType": 1, "fuelTypeDescription": "etanol" }
      }
    ]
  }
}

O callback de confirmação pode chegar poucos milissegundos depois da resposta.

Confirmação pelo callback de status

A ConectTec envia POST {base de callback}/V3/FuelPoint/Status para o seu servidor quando o concentrador responde à reserva. Responda HTTP 200 em menos de 5 segundos. Cada callback é enviado uma vez, no momento do evento. Envio e autenticação estão em Contrato dos callbacks.

POST{base de callback}/V3/FuelPoint/Statusenviado pela ConectTec recebido

O resultado vem em reserveId e reason:

reasonNomeSignificadoO que fazer
0reserveSuccessfulReserva aceita. fuelPointStatus vem como 1 ou 2; trate os dois do mesmo jeito.Siga para autorizar, com price e hoseNumber do callback.
1reserveFailedO concentrador recusou a reserva, por exemplo porque o ponto de abastecimento está ocupado por outro meio de pagamento ou por uma pessoa na pista.Encerre a tentativa.
2reserveTimedOutO prazo de reserveTimeOut passou sem autorização.Reserve de novo para continuar.
3reserveCancelledA reserva foi cancelada, em geral depois de um Stop seu.Reserva encerrada.
12reserveInterruptedA reserva foi interrompida por um evento no posto.Reserva encerrada.

Outro reason fora desta tabela é reservado: responda 200 e ignore. Os demais valores de reason (autorização, abastecimento) estão em Máquinas de estado.

Exemplo do callback de reserva aceita, para o ponto de abastecimento 3 com gasolina no bico 1 e etanol no bico 2:

{
  "stationId": 4021,
  "fuelPointNumber": 3,
  "hoseNumber": [1, 2],
  "reserveId": "b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f",
  "authId": null,
  "fuelPointStatus": 1,
  "reason": 0,
  "volume": 0.0,
  "total": 0.0,
  "price": [[6.29, 4.39], [6.19, 4.29]]
}

O corpo completo, com os objetos fuel, tank, attendant e customer, está em Contrato dos callbacks. Na reserva, attendant e customer vêm vazios ou com valores neutros. fuel só vem preenchido quando hoseNumber tem um único bico; com mais de um, fuel.fuelType é 0 e fuel.name é null.

Como ler a matriz de preço

price é uma matriz price[nível][posição]. Cada linha é um nível de preço (a linha 0 é o nível 1, a linha 1 é o nível 2, até 4 níveis). A coluna i é o bico hoseNumber[i], não o número do bico nem a ordem de fuelPoint.hoses da resposta 201. No exemplo, hoseNumber é [1, 2]: coluna 0 é o bico 1, coluna 1 é o bico 2.

BicoPosição em hoseNumberNível 1Nível 2
1 (gasolina)0price[0][0] = 6,29price[1][0] = 6,19
2 (etanol)1price[0][1] = 4,39price[1][1] = 4,29

Se hoseNumber vier como [0] ou não listar o bico, não há preço por posição: autorize sem desconto, no preço de tabela, e cobre pelo price da entrega. O preço de tabela para autorizar é o da reserva, não o do mapa de pista; ele chega neste callback (Troca de preço e desconto).

Se a confirmação não chegar

A confirmação depende da resposta do concentrador do posto. Espere até 15 segundos a partir do 201, ou até reserveTimeOut se ele for menor. Sem callback, trate a reserva como não confirmada e envie POST /Delivery/Stop com o reserveId (Cancelar), para que uma confirmação atrasada não a reabra. Ignore um reason 0 que chegue depois de 1, 2, 3 ou 12, ou depois de você desistir: um estado final não volta atrás. Repetir o POST /V4/Delivery/Reserve no mesmo ponto de abastecimento nesse intervalo responde 406.

Erros

Decida pelo código HTTP; o corpo do erro não faz parte do contrato.

HTTPQuando aconteceO que fazer
400Campo ausente, tipo errado (por exemplo stationId como texto), JSON inválido, corpo vazio ou reserveTimeOut fora de 1 a 120.Corrija a requisição.
401Cabeçalho SecretKeyAuthorization ausente ou com chave inválida. O 401 cobre também providerId que não pertence à chave usada e rota /V4/Delivery/Reserve não liberada para o seu cadastro.Confira a chave e o providerId. Se estiverem certos, peça à ConectTec a liberação da rota de reserva.
404O posto não está vinculado ao seu cadastro, o stationId está errado ou o fuelPointNumber não existe no posto. Na homologação, só o posto de testes responde (Homologação e entrada em produção).Confira os dois contra o mapa de pista (Descobrir posto e ponto de abastecimento). Se estiverem certos, o vínculo precisa ser ajustado pela ConectTec.
406O ponto de abastecimento ainda tem uma reserva aberta sua. A reserva só fecha quando o abastecimento é gravado, quando chega um callback de encerramento (reason 1, 2, 3, 5, 6, 7, 8, 12 ou 13) ou quando passa reserveTimeOut + 120 segundos desde a criação. Com reserveTimeOut 120, o pior caso é 240 segundos. A janela vale por integrador: ponto de abastecimento ocupado por outro meio ou por uma pessoa na pista não gera 406.Espere, ou retome a reserva aberta se for do mesmo cliente e você tiver o reserveId. Um reserveTimeOut menor encurta a espera.
500Erro ao processar o pedido. Nenhuma reserva utilizável é criada.Confira o formato do providerId e repita uma vez; se persistir, acione o suporte com stationId, fuelPointNumber e providerId. Antes de repetir após timeout, 502, 503 ou 504, confira o estado da operação anterior: aguarde o callback ou a janela do 406 (reserveTimeOut + 120 s).

Com o posto fora do ar, o prazo de Se a confirmação não chegar encerra a tentativa. Formato geral de erros: Erros e diagnóstico.

Quando a reserva expira

Sem autorização em reserveTimeOut segundos, a ConectTec libera o ponto de abastecimento e envia o callback com reason 2 (reserveTimedOut) e o mesmo reserveId. Depois dele, Authorize responde 400. Ao processar o reason 2 você já pode reservar de novo no mesmo ponto de abastecimento, sem esperar reserveTimeOut + 120 s.

Cancelar antes de autorizar

A reserva se cancela com POST /Delivery/Stop e o reserveId (rota descrita em Acompanhar e cancelar).

POST /Delivery/Stop
SecretKeyAuthorization: <SUA_CHAVE>
Content-Type: application/json

{ "reserveId": "b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f" }

O 201 traz um cancelId e confirma o recebimento. Erros da rota: Erros do Stop. O fim da reserva chega com reason 3 (reserveCancelled) ou 8 (stopSuccessful): aceite os dois como cancelamento concluído. Com reason 9 ou 14 o cancelamento não se completou e a reserva ainda expira no prazo de reserveTimeOut. Uma reserva com Stop não aceita autorização (500, ou 400 depois que o callback de encerramento chega); faça uma nova.

Passo 3 de 6

Autorizar o abastecimento

Libere a bomba para o cliente abastecer, com o limite e o preço que você escolheu. O 201 da chamada confirma o recebimento: o resultado chega no callback de status.

Para que serve e quando chamar

A autorização diz ao concentrador do posto qual combustível liberar no ponto de abastecimento reservado, até que limite e a que preço por litro. Ela devolve o authId, que identifica este abastecimento nos callbacks, no informe de pagamento e na consulta da entrega.

Há duas rotas, com os mesmos campos de limite e preço: POST /V2/Delivery/AuthorizeByFuelType aponta o tipo de combustível (padrão) e POST /V2/Delivery/Authorize aponta o número do bico.

Pré-condição: reserva confirmada e ainda não autorizada

Só depois do callback com reason 0 para o reserveId (Confirmação pelo callback de status). Cada reserva aceita uma única autorização. Antes do reason 0, depois de a reserva expirar (reason 2) ou depois de um Stop, a chamada é recusada.

Garanta o valor do cliente antes de chamar (pré-autorização, saldo ou pagamento) e use-o como limitValue com limitType "$". Ajuste a cobrança final pelo total da entrega. Se a autorização falhar ou expirar (reason 5, 6 ou 13), desfaça a garantia. Passado o reserveTimeOut a reserva expira e é preciso reservar de novo. Cada rota é liberada separadamente pela ConectTec para o seu cadastro (Credenciais e ambiente); sem a liberação, 401.

Qual rota usar

CritérioAuthorizeByFuelType (padrão)Authorize (por bico)
Você aponta o alvo porfuelType: todos os bicos desse combustível no ponto de abastecimento ficam liberados.hoseNumber: só os bicos que você listar ficam liberados.
PreçoUm preço por nível, repetido para todos os bicos do combustível. A matriz tem uma coluna.Um preço por nível e por bico. A matriz tem uma coluna para cada bico de hoseNumber.
Use quandoTodos os bicos do combustível têm o mesmo preço.O cliente escolhe um bico específico, ou bicos do mesmo combustível têm preços diferentes (Autorizar por bico).

Campos comuns às duas rotas

Os nomes de campo não diferenciam maiúsculas de minúsculas. Campos fora das tabelas são ignorados.

CampoTipoObrigatórioDescrição
reserveIdstring (GUID, 36 caracteres)simReserva do seu cadastro, confirmada com reason 0 e ainda sem autorização.
pricematriz de números (number[][])simPreço por litro que a bomba deve cobrar nesta autorização, uma linha por nível. Veja O campo price; o uso para desconto está em Troca de preço e desconto.
limitTypestring de 1 caracterenão"$" limita por valor, em reais; "V" por volume, em litros. Use só "$" ou "V".
limitValuenúmeronãoValor do limite: reais se limitType é "$", litros se é "V". Mínimo 1; zero e negativos dão 400. Mais de duas casas decimais são arredondadas para duas. Sempre junto com limitType (Limite do abastecimento).
updateRateinteirosimIntervalo, em segundos, entre os callbacks de acompanhamento (reason 11). Aceita de 2 a 60; fora disso, 400.
authTimeOutinteirosimQuanto tempo, em segundos, a autorização espera o abastecimento começar. Aceita de 1 a 200; fora disso, 400. Se ninguém abastecer nesse prazo, a autorização expira (Se ninguém abastecer).

Autorizar por tipo de combustível

POST/V2/Delivery/AuthorizeByFuelTypeSecretKeyAuthorization assíncrono

Além dos campos comuns, esta rota tem um campo próprio:

CampoTipoObrigatórioDescrição
fuelTypeinteiro (0 a 16)simMesmo valor de fuel.fuelType na resposta da reserva (tabela em Descobrir posto e ponto de abastecimento). Libera todos os bicos do ponto de abastecimento com esse tipo. No ponto de abastecimento de exemplo, gasolina comum é 5 e etanol é 1. Sem bico desse tipo no ponto de abastecimento, 500. Se omitido, vale 0.

Exemplo: gasolina no ponto de abastecimento 3, limite de R$ 200,00 e desconto de R$ 0,20 por litro nos dois níveis (6,29 e 6,19 viram 6,09 e 5,99).

POST /V2/Delivery/AuthorizeByFuelType
SecretKeyAuthorization: <SUA_CHAVE>
Content-Type: application/json

{
  "reserveId": "b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f",
  "fuelType": 5,
  "limitType": "$",
  "limitValue": 200,
  "price": [[6.09], [5.99]],
  "updateRate": 2,
  "authTimeOut": 120
}

Como o price é lido nesta rota

Uma coluna por linha: uma linha por nível, um preço por linha. No exemplo, nível 1 a 6,09 e nível 2 a 5,99. Envie um preço por linha.

Autorizar por bico

POST/V2/Delivery/AuthorizeSecretKeyAuthorization assíncrono

Em vez de fuelType, esta rota recebe:

CampoTipoObrigatórioDescrição
hoseNumberlista de inteirossimNúmeros dos bicos a liberar, os mesmos de fuelPoint.hoses[].hoseNumber na resposta da reserva. Se a lista for vazia ou nenhum dos bicos existir no ponto de abastecimento, a resposta é 500. Número que o ponto de abastecimento não tem, numa lista com ao menos um bico válido, é ignorado.
POST /V2/Delivery/Authorize
SecretKeyAuthorization: <SUA_CHAVE>
Content-Type: application/json

{
  "reserveId": "b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f",
  "hoseNumber": [1],
  "limitType": "$",
  "limitValue": 200,
  "price": [[6.09], [5.99]],
  "updateRate": 2,
  "authTimeOut": 120
}

Como o price é lido nesta rota

A matriz é price[nível][coluna]. Cada linha é um nível de preço. Com um bico em hoseNumber, cada linha tem uma coluna, como no exemplo acima.

Um bico por autorização

Autorize um bico por chamada, ou envie o mesmo preço em todas as colunas. Para trocar o preço de um bico, autorize só esse bico.

O campo price

price é o preço por litro que a bomba cobra nesta autorização, já com qualquer desconto ou acréscimo. O desconto vai no próprio preço por litro, e o valor vale só para esta autorização. O cálculo do desconto está em Troca de preço e desconto.

  • Obrigatório sempre. Sem troca de preço, mande os preços de tabela do callback da reserva (Como ler a matriz de preço).
  • Todos os níveis, na ordem do callback. A linha 0 é o nível 1, e assim até 4.
  • Sem matriz por posição (hoseNumber [0] na confirmação): autorize sem desconto, no preço de tabela da reserva.
  • Casas decimais. 2 ou 3, conforme a tabela do posto, nunca mais de 3. Arredonde antes de enviar (Troca de preço e desconto).
  • Ponto de abastecimento com configPrice false. A bomba pode cobrar o preço de tabela (resposta da reserva); o preço aplicado vem em price da entrega.
  • Preço aplicado. Vem em price da entrega, e o de tabela em pricewithoutdiscount. Cobre pelo total da entrega.

Limite do abastecimento

Envie limitType e limitValue juntos, exceto no caso GNV.

SituaçãoLimite recomendado
Cobrança por valor (pré-autorização, Pix já pago)limitType "$" com o valor autorizado. O total do abastecimento não passa dele.
O cliente pediu uma quantidade de litroslimitType "V" com os litros. O total em reais depende do preço enviado.
Completar o tanqueTeto alto em litros, por exemplo "V" com 999,99. Combine o teto máximo com a ConectTec.
GNV em ponto de abastecimento sem preset (fuelType 15 e fuelPoint.preset igual a false na reserva)Omita limitType e limitValue: a ConectTec libera sem limite (Caso GNV).

No limite por valor, calcule sobre o preço com desconto enviado em price.

Caso GNV

Em AuthorizeByFuelType, num ponto de abastecimento de GNV sem preset (fuelType 15 e fuelPoint.preset false), a ConectTec libera a bomba sem repassar preço nem limite: a bomba cobra o preço dela e o cliente abastece até parar. O preço aplicado é o price da entrega. price continua obrigatório (envie os preços de tabela); omita limitType e limitValue. Sem teto, o total só é conhecido no fim.

Resposta 201

As duas rotas devolvem o mesmo corpo. O 201 significa que a ConectTec recebeu a autorização e a encaminhou ao concentrador, não que a bomba foi liberada. Só o reason 4 libera o cliente.

CampoTipoSempre presenteDescrição
authIdstring (GUID, 36 caracteres)simIdentificador da autorização. Aparece nos callbacks, no informe de pagamento e na consulta da entrega.
reserveIdstring (GUID, 36 caracteres)simEco do reserveId enviado.
{
  "authId": "c3a9e1f7-5d2b-4c8a-b6e4-0f1d3a5c7e9b",
  "reserveId": "b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f"
}

O callback de resultado pode chegar antes de você processar a resposta; nesse caso identifique a autorização pelo reserveId.

Erros

Decida pelo código HTTP; o corpo do erro não faz parte do contrato.

HTTPQuando aconteceO que fazer
400Campo obrigatório ausente (exceto fuelType, que omitido vale 0), price ausente, JSON inválido, updateRate fora de 2 a 60, authTimeOut fora de 1 a 200, limitValue menor que 1 ou limitType que não tem exatamente 1 caractere.Corrija a requisição.
400A reserva não está no estado que aceita autorização: o callback reason 0 ainda não foi processado, a reserva já foi autorizada, expirou ou foi encerrada.Sem reason 0 recebido, espere o callback. Se já autorizou, espere o resultado (reason 4, 5 ou 6). Se a reserva acabou, faça uma nova.
401Cabeçalho SecretKeyAuthorization ausente ou com chave inválida.Confira a chave (401 no acesso).
401Rota não liberada ou recurso de outro cadastro: a rota (AuthorizeByFuelType ou Authorize) não está liberada para o seu cadastro, ou o reserveId é de outro cadastro. O 401 cobre os dois casos.Se o reserveId é seu, peça à ConectTec a liberação da rota V2 usada.
404A reserva existe, mas o ponto de abastecimento dela não é localizado.Acione o suporte da ConectTec com o reserveId.
500O reserveId não existe ou está mal formado.Confira o valor contra o que a reserva devolveu.
500O ponto de abastecimento não tem o fuelType informado, ou o hoseNumber está vazio ou não tem nenhum bico que o ponto de abastecimento possua. Também ocorre com fuelType acima de 16.Use fuel.fuelType e hoseNumber da resposta da reserva.
500Você enviou um Stop para esta reserva antes e o callback de encerramento ainda não chegou. Depois dele, a resposta é 400.Faça uma nova reserva (erros da reserva, se responder 406).
500Erro ao processar a autorização.Repita uma vez após 2 a 3 segundos. Se responder 400, a anterior foi aceita: espere o callback. Se o erro se repetir, acione o suporte com o reserveId, cancele a reserva com Stop e desfaça a garantia do valor.

Após timeout, 502, 503 ou 504, confira o estado da operação anterior: espere o callback com reason 4, 5 ou 6 antes de repetir. Sem callback, envie Stop e faça uma nova reserva. Formato geral de erros: Erros e diagnóstico.

O que acontece depois

A ConectTec envia o resultado por POST {base de callback}/V3/FuelPoint/Status para o seu servidor, com o reserveId e, a partir daqui, o authId. Cada callback é enviado uma vez, no momento do evento. Envio e autenticação estão em Contrato dos callbacks. Processe cada callback pelo reason; um estado final não volta atrás, e ignore um reason 4 que chegue depois de um estado final (5, 6 ou 7).

reasonNomeSignificadoO que fazer
4authSuccessfulO concentrador aceitou a autorização e a bomba está liberada.O frentista pode tirar o bico do descanso.
5authFailedO concentrador recusou a autorização.Desfaça a garantia do valor. A reserva não aceita nova autorização: faça uma nova.
6authTimedOutO prazo de authTimeOut passou e ninguém abasteceu.Desfaça a garantia do valor; reserve de novo se o cliente ainda quiser abastecer.
7authCancelledA autorização foi cancelada, em geral por um Stop seu.Desfaça a garantia do valor.
13authInterruptedA autorização foi interrompida por um evento no posto.Se o abastecimento começou, confira a entrega e ajuste a cobrança pelo total. Sem entrega, desfaça a garantia.

Outro reason fora das tabelas é reservado: responda 200 e ignore. A lista completa de reason e de estados do ponto de abastecimento está em Máquinas de estado.

Depois do reason 4, o fluxo segue assim:

  1. Início do abastecimento: chega como callback com fuelPointStatus 4 (em geral com reason 11; não exija o reason), seguido de callbacks de acompanhamento, a cada updateRate segundos, com volume e total parciais (Acompanhar e cancelar).
  2. Fim: a entrega fecha o abastecimento. O registro final chega no callback de entrega, com o preço aplicado e o total (Receber a entrega).
  3. Pagamento: Informar o pagamento.

Se o reason 4 não chegar em 20 s (ou authTimeOut, se menor), ou se nada chegar até authTimeOut + 10 s (Suas esperas), trate o posto como indisponível e envie POST /Delivery/Stop com o reserveId e o authId.

Se ninguém abastecer

Se ninguém tirar o bico do descanso em authTimeOut segundos, a autorização expira e chega o callback com reason 6. A expiração é definitiva: faça uma nova reserva. Para desistir antes, use POST /Delivery/Stop com o reserveId e o authId (Acompanhar e cancelar); o resultado chega com reason 7 (autorização cancelada), 8 (Stop aceito) ou 9 (Stop falhou), veja Máquinas de estado.

Troca de preço e desconto

Para dar desconto, você envia o preço final no campo price da autorização. O preço aplicado vem em price da entrega, e o de tabela em pricewithoutdiscount.

Como a troca de preço funciona

A troca de preço é o próprio campo price de POST /V2/Delivery/AuthorizeByFuelType (rota padrão) ou de POST /V2/Delivery/Authorize (por bico). O preço vale só para aquela autorização e é o preço final em reais por litro, não um valor de desconto nem um percentual. O restante da chamada (limitType, limitValue, updateRate, authTimeOut, erros) está em Autorizar o abastecimento.

De onde vêm os preços de tabela

A resposta da reserva não traz preço. Os preços de tabela do ponto de abastecimento (o visor da bomba) chegam no callback de status com reason 0, no campo price (veja Confirmação pelo callback de status e Como ler a matriz de preço). Para o ponto de abastecimento 3 do posto de exemplo:

{
  "stationId": 4021,
  "fuelPointNumber": 3,
  "hoseNumber": [1, 2],
  "reserveId": "b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f",
  "reason": 0,
  "price": [[6.29, 4.39], [6.19, 4.29]]
}

Cada linha de price é um nível de preço (até 4). Cada coluna corresponde à posição em hoseNumber, não ao número do bico: no exemplo, a coluna 0 é o bico 1 (gasolina, R$ 6,29 no nível 1 e R$ 6,19 no nível 2) e a coluna 1 é o bico 2 (etanol).

Se o bico escolhido não aparecer em hoseNumber (campo [0], por exemplo), autorize sem desconto, no preço de tabela, e cobre pelo total da entrega. Os preços do mapa de pista (Preços no mapa) são o último valor registrado, não o do momento da reserva; calcule o desconto sempre pelo callback.

A matriz de preço da autorização

price é sempre uma matriz, mesmo com um preço só. As linhas são os níveis de preço, na ordem em que o callback de reserva os trouxe. O que as colunas significam depende da rota:

/V2/Delivery/Authorize (por bico)/V2/Delivery/AuthorizeByFuelType (por combustível)
Quem é autorizadoOs bicos listados em hoseNumberTodos os bicos do ponto de abastecimento com o fuelType informado
Linhas de priceNíveis de preçoNíveis de preço
Colunas de priceUma por bico listado. Autorize um bico por chamadaVale a primeira coluna de cada linha
Gasolina com dois níveis"hoseNumber": [1] e "price": [[6.09], [5.99]]"fuelType": 5 e "price": [[6.09], [5.99]]
Preços diferentes em dois bicos do mesmo combustívelNão na mesma autorização: autorize um dos bicosO primeiro valor de cada linha vale para todos os bicos
  • Na rota por bico, autorize um bico só. Com mais de uma, repita o mesmo preço em todas as colunas.
  • Envie todos os níveis que o callback da reserva trouxe.
  • Aplique o mesmo desconto a todas as linhas e combine com a ConectTec, no cadastro, qual nível o posto aplica ao seu cadastro.

Enviar a autorização com o preço trocado

Desconto de R$ 0,20 por litro na gasolina: 6,29 - 0,20 = 6,09 no nível 1 e 6,19 - 0,20 = 5,99 no nível 2. Envie o preço arredondado, com 2 casas, ou 3 quando a tabela vier com 3; nunca mais de 3. A chamada só é aceita depois do callback com reason 0 (antes, a API responde 400) e uma única vez por reserva. Para refazer o preço, cancele com Stop e reserve de novo. Envie sempre limitType e limitValue, exceto em GNV sem preset, que dispensa os dois (Caso GNV).

POST/V2/Delivery/AuthorizeByFuelTypeSecretKeyAuthorization assíncrono
POST /V2/Delivery/AuthorizeByFuelType
SecretKeyAuthorization: <SUA_CHAVE>
Content-Type: application/json

{
  "reserveId": "b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f",
  "fuelType": 5,
  "price": [[6.09], [5.99]],
  "limitType": "$",
  "limitValue": 200,
  "updateRate": 2,
  "authTimeOut": 120
}
{
  "authId": "c3a9e1f7-5d2b-4c8a-b6e4-0f1d3a5c7e9b",
  "reserveId": "b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f"
}

O 201 só confirma o recebimento. O resultado vem no callback de status: reason 4 (autorizado), 5 (falhou) ou 6 (expirou). Veja Acompanhar e cancelar e Máquinas de estado. Os erros são os de Autorizar o abastecimento. Resposta 500: erro ao processar, repita uma vez. Antes de repetir um POST após timeout, 502, 503 ou 504, confira o estado da operação anterior: aguarde o callback ou a janela do 406 (reserveTimeOut + 120 s).

A mesma troca pela rota por bico, para o bico 1 (hoseNumber é lista, e cada linha de price tem uma coluna):

POST/V2/Delivery/AuthorizeSecretKeyAuthorization assíncrono
POST /V2/Delivery/Authorize
SecretKeyAuthorization: <SUA_CHAVE>
Content-Type: application/json

{
  "reserveId": "b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f",
  "hoseNumber": [1],
  "price": [[6.09], [5.99]],
  "limitType": "$",
  "limitValue": 200,
  "updateRate": 2,
  "authTimeOut": 120
}

Preço enviado

Envie preço maior que zero e, se a regra for só desconto, no máximo o preço de tabela do mesmo bico e do mesmo nível.

Quando a troca de preço não vale

  • Ponto de abastecimento com configPrice igual a false. O campo vem na resposta da reserva (fuelPoint.configPrice) e no mapa de pista. O ponto de abastecimento não aceita preço diferente da tabela. Enviar não gera erro, mas a cobrança sai pela tabela.
  • GNV em ponto de abastecimento sem preset (fuelType 15 e fuelPoint.preset igual a false). Preço e limite enviados não se aplicam; a bomba cobra o preço dela.
  • Equipamento do posto. Em alguns postos a bomba cobra pela tabela; o preço aplicado vem em price da entrega.

O preço cobrado na entrega

O callback de entrega (POST {base de callback}/FuelPoint/Delivery, veja Receber a entrega) traz o que a bomba cobrou. Campos que importam aqui:

CampoTipoSempre presenteDescrição
authIdstring (GUID)simA autorização que você fez.
hoseNumberinteirosimBico que abasteceu. Se vier 0 ou nulo, compare price com todos os preços que você enviou para o ponto de abastecimento.
volumenúmeronãoLitros abastecidos, como a bomba informou.
pricenúmeronãoPreço por litro aplicado pela bomba, já com a troca de preço, se ela foi aplicada.
totalnúmeronãoValor cobrado, em reais. volume * price pode diferir de total por arredondamento da bomba; cobre pelo total.
pricewithoutdiscountnúmerosimPreço de tabela do bico no momento da reserva, um valor só (na prática o do nível 1). Vem 0 quando não está disponível: use o preço de tabela do callback de reserva.
{
  "stationId": 4021,
  "fuelPointNumber": 3,
  "hoseNumber": 1,
  "reserveId": "b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f",
  "authId": "c3a9e1f7-5d2b-4c8a-b6e4-0f1d3a5c7e9b",
  "dateTime": "2026-11-03T14:22:05-03:00",
  "volume": 30.0,
  "price": 6.09,
  "total": 182.7,
  "pricewithoutdiscount": 6.29
}

Aqui a bomba aplicou o desconto: price é 6,09, contra pricewithoutdiscount 6,29.

Compare price com todos os preços que você enviou para aquele ponto de abastecimento (diferença menor que R$ 0,0005). Igual a um deles: desconto aplicado. Igual a um preço de tabela e diferente dos enviados: a cobrança saiu pela tabela. Em qualquer caso, cobre pelo total da entrega. Entrega com authId que não é seu segue Conciliar e recuperar entregas.

O preço aplicado é o price da entrega

Use o price do callback de entrega para conferir o preço cobrado.

Se a cobrança saiu pela tabela

O abastecimento já aconteceu e a bomba cobrou o total dela; a reparação ao cliente é do seu fluxo. Se o problema se repetir no mesmo posto ou no mesmo ponto de abastecimento, envie à ConectTec stationId, fuelPointNumber, hoseNumber, reserveId, authId, o price enviado, o recebido e dateTime.

Passo 4 de 6

Acompanhar e cancelar

Depois de autorizar, o que acontece no ponto de abastecimento (o visor da bomba) chega a você pelo callback de status. Cobre o significado de cada callback, os prazos de espera e o cancelamento com POST /Delivery/Stop.

Como o acompanhamento funciona

O estado da reserva chega pelos callbacks de status: a ConectTec avisa por POST {base de callback}/V3/FuelPoint/Status enquanto existe uma reserva ou autorização sua no ponto de abastecimento. O corpo completo está em Contrato dos callbacks.

  • Cada callback traz reason (o que aconteceu com a reserva ou a autorização) e fuelPointStatus (como o ponto de abastecimento está). Decida primeiro pelo reason; o reserveId identifica a reserva.
  • Cada callback é enviado uma vez, no momento do evento. Processe cada callback pelo reason; um estado final não volta atrás, e ignore um reason 0 ou 4 que chegue depois de um estado final. O estado seguinte chega no próximo callback; a entrega fecha o abastecimento. Autentique o callback pelo segmento secreto na base de callback, HTTPS e a conferência do reserveId/authId contra as suas operações (veja Contrato dos callbacks).
  • O callback pode chegar antes de você gravar a reserva. Responda 200 e reprocesse em alguns segundos.

O fim do abastecimento vem pela entrega

Os estados 5 (parada temporária) e 6 (fim) descrevem o ponto de abastecimento, não o abastecimento. O fim chega pelo callback de entrega, POST {base de callback}/FuelPoint/Delivery, com o volume e o valor finais. Veja Receber a entrega.

Sequência de um abastecimento normal de 30,00 L de gasolina a R$ 6,09 no ponto de abastecimento 3 do posto 4021.

O que chegou e o que fazer

O fuelPointStatus indica andamento só quando é 4 (em geral com reason 11, que você não precisa exigir). Os reason 1, 2, 3, 5, 6, 7, 8, 12 e 13 encerram a reserva ou a autorização, qualquer que seja o status do ponto de abastecimento; os 9 e 14 e os valores desconhecidos não mudam nada. Se a reserva já estava abastecendo, a entrega pode chegar com o volume parcial.

O que chegouO que significaPróximo passo
reason 0, status 1 ou 2Reserva aceita pelo posto. Trate os dois status do mesmo jeito.Leia price e hoseNumber e autorize.
reason 1O posto recusou a reserva.Encerre a tentativa. Ofereça outro ponto de abastecimento ou nova tentativa. Este reason chega com qualquer status.
reason 2Passou o reserveTimeOut sem autorização.Descarte a reserva. Para continuar, reserve de novo. Autorizar esta reserva responde 400.
reason 3Reserva cancelada, em geral depois de um Stop seu.Descarte a reserva. Ela não aceita mais autorização.
reason 12A reserva foi interrompida por um evento no posto.Descarte a reserva e reserve de novo se o cliente quiser continuar.
reason 4, status 2 (ou 1)Autorização aceita: a bomba foi liberada e aguarda o frentista tirar o bico do descanso.Marque a reserva como autorizada e inicie a espera de authTimeOut (veja Suas esperas). O valor do cliente já deve estar garantido desde antes da autorização (veja Autorizar o abastecimento). Ajuste a cobrança pelo total da entrega; para informar o pagamento, veja Informar o pagamento.
reason 5O posto recusou a autorização (a bomba não liberou).Desfaça o bloqueio do valor do cliente (cobrança, saldo). Faça uma nova reserva se o cliente quiser tentar de novo; esta reserva não aceita outra autorização.
reason 6Passou o authTimeOut sem o abastecimento começar.Desfaça o bloqueio do valor do cliente (cobrança, saldo). Para abastecer, reserve e autorize de novo.
reason 7Autorização cancelada, em geral depois de um Stop seu.Desfaça o bloqueio do valor do cliente (cobrança, saldo).
Status 3, sem reason de encerramentoPonto de abastecimento com o bico fora do descanso e bomba ainda não liberada.Espere o callback com reason 4. Se ele não vier no prazo, siga Suas esperas.
Status 4 (em geral com reason 11)Abastecimento em andamento. volume (litros) e total (R$) são parciais.Atualize a tela e reinicie a espera de silêncio. Se não houver mais atualizações, espere a entrega.
reason 13A autorização foi interrompida por um evento no posto.Se já havia volume, espere a entrega e concilie (Conciliar e recuperar entregas). Se nunca houve fuelPointStatus 4 nem reason 11 para este authId, trate como recusada e desfaça o bloqueio do valor, mas mantenha o authId na conciliação pelo prazo normal: se aparecer entrega, cobre pelo total.
reason 8Parada executada a pedido de um Stop seu.Aceite como cancelamento concluído. Se já havia volume, espere a entrega parcial.
reason 9 ou 14O cancelamento que você pediu não se completou.A reserva ou a autorização segue ativa e expira sozinha no prazo. Veja Cancelar.
Status 0A bomba não responde ao concentrador.Não cancele sozinho. Espere o próximo callback ou o fim do prazo da etapa em curso.
Qualquer outro reasonValor reservado.Ignore o conteúdo e responda 200.

Os valores de reason que não aparecem na tabela são reservados. A lista completa de valores está em Máquinas de estado.

Parciais não são finais

volume e total do callback de status são o que a bomba mostrava naquele instante. O valor a cobrar está na entrega: o preço aplicado é o price da entrega (veja Troca de preço e desconto).

O fim chega pela entrega

Quando o frentista devolve o bico ao descanso, o posto fecha o abastecimento e a ConectTec envia POST {base de callback}/FuelPoint/Delivery. Esse callback é o fim do abastecimento: traz volume, valor, preço aplicado, encerrantes e a data. Os campos e as regras de conferência estão em Receber a entrega.

Se o posto perde a conexão no meio do abastecimento, o concentrador guarda a entrega e a envia quando a conexão volta, com o dateTime do abastecimento. A entrega fica disponível em GET /Delivery/ByAuthId (Conciliar e recuperar entregas).

Quem expira o quê

Você define os dois prazos na requisição (reserveTimeOut na reserva, authTimeOut na autorização) e recebe o resultado por callback (reason 2 ou 6).

EtapaPrazoO que você recebe
Reserva sem autorizaçãoreserveTimeOut, de 1 a 120 s, definido por você na reservaCallback com reason 2. Autorizar depois disso responde 400.
Autorização sem início do abastecimentoauthTimeOut, de 1 a 200 s, definido por você na autorizaçãoCallback com reason 6. A reserva não aceita nova autorização.
Ponto de abastecimento preso para uma nova reserva suareserveTimeOut + 120 s desde a criação da reserva, no pior casoA API responde HTTP 406 na reserva seguinte no mesmo ponto de abastecimento, até a reserva anterior fechar.
Resposta ao callback5 sNada. Responda HTTP 200 em até 5 s; 201, 202, 204 e redirecionamento não contam como recebido, e o corpo da resposta não é lido.

Use os prazos da próxima seção como limite de espera.

Suas esperas e o que fazer quando estouram

Os prazos abaixo são sugestões de partida; combine o prazo de espera na homologação.

Você espera porComeça emPrazo sugeridoQuando estoura
Callback reason 0 (reserva aceita)201 da reserva15 s, ou reserveTimeOut se for menor.Envie Stop com o reserveId e ignore qualquer reason 0 que chegue depois. Não reserve de novo no mesmo ponto de abastecimento antes do Stop ser confirmado ou do prazo do 406.
Callback reason 4 (autorização aceita)201 da autorização20 s, ou authTimeOut se for menorEnvie Stop com reserveId e authId. Não cobre. Ofereça nova tentativa, que exige nova reserva.
Frentista tira o bico do descansoCallback reason 4authTimeOut + 10 sO normal é o reason 6 chegar antes. Se nada chegar, trate como expirada, envie Stop, desfaça o bloqueio do valor do cliente e deixe a conciliação cobrir o caso raro de um abastecimento que apareça depois.
Próxima atualização durante o abastecimentoÚltimo callback de statusO maior entre 60 s e 3 vezes o updateRate que você enviouNão cancele: o silêncio pode ser só a bomba sem atualizar. Siga esperando a entrega.
Callback de entregaÚltimo callback de status recebido (ou o reason 4, se não veio nenhum)Combine com a ConectTec; na homologação, meça o seu casoComece a conciliação (cronograma em Conciliar e recuperar entregas) e mantenha a reserva aberta no seu lado.
Resposta ao Stop (callback)201 do Stop15 sNão repita. A reserva ou a autorização expira sozinha no prazo; não autorize de novo.

Cancelar com Delivery/Stop

É a única rota de cancelamento, para reserva ou autorização que você não vai usar.

POST/Delivery/StopSecretKeyAuthorization assíncrono
CampoTipoObrigatórioDescrição
reserveIdstring (GUID)nãoReserva a cancelar. Antes da autorização, envie só este campo.
authIdstring (GUID)nãoAutorização a cancelar. Depois de autorizar, envie os dois campos juntos.

Um corpo sem nenhum dos dois campos responde 400. Depois da autorização, envie os dois. Os dois precisam formar um par (o authId é da autorização desse reserveId).

POST /Delivery/Stop
SecretKeyAuthorization: <SUA_CHAVE>
Content-Type: application/json

{
  "reserveId": "b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f",
  "authId": "c3a9e1f7-5d2b-4c8a-b6e4-0f1d3a5c7e9b"
}

Resposta 201

CampoTipoSempre presenteDescrição
cancelIdstring (GUID)simIdentificador do pedido de cancelamento. Útil para suporte.
{
  "cancelId": "e5d7a1b3-9c2f-4a68-8b1e-3c4d5e6f7a8b"
}

O que acontece depois

O 201 só confirma que a ConectTec recebeu o pedido e o encaminhou ao concentrador do posto. O resultado chega pelo callback de status:

  • reason 3, 7 ou 8: o cancelamento foi concluído. Trate os três como o mesmo resultado.
  • reason 9 ou 14: o cancelamento não se completou. A reserva ou a autorização continua ativa e expira sozinha no prazo (reserveTimeOut ou authTimeOut).

Depois de um Stop, a reserva não pode mais ser autorizada: a tentativa responde 500, ou 400 depois que o callback de encerramento chega. Se o cliente mudar de ideia, faça uma nova reserva. O ponto de abastecimento só aceita essa nova reserva quando a anterior fechar (veja o 406 em Reservar o ponto de abastecimento), o que acontece quando o callback de encerramento chega.

Se o abastecimento já começou, o Stop pede ao concentrador que pare a bomba. A parada é confirmada pelo callback com reason 8. Se já houve volume, a entrega chega com o volume parcial.

Erros

HTTPQuando aconteceO que fazer
400JSON inválido, corpo que a API não consegue ler ou corpo sem reserveId e sem authId.Corrija a requisição.
401O 401 cobre: chave ausente ou inválida; authId que não existe ou é de outro integrador; reserveId de outro integrador; rota /Delivery/Stop não liberada para o seu cadastro.Confira a chave e os identificadores. Se estiverem certos, peça à ConectTec a liberação da rota de Stop para o seu cadastro.
500O reserveId não existe ou não é um GUID válido, o authId não pertence a esse reserveId (os dois são seus, mas não formam um par), ou erro ao processar o comando para o concentrador do posto. Nesse último caso nenhum cancelamento é registrado.Se os identificadores estão certos, tente de novo uma vez. Se continuar, deixe a reserva expirar no prazo.

Repetir um Stop em reserva já fechada responde 201 do mesmo jeito. Formato geral de erros em Erros e diagnóstico.

Passo 5 de 6

Receber a entrega

Quando o abastecimento fecha, a ConectTec envia ao seu servidor o registro final: volume, preço aplicado, total e encerrantes. É o dado que você usa para cobrar.

Quando o callback chega

POST{base}/FuelPoint/Deliveryentrega concluída · enviado pela ConectTec

recebido assíncrono

A ConectTec envia o callback assim que o posto informa o fim do abastecimento, em {base}/FuelPoint/Delivery. Cadastre a base sem barra no final, senão a URL sai com //.

Cada callback é enviado uma vez, no momento do evento. A entrega fica disponível em GET /Delivery/ByAuthId (Conciliar e recuperar entregas).

A entrega e os callbacks de status são enviados à parte. Processe cada callback pelo reason; um estado final não volta atrás, e ignore um reason 0 ou 4 que chegue depois de um estado final. A entrega fecha o abastecimento.

Autentique o callback pelo segmento secreto na base de callback, HTTPS e a conferência do reserveId/authId contra as suas operações. Veja Contrato dos callbacks.

Condições para o callback sair

A ConectTec só envia o callback quando as três condições valem ao mesmo tempo:

  1. O abastecimento fechou numa autorização sua, feita com a sua chave, no ponto de abastecimento e no posto vinculados a você. Abastecimento sem autorização sua (por exemplo, o frentista abastece sem passar por você) não gera callback, mesmo no mesmo posto.
  2. A base de callback está cadastrada.
  3. A rota de entrega está liberada para você. A ConectTec libera rota a rota; peça a de entrega além da de status.

O callback sai para reservas e autorizações suas, com a base cadastrada e a rota liberada. Confirme o cadastro e a liberação com a ConectTec; a entrega também está disponível pelo authId (veja Conciliar e recuperar entregas).

Campos do corpo

O corpo é JSON na raiz, sem envelope, com Content-Type: application/json. Os números chegam sem arredondamento. A tabela usa a caixa exata do JSON, inclusive ETotStart e ETotEnd com E maiúsculo.

CampoTipoSempre presenteDescrição
stationIdinteirosimID do posto, o mesmo que a ConectTec informou a você.
fuelPointNumberinteirosimNúmero do ponto de abastecimento (o visor da bomba) onde ocorreu o abastecimento.
hoseNumberinteirosimNúmero do bico usado. É o mesmo hoseNumber do mapa de pista. Se você autorizou por bico, é um dos que você enviou na autorização; na autorização por tipo de combustível o bico só aparece aqui. Vale 0 quando o concentrador não informou o bico.
reserveIdstring (GUID de 36 caracteres)pode ser nuloA reserva a que o abastecimento pertence.
authIdstring (GUID de 36 caracteres)simA autorização que o abastecimento consumiu.
deliveryIdinteirosimIdentificador da entrega na ConectTec. É o mesmo valor que Delivery/ByAuthId devolve em deliveryId.
dateTimestringsimFim do abastecimento, no formato 2026-11-03T14:22:05-03:00. É a hora local do posto, com o sufixo -03:00 fixo.
volumenúmeropode ser nuloLitros abastecidos.
pricenúmeropode ser nuloPreço por litro realmente aplicado pela bomba. Se houve troca de preço ou desconto, já vem com ele.
totalnúmeropode ser nuloValor do abastecimento em R$, conforme a bomba.
pricewithoutdiscountnúmerosimPreço por litro de tabela no momento da reserva. Vale 0 quando o preço de tabela daquela reserva não está disponível. Maior que 0, é o preço de tabela para comparar com price.
ETotStartnúmeropode ser nuloEncerrante do bico antes do abastecimento.
ETotEndnúmeropode ser nuloEncerrante do bico depois do abastecimento.
fuel.fuelTypeinteirosimTipo de combustível, de 0 a 16. A tabela completa está em Enumerações e limites.
fuel.namestringpode ser nuloNome do combustível no cadastro do bico.
tank.namestringpode ser nuloNome do tanque que abastece o bico.
tank.numberinteiropode ser nuloNúmero do tanque.
tank.fuelobjetosimCópia de fuel, com fuelType e name.
attendant.idinteirosimID do frentista no posto. Vale 0 quando não há frentista identificado.
attendant.namestringpode ser nuloNome do frentista.
attendant.tagstringsimTag do frentista. Vale "" quando não há.
customer.idinteirosimID do cliente no posto. Vale 0 quando não há.
customer.namestringpode ser nuloNome do cliente informado no posto.
customer.tagstringpode ser nuloTag do cliente informada no posto.
customer.odometerinteirosimOdômetro informado no posto. Vale 0 quando não há.
  • volume * price pode diferir de total: a bomba arredonda e trunca por conta própria. Cobre pelo total.
  • volume, price, total ou encerrantes ausentes ou nulos indicam entrega incompleta: consulte-a em Conciliar e recuperar entregas.
  • O preço aplicado vem em price, e o de tabela em pricewithoutdiscount. Cobre pelo total da entrega.

Exemplo completo

O exemplo é o abastecimento de 30,00 L de gasolina no ponto de abastecimento 3 do Posto Exemplo, com desconto de R$ 0,20 por litro. A bomba aplicou R$ 6,09 e cobrou R$ 182,70. Sem desconto seriam R$ 6,29 por litro, ou R$ 188,70.

{
  "stationId": 4021,
  "fuelPointNumber": 3,
  "hoseNumber": 1,
  "reserveId": "b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f",
  "authId": "c3a9e1f7-5d2b-4c8a-b6e4-0f1d3a5c7e9b",
  "deliveryId": 98765432,
  "dateTime": "2026-11-03T14:22:05-03:00",
  "volume": 30.0,
  "price": 6.09,
  "total": 182.7,
  "pricewithoutdiscount": 6.29,
  "ETotStart": 125430.50,
  "ETotEnd": 125460.50,
  "fuel": { "fuelType": 5, "name": "Gasolina Comum" },
  "tank": {
    "name": "TQ 01",
    "number": 1,
    "fuel": { "fuelType": 5, "name": "Gasolina Comum" }
  },
  "attendant": { "id": 0, "name": null, "tag": "" },
  "customer": { "id": 0, "name": null, "tag": null, "odometer": 0 }
}

Casar com a sua autorização e deduplicar

A entrega se identifica pela combinação abaixo.

ParaUseComo
Achar a sua operaçãoauthIdCompare e guarde exatamente como recebido (a ConectTec envia em minúsculas).
Conferir a reservareserveIdDeve ser a reserva da autorização encontrada. Quando vier nulo, confie no authId.
Conferir o localstationId, fuelPointNumber, hoseNumberDevem bater com a reserva e, se você autorizou por bico, com o bico autorizado.
DeduplicarauthId + ETotEndCada abastecimento fecha o encerrante em um valor novo, então a dupla identifica a entrega mesmo que ela chegue por callback e depois pela conciliação. Use ETotEnd com 3 casas decimais, como decimal ou texto, não float. Se ETotEnd vier nulo ou 0, use authId + dateTime sem o sufixo de fuso (-03:00): as consultas trazem a data sem fuso. É a mesma chave de Conciliar e recuperar entregas.

O deliveryId é o mesmo no callback e na consulta por authId (conciliação), mas a chave de deduplicação é a dupla acima. Na consulta, o encerrante vem como eTotEnd (minúsculo).

Para conferir o preço, compare price com cada preço que você enviou para o bico, em todos os níveis (veja Troca de preço e desconto). Se bater com algum, o desconto foi aplicado. Se não bater com nenhum, a cobrança saiu pela tabela (também vale quando a confirmação da reserva trouxe hoseNumber [0] e você autorizou no preço de tabela): cobre o total da entrega. pricewithoutdiscount vale quando for maior que 0.

Entrega com authId que você não reconhece: não crie cobrança.

Depois de cobrar o total e encerrar a reserva, informe o pagamento.

Responder em menos de 5 segundos

Responda HTTP 200, exatamente esse código, em menos de 5 segundos. Só o 200 conta como recebido: 201, 202 e 204 não contam, redirecionamentos não são seguidos e o corpo da resposta não é lido. O certificado TLS do seu servidor precisa ser válido. Cada callback é enviado uma vez; responda 200 mesmo para uma entrega que você não reconhece.

Entrega tardia

Quando o posto perde a conexão no meio do abastecimento, o concentrador guarda a entrega e a envia quando a conexão volta, com o dateTime do abastecimento e o ETotEnd correto. O combustível foi entregue: cobre pelo total mesmo que a sua reserva ou autorização já tenha expirado do seu lado. Até a conexão do posto voltar, a entrega ainda não está na ConectTec: sem callback e sem registro na consulta significa "ainda não".

Entrega que não chegou

Siga a estratégia de Conciliar e recuperar entregas.

  1. Consulte pelo authId. A consulta devolve a entrega se a ConectTec a recebeu.
  2. Se devolver, processe pelo mesmo caminho do callback. A consulta traz eTotStart/eTotEnd em camelCase e priceWithoutDiscount sempre 0: compare price com cada preço que você autorizou. Detalhes em Conciliar e recuperar entregas.
  3. Se não devolver, a entrega ainda não está disponível (entrega tardia, veja acima). Repita conforme a estratégia e, se persistir, acione a ConectTec com stationId, fuelPointNumber, reserveId e authId.

O formato de todos os callbacks e a defesa do endpoint estão em Contrato dos callbacks.

Passo 6 de 6

Informar o pagamento

Depois que o abastecimento termina, avise a ConectTec se o cliente pagou e se o posto precisa emitir nota. É uma chamada síncrona: o 200 já significa que o informe foi recebido.

Para que serve e quando chamar

POST /V3/Delivery/TransactionStatus informa o resultado do pagamento de um abastecimento que já aconteceu, mais os dados fiscais quando houver nota. A ConectTec encaminha a informação ao posto, para conciliar o caixa e emitir nota fiscal. A chamada não mexe na bomba, não altera a autorização e não confirma o abastecimento: isso é o callback de entrega.

Chame depois de receber a entrega, com o total dela em value. Antes disso a ConectTec pode responder 404.

Esta chamada alimenta a conciliação do posto

A entrega chega com ou sem esta chamada. Com ela, o posto recebe o estado do pagamento e os dados fiscais. Se a chamada é obrigatória no seu caso, e em que prazo, a ConectTec informa no cadastro.

Antes de repetir um POST, confira o estado da operação anterior. Cada chamada vale como novo informe, repassado ao posto, e o último prevalece. Chame uma vez por mudança de estado do pagamento.

Requisição

POST/V3/Delivery/TransactionStatusSecretKeyAuthorization síncrono

Cabeçalhos: SecretKeyAuthorization com a sua chave (veja Credenciais e ambiente) e Content-Type: application/json. Os nomes de campo não diferenciam maiúsculas de minúsculas e campos desconhecidos são ignorados, mas as enumerações só aceitam número: "paid" no lugar de 1 resulta em 400.

Campos principais

CampoTipoObrigatórioDescrição
authIdstring (GUID)simAutorização do abastecimento, como a ConectTec devolveu (36 caracteres com hífens).
reserveIdstring (GUID)nãoReserva do abastecimento. Envie junto com authId; sem ela, a API acha o abastecimento só pelo authId. Enviada, o par com authId tem que corresponder a um abastecimento, senão 404.
providerStationIDinteirosimO stationId do posto, o mesmo número que você usa na reserva e que chega nos callbacks. Maior ou igual a 1. O campo se chama providerStationID (ID em maiúsculas), diferente de stationId nas outras rotas.
operationalDatestring (ISO 8601)simData e hora da operação financeira, com fuso (2026-11-03T14:22:05-03:00). Num pagamento futuro, a data do pagamento.
transactionStatusinteirosimEstado do pagamento, de 0 a 4. Veja Estados do pagamento. Omitido, vale 0 sem erro.
valuenúmerosimValor em reais (ponto decimal, zero ou mais). Veja Valor pago.
invoiceTypeinteirosimO que o posto deve emitir, de 0 a 3. Veja Nota fiscal. Omitido, a API assume 0 (NF-e).

Campos opcionais

CampoTipoObrigatórioDescrição
customerIdentificationstringnãoCPF (11 dígitos) ou CNPJ (14) de quem pagou. Envie só dígitos. Outro tamanho resulta em 400.
paymentReconciliationIdstringnãoIdentificador da transação no seu agente pagador, por exemplo o txid de um Pix. Até 100 caracteres.
paymentPartnerinteironãoCódigo do agente pagador. A tabela de códigos é combinada com a ConectTec na homologação.
providerAutorizationCodeinteironãoCódigo de autorização do seu lado, maior ou igual a 1. Se enviado nulo ou omitido, qualquer valor anterior é apagado.
invoiceFreeTextstringnãoTexto livre para a NF-e. Até 250 caracteres.
receiptFreeTextstringnãoTexto livre para o cupom. Até 250 caracteres.

Dados fiscais do destinatário

Todos opcionais. Envie quando invoiceType for 0 ou 2 e o posto precisar dos dados do destinatário na nota.

CampoTipoObrigatórioDescrição
razaoSocialstringnãoRazão social ou nome do destinatário.
inscricaoEstadualstringnãoInscrição estadual.
cfopstringnãoCFOP, até 4 caracteres.
logradourostringnãoRua ou avenida.
enderecoNumerostringnãoNúmero. Use S/N quando não houver.
enderecoComplementostringnãoComplemento.
bairrostringnãoBairro.
cidadestringnãoCidade.
ufstringnãoSigla da UF, 2 caracteres.
cepstringnãoCEP só com dígitos, até 8 caracteres.
codigoIbgestringnãoCódigo IBGE do município.

Estados do pagamento

O campo transactionStatus aceita estes valores. A ConectTec aceita qualquer valor de 0 a 4; a sequência é responsabilidade do seu sistema.

ValorNomeSignificadoQuando usar
0capturadoPagamento capturado.Combine o uso com a ConectTec antes. É o valor assumido quando o campo é omitido.
1pagoPagamento realizado pela sua aplicação diretamente ao estabelecimento.O dinheiro foi confirmado: cartão aprovado, saldo debitado, Pix confirmado.
2agendadoPagamento realizado pela sua aplicação cujo repasse ao estabelecimento será feito mais tarde por você.O pagamento existe, mas o repasse é futuro. Informe a data do pagamento em operationalDate.
3contestadoCombine o uso com a ConectTec no cadastro.O caso conhecido é a cobrança Pix que expirou sem pagamento.
4antecipadoCombine o uso com a ConectTec no cadastro.—

Pagamento que falha depois do abastecimento. O tratamento de um abastecimento não pago é regra contratual entre você, a ConectTec e o posto. Abra o caso com a ConectTec, com authId, reserveId e o motivo.

Para 0, 3 e 4, combine o uso com a ConectTec no cadastro.

Nota fiscal

O campo invoiceType diz ao posto o que emitir para este abastecimento.

ValorO posto emiteQuando usar
0NF-eO cliente pediu NF-e ou o seu contrato com o posto prevê NF-e. Envie os dados fiscais.
1Cupom (recibo)Só cupom.
2NF-e e cupomOs dois documentos.
3Nenhum documentoVocê não quer nota emitida pelo posto neste abastecimento.

Omitir invoiceType é o mesmo que pedir NF-e

O valor omitido vale 0, e o posto entende "emitir NF-e". Para não pedir nota, envie "invoiceType": 3.

Valor pago

O value é o total pago por esta transação, em reais. A ConectTec o compara com o total do abastecimento:

SituaçãoO que a ConectTec registra
value igual ao totalCaso normal. Pagamento integral do combustível.
value menor que o totalPagamento parcial. O valor pago registrado é o que você enviou.
value maior que o totalO combustível fica com o total do abastecimento.

Envie value com no máximo duas casas decimais, igual ao total da entrega (R$ 182,70 no exemplo, 182.70 no JSON). Para valor maior que o total, combine com a ConectTec; só faz sentido se o cliente pagou outros itens na mesma transação.

Exemplos

Abastecimento de referência do guia: 30,00 L de gasolina a R$ 6,09, total de R$ 182,70.

Pago, sem nota fiscal:

POST /V3/Delivery/TransactionStatus
SecretKeyAuthorization: <SUA_CHAVE>
Content-Type: application/json

{
  "reserveId": "b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f",
  "authId": "c3a9e1f7-5d2b-4c8a-b6e4-0f1d3a5c7e9b",
  "providerStationID": 4021,
  "operationalDate": "2026-11-03T14:22:05-03:00",
  "transactionStatus": 1,
  "invoiceType": 3,
  "value": 182.70
}

Contestado, para uma cobrança Pix do mesmo abastecimento que expirou sem pagamento: os mesmos dados, com transactionStatus 3 e operationalDate 2026-11-03T14:52:05-03:00.

Ver exemplo com NF-e e dados do destinatário
{
  "reserveId": "b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f",
  "authId": "c3a9e1f7-5d2b-4c8a-b6e4-0f1d3a5c7e9b",
  "providerStationID": 4021,
  "operationalDate": "2026-11-03T14:22:05-03:00",
  "transactionStatus": 1,
  "invoiceType": 0,
  "value": 182.70,
  "customerIdentification": "11222333000181",
  "paymentReconciliationId": "E00000000202611031722aBcDeFgHiJk",
  "invoiceFreeText": "Abastecimento realizado por aplicativo",
  "razaoSocial": "Empresa Exemplo Ltda",
  "inscricaoEstadual": "123456789",
  "logradouro": "Avenida Exemplo",
  "enderecoNumero": "1000",
  "bairro": "Centro",
  "cidade": "São Paulo",
  "uf": "SP",
  "cep": "01001000",
  "codigoIbge": "3550308"
}

Resposta

Resposta 200, corpo vazio. O 200 significa que o informe foi recebido. Se a chamada falhar por rede ou tempo esgotado, confira o estado da operação anterior antes de repetir, uma única vez e com o mesmo corpo. Cada 200 avisa o posto de novo.

Erros

Decida pelo status HTTP. O corpo pode variar e não é contrato.

HTTPQuando aconteceO que fazer
400Campo obrigatório ausente (providerStationID, value), valor fora da faixa (transactionStatus fora de 0 a 4, invoiceType fora de 0 a 3), texto maior que o limite, CPF/CNPJ com tamanho errado, JSON malformado ou enumeração enviada como texto.Corrija a requisição.
401Chave ausente ou inválida; authId que não existe ou pertence a outro cadastro; ou rota não liberada para o seu cadastro.Se a chave e o authId estão certos, peça à ConectTec a liberação da rota V3/Delivery/TransactionStatus para o seu cadastro.
404O abastecimento pode não estar registrado ainda (você chamou antes da entrega), ou o par authId + reserveId não corresponde a nenhum abastecimento.Espere o callback de entrega ou recupere a entrega pela conciliação e informe o pagamento depois.
500Erro ao processar o informe. Nada é registrado.Tente de novo uma vez. Se persistir, acione a ConectTec com o authId e a hora da chamada.

Sequência típica por meio de pagamento

A primeira chamada só é aceita depois que a entrega existe na ConectTec: callback recebido ou entrega recuperada pela conciliação.

CenárioChamadas, em ordem
Pagamento imediato (cartão, saldo, carteira)Uma chamada com transactionStatus: 1 assim que a entrega chegar e o pagamento estiver confirmado.
Pix confirmadoUma chamada com transactionStatus: 1 quando o Pix é confirmado, com operationalDate da confirmação e o txid em paymentReconciliationId.
Pix que expiraUma chamada com transactionStatus: 3 quando a cobrança expira (combine o uso com a ConectTec no cadastro).

Conciliar e recuperar entregas

A consulta por authId devolve a entrega que a ConectTec registrou, tenha o callback chegado ou não.

Por que conciliar

  • Envio único. Cada callback é enviado uma vez, no momento do evento. A entrega fica disponível em GET /Delivery/ByAuthId.
  • Entrega tardia. Se o posto perde a conexão no meio do abastecimento, o concentrador guarda a entrega e a envia quando a conexão volta, com o dateTime do abastecimento. Veja Entrega tardia.
  • Condições do callback. O callback sai para reservas e autorizações suas, com a base cadastrada e a rota liberada. Veja Condições para o callback sair.

A consulta cobre a entrega. O estado da reserva chega pelos callbacks de status.

Consultar por authId

GET/Delivery/ByAuthIdSecretKeyAuthorization

síncrono

Devolve a entrega que consumiu uma autorização sua, se a ConectTec a recebeu do posto. Serve para qualquer entrega, tenha o callback chegado ou não. Use a chave de API em SecretKeyAuthorization (veja Credenciais e ambiente); a estratégia de quando chamar está em Estratégia recomendada.

Parâmetro

CampoTipoObrigatórioDescrição
authIdstring (query)simO authId GUID de 36 caracteres que a resposta da autorização devolveu. Envie como recebeu, em minúsculas.

Exemplo de requisição

GET /Delivery/ByAuthId?authId=c3a9e1f7-5d2b-4c8a-b6e4-0f1d3a5c7e9b
SecretKeyAuthorization: <SUA_CHAVE>

Resposta

Status 200 com um objeto delivery. A tabela lista os campos que você usa.

CampoTipoSempre presenteDescrição
delivery.stationIdinteirosimID do posto, o mesmo que a ConectTec informou a você.
delivery.hoseNumberinteirosimNúmero do bico usado. Vale 0 quando o concentrador não informou.
delivery.authIdstringsimA autorização consumida.
delivery.reserveIdstringsimA reserva da autorização. Vem como "" quando não há.
delivery.deliveryIdinteirosimO mesmo número que o callback trouxe.
delivery.dateTimestringsimFim do abastecimento, sem sufixo de fuso: 2026-11-03T14:22:05. É a hora local do posto.
delivery.volumenúmerosimLitros. Vale 0 quando a bomba não informou.
delivery.pricenúmerosimPreço por litro aplicado pela bomba. Vale 0 quando não informado.
delivery.totalnúmerosimValor em R$. Vale 0 quando não informado.
delivery.priceWithoutDiscountnúmerosimSempre 0 nesta consulta; o preço de tabela vem em pricewithoutdiscount no callback. O preço aplicado é price.
delivery.eTotStartnúmerosimEncerrante antes. Aqui é eTotStart; no callback, ETotStart.
delivery.eTotEndnúmerosimEncerrante depois. No callback é ETotEnd.
delivery.fuelobjetosimfuelType (0 a 16, veja Enumerações e limites), name, fuelTypeDescription e imagePath (sempre nulo).
delivery.tankobjetosimnumber, name e fuel. Os demais campos do tanque vêm zerados: ignore.
delivery.attendant, delivery.customerobjetossimFrentista e cliente informados no posto. Campos de texto ausentes vêm como "". customer.odometer vem 0.
delivery.fuelPointIdinteirosimNão é o número do ponto de abastecimento. Ignore; o número do ponto de abastecimento você já tem pela autorização.
{
  "delivery": {
    "stationId": 4021,
    "fuelPointId": 17,
    "hoseNumber": 1,
    "authId": "c3a9e1f7-5d2b-4c8a-b6e4-0f1d3a5c7e9b",
    "reserveId": "b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f",
    "deliveryId": 98765432,
    "dateTime": "2026-11-03T14:22:05",
    "volume": 30.0,
    "price": 6.09,
    "priceWithoutDiscount": 0.0,
    "total": 182.7,
    "fuel": { "name": "Gasolina Comum", "imagePath": null, "fuelType": 5, "fuelTypeDescription": "gasolina" },
    "tank": {
      "number": 1,
      "name": "TQ 01",
      "volume": 0.0,
      "tcVolume": 0.0,
      "ullage": 0.0,
      "temperature": 0.0,
      "waterLevel": 0.0,
      "fuel": { "name": "Gasolina Comum", "imagePath": null, "fuelType": 5, "fuelTypeDescription": "gasolina" }
    },
    "attendant": { "tag": "", "name": "", "id": 0 },
    "customer": { "tag": "", "name": "", "id": 0, "odometer": 0 },
    "eTotStart": 125430.50,
    "eTotEnd": 125460.50
  }
}

Erros

HTTPQuando aconteceO que fazer
400authId vazio ou ausente.Corrija a chamada.
401Chave inválida, rota não liberada para o seu cadastro, ou authId que não é seu (inclusive inventado ou com erro de digitação).Confira a chave e o authId. Para a liberação da rota, fale com a ConectTec.
404O authId é seu e a entrega ainda não foi registrada: o posto pode estar sem conexão, o cliente pode não ter abastecido ou a autorização pode ter sido cancelada.Significa "ainda não". Consulte de novo conforme a estratégia.
500Erro ao processar a consulta.Repita uma vez; persistindo, acione o suporte com o authId.

Decida pelo status HTTP.

Com o 200, processe a entrega como se fosse o callback e informe o pagamento, como em Casar com a sua autorização e deduplicar.

Diferenças entre callback e consulta

A entrega recuperada tem o mesmo conteúdo do callback, com estas diferenças.

ItemCallbackByAuthId
EncerrantesETotStart, ETotEndeTotStart, eTotEnd
dateTimeCom sufixo -03:00Sem fuso
pricewithoutdiscountPreço de tabela; vale 0 quando não informadopriceWithoutDiscount sempre 0
fuelPointNumberPresenteAusente (fuelPointId não é o número)
tanknumber, name, fuelOs mesmos três campos; os demais vêm zerados (ignore)

Estratégia recomendada

Um job seu consulta as autorizações que continuam sem entrega.

  1. Primeira consulta 15 minutos depois da autorização. Antes disso o 404 é esperado.
  2. Espaçamento. A cada 15 minutos nas primeiras 2 horas, depois de hora em hora, até 48 horas depois da autorização. Combine o limite de requisições no cadastro.
  3. Com 200, processe pelo mesmo caminho do callback. Com 404, agende a próxima tentativa.
  4. Passadas as 48 horas, abra um caso com a ConectTec com stationId, fuelPointNumber, reserveId, authId e hora, volume, total e bico esperados, para conferir se há entrega gravada sem vínculo. Se a entrega chegar depois, ingira normalmente.

Saem da fila de espera as autorizações que terminaram sem nenhum litro abastecido: callback de status com reason 3 (reserva cancelada), 5 (autorização recusada), 6 (autorização expirada) ou 7 (autorização cancelada antes de abastecer). Continuam na fila, até o fim da janela, as que receberam reason 13 (interrompido) ou reason 8 (parada durante o abastecimento), porque pode haver volume parcial e a entrega ainda chega. Veja Máquinas de estado. Se aparecer entrega para uma autorização que saiu da fila, ingira normalmente.

Deduplicação com o callback

O mesmo abastecimento pode chegar por callback e por ByAuthId, em qualquer ordem.

  • Chave. authId (minúsculas) + ETotEnd com 3 casas decimais. Se ETotEnd vier nulo ou 0, use authId + dateTime sem o sufixo de fuso (-03:00). Compare os GUIDs como recebidos (a ConectTec os envia em minúsculas).
  • Quem chegou primeiro vale. A segunda cópia é descartada, mas se a consulta gravou primeiro, atualize pricewithoutdiscount na linha existente com o valor do callback, que a consulta não traz. Sobrescreva só quando for maior que 0.

Como tratar cada resultado

SituaçãoSignificaFaça
ByAuthId 200, callback nunca chegouA ConectTec registrou o abastecimento e o callback não chegou ao seu servidor.Ingira normalmente. Se isso se repetir, confira com a ConectTec o endereço da base de callback e a liberação da rota de entrega.
ByAuthId 404 depois de 48 horasO abastecimento não ocorreu, o posto não enviou o registro, ou a entrega foi gravada sem o vínculo com a sua autorização.Escale para o suporte com os identificadores e com hora, volume, total e bico esperados, para a ConectTec conferir se há entrega sem vínculo. Só depois dessa análise encerre a autorização.
Entrega chegou com dateTime de horas atrásEntrega tardia do posto.Ingira. A hora do abastecimento é dateTime. Veja Entrega tardia.
price igual ao preço de tabela, mas você autorizou descontoA bomba não aplicou a troca de preço.Cobre o total da bomba e trate a diferença pela sua regra comercial.

Erros comuns a todas as rotas: Erros e diagnóstico. Formato do callback: Receber a entrega.

Contrato dos callbacks

Os dois endereços que a ConectTec chama no seu servidor, o que responder, como casar cada callback com o seu estado e o corpo do callback de status.

O que a ConectTec chama

Você informa uma base de callback no cadastro, por exemplo https://integracao.suaempresa.com.br/conecttec/8f3k2m9q, sem barra no final. A ConectTec acrescenta o caminho de cada callback.

POST{base}/V3/FuelPoint/Statusstatus do ponto de abastecimento · enviado pela ConectTec
POST{base}/FuelPoint/Deliveryentrega concluída · enviado pela ConectTec
CallbackQuando saiO que fazer com ele
{base}/V3/FuelPoint/Status recebidoCada vez que algo muda numa reserva ou autorização sua: reserva aceita ou recusada, autorização aceita, abastecimento em andamento, prazo vencido.Atualize o estado da operação. O corpo está em Corpo do callback de status e a leitura dos valores em Acompanhar e cancelar.
{base}/FuelPoint/Delivery recebidoQuando o posto fecha o abastecimento.O preço aplicado vem em price e o de tabela em pricewithoutdiscount. Cobre pelo total e feche a operação. O corpo está em Receber a entrega.

Método POST, corpo JSON na raiz, sem envelope, em camelCase (exceções do callback de entrega em Receber a entrega). O cabeçalho é Content-Type: application/json; a autenticação é pelo segmento secreto da base (Segurança do endpoint). Ignore campos que você não conhece.

Quando o callback sai

Ponto de abastecimento livre, sem reserva sua, não gera callback. O callback sai para reservas e autorizações suas, com a base cadastrada e a rota liberada. Veja as condições em Receber a entrega.

Regras de resposta

  1. Responda exatamente HTTP 200, em menos de 5 segundos. O corpo da resposta é ignorado. 201, 202, 204 e redirecionamentos (301, 302) não contam como recebido: cadastre a base já em HTTPS.
  2. Cada callback é enviado uma vez, no momento do evento. Timeout, erro de conexão, certificado inválido, 4xx e 5xx contam como não recebido. O certificado TLS precisa ser público e válido: certificado autoassinado é recusado.
  3. Responda 200 também ao que você não reconhece: reason reservado, campo novo, reserva desconhecida (o callback pode chegar antes de você gravar a reserva).
  4. Ordem. Processe cada callback pelo reason; um estado final não volta atrás, e ignore um reason 0 ou 4 que chegue depois de um estado final.

Estado e entrega

O estado seguinte chega no próximo callback de status; a entrega fecha o abastecimento e fica disponível em GET /Delivery/ByAuthId (Conciliar). Um abastecimento sem nenhum status ainda gera uma entrega.

Chave de cada callback

CallbackChavePor que funciona
EntregaauthId + ETotEndCada abastecimento fecha o encerrante em um valor novo. Se ETotEnd vier nulo ou 0, use authId + dateTime sem o sufixo de fuso (-03:00). A dupla também identifica a entrega vinda da conciliação. Detalhes em Casar com a sua autorização e deduplicar.
StatusEstado por reserveId que só avançaAceite só transições para frente, como em Acompanhar e cancelar.

O corpo traz dados pessoais (customer.name, customer.tag, attendant.name): guarde o corpo cru com acesso restrito e prazo de retenção definido.

Segurança do endpoint

Autenticação do callback

Autentique o callback pelo segmento secreto na base de callback, HTTPS e a conferência do reserveId/authId contra as suas operações. Autentique pelo caminho secreto, não por IP de origem.

  1. Segmento secreto no caminho. Cadastre a base com um trecho aleatório de pelo menos 128 bits, como https://integracao.suaempresa.com.br/conecttec/8f3k2m9q (os exemplos do guia usam um valor curto). Para trocá-lo, peça à ConectTec que cadastre uma base nova e aceite as duas durante a troca.
  2. Confira os identificadores. Confirme que reserveId ou authId existe entre as suas operações e que stationId e fuelPointNumber batem. GUIDs: guarde e compare exatamente como recebidos (a ConectTec envia em minúsculas).
  3. O que dispara cobrança é uma entrega que casa com uma autorização sua, conferida contra o que você enviou. Nunca um callback de status.

Testar o seu servidor

Envie ao seu endpoint, no caminho /V3/FuelPoint/Status, o corpo de Autorização aceita, e no caminho /FuelPoint/Delivery o corpo de Receber a entrega. O esperado é HTTP 200 nas duas.

Corpo do callback de status

Todos os campos abaixo estão sempre presentes no JSON, mas vários trazem um valor neutro quando não se aplicam (null, 0 ou [0]). O nome do campo respeita a caixa do JSON.

CampoTipoSempre presenteDescrição
stationIdinteirosimID do posto, o mesmo que a ConectTec informou a você. Confira contra a sua reserva.
fuelPointNumberinteirosimNúmero do ponto de abastecimento.
hoseNumberlista de inteirossimNúmeros dos bicos envolvidos na reserva ou autorização. A coluna i de price é a de hoseNumber[i]. Vale [0] quando o bico não está identificado.
reserveIdstring (GUID de 36 caracteres)simA reserva a que o evento pertence. É a chave do estado da sua operação.
authIdstring (GUID de 36 caracteres)pode ser nuloA autorização. É null nos eventos anteriores a ela, como a reserva aceita.
fuelPointStatusinteirosimSituação do ponto de abastecimento (o visor da bomba): 0 não responde, 1 bloqueado, 2 autorizado, 3 bico fora do descanso sem liberação, 4 abastecendo. Os valores 5 e 6 não são enviados, salvo junto de reason 1. Trate qualquer outro valor como reservado. Tabela em Enumerações e limites.
reasoninteirosimO que aconteceu com a reserva ou a autorização. Decida primeiro por ele. Valores nomeados em Enumerações e limites; os demais são reservados: ignore o conteúdo e responda 200.
volumenúmerosimLitros parciais mostrados pela bomba naquele instante. Vale 0.0 quando ainda não há abastecimento.
totalnúmerosimValor parcial em R$ mostrado pela bomba naquele instante. Vale 0.0 quando ainda não há abastecimento.
fuel.fuelTypeinteirosimTipo de combustível, de 0 a 16 (Enumerações e limites). Vale 0 quando não há um único bico identificado.
fuel.namestringpode ser nuloNome do combustível no cadastro do bico.
tank.numberinteiropode ser nuloNúmero do tanque. Vem preenchido em alguns eventos.
tank.namestringpode ser nuloNome do tanque.
tank.fuelobjetosimCópia de fuel.
customer.idinteirosimID do cliente no posto. Vale 0 quando não há.
customer.namestringpode ser nuloNome do cliente informado no posto.
customer.tagstringpode ser nuloTag do cliente.
customer.odometerinteirosimSempre 0 neste callback. Use o odometer do callback de entrega.
attendant.idinteirosimID do frentista no posto. Vale 0 quando não há.
attendant.namestringpode ser nuloNome do frentista.
attendant.tagstringpode ser nuloTag do frentista. Vem null quando não há frentista identificado.
pricematriz de números (number[][])simPreços por litro. No reason 0 é a tabela de preços do ponto de abastecimento (veja abaixo). O preço aplicado é o price da entrega.

Como ler o campo price

  • No reason 0 (reserva aceita), price é a tabela de preços do ponto de abastecimento: price[nível][posição], com uma linha por nível (a linha 0 é o nível 1, até 4 níveis) e uma coluna por entrada de hoseNumber. Com hoseNumber igual a [1, 2] e price igual a [[6.29, 4.39], [6.19, 4.29]], o bico 1 custa 6,29 no nível 1 e 6,19 no nível 2. A leitura completa está em Reservar o ponto de abastecimento.
  • Depois da autorização, o preço aplicado é o price da entrega. O preço aplicado e o valor a cobrar estão nos campos price, pricewithoutdiscount e total do callback de entrega.

Quais valores chegam

Em operação normal, o reason que chega a você é um destes: 0 a 9 e 11 a 14. O significado e o que fazer em cada um estão em O que chegou e o que fazer, e a tabela completa de reason e fuelPointStatus está em Enumerações e limites. O fim do abastecimento não chega por este callback: ele chega pela entrega.

Exemplos por momento

Os quatro corpos abaixo seguem o abastecimento de exemplo: ponto de abastecimento 3 do posto 4021, gasolina no bico 1 e etanol no bico 2, 30,00 L de gasolina a R$ 6,09. Os objetos customer e attendant vêm com valores neutros nestes exemplos.

Reserva aceita (reason 0) com matriz de preço

Chega depois do 201 da reserva. É o momento em que chega a tabela de preço do ponto de abastecimento. Ignore fuel e tank: com mais de um bico, fuel vem neutro e tank pode trazer o tanque de só um deles. O fuelPointStatus pode vir 1 ou 2; trate os dois do mesmo jeito.

{
  "stationId": 4021,
  "fuelPointNumber": 3,
  "hoseNumber": [1, 2],
  "reserveId": "b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f",
  "authId": null,
  "fuelPointStatus": 1,
  "reason": 0,
  "volume": 0.0,
  "total": 0.0,
  "fuel": { "fuelType": 0, "name": null },
  "tank": { "number": 1, "name": "TQ 01", "fuel": { "fuelType": 0, "name": null } },
  "customer": { "tag": null, "name": null, "id": 0, "odometer": 0 },
  "attendant": { "tag": null, "name": null, "id": 0 },
  "price": [[6.29, 4.39], [6.19, 4.29]]
}
Autorização aceita (reason 4)

Chega depois do 201 da autorização. Agora há authId, e hoseNumber traz os bicos autorizados. A bomba está liberada e espera o frentista tirar o bico do descanso. O preço aplicado é o price da entrega.

{
  "stationId": 4021,
  "fuelPointNumber": 3,
  "hoseNumber": [1],
  "reserveId": "b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f",
  "authId": "c3a9e1f7-5d2b-4c8a-b6e4-0f1d3a5c7e9b",
  "fuelPointStatus": 2,
  "reason": 4,
  "volume": 0.0,
  "total": 0.0,
  "fuel": { "fuelType": 5, "name": "Gasolina Comum" },
  "tank": { "number": null, "name": null, "fuel": { "fuelType": 5, "name": "Gasolina Comum" } },
  "customer": { "tag": null, "name": null, "id": 0, "odometer": 0 },
  "attendant": { "tag": null, "name": null, "id": 0 },
  "price": [[6.09]]
}
Abastecendo (normalmente fuelPointStatus 4 com reason 11)

Chega várias vezes durante o abastecimento, com volume e total parciais. Cada atualização substitui a anterior. Trate pelo fuelPointStatus 4, sem exigir o reason. A entrega fica disponível em GET /Delivery/ByAuthId (Conciliar).

{
  "stationId": 4021,
  "fuelPointNumber": 3,
  "hoseNumber": [1],
  "reserveId": "b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f",
  "authId": "c3a9e1f7-5d2b-4c8a-b6e4-0f1d3a5c7e9b",
  "fuelPointStatus": 4,
  "reason": 11,
  "volume": 12.4,
  "total": 75.52,
  "fuel": { "fuelType": 5, "name": "Gasolina Comum" },
  "tank": { "number": 1, "name": "TQ 01", "fuel": { "fuelType": 5, "name": "Gasolina Comum" } },
  "customer": { "tag": null, "name": null, "id": 0, "odometer": 0 },
  "attendant": { "tag": null, "name": null, "id": 0 },
  "price": [[6.09]]
}
Reserva expirada (reason 2)

Chega quando o reserveTimeOut passa sem autorização. Nos callbacks de encerramento (reason 1, 2, 3, 5, 6, 7, 8, 12 e 13), decida só por reserveId, authId e reason. Não use price nem hoseNumber desses eventos. Para continuar, reserve de novo.

{
  "stationId": 4021,
  "fuelPointNumber": 3,
  "hoseNumber": [1, 2],
  "reserveId": "b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f",
  "authId": null,
  "fuelPointStatus": 1,
  "reason": 2,
  "volume": 0.0,
  "total": 0.0,
  "fuel": { "fuelType": 0, "name": null },
  "tank": { "number": 1, "name": "TQ 01", "fuel": { "fuelType": 0, "name": null } },
  "customer": { "tag": null, "name": null, "id": 0, "odometer": 0 },
  "attendant": { "tag": null, "name": null, "id": 0 },
  "price": [[6.29, 4.39], [6.19, 4.29]]
}

Máquinas de estado

Três máquinas: o ciclo do abastecimento, o estado do ponto de abastecimento (o visor da bomba) e o estado do pagamento. Cada uma traz o sinal exato que você recebe em cada transição.

Como modelar

O estado da reserva chega pelos callbacks de status e de entrega. Cada callback é enviado uma vez, no momento do evento. O seu sistema monta o estado a partir de quatro sinais:

  • A resposta HTTP das suas chamadas. O 201 da reserva e o 201 da autorização só confirmam o recebimento. O 406 da reserva diz que o ponto de abastecimento está em uso.
  • O callback de status (POST {base de callback}/V3/FuelPoint/Status), com reason e fuelPointStatus. Decida primeiro pelo reason.
  • O callback de entrega (POST {base de callback}/FuelPoint/Delivery). É o único aviso de que o abastecimento terminou.
  • O seu relógio. Em alguns caminhos o sinal é o prazo vencido. Esperas sugeridas em Suas esperas.

Regras para a sua máquina:

  • Todo callback traz o reserveId; o authId aparece depois da autorização.
  • Processe cada callback pelo reason; um estado final não volta atrás, e ignore um reason 0 ou 4 que chegue depois de um estado final.
  • A confirmação pode chegar antes de você gravar a resposta do 201. Responda 200 e reprocesse em alguns segundos.
  • Um reason ou fuelPointStatus fora das tabelas desta seção é reservado: não muda o estado. Responda 200 (veja Contrato dos callbacks).
  • Garanta o valor do cliente (pré-autorização, saldo ou pagamento) antes de autorizar e use-o como limitValue. Ajuste a cobrança pelo total da entrega. Se a autorização falhar ou expirar, desfaça a garantia.

Ciclo do abastecimento

Estados

EstadoFinal?Como você sabe
LivrenãoVocê não tem reserva aberta no ponto de abastecimento.
Reserva pedidanãoHTTP 201 da reserva.
ReservadonãoCallback com reason 0.
Autorização pedidanãoHTTP 201 da autorização.
AutorizadonãoCallback com reason 4.
AbastecendonãoCallback com status 4 (em geral com reason 11).
EntreguesimCallback de entrega.
Ponto de abastecimento ocupadonão, volta a LivreHTTP 406.
Reserva recusadasimreason 1.
Reserva expiradasimreason 2 ou 12.
Autorização recusadasimreason 5.
Autorização expiradasimreason 6.
Sem confirmaçãosimSeu prazo venceu sem callback.
Canceladasimreason 3, 7 ou 8 depois do Stop.
Interrompidonão, espera a entregareason 13.
Entrega pendentenãoSeu prazo de entrega venceu.

Transições

DeParaVocê recebeO que fazer
LivreReserva pedidaHTTP 201 da reservaEspere o reason 0.
LivrePonto de abastecimento ocupadoHTTP 406Retome a reserva aberta do mesmo cliente ou tente depois. Veja Reservar com ponto de abastecimento ocupado.
Ponto de abastecimento ocupadoLivreNada; o prazo passaNova reserva.
Reserva pedidaReservadoCallback reason 0Guarde price e hoseNumber e autorize. Se hoseNumber vier [0], autorize no preço de tabela; o preço aplicado é o price da entrega.
Reserva pedidaReserva recusadaCallback reason 1Encerre.
Reserva pedidaSem confirmaçãoNada; seu prazo venceEnvie Stop, avise o cliente e ignore um reason 0 que chegue depois. Não reserve o mesmo ponto de abastecimento antes de o Stop ser confirmado ou de passar o prazo do 406.
Reserva pedidaReserva expiradaCallback reason 2 ou 12 antes do 0Encerre. Para continuar, reserve de novo.
Reserva pedidaCanceladaStop 201, depois reason 3 ou 8Encerre.
ReservadoReserva expiradaCallback reason 2 (ou 12)Encerre. Para continuar, reserve de novo.
ReservadoAutorização pedidaHTTP 201 da autorizaçãoEspere o reason 4.
ReservadoCanceladaStop 201, depois reason 3 ou 8Encerre. Depois do Stop, autorizar essa reserva responde 500 ou 400; reserve de novo.
Autorização pedidaAutorizadoCallback reason 4O bico deve sair do descanso em até authTimeOut segundos. Se o reason 6 não chegar até authTimeOut + 10 s, envie Stop.
Autorização pedidaAutorização recusadaCallback reason 5Desfaça o bloqueio do valor do cliente. Uma nova tentativa exige nova reserva.
Autorização pedidaCanceladaStop 201, depois reason 7 ou 8Use quando o reason 4 não chega em cerca de 20 s. Desfaça o bloqueio do valor do cliente.
Autorização pedidaAutorização expiradaCallback reason 6 antes do 4Desfaça o bloqueio do valor do cliente. Nova tentativa exige nova reserva.
Autorização pedida ou AutorizadoAutorização recusadaCallback reason 13 sem volumeSe você nunca viu fuelPointStatus 4 nem reason 11 para este authId, trate como recusada e desfaça o bloqueio do valor do cliente. Mantenha o authId na conciliação pelo prazo normal: se aparecer entrega, cobre pelo total e avise a ConectTec.
AutorizadoAutorização expiradaCallback reason 6Desfaça o bloqueio do valor do cliente. Nova tentativa exige nova reserva.
AutorizadoCanceladaStop 201, depois reason 7 ou 8Desfaça o bloqueio do valor do cliente.
AutorizadoAbastecendoCallback com status 4Cada callback reinicia a sua espera de silêncio.
AbastecendoEntregueCallback de entregaCobre pelo total da entrega: o preço aplicado vem em price e o de tabela em pricewithoutdiscount. Capture o valor final e informe o pagamento.
AbastecendoEntrega pendenteStop 201, depois reason 8Espere a entrega parcial e capture só o que ela trouxer.
AbastecendoInterrompidoCallback reason 13Espere a entrega parcial. Não cancele.
AbastecendoEntrega pendenteNada; callbacks de volume paramNão cancele. Inicie a conciliação quando o prazo vencer.
InterrompidoEntrega pendenteNadaSem volume parcial, mantenha o authId na conciliação pelo prazo normal. Com volume, espere a entrega.
Entrega pendenteEntregueEntrega tardia ou registro na consultaProcesse como entrega normal (Entrega tardia). Mantenha a reserva aberta e o valor do cliente bloqueado pelo prazo da conciliação; a pré-autorização deve durar mais que isso. Sem entrega ao fim do prazo, combine com a ConectTec antes de liberar o bloqueio.

Os estados finais não voltam: um callback atrasado que os contradiga, como um reason 0 depois de reserva expirada ou de Sem confirmação, é ignorado. O Stop também é aceito em Reserva pedida e Autorização pedida, e o resultado só aparece quando o posto confirma. Entregue encerra esta máquina; o pagamento tem a sua, mais abaixo.

Reservar com ponto de abastecimento ocupado

O 406 só acontece na reserva e quer dizer que nenhuma reserva nova foi criada. O ponto de abastecimento libera quando a reserva anterior fecha, ou em até reserveTimeOut + 120 s desde a criação dela (180 s com reserveTimeOut 60). Algumas tentativas a cada poucos segundos não esgotam essa espera. Se o cliente é o mesmo e você tem o reserveId, retome a reserva aberta. Para 500, timeout, 502, 503 e 504, veja Erros da reserva.

POST/V4/Delivery/ReserveSecretKeyAuthorization assíncrono
POST /V4/Delivery/Reserve
SecretKeyAuthorization: <SUA_CHAVE>
Content-Type: application/json

{
  "stationId": 4021,
  "fuelPointNumber": 3,
  "providerId": "<SEU_PROVIDER_ID>",
  "reserveTimeOut": 60
}

A resposta 201 está em Reservar o ponto de abastecimento.

406 e reason 1

O 406 só ocorre por reserva aberta sua. Se a API aceitar a reserva mas o posto não puder segurar o ponto de abastecimento (por exemplo, por estar em uso), você recebe o callback reason 1.

Tabela de reason

O reason diz o que aconteceu com a reserva ou a autorização. Estes são todos os valores que a ConectTec envia e documenta. Qualquer outro valor é reservado: não mude o estado, ignore o conteúdo e responda 200.

reasonNomeVale paraEfeito na sua máquina
0reserveSuccessfulReservaReserva pedida passa a Reservado.
1reserveFailedReservaReserva recusada. Chega com qualquer fuelPointStatus.
2reserveTimedOutReservaReserva expirada.
3reserveCancelledReservaCancelada, depois de um Stop seu.
4authSuccessfulAutorizaçãoAutorização pedida passa a Autorizado.
5authFailedAutorizaçãoAutorização recusada.
6authTimedOutAutorizaçãoAutorização expirada.
7authCancelledAutorizaçãoCancelada, depois de um Stop seu.
8stopSuccessfulCancelamentoCancelada. Aceite como cancelamento concluído, de reserva ou de autorização.
9stopFailedCancelamentoNenhum. O cancelamento não se completou e a reserva ou a autorização segue ativa até expirar. Depois de um Stop a API não autoriza mais essa reserva (400 ou 500).
11runningTotalAbastecimentoAbastecendo. Traz volume e total parciais.
12reserveInterruptedReservaTrate como Reserva expirada.
13authInterruptedAutorizaçãoInterrompido, se já havia volume. Sem volume, Autorização recusada.
14stopInterruptedCancelamentoNenhum. Mesmo tratamento do reason 9.

Os fins de reserva e de autorização são os reason 1, 2, 3, 5, 6, 7, 8, 12 e 13. Nenhum outro encerra nada.

Estado do ponto de abastecimento

O campo fuelPointStatus do callback de status diz como o ponto de abastecimento está naquele instante. Ele complementa o reason: um reason de encerramento vale mesmo quando o status diz outra coisa. Só chega callback enquanto existe uma reserva ou autorização sua no ponto de abastecimento.

O campo vai de 0 a 6, mas você só recebe 0 a 4. Os valores 5 e 6 não são enviados. Decida sempre primeiro pelo reason.

fuelPointStatusNomeSignificadoVocê recebe?
0Não respondeA bomba não responde ao concentrador.sim
1BloqueadoOcioso, bicos no descanso, sem autorização.sim
2AutorizadoOcioso, bicos no descanso, autorizado.sim
3ChamandoBico fora do descanso, sem autorização.sim
4AbastecendoBico fora do descanso, autorizado, combustível saindo.sim
5Parada temporáriaBico fora do descanso, abastecimento pausado.não
6FimBico no descanso, abastecimento concluído.não

Transições

A sequência abaixo é a de uma bomba em operação normal. Processe cada callback pelo estado que ele traz.

DeParaEventoVocê recebe
12Autorização aceitaCallback com reason 4 e status 2 (ou 1)
13Frentista tira o bico do descanso sem autorizaçãoCallback com status 3
24Frentista tira o bico do descanso e abasteceCallback com status 4
34Autorização aceita com o bico já fora do descansoCallback com status 4
46Bico volta ao descansoNada; chega a entrega
40Comunicação com a bomba caiCallback com status 0, se o posto avisar
01Bomba volta a responderCallback com o status atual

O status 0 não encerra nada: espere o próximo callback ou o fim do prazo da etapa em curso. O status 3 não muda a máquina do abastecimento.

Estado do pagamento (TransactionStatus)

Depois da entrega, você informa o resultado do pagamento com POST /V3/Delivery/TransactionStatus (Informar o pagamento). Vale o último valor enviado, em qualquer ordem. Cada chamada avisa o posto de novo, inclusive repetir o mesmo valor.

DeParaEventoVocê envia
Não informado0 CapturadoPagamento capturadotransactionStatus: 0
Não informado2 AgendadoRepasse futuro feito por vocêtransactionStatus: 2
Não informado1 PagoPagamento confirmadotransactionStatus: 1
0 Capturado1 PagoConfirmação do pagamentotransactionStatus: 1
2 Agendado1 PagoPagamento confirmadotransactionStatus: 1
Não informado3 ContestadoCobrança Pix expiradatransactionStatus: 3
1 Pago3 ContestadoCombine o uso com a ConectTec no cadastrotransactionStatus: 3
1 Pago4 AntecipadoCombine o uso com a ConectTec no cadastrotransactionStatus: 4
QualquerQualquerNova chamadaVale o último valor, em qualquer ordem. Repetir o mesmo valor avisa o posto de novo.

Campos, nota fiscal e erros estão em Informar o pagamento. Combine o uso de 3 e 4 com a ConectTec no cadastro.

Erros e diagnóstico

Todos os erros da API por rota, as regras que valem para qualquer erro e um roteiro de verificação para os sete problemas que mais travam uma integração.

Regras gerais

  1. Decida pelo status HTTP. Vale o status, não o corpo.
  2. O 201 só confirma o recebimento. Reserva, autorização e Stop respondem 201 quando a ConectTec recebe o pedido; o resultado vem pelo callback de status. Veja Acompanhar e cancelar.
  3. O 401 cobre várias causas. Chave errada, rota não liberada, identificador de outro integrador e, no mapa de pista e no QR code, posto não vinculado respondem 401, em geral sem corpo. QR code inexistente responde 401. Veja Entender o 401.
  4. O 500 tem duas famílias. Dado inválido seu (providerId fora do formato GUID, reserveId inexistente, fuelType ou hoseNumber que o ponto de abastecimento não tem, reserva com Stop pendente) ou erro ao processar.
  5. Erros de validação não passam com repetição. Exceções: o 404 de ByAuthId e de TransactionStatus (abastecimento ainda não registrado) e o 400 da autorização com reserva ainda sem reason 0.
  6. Status fora das tabelas (415, 502, 503, 504, falha de conexão) segue a linha de 5xx e timeout abaixo.

Antes de repetir um POST, confira o estado da operação anterior. Depois de timeout ou 5xx:

RotaVerifiqueSe não achar nada
POST /V4/Delivery/ReserveCallback de status para o stationId e fuelPointNumber logo após a chamada (traz o reserveId).Timeout, 502, 503 ou 504: resultado desconhecido, a reserva pode ter sido criada. Espere reserveTimeOut + 120 s antes de reservar o mesmo ponto de abastecimento (o visor da bomba); antes disso a resposta pode ser 406. Um 500 com resposta recebida não cria reserva: uma nova tentativa vale.
POST /V2/Delivery/AuthorizeByFuelType e /V2/Delivery/AuthorizeCallback com reason 4 ou 5 para o reserveId.Com 500 recebido, reenvie uma vez; 400 na segunda chamada indica que a primeira foi aceita. Com timeout, 502, 503 ou 504, espere o callback antes de repetir.
POST /Delivery/StopCallback com reason 3, 7 ou 8.Se não vier e a reserva ainda estiver aberta, repita uma vez.
POST /V3/Delivery/TransactionStatusSeu registro da chamada.Resultado desconhecido: se repetir, uma vez e com o mesmo corpo. O último estado enviado prevalece.
Rotas GETNada.Repita.

Erros por rota

Consolidam as tabelas de cada seção; o detalhe de cada causa está na seção da rota.

GET /QRCodeInformation/{codigo}

HTTPQuando aconteceO que fazer
400O código não tem exatamente 7 caracteres.Envie o código como texto, com os zeros à esquerda.
401Chave ausente ou inválida; código inexistente ou inválido; posto não vinculado ao seu cadastro; rota não liberada.Leia o QR de novo. Se vários códigos válidos falharem, siga o diagnóstico de 401 em tudo.
500O código tem caracteres não numéricos, ou existe mas ainda não foi associado a um ponto de abastecimento.Se o código é numérico e válido, avise a ConectTec com o código e o horário.

Detalhes em Erros do QR code.

GET /V6/ForecourtMap/ById/{stationId}

HTTPQuando aconteceO que fazer
500O posto está no seu vínculo, mas não tem ponto de abastecimento cadastrado.Trate como mapa indisponível e avise a ConectTec se o posto deveria ter pontos de abastecimento.
400stationId igual a 0, não numérico ou fora do intervalo de inteiro de 32 bits.Corrija o stationId.
401Chave ausente ou inválida; posto não vinculado; rota não liberada. Em homologação, qualquer posto que não seja o de testes.Siga o diagnóstico de 401 em tudo.
500Erro interno ao montar o mapa do posto.Repita uma vez após alguns segundos. Se persistir, envie stationId e horário.

Detalhes em Erros do mapa de pista.

POST /V4/Delivery/Reserve

HTTPQuando aconteceO que fazer
400Campo ausente, tipo errado, JSON inválido, corpo vazio ou reserveTimeOut fora de 1 a 120.Corrija o corpo.
401Chave ausente ou inválida; providerId do corpo diferente do dono da chave; rota V4/Delivery/Reserve não liberada.Confira chave e providerId. Depois peça a liberação da rota.
404Posto não vinculado ao seu cadastro, stationId errado ou fuelPointNumber inexistente.Confira os dois valores contra o mapa de pista. Se estiverem certos, o vínculo precisa de ajuste pela ConectTec.
406O ponto de abastecimento tem reserva aberta do seu cadastro, por até reserveTimeOut + 120 s.Veja Recebo 406 ao reservar.
500providerId que não é GUID, posto sem concentrador cadastrado, ou erro ao entregar o comando ao concentrador. Nenhuma reserva utilizável é criada.Confira o formato do providerId. Depois repita uma vez, após alguns segundos, e trate o posto como indisponível se persistir. Isso vale só para o 500 com resposta recebida; sem resposta, siga a tabela de timeout e 5xx acima.

Detalhes em Erros da reserva.

POST /V2/Delivery/AuthorizeByFuelType e POST /V2/Delivery/Authorize

HTTPQuando aconteceO que fazer
400Campo ausente, JSON inválido, updateRate fora de 2 a 60, authTimeOut fora de 1 a 200, limitValue menor que 1 ou limitType com tamanho diferente de 1.Corrija o corpo.
400A reserva não aceita autorização agora: reason 0 ainda não processado, reserva já autorizada, expirada ou encerrada.Consulte o estado da reserva no seu sistema e siga Erros da autorização.
401Chave ausente ou inválida; rota não liberada; reserveId de outro integrador.Confira a chave e a origem do reserveId.
404Ponto de abastecimento da reserva não localizado.Não repita. Guarde o reserveId e acione a ConectTec.
500reserveId inexistente ou mal formado; fuelType que o ponto de abastecimento não tem, ou nenhum dos hoseNumber existe no ponto de abastecimento; reserva com Stop já enviado e callback de encerramento ainda não recebido (depois dele, 400); erro ao entregar o comando ao concentrador.Descarte as causas suas na ordem desta lista. Se nenhuma se aplicar, repita uma vez e acione a ConectTec com o reserveId.

POST /Delivery/Stop

HTTPQuando aconteceO que fazer
400JSON inválido ou corpo ilegível.Corrija o corpo.
401Chave ausente ou inválida; reserveId ou authId de outro integrador; authId inexistente; rota não liberada (conferida só quando o corpo traz authId).Confira chave e identificadores; depois peça a liberação.
500Dado inválido ou erro ao processar. Nenhum cancelamento é registrado.Descarte as causas suas: envie só o reserveId, ou o par que veio junto na autorização. Se continuar, repita uma vez; persistindo, deixe a reserva expirar no prazo e não a autorize.

Detalhes em Cancelar com Delivery/Stop.

POST /V3/Delivery/TransactionStatus

HTTPQuando aconteceO que fazer
400Campo obrigatório ausente, valor fora da faixa, texto acima do limite, CPF/CNPJ com tamanho errado, JSON malformado ou enumeração enviada como texto.Corrija o corpo.
401Chave ausente ou inválida; authId inexistente ou de outro integrador; rota não liberada.Confira chave e authId; depois peça a liberação.
404O abastecimento ainda não foi registrado, ou authId e reserveId não formam um par.Veja Recebo 404 no TransactionStatus.
500Erro ao registrar o pagamento. Nada é registrado.Tente de novo uma vez, após alguns segundos. Se persistir, acione a ConectTec com o authId e a hora.

Detalhes em Erros do pagamento.

GET /Delivery/ByAuthId

HTTPQuando aconteceO que fazer
400authId vazio ou ausente.Corrija a consulta.
401Chave ausente ou inválida; rota não liberada; authId inexistente ou de outro integrador.Siga o diagnóstico de 401 em tudo.
404Nenhum abastecimento encontrado para esse authId.A entrega ainda não chegou à ConectTec. Veja A entrega não chegou.
500Erro ao processar.Repita com espera. Se persistir, acione a ConectTec com o authId e a hora da consulta.

Suas respostas aos callbacks

Responda HTTP 200, exatamente esse código, em menos de 5 segundos, mesmo para um evento que você não reconhece. Qualquer outro código, inclusive 201 e 204, e qualquer demora acima do limite não contam como recebido. Cada callback é enviado uma vez, no momento do evento; o corpo da resposta não é lido. Veja Responder em menos de 5 segundos.

Diagnóstico por sintoma

Passos em ordem, do mais barato ao mais caro. O último de cada roteiro diz quando acionar a ConectTec; os dados a enviar estão em Quando acionar a ConectTec.

Recebo 401 em tudo

  1. Header. O nome é SecretKeyAuthorization e o valor é a chave crua, sem Bearer.
  2. Mapa de pista do posto de testes. GET /V6/ForecourtMap/ById/{stationId} com o stationId do cadastro. Com 200, chave e posto estão certos e o problema é outro (passo 4). Com 401, a chave está errada, o stationId não é o do cadastro ou a rota não foi liberada. Na homologação, qualquer posto que não seja o de testes responde 401.
  3. Mapa 200 e outra rota 401: a rota não foi liberada para o seu cadastro. Confira Rotas.
  4. Chamada com identificadores: reserveId e authId precisam ter sido devolvidos às suas próprias chamadas; na reserva, o providerId do corpo precisa ser o dono da chave.
  5. Acione a ConectTec com a rota completa, o stationId, o status e o horário da chamada com fuso.

A reserva retorna 201 mas a confirmação não chega

Três causas dão o mesmo sintoma: posto sem comunicação, ponto de abastecimento que não responde ao concentrador e callback que não chega ao seu servidor.

  1. Prazo. Dentro do reserveTimeOut enviado, o callback de confirmação é esperado. Veja Suas esperas.
  2. Outro reason. 1, 2, 3 ou 12 encerram a reserva; veja Confirmação pelo callback de status. O reason 1 pode vir com qualquer status.
  3. Seu endpoint. Se o callback chegou à borda e a aplicação não o processou, confira que o reserveId é comparado como recebido (minúsculas) e que ele já estava gravado: o callback pode chegar milissegundos depois do 201. Teste o endpoint como em O callback não chega no meu servidor.
  4. stationStatus. O stationStatus indica se o concentrador do posto está conectado; a disponibilidade do ponto de abastecimento vem na resposta da reserva. Veja stationStatus.
  5. Venceu o prazo sem callback: envie POST /Delivery/Stop com o reserveId e ignore qualquer reason 0 posterior. Só reserve o mesmo ponto de abastecimento depois do Stop confirmado ou da janela do 406. Veja Se a confirmação não chegar.
  6. Acione a ConectTec se repetir com stationStatus: true e endpoint respondendo 200. Se nenhum callback de nenhum posto chega, peça a verificação da base de callback e da liberação da rota de status.

Recebo 406 ao reservar

O 406 indica reserva aberta sua no mesmo ponto de abastecimento. Ponto de abastecimento ocupado por outro motivo não gera 406: a recusa, se houver, chega pelo callback de status.

  1. Procure no seu sistema uma reserva sua nesse ponto de abastecimento sem entrega e sem reason de encerramento. Se for do mesmo cliente, reutilize o reserveId.
  2. Se não vai mais ser usada, envie Stop e espere reason 3, 7 ou 8. A reserva fecha também quando o abastecimento é gravado ou chega reason 1, 2, 5, 6, 12 ou 13.
  3. Sem o reserveId, espere a janela: a reserva se libera em reserveTimeOut + 120 s contados da criação (240 s no pior caso, com reserveTimeOut 120). Um reserveTimeOut menor encurta a janela.
  4. Acione a ConectTec se o 406 persistir depois de reserveTimeOut + 120 s da última reserva.

O callback não chega no meu servidor

Vale para o status do ponto de abastecimento ({base de callback}/V3/FuelPoint/Status) e para a entrega concluída ({base de callback}/FuelPoint/Delivery). O callback sai para reservas e autorizações suas, com a base cadastrada e a rota liberada.

  1. Condições de envio. Status só sai para reservas e autorizações suas; ponto de abastecimento ocioso não gera callback; fuelPointStatus 5 e 6 não saem, salvo junto de reason 1. A entrega só sai para abastecimento com autorização sua. Veja Condições para o callback sair.
  2. Seu endpoint. Envie de fora da sua rede o payload de reason 0 de Testar o seu servidor, em POST {base}/V3/FuelPoint/Status. O esperado é HTTP 200 em menos de 5 s.
  3. Caminho. A ConectTec acrescenta o caminho de cada callback à base cadastrada. Com a base https://integracao.suaempresa.com.br/conecttec/8f3k2m9q, o status chega em /conecttec/8f3k2m9q/V3/FuelPoint/Status e a entrega em /conecttec/8f3k2m9q/FuelPoint/Delivery. Cadastre a base sem barra no final, para não ficar //.
  4. Resposta. Só o HTTP 200 conta; 201, 204, redirecionamento e demora acima de 5 s não contam como recebido. O corpo da resposta não é lido.
  5. TLS e origem. Certificado válido com cadeia completa; autoassinado ou expirado faz o envio falhar. Autentique pelo caminho secreto, não por IP de origem.
  6. Envio. Cada callback é enviado uma vez, no momento do evento. A entrega fica disponível em GET /Delivery/ByAuthId (A entrega não chegou). O estado seguinte chega no próximo callback; a entrega fecha o abastecimento.
  7. Acione a ConectTec se o endpoint responde 200 no teste e nenhuma operação elegível gera callback. Peça a verificação da base cadastrada e da liberação das rotas de status e de entrega.

A entrega não chegou

A consulta GET /Delivery/ByAuthId?authId={authId} mostra se a entrega já está registrada.

  1. Espere alguns minutos. Se o posto perde a conexão no meio do abastecimento, o concentrador guarda a entrega e a envia quando a conexão volta, com o dateTime do abastecimento. Veja Entrega tardia.
  2. Confirme que houve abastecimento com autorização sua. Abastecimento feito sem passar por você não gera callback para o seu servidor.
  3. Consulte pelo authId. Com 200, a entrega está disponível para conciliar. Para receber o callback, siga o diagnóstico do callback e confira a base cadastrada e a liberação da rota de entrega.
  4. Com 404, a ConectTec ainda não recebeu o registro do posto. Repita no ritmo da estratégia de conciliação.
  5. Acione a ConectTec se seguir 404 até o fim do prazo da estratégia. Se tiver, envie o volume e o valor que o cliente viu na bomba.

Na resposta da consulta, os campos ficam dentro de delivery, a chave é eTotStart/eTotEnd (no callback é ETotStart/ETotEnd), priceWithoutDiscount vem 0 e dateTime é a hora local do posto. Para confrontar desconto, use o preço de tabela do callback de reserva que você guardou. Veja Conferir o preço cobrado na entrega.

O desconto não foi aplicado na bomba

O preço aplicado vem em price da entrega, e o de tabela em pricewithoutdiscount.

  1. Confirme na entrega, não no status. Compare price do callback de entrega com o enviado e com o de tabela. Em 6,09 contra 6,29, o desconto de R$ 0,20 foi aplicado; igual à tabela, a bomba não aplicou. O preço aplicado é o price da entrega. Veja Conferir o preço cobrado na entrega.
  2. Ponto de abastecimento sem troca de preço. Com fuelPoint.configPrice false, a bomba pode cobrar pela tabela. Veja Quando a troca de preço não vale.
  3. Combustível. Em AuthorizeByFuelType, GNV (fuelType 15) em ponto de abastecimento sem preset ignora preço e limite.
  4. O que você enviou. Compare o corpo da autorização com A matriz de preço da autorização. Se a confirmação da reserva veio com hoseNumber [0], autorize sem desconto e cobre pelo price da entrega.
  5. Tratamento com o cliente em Se a bomba não aplicou o desconto.
  6. Acione a ConectTec se repetir no mesmo posto ou bico com configPrice: true.

Recebo 404 no TransactionStatus

O abastecimento citado ainda não está registrado.

  1. Entrega ainda não recebida. O registro só existe depois da entrega; informar o pagamento antes dela costuma responder 404. Se ela não chegou, consulte GET /Delivery/ByAuthId (A entrega não chegou).
  2. Par de identificadores. reserveId e authId precisam ser da mesma autorização: envie os dois que vieram juntos no callback de entrega. Um authId que não é seu responde 401.
  3. Acione a ConectTec se o 404 persistir com a entrega consultável por ByAuthId.

Quando acionar a ConectTec

Depois do roteiro do sintoma. A ConectTec localiza o caso pelos dados abaixo.

SituaçãoDados que a ConectTec precisa
401 que persiste com mapa funcionandoRota completa, stationId, status, horário com fuso.
Reserva sem confirmação repetidastationId, fuelPointNumber, reserveId, horário do 201, quantas reservas seguidas falharam, resultado do seu teste de endpoint.
406 persistentestationId, fuelPointNumber, reserveId da última reserva, reserveTimeOut usado, horário das tentativas.
Callbacks que não chegamDois ou três exemplos de reserveId ou authId, stationId, horário e a base de callback cadastrada.
Entrega ausentestationId, fuelPointNumber, reserveId, authId, horário do abastecimento, resultado de ByAuthId.
Desconto não aplicadostationId, fuelPointNumber, hoseNumber, reserveId, authId, price enviado e recebido, dateTime.
404 ou 500 no TransactionStatusauthId, reserveId, stationId, status e horário da chamada.
500 repetido em qualquer rotaRota, corpo enviado (sem a chave), horário com fuso, quantas tentativas e com que intervalo.

Enumerações e limites

Todos os códigos numéricos da API e dos callbacks em um lugar só, mais os prazos, as faixas e os formatos que fazem uma chamada ser aceita ou recusada.

Todas as enumerações trafegam como número, exceto limitType, que é a string "$" ou "V". Os nomes das tabelas não aparecem no JSON (exceto fuelTypeDescription, informativa). Um número fora das tabelas é valor reservado: ignore e, em callback, responda 200.

Tipo de combustível (fuelType)

Aparece no mapa de pista, na resposta da reserva, nos callbacks de status e de entrega (dentro de fuel e tank.fuel), na consulta por authId, e é um campo que você envia em Autorizar por tipo de combustível. Os valores vão de 0 a 16.

ValorCombustívelfuelTypeDescriptionObservação
0OutraoutraTambém é o valor quando o combustível do bico não foi identificado (nos callbacks de status, fuel vem como {"fuelType": 0, "name": null}).
1EtanoletanolBico 2 do ponto de abastecimento 3 no posto de exemplo.
2Etanol aditivadoetanolAditivada
3Etanol premiumetanolPremium
4Etanol premium aditivadoetanolPremiumAditivada
5GasolinagasolinaGasolina comum. Bico 1 do ponto de abastecimento 3 no posto de exemplo.
6Gasolina aditivadagasolinaAditivada
7Gasolina premiumgasolinaPremium
8Gasolina premium aditivadagasolinaPremiumAditivada
9Diesel S10dieselS10
10Diesel S50dieselS50
11Diesel S500dieselS500
12Diesel S1200dieselS1200
13Diesel marítimodieselMaritimo
14Querosenequerosene
15GNVgnvEm AuthorizeByFuelType, em ponto de abastecimento sem preset, a bomba cobra o preço dela, sem limite. Veja Caso GNV.
16Arlaarla
  • O texto fuelTypeDescription vem vazio ("") quando o número não está na tabela, e o campo só existe no mapa, na reserva e na consulta por authId. Os callbacks trazem apenas fuelType e name.
  • O name é o nome que o posto deu ao combustível ("Gasolina Comum") e pode variar de posto para posto. A chave é fuelType.
  • Na autorização por tipo, campo ausente vale 0 (Outra) e valores acima de 16 respondem 500.
"hoses": [
  {
    "hoseNumber": 1,
    "price": 6.29, "price2": 6.19, "price3": 0, "price4": 0,
    "fuel": { "name": "Gasolina Comum", "imagePath": null, "fuelType": 5, "fuelTypeDescription": "gasolina" }
  },
  {
    "hoseNumber": 2,
    "price": 4.39, "price2": 4.29, "price3": 0, "price4": 0,
    "fuel": { "name": "Etanol", "imagePath": null, "fuelType": 1, "fuelTypeDescription": "etanol" }
  }
]

Estado do ponto de abastecimento (fuelPointStatus)

Vem no callback de status e diz o que o ponto de abastecimento (o visor da bomba) está fazendo naquele instante. O callback sai para reservas e autorizações suas, com a base cadastrada e a rota liberada.

ValorNomeSignificadoChega no callback de status
0notRespondingA bomba não responde ao concentrador.Sim
1blockedPonto de abastecimento ocioso, não autorizado, com os bicos no descanso.Sim
2authorisedPonto de abastecimento ocioso, autorizado, com os bicos no descanso.Sim
3callingPonto de abastecimento com bico fora do descanso e bomba ainda não liberada.Sim
4deliveringAbastecendo.Sim
5tempStoppedPonto de abastecimento com bico fora do descanso, parada temporária.Não
6deliveryEndPonto de abastecimento com os bicos no descanso, abastecimento concluído.Não

Os valores 5 e 6 existem no posto, mas a ConectTec não os envia por este callback, a não ser junto de um reason 1. O fim do abastecimento chega somente pelo callback de entrega.

O reason diz o que aconteceu, e o fuelPointStatus diz como o ponto de abastecimento está. Quando os dois parecem discordar, vale o reason. Detalhes de uso em Acompanhar e cancelar e em Máquinas de estado.

Motivo do callback de status (reason)

Estes são os valores com significado definido. A coluna "Encerra" diz se o reason fecha a reserva ou a autorização: depois de um valor que encerra, aquela reserva não aceita mais autorização, e o ponto de abastecimento deixa de dar 406 por causa dela (veja Erros da reserva).

ValorNomeSignificadoO que fazerEncerra
0reserveSuccessfulO posto aceitou a reserva. Chega com status 1 ou 2 e traz os preços de tabela em price.Autorize. Se hoseNumber vier [0], autorize sem desconto, no preço de tabela; o preço aplicado é o price da entrega. Calcule o desconto sobre o price deste callback.não
1reserveFailedO posto recusou a reserva, por exemplo porque o ponto de abastecimento não está disponível. Chega com qualquer status.Encerre a tentativa. Ofereça outro ponto de abastecimento ou nova tentativa.sim
2reserveTimedOutPassou o reserveTimeOut sem autorização.Descarte a reserva e reserve de novo se o cliente quiser continuar.sim
3reserveCancelledReserva cancelada, em geral depois de um Stop seu.Descarte a reserva.sim
4authSuccessfulO posto aceitou a autorização e a bomba foi liberada. Chega com status 2 ou 1.Aguarde o abastecimento.não
5authFailedO posto recusou a autorização.Não cobre e desfaça o bloqueio do valor do cliente (cobrança, saldo). Faça nova reserva se o cliente quiser tentar de novo.sim
6authTimedOutPassou o authTimeOut sem o abastecimento começar.Desfaça o bloqueio do valor do cliente (cobrança, saldo).sim
7authCancelledAutorização cancelada, em geral depois de um Stop seu.Desfaça o bloqueio do valor do cliente (cobrança, saldo).sim
8stopSuccessfulA parada pedida por um Stop seu foi executada.Aceite como cancelamento concluído. Se já havia volume, espere a entrega parcial.sim
9stopFailedO cancelamento que você pediu não se completou.A reserva ou a autorização segue valendo e expira sozinha no prazo. Uma reserva que recebeu Stop não aceita mais autorização.não
11runningTotalAtualização durante o abastecimento, com status 4. volume (litros) e total (R$) são parciais.Reinicie a espera de silêncio. O valor final está na entrega.não
12reserveInterruptedA reserva foi interrompida por um evento no posto.Descarte a reserva e reserve de novo se o cliente quiser continuar.sim
13authInterruptedA autorização foi interrompida por um evento no posto.Se já havia volume, espere a entrega e concilie. Se não havia, desfaça o bloqueio do valor e mantenha o authId na conciliação.sim
14stopInterruptedO cancelamento foi interrompido por um evento no posto.Mesmo tratamento do valor 9.não

Qualquer outro valor é reservado

Os números que não estão na tabela (o 10, o 15 em diante) não têm significado público. Se um deles chegar, ignore o conteúdo e responda HTTP 200. A tabela de decisão por situação, com o texto sugerido ao cliente, está em O que chegou e o que fazer.

Tipo de limite (limitType)

Campo da autorização. É uma string de exatamente 1 caractere, sem espaço e com a caixa da tabela.

ValorSignificadoUnidade de limitValue
"$"Limite por valor.Reais, por exemplo 150 para R$ 150,00.
"V"Limite por volume.Litros, por exemplo 30 para 30,00 L.

Envie limitType e limitValue sempre juntos, com "$" ou "V". O limitValue aceita 1 ou mais; zero e negativos dão 400, e mais de duas casas decimais são arredondadas para duas. Em GNV sem preset, não envie nenhum dos dois (Caso GNV). As escolhas por situação estão em Limite do abastecimento.

Estado do pagamento (transactionStatus)

Campo do informe de pagamento. Aceita de 0 a 4, só como número (o texto "paid" dá 400). O valor é repassado ao posto, e os estados podem ser enviados em qualquer ordem.

ValorNomeSignificado
0capturedPagamento capturado. Combine o uso com a ConectTec no cadastro. É o valor assumido quando o campo é omitido.
1paidPagamento realizado pela sua aplicação diretamente ao estabelecimento.
2scheduledPagamento realizado pela sua aplicação, com repasse ao estabelecimento feito mais tarde por você.
3contestedCombine o uso com a ConectTec no cadastro.
4anticipatedCombine o uso com a ConectTec no cadastro.

Quando usar cada um, e o que combinar com a ConectTec para 0, 3 e 4, está em Estados do pagamento.

Documento fiscal (invoiceType)

Campo do informe de pagamento. Diz ao posto o que emitir. Aceita de 0 a 3.

ValorNomeO posto emite
0invoiceNF-e
1receiptCupom (recibo)
2bothNF-e e cupom
3noneNenhum documento

Omitir invoiceType pede NF-e

A API aceita a chamada sem o campo e assume 0. Envie 3 quando não quiser nota emitida pelo posto. Veja Nota fiscal.

Campos com formato diferente no status e na entrega

Alguns campos têm o mesmo nome nos dois callbacks e formatos diferentes. Leia cada callback com o seu próprio modelo.

CampoCallback de statusCallback de entrega
hoseNumberLista de inteiros, um por bico do evento. É [0] quando nenhum bico é identificado.Inteiro: o número do bico que abasteceu.
priceMatriz number[][]. No reason 0 são os preços de tabela por nível, como o posto os informa. Depois da autorização, o preço aplicado é o price da entrega.Número: o preço por litro que a bomba aplicou. É o preço aplicado.
authIdnull até a autorização.Sempre preenchido.
volume, totalParciais, em litros e em R$, durante o abastecimento.Finais, como a bomba informou, sem arredondar.
dateTimeAusente.Hora local do posto com sufixo -03:00 fixo.
fuelfuelType e name.fuelType e name.

Os campos completos estão em Contrato dos callbacks e em Campos do corpo da entrega.

Tempos e limites

"Sugerido" marca recomendação do guia; a API não impõe.

Prazos e janelas

ItemValorObservaçãoOnde ler
reserveTimeOut1 a 120 sObrigatório, sem valor padrão. Fora da faixa, a resposta é 400. O prazo conta desde a criação da reserva, pouco antes do 201; ao expirar sem autorização, chega reason 2.Reservar
authTimeOut1 a 200 sObrigatório. Fora da faixa, 400. Ao expirar sem abastecimento, chega reason 6.Autorizar
updateRate2 a 60 sObrigatório e não desliga os callbacks de acompanhamento.Autorizar
Janela do 406reserveTimeOut + 120 sContada desde a criação da reserva, por integrador e por ponto de abastecimento. Com reserveTimeOut 120, o pior caso é 240 s. Fecha antes se a reserva receber um reason que encerra ou se o abastecimento for gravado.Erros da reserva
Resposta ao callbackHTTP 200, em menos de 5 sSó o código 200 vale: 201, 202, 204 e redirecionamentos não contam como recebido. O corpo da resposta é ignorado. O certificado TLS do seu servidor precisa ser válido.Contrato dos callbacks, Responder
Envio do callbackUma vez, no momento do eventoA entrega fica disponível em GET /Delivery/ByAuthId (Conciliar). O estado seguinte chega no próximo callback; a entrega fecha o abastecimento. Processe cada callback pelo reason: um estado final não volta atrás, e ignore um reason 0 ou 4 que chegue depois de um estado final.Quem expira o quê
Atraso da entregaQuando a conexão voltaSe o posto perde a conexão no meio do abastecimento, o concentrador guarda a entrega e a envia quando a conexão volta, com o dateTime do abastecimento.Entrega tardia
Esperas por callbackSugerido: 15 s para o reason 0 (aviso "conectando" após 10 s), 20 s (ou authTimeOut, se menor) para o reason 4 e authTimeOut + 10 s para o início do abastecimento, o maior entre 60 s e 3 vezes o updateRate de silêncio em andamento; para a entrega, combine o prazo de espera na homologaçãoSuas esperas
Repetição após erroVer observaçãoAntes de repetir um POST, confira o estado da operação anterior. 500 recebido: erro ao processar, nada foi criado; repita uma vez. Timeout, 502, 503 ou 504: espere o callback ou a janela do 406.Convenções
Informe de pagamentoDepois da entregaEnvie depois que a entrega existir; antes disso a resposta é 404.Informar o pagamento
Frequência e tentativas da conciliaçãoVeja a estratégia de conciliaçãoCombine o limite de requisições no cadastro. O cronograma completo, com primeira consulta e prazo final, fica em um só lugar.Estratégia

Formatos e faixas de campos

ItemValorObservaçãoOnde ler
reserveId, authIdGUID de 36 caracteres, minúsculas, com hífensExemplo: b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f.Convenções
providerIdGUID com hífensTem que pertencer à chave usada. Um valor que não é GUID responde 500 na reserva.Reservar
stationId, fuelPointNumber, hoseNumberInteirosstationId é o ID do posto que a ConectTec informou a você. hoseNumber é o número do bico que o mapa de pista mostra.Descobrir posto e ponto de abastecimento
Código do QR code7 dígitos numéricosCom zeros à esquerda.QR code
Níveis de preçoAté 4 por bicoprice, price2, price3 e price4 no mapa. O valor 0 indica nível inexistente.Campos do mapa
price na autorizaçãoMatriz de númerosEm Authorize (por bico): linhas são níveis, uma coluna por bico. Autorize um bico por chamada (ou envie o mesmo preço em todas as colunas). Em AuthorizeByFuelType: uma coluna, um preço por nível, vale para todos os bicos do combustível. O preço aplicado vem em price da entrega, e o de tabela em pricewithoutdiscount. Envie com 2 ou 3 casas, conforme a tabela do posto.A matriz de preços
limitValue1 ou maisReais ou litros conforme limitType. Mais de 2 casas são arredondadas para 2.Limite
Decimais no JSONPonto, sem milhar, como númeroEscreva 6.29, nunca "6,29".Convenções
volume, price, total na entregaComo a bomba informouSem arredondamento. volume * price pode diferir de total; vale o total.Campos da entrega
DatasISO 8601Nas datas que você envia, informe o deslocamento: 2026-11-03T14:22:05-03:00. A entrega traz hora local do posto com -03:00 fixo. O sufixo -03:00 é fixo: leia data e hora como relógio local do posto. Na consulta por authId, o dateTime devolvido é a hora local do posto, sem fuso.Convenções
Base de callbackHTTPS, sem barra no finalA ConectTec acrescenta o caminho de cada callback.Cadastro
customerIdentification11 ou 14 dígitosOpcional. Se enviado, 11 (CPF) ou 14 (CNPJ) dígitos; outro tamanho dá 400.Requisição do pagamento
providerStationIDInteiro, 1 ou mais, obrigatórioNo informe de pagamento, o nome termina em ID.Requisição do pagamento
providerAutorizationCodeInteiro, 1 ou mais, opcionalRequisição do pagamento
value0 ou maisEm reais. Veja o que acontece quando é maior ou menor que o total.Valor pago
paymentReconciliationIdAté 100 caracteresRequisição do pagamento
invoiceFreeText, receiptFreeTextAté 250 caracteresRequisição do pagamento
cfop, uf, cepAté 4, 2 e 8 caracteresCEP só com dígitos.Requisição do pagamento

Homologação e entrada em produção

O roteiro de testes que você roda no posto de testes antes de a ConectTec vincular postos reais: 14 casos com o que fazer e o que esperar, os critérios de aprovação e o que muda em produção.

Como a homologação funciona

Não há ambiente separado. Você testa em https://api.conecttec.com.br, a mesma URL de produção, com a chave restrita a um posto de testes. A ConectTec informa o stationId dele no cadastro (veja Ambiente único e homologação no posto de testes). Cada chamada chega a um concentrador de verdade: uma reserva ocupa o ponto de abastecimento e uma autorização libera a bomba.

  1. Combine a janela de testes com a ConectTec.
  2. Rode os 14 casos e guarde as evidências.
  3. Envie as evidências pelo contato técnico do cadastro e peça a aprovação. Combine com a ConectTec o prazo de revisão e o prazo para vincular os postos reais.
  4. A ConectTec vincula os postos reais ao seu cadastro e informa o stationId de cada um.

Combine a janela de testes

Os casos 10 e 13 exigem alguém operando a bomba, e os casos 8 e 9 também quando você quer ver o abastecimento (veja a tabela): combine com a ConectTec quem faz isso e quando. Os demais você roda sozinho, a qualquer hora, com o concentrador do posto online.

CasoPrecisa de alguém na bombaDepende de
1 a 7nãonada além do concentrador online; cada caso faz a própria reserva
8sim, se for seguido do caso 10: o operador precisa estar na bomba antes de você autorizaruma reserva confirmada
9sim, para confirmar o bico na entrega (sem operador, termina com Stop)uma reserva confirmada
10simcaso 8 (a mesma autorização)
11nãouma reserva confirmada
12nãoa entrega recebida no caso 10
13simum segundo abastecimento
14nãoa entrega do caso 10 e a autorização expirada do caso 11

Pré-requisitos

Rode os casos em sequência. Antes de cada caso que reserva, o ponto de abastecimento precisa estar livre: encerre a reserva anterior com Stop ou espere o callback de encerramento (reason 1, 2, 3, 5, 6, 7, 8, 12 ou 13). Sem isso a nova reserva responde 406, por até reserveTimeOut mais 120 segundos. Antes de começar, resolva:

Pré-requisitoComo conferir
Chave de API, providerId e stationId do posto de testesEntregues no cadastro. O caso 1 prova que a chave funciona.
Rotas liberadasTodas as rotas que você vai usar liberadas para o seu cadastro. Rota não liberada responde 401 sem corpo (veja Entender o 401).
Base de callback cadastradaSem barra no final, por exemplo https://integracao.suaempresa.com.br/conecttec/8f3k2m9q. Peça à ConectTec a confirmação por escrito do valor cadastrado e de que os dois callbacks (status do ponto de abastecimento e entrega concluída) estão liberados para você. O callback sai para reservas e autorizações suas, com a base cadastrada e a rota liberada.
Servidor de callback respondendo 200{base}/V3/FuelPoint/Status e {base}/FuelPoint/Delivery respondem HTTP 200 em menos de 5 segundos a um POST vindo de fora da sua rede (Testar o seu servidor, Regras de resposta).
Pontos de abastecimento do posto de testesRode o caso 2. Se o ponto de abastecimento de testes tem configPrice igual a false, a troca de preço dos casos 8 e 10 não pode ser validada: peça outro ponto de abastecimento à ConectTec.

Checklist dos casos obrigatórios

A aprovação exige os 14.

Os casos, um a um

Os exemplos usam o Posto Exemplo (stationId 4021), o ponto de abastecimento 3 com o bico 1 de gasolina comum (fuelType 5) e o bico 2 de etanol (fuelType 1). No posto de testes, use os números, preços e identificadores dele.

Caso 1. Autenticação

Faça. GET /V6/ForecourtMap/ById/4021 com a sua chave (mapa de pista). Repita com a chave alterada, sem o cabeçalho e com outro stationId.

Esperado.

  • Chave válida e posto de testes: HTTP 200 com o objeto station.
  • Chave alterada, cabeçalho ausente e stationId que não é o seu: HTTP 401 nos três casos (Autenticar uma chamada).

Caso 2. Mapa de pista

Faça. Na resposta do caso 1, leia pontos de abastecimento, bicos, stationStatus, preset e configPrice. Campos em Campos do mapa de pista.

Esperado.

  • No ponto de abastecimento 3 do exemplo, o bico 1 tem fuelType 5 e o bico 2 tem fuelType 1.
  • stationStatus é true. Se for false, o concentrador do posto de testes está sem conexão: avise a ConectTec antes de seguir.
  • O preço da autorização vem da reserva (Preço do mapa e preço da reserva).

Caso 3. QR code

Faça. GET /QRCodeInformation/0004217 com o qrcode do ponto de abastecimento 3 no mapa, e depois com um código de 7 dígitos que não exista.

Esperado.

  • HTTP 200 com {"fuelPointNumber": 3, "stationId": 4021}.
  • Código que não existe: HTTP 401. Código com menos de 7 caracteres: HTTP 400.

Detalhes em Consultar um QR code.

Caso 4. Reserva com confirmação

Faça. POST /V4/Delivery/Reserve no ponto de abastecimento 3 com reserveTimeOut 60 (requisição). Termine com Stop ou espere o reason 2, para o ponto de abastecimento ficar livre para o caso seguinte.

Esperado.

  • HTTP 201 com reserveId e o objeto fuelPoint.
  • Callback POST {base}/V3/FuelPoint/Status com o mesmo reserveId e reason 0.
  • price é lido pela posição em hoseNumber, não pelo número do bico (Como ler a matriz de preço). No exemplo, o bico 1 dá 6,29 no nível 1 e 6,19 no nível 2. Se hoseNumber vier [0], autorize sem desconto, no preço de tabela; o preço aplicado é o price da entrega.
  • O callback pode chegar poucos milissegundos depois do 201. A autorização só vale depois do reason 0.

Se o reason 0 não chegar até o fim do reserveTimeOut, a causa mais comum é a base de callback. Veja a tabela Se um caso falhar.

Caso 5. Reserva expirada

Faça. Reserve o ponto de abastecimento com reserveTimeOut 10, espere o reason 0 e não autorize. Depois do callback reason 2, tente autorizar a mesma reserva e faça uma nova reserva no ponto de abastecimento.

Esperado.

  • Callback com o mesmo reserveId e reason 2 (reserveTimedOut) logo depois dos 10 segundos.
  • POST /V2/Delivery/AuthorizeByFuelType nessa reserva responde HTTP 400.
  • A nova reserva no mesmo ponto de abastecimento responde 201.
  • Se um reason 0 atrasado chegar depois do reason 2, ignore-o (Quando a reserva expira).

Caso 6. Ponto de abastecimento ocupado (406)

Faça. Reserve o ponto de abastecimento 3 com reserveTimeOut 60, espere o reason 0 e envie uma segunda reserva para o mesmo ponto de abastecimento antes de o prazo acabar. Depois cancele a primeira (caso 7) ou espere que expire.

Esperado.

  • A segunda reserva responde HTTP 406 e não gera reserveId novo. A primeira reserva segue ativa, sem alteração.
  • Uma reserva aberta bloqueia o ponto de abastecimento por até reserveTimeOut mais 120 segundos, e a janela fecha antes se chegar um callback de encerramento (Erros da reserva).

Caso 7. Cancelamento por Stop

Faça. Reserve o ponto de abastecimento, espere o reason 0 e envie POST /Delivery/Stop só com o reserveId (antes da autorização; depois dela, reserveId e authId). Depois tente autorizar a reserva.

Esperado.

  • HTTP 201 com cancelId. O 201 só confirma o recebimento.
  • Callback com reason 3 ou 8. Os dois indicam cancelamento concluído. Se vier reason 9 ou 14, o cancelamento não se completou e a reserva expira sozinha no prazo.
  • Autorizar a reserva cancelada responde HTTP 500 até o callback de encerramento chegar e HTTP 400 depois dele (Cancelar com Delivery/Stop).
  • Uma nova reserva no ponto de abastecimento só é aceita depois do callback de encerramento. Antes dele, o 406 do caso 6 volta.

Caso 8. Autorização por combustível, com desconto

Faça. Reserve o ponto de abastecimento 3, espere o reason 0 e chame POST /V2/Delivery/AuthorizeByFuelType com fuelType 5, updateRate 2, authTimeOut 120 e desconto de R$ 0,20 por litro nos dois níveis (price [[6.09], [5.99]]). Envie limitType "$" e limitValue. Requisição completa em Autorizar por tipo de combustível. Esta autorização é a mesma do caso 10 e expira em authTimeOut segundos (reason 6) depois do reason 4. Se o operador precisar de mais tempo, use authTimeOut 200, o máximo, e comece o caso 10 logo em seguida.

Esperado.

  • HTTP 201 com authId e o mesmo reserveId.
  • Callback com reason 4 e o authId preenchido.
  • O preço aplicado vem em price da entrega, conferido no caso 10 (O campo price).
  • Opcional: depois do reason 4, autorizar a mesma reserva de novo responde 400.

Caso 9. Autorização por bico

Faça. Reserve de novo e chame POST /V2/Delivery/Authorize com hoseNumber [2] (etanol), price [[4.29], [4.19]] (desconto de R$ 0,10 por litro) e authTimeOut 120 (Autorizar por bico), um bico só. Com alguém na bomba, abasteça uns litros para ver o bico na entrega. Sem ninguém, envie Stop com reserveId e authId depois do reason 4 e espere o callback reason 7 ou 8. Se o ponto de abastecimento de testes tem um bico só, rode o caso com ele.

Esperado.

  • HTTP 201 com authId, depois callback com reason 4.
  • Se houve abastecimento, a entrega traz hoseNumber 2 e fuel.fuelType 1, e price igual a um dos preços enviados para o bico 2 (4,29 ou 4,19 no exemplo).
  • Bico que o ponto de abastecimento não tem responde 500.

Caso 10. Abastecimento completo, entrega e preço

Exige alguém na bomba. Faça. Com a autorização do caso 8 em reason 4 e dentro do authTimeOut dela (a expiração é definitiva), o operador tira o bico, abastece gasolina e devolve o bico.

Esperado.

  • Callback com fuelPointStatus 4 quando o abastecimento começa (em geral com reason 11; não exija o reason), depois callbacks de andamento com volume e total crescentes, a cada updateRate segundos aproximadamente.
  • O fim do abastecimento chega pelo callback POST {base}/FuelPoint/Delivery, com o seu authId e o seu reserveId.
  • Conferência do preço: price é um dos preços com desconto que você enviou, um por nível (6,09 ou 5,99 no exemplo), e pricewithoutdiscount é o de tabela (6,29). No exemplo do guia, 30,00 L a 6,09 dão total 182,70 com desconto e 188,70 sem. price igual a pricewithoutdiscount indica que a bomba não aplicou a troca de preço (configPrice, níveis enviados). Veja Troca de preço e desconto.
  • total é 182,70 se a bomba aplicou 6,09, e ETotEnd menos ETotStart fica próximo de volume. Cobre pelo total da entrega, não por volume vezes price.
  • O servidor respondeu 200 em menos de 5 segundos (Casar com a sua autorização e deduplicar).

Caso 11. Autorização expirada sem abastecer

Faça. Reserve o ponto de abastecimento, espere o reason 0, autorize com authTimeOut 20 e não tire o bico do descanso. Depois do prazo, tente autorizar de novo e faça uma nova reserva. O authId é usado no caso 14.

Esperado.

  • Callback reason 4 e, cerca de 20 segundos depois, callback reason 6 (authTimedOut). A expiração é definitiva.
  • Nenhum callback de entrega chega para esse authId.
  • Nova autorização na mesma reserva responde 400.
  • Se um reason 4 atrasado chegar depois do reason 6, ignore-o (Se ninguém abastecer).

Caso 12. Callback que você não reconhece

Faça. Envie ao seu servidor o corpo da entrega do caso 10 (POST {base}/FuelPoint/Delivery, payload em Exemplo completo) com um authId que você não criou, e um callback de status com reason 99.

Esperado.

  • As duas chamadas respondem HTTP 200.
  • O authId que você não criou é gravado como entrega órfã, sem cobrança, e a resposta continua 200.
  • Um callback de status com reason que o guia não lista (por exemplo, 99) recebe 200 e não muda o estado de nenhuma reserva (Regras de resposta).

Caso 13. Servidor fora do ar e recuperação por conciliação

Exige alguém na bomba. Faça.

  1. Reserve e autorize um novo abastecimento e espere o reason 4.
  2. Tire o seu servidor de callback do ar (ou faça-o devolver 503) antes de o operador abastecer.
  3. O operador abastece e devolve o bico. Cada callback é enviado uma vez, no momento do evento.
  4. Suba o servidor de novo e consulte GET /Delivery/ByAuthId?authId=... (Consultar por authId).

Esperado.

  • A consulta responde HTTP 200 com a entrega. Com 404, a entrega ainda não está disponível (estratégia de consulta).
  • O formato da consulta difere do callback (Diferenças entre callback e consulta). Na consulta priceWithoutDiscount vem 0; o preço aplicado é o price.
  • O estado seguinte chega no próximo callback; a entrega fecha o abastecimento.

Caso 14. TransactionStatus: pago e abastecimento inexistente

Faça. Com a entrega do caso 10, chame POST /V3/Delivery/TransactionStatus com transactionStatus 1, value igual ao total da entrega e invoiceType 3 para o posto não emitir nota. Depois informe o pagamento do authId expirado do caso 11 (Informar o pagamento).

Esperado.

  • Pago: HTTP 200 com corpo vazio. O último estado enviado prevalece.
  • O authId da autorização expirada responde HTTP 404, porque não houve entrega.
  • Para usar 0, 3 ou 4, combine o uso com a ConectTec no cadastro.

Se um caso falhar

O que você vêO que conferir
401 sem corpo numa rota nova, com o mapa respondendo 200A rota não está liberada para o seu cadastro, ou o reserveId ou authId não é seu (Entender o 401).
Reserva ou autorização com 201 e nenhum callbackBase de callback cadastrada igual à que você enviou, sem barra no final. Servidor respondendo 200, e só 200, em menos de 5 segundos (Testar o seu servidor). Rota de callback liberada para você. Callbacks de status só saem para reservas feitas com a sua chave. Se tudo estiver certo, fale com a ConectTec.
Autorização responde 400 logo depois do 201 da reservaO callback reason 0 ainda não chegou, ou a reserva já expirou, foi autorizada ou cancelada.
Segunda reserva responde 406 sem motivo aparenteHá uma reserva sua aberta no ponto de abastecimento, de um teste anterior. Ela fecha com um callback de encerramento ou depois de reserveTimeOut mais 120 segundos.
Entrega com price igual a pricewithoutdiscountO ponto de abastecimento tem configPrice false, ou você mandou só uma linha de price. Veja Troca de preço e desconto.
Abastecimento terminou e a entrega não chegouConsulte Delivery/ByAuthId. Se a consulta responder 200, a entrega existe: processe-a e confira o seu servidor de callback e a base cadastrada. Se responder 404, siga a estratégia de Conciliar e recuperar entregas e fale com a ConectTec só ao fim do prazo da estratégia (Entrega que não chegou).
500 em reserva ou autorizaçãoConfira identificadores, fuelType e hoseNumber contra a resposta da reserva. Regras de nova tentativa em Erros e diagnóstico.

Evidências para a aprovação

Envie à ConectTec, pelo contato técnico do cadastro, uma tabela com uma linha por caso:

  • Número do caso e data e hora em que você o rodou.
  • O reserveId e o authId usados.
  • O status HTTP de cada chamada e o reason de cada callback recebido, com a hora de recebimento.
  • Para o caso 10: price, pricewithoutdiscount, volume e total da entrega e o valor que você cobrou.
  • Para o caso 13: a entrega recuperada gravada uma vez só, pela chave authId e ETotEnd.

Critérios para entrar em produção

A ConectTec vincula postos reais quando estes pontos estão atendidos.

O que muda em produção

A URL, a chave, o providerId e a base de callback continuam os mesmos. O que muda:

ItemNa homologaçãoEm produção
PostosSó o posto de testes.Os postos reais que a ConectTec vincular ao seu cadastro, cada um com o seu stationId.
Quem abasteceUm operador combinado com a ConectTec.Clientes reais, com dinheiro real.
Pontos de abastecimentoOs do posto de testes.preset, configPrice, número de bicos, níveis de preço e GNV mudam de posto para posto. Leia o mapa e a resposta da reserva de cada um.
CallbacksChegam para reservas no posto de testes.Chegam para reservas em qualquer posto vinculado, na mesma base de callback. Cada abastecimento gera um callback a cada updateRate (2 a 60 segundos).

Suporte

Fale com a ConectTec pelo contato técnico informado no cadastro, que a ConectTec também usa para avisar sobre incidentes. Envie:

  • stationId e fuelPointNumber.
  • reserveId e authId, quando existirem.
  • Método e rota da chamada, status HTTP recebido e horário com fuso (2026-11-03T14:22:05-03:00).
  • Para callback que não chegou: a base de callback cadastrada, o horário esperado e o que o log do seu servidor mostra.

Erros por rota: Erros e diagnóstico. reason e estados do ponto de abastecimento: Máquinas de estado.

Versão do guia 1.0, novembro de 2026.