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.
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:
- 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 (
reason0): Se a confirmação não chegar. - Cada callback é enviado uma vez, no momento do evento. Processe cada callback pelo
reason; um estado final não volta atrás, e ignore umreason0 ou 4 que chegue depois de um estado final. Veja Contrato dos callbacks. - 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.
- 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.
- O preço aplicado vem em
priceda entrega. O de tabela vem empricewithoutdiscount. Cobre pelo total da entrega. Veja Troca de preço e desconto e Receber a entrega. - 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
reserveTimeOutmais 120 s. Veja Reservar o ponto de abastecimento. - 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 odateTimedo 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.
/QRCodeInformation/{codigo}SecretKeyAuthorizationO codigo tem 7 dígitos numéricos, com zeros à esquerda.
{
"fuelPointNumber": 3,
"stationId": 4021
}
| HTTP | Quando acontece | O que fazer |
|---|---|---|
| 400 | O código não tem 7 dígitos. | Mande os 7 dígitos. |
| 401 | Chave 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. |
| 500 | Formato 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.
/V4/Delivery/ReserveSecretKeyAuthorizationPOST /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.
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
| Termo | Campo ou rota | O que é | No posto de exemplo |
|---|---|---|---|
| Identificador de provedor | providerId | GUID que a ConectTec entrega no cadastro. Identifica sua empresa. | 7d1e4c2a-5b3f-4e8a-9c6d-2f1a0b9e8d7c |
| Chave de API | cabeçalho SecretKeyAuthorization | Segredo que autentica cada chamada. Valor cru no cabeçalho, sem Bearer. Veja Credenciais e ambiente. | <SUA_CHAVE> |
| Posto | stationId | Número inteiro que identifica o posto como a ConectTec informa a você no cadastro. | 4021 (Posto Exemplo) |
| Concentrador | sem campo | Equipamento da ConectTec instalado no posto. | sem campo |
| Ponto de abastecimento | fuelPointNumber | O visor da bomba, controlado por uma CPU. É a unidade que você reserva e autoriza. Tem um ou mais bicos. | 3 |
| Bico | hoseNumber | Bico físico do ponto de abastecimento. Cada um entrega um combustível. | 1 e 2 |
| Combustível | fuelType | Inteiro 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ço | price, price2, price3, price4 no mapa de pista | Até 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 |
| Reserva | reserveId | GUID de 36 caracteres, com hífens, que identifica a reserva do ponto de abastecimento. | b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f |
| Autorização | authId | GUID de 36 caracteres que identifica a liberação da bomba, com preço e limite. | c3a9e1f7-5d2b-4c8a-b6e4-0f1d3a5c7e9b |
| Entrega | callback FuelPoint/Delivery | O registro final do abastecimento: volume, preço, total e encerrantes. | 30,00 L a R$ 6,09 = R$ 182,70 |
| Encerrante | ETotStart, ETotEnd | Totalizador da bomba antes e depois do abastecimento. A diferença é o volume que passou pela bomba. | vêm na entrega |
| Callback de status | V3/FuelPoint/Status | Chamada 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 entrega | FuelPoint/Delivery | Chamada que a ConectTec faz no seu servidor quando o abastecimento termina. | sem exemplo |
| Base de callback | informada no cadastro | URL do seu servidor. A ConectTec acrescenta o caminho de cada callback. | https://integracao.suaempresa.com.br/conecttec/8f3k2m9q |
| QR code do ponto de abastecimento | qrcode | Có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.
| Reserva | Autorização | Entrega | |
|---|---|---|---|
| Identificador | reserveId | authId | chega no callback com reserveId e authId |
| O que garante | o ponto de abastecimento está separado para você | a bomba está liberada com seu preço e limite | o que foi abastecido de fato |
| Quanto vive | reserveTimeOut, obrigatório, de 1 a 120 s | authTimeOut, obrigatório, de 1 a 200 s | sem prazo; é o registro final |
| Como você confirma | callback de status, reason 0 | callback de status, reason 4 | callback de entrega |
| Se falha | reason 1 (recusada), 2 (expirou), 3 (cancelada), 12 (interrompida) | reason 5, 6, 7, 13 | sem 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.
/V6/ForecourtMap/ById/{stationId}SecretKeyAuthorizationGET /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"
}
]
}
]
}
}
priceaprice4sã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 (reason0); se o bico vier como[0], autorize sem desconto, no preço de tabela. O preço aplicado é opriceda 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
fuelPointsporfuelPointNumberehosesporhoseNumber. stationStatusfalseindica concentrador desconectado.
Erros do mapa de pista
Decida pelo status HTTP.
| HTTP | Quando acontece | O que fazer |
|---|---|---|
| 400 | stationId igual a 0 ou que não é um inteiro. | Use o número que a ConectTec informou. |
| 401 | Chave 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. |
| 500 | Posto 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. |
| 500 | Erro 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ê recebe | Para que serve |
|---|---|
| Chave de API | Vai no cabeçalho SecretKeyAuthorization de toda chamada. Identifica você. Existe uma chave por cadastro. |
providerId | GUID 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 um | O 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 posto | Qual 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 liberadas | A lista de rotas que a sua chave pode chamar (veja Rotas). Cada rota é liberada separadamente. |
| Base de callback registrada | A URL para a qual a ConectTec envia os callbacks. |
Você envia à ConectTec:
| Você envia | Regras |
|---|---|
| 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.
- Cadastro. Você recebe a chave, o
providerIde ostationIddo posto de testes. - Homologação. Você implementa e valida o fluxo completo somente nesse posto. Siga o roteiro de Homologação e entrada em produção.
- Aprovação. A ConectTec revisa o resultado.
- Produção. Depois da aprovação, a ConectTec vincula os postos reais ao seu cadastro e informa os
stationIdde 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.
/V6/ForecourtMap/ById/4021SecretKeyAuthorizationEsta 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.
| HTTP | Quando acontece | O que fazer |
|---|---|---|
| 401 | O cabeçalho SecretKeyAuthorization não foi enviado ou está vazio. | Envie o cabeçalho; confira se um proxy não o remove. |
| 401 | A 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. |
| 401 | A 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. |
| 401 | O 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. |
| 401 | O 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. |
| 500 | Identificador 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
| Tema | Regra |
|---|---|
| Formato | JSON em UTF-8, com Content-Type: application/json nas requisições com corpo. |
| Caixa dos campos | Respostas 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 desconhecidos | A ConectTec pode acrescentar campos a respostas e callbacks. |
| Enumerações | Enumeraçõ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 entrega | ISO 8601 com a hora local do posto e deslocamento fixo, como 2026-11-03T14:22:05-03:00. |
| Datas: consulta de conciliação | dateTime vem sem deslocamento, como 2026-11-03T14:22:05: é a hora local do posto, sem fuso, e não UTC. |
| Datas: mapa de pista | updateDate 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ê envia | ISO 8601 com deslocamento (-03:00 ou Z). |
| Decimais | Ponto 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. |
| GUIDs | reserveId e authId são GUIDs de 36 caracteres, com hífens e minúsculas: b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f. Compare exatamente como recebidos. |
| Inteiros | stationId 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 tentativa | Reserva 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.
| Rota | Para que serve | Seçã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/Reserve | Reserva 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/AuthorizeByFuelType | Autoriza 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/Authorize | Autoriza escolhendo o bico, quando você precisa dessa precisão. | Autorizar o abastecimento |
POST /Delivery/Stop | Cancela uma reserva ou interrompe uma autorização em andamento. O resultado chega por callback. | Acompanhar e cancelar |
POST /V3/Delivery/TransactionStatus | Informa o estado do pagamento do abastecimento. | Informar o pagamento |
GET /Delivery/ByAuthId | Consulta uma entrega pelo authId da sua autorização. | Conciliar e recuperar |
POST {base}/V3/FuelPoint/Status recebido | Callback de status do ponto de abastecimento, enviado pela ConectTec ao seu servidor. | Acompanhar e cancelar |
POST {base}/FuelPoint/Delivery recebido | Callback 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ção | Rota | Devolve |
|---|---|---|
| O cliente leu o QR code de um ponto de abastecimento | GET /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á online | GET /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
/QRCodeInformation/{codigo}SecretKeyAuthorizationCada 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
| Campo | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
SecretKeyAuthorization | cabeçalho | texto | sim | Sua chave de API, valor cru, sem Bearer. |
codigo | caminho | texto, 7 caracteres | sim | O código do QR, com zeros à esquerda. |
Resposta
| Campo | Tipo | Sempre presente | Descrição |
|---|---|---|---|
stationId | inteiro | sim | O posto do ponto de abastecimento, no mesmo identificador que você usa em todas as rotas. |
fuelPointNumber | inteiro | sim | O número do ponto de abastecimento. É o valor de fuelPointNumber na reserva. |
{
"fuelPointNumber": 3,
"stationId": 4021
}
Erros do QR code
| HTTP | Quando acontece | O que fazer |
|---|---|---|
| 400 | O código não tem exatamente 7 caracteres. | Mantenha os zeros à esquerda. |
| 401 | Chave 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. |
| 500 | O 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
/V6/ForecourtMap/ById/{stationId}SecretKeyAuthorizationDevolve 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
| Campo | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
SecretKeyAuthorization | cabeçalho | texto | sim | Sua chave de API. |
stationId | caminho | inteiro | sim | O posto. Zero ou valor não numérico responde 400. |
fuelpointNumber | query | inteiro | não | Filtra 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
| Campo | Tipo | Sempre presente | Descrição |
|---|---|---|---|
name, shortName | texto ou null | sim | Nome e nome curto do posto, como cadastrados. |
cnpj | texto ou null | sim | CNPJ do posto. O identificador é o stationId. |
street, number, city, state, postalCode | texto ou null; number é inteiro | sim | Endereço. number é o número do endereço, não o do posto; vem 0 se vazio. |
latitude, longitude | decimal | sim | Coordenadas. O par 0, 0 significa "sem coordenada cadastrada". |
brand | texto | sim | Bandeira. Texto vazio quando o posto não tem bandeira cadastrada. |
stationStatus | booleano | sim | true quando o concentrador do posto está online. Ver stationStatus. |
crtlVersion, version | texto | sim | Versões do software do concentrador. Informativos. |
canInvoice, canReceipt | booleano | sim | Capacidade do posto de emitir nota e recibo. Fora deste fluxo. |
fuelPoints | lista de pontos de abastecimento | sim | Lista todos os pontos de abastecimento cadastrados. Ordene por fuelPointNumber. |
Objeto fuelPoints[] (ponto de abastecimento)
| Campo | Tipo | Sempre presente | Descrição |
|---|---|---|---|
fuelPointNumber | inteiro | sim | Número do ponto de abastecimento. É o valor de fuelPointNumber em reserva, autorização e callbacks. |
qrcode | texto, 7 caracteres | sim | Código do QR impresso neste ponto de abastecimento, com zeros à esquerda. É o mesmo valor aceito por /QRCodeInformation. |
preset | booleano | sim | O ponto de abastecimento aceita limite de valor ou de volume na autorização. |
block | booleano | sim | O ponto de abastecimento declara suporte a bloquear ou parar o abastecimento. O resultado de Stop é o que vale. |
configPrice | booleano | sim | O 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, term | booleano | sim | O ponto de abastecimento tem leitor de cartão, antena de tag e terminal associado. Informativos, fora deste fluxo. |
hoses | lista de bicos | sim | Bicos do ponto de abastecimento. |
Objeto hoses[] (bico)
| Campo | Tipo | Sempre presente | Descrição |
|---|---|---|---|
hoseNumber | inteiro | sim | Número do bico no ponto de abastecimento, o mesmo da autorização por bico e dos callbacks. Ordene por hoseNumber. |
fuel.fuelType | inteiro, 0 a 16 | sim | Tipo do combustível, tabela abaixo. É a chave para casar descontos; fuel.name varia entre postos. |
fuel.fuelTypeDescription | texto | sim | Descrição curta do tipo (gasolina, etanol). Texto vazio se fuelType estiver fora de 0 a 16. |
fuel.name | texto ou null | sim | Nome comercial, texto livre do cadastro do posto. Para exibir ao cliente. |
fuel.imagePath | texto ou null | sim | Endereço de uma imagem do combustível, quando cadastrada. |
price | decimal, R$ por litro | sim | Preço de tabela do nível 1. |
price2, price3, price4 | decimal, R$ por litro | sim | Preç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. |
updateDate | data e hora, sem fuso | sim | Data do último registro do preço. Não é a hora em que a bomba mudou de preço. |
Tabela de fuelType (0 a 16)
fuelType | Combustível | fuelTypeDescription |
|---|---|---|
| 0 | Outra | outra |
| 1 | Etanol | etanol |
| 2 | Etanol aditivado | etanolAditivada |
| 3 | Etanol premium | etanolPremium |
| 4 | Etanol premium aditivado | etanolPremiumAditivada |
| 5 | Gasolina | gasolina |
| 6 | Gasolina aditivada | gasolinaAditivada |
| 7 | Gasolina premium | gasolinaPremium |
| 8 | Gasolina premium aditivada | gasolinaPremiumAditivada |
| 9 | Diesel S10 | dieselS10 |
| 10 | Diesel S50 | dieselS50 |
| 11 | Diesel S500 | dieselS500 |
| 12 | Diesel S1200 | dieselS1200 |
| 13 | Diesel marítimo | dieselMaritimo |
| 14 | Querosene | querosene |
| 15 | GNV | gnv |
| 16 | Arla | arla |
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.
falseindica posto fora do ar.- O estado do ponto de abastecimento vem dos callbacks de status e da própria 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
| HTTP | Quando acontece | O que fazer |
|---|---|---|
| 500 | O 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. |
| 400 | stationId 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. |
| 401 | Chave 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. |
| 500 | Erro 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
/V4/Delivery/ReserveSecretKeyAuthorization assíncronoCada chamada aceita cria uma reserva nova, com outro reserveId.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
stationId | inteiro | sim | ID do posto como a ConectTec informou a você no cadastro. É o mesmo valor que volta nos callbacks. |
fuelPointNumber | inteiro | sim | Nú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. |
providerId | string (GUID) | sim | Seu identificador de provedor. Tem que ser o dono da chave de API usada na chamada, senão a resposta é 401. |
reserveTimeOut | inteiro | sim | Quanto 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.
| Campo | Tipo | Sempre presente | Descrição |
|---|---|---|---|
reserveId | string (GUID, 36 caracteres) | sim | Identificador da reserva. Volta em todos os callbacks dela. |
providerId | string | sim | Eco do providerId enviado. |
canInovice | booleano | sim | Indica se o posto está habilitado para nota fiscal. O campo se chama canInovice, não canInvoice. |
canReceipt | booleano | sim | Indica se o posto está habilitado para recibo. |
fuelPoint.fuelPointNumber | inteiro | sim | Número do ponto de abastecimento reservado. |
fuelPoint.preset | booleano | sim | O ponto de abastecimento aceita abastecimento com limite pré-definido (valor ou volume). Veja Autorizar o abastecimento. |
fuelPoint.block | booleano | sim | O ponto de abastecimento suporta bloqueio. |
fuelPoint.configPrice | booleano | sim | O 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.card | booleano | sim | O ponto de abastecimento tem leitor de cartão cadastrado. |
fuelPoint.tag | booleano | sim | O ponto de abastecimento tem leitor de tag cadastrado. |
fuelPoint.term | booleano | sim | O ponto de abastecimento tem terminal cadastrado. |
fuelPoint.hoses[] | lista | sim | Todos os bicos cadastrados no ponto de abastecimento. Ordene por hoseNumber. |
fuelPoint.hoses[].hoseNumber | inteiro | sim | Número do bico. É o valor que aparece em hoseNumber[] nos callbacks e que você envia na autorização por bico. |
fuelPoint.hoses[].fuel.name | string | sim | Nome do combustível para exibição. |
fuelPoint.hoses[].fuel.imagePath | string ou null | sim | Caminho de uma imagem do combustível. |
fuelPoint.hoses[].fuel.fuelType | inteiro | sim | Tipo do combustível, de 0 a 16. Tabela completa em Descobrir posto e ponto de abastecimento. |
fuelPoint.hoses[].fuel.fuelTypeDescription | string | sim | Descriçã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.
{base de callback}/V3/FuelPoint/Statusenviado pela ConectTec recebidoO resultado vem em reserveId e reason:
reason | Nome | Significado | O que fazer |
|---|---|---|---|
| 0 | reserveSuccessful | Reserva aceita. fuelPointStatus vem como 1 ou 2; trate os dois do mesmo jeito. | Siga para autorizar, com price e hoseNumber do callback. |
| 1 | reserveFailed | O 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. |
| 2 | reserveTimedOut | O prazo de reserveTimeOut passou sem autorização. | Reserve de novo para continuar. |
| 3 | reserveCancelled | A reserva foi cancelada, em geral depois de um Stop seu. | Reserva encerrada. |
| 12 | reserveInterrupted | A 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.
| Bico | Posição em hoseNumber | Nível 1 | Nível 2 |
|---|---|---|---|
| 1 (gasolina) | 0 | price[0][0] = 6,29 | price[1][0] = 6,19 |
| 2 (etanol) | 1 | price[0][1] = 4,39 | price[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.
| HTTP | Quando acontece | O que fazer |
|---|---|---|
| 400 | Campo ausente, tipo errado (por exemplo stationId como texto), JSON inválido, corpo vazio ou reserveTimeOut fora de 1 a 120. | Corrija a requisição. |
| 401 | Cabeç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. |
| 404 | O 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. |
| 406 | O 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. |
| 500 | Erro 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ério | AuthorizeByFuelType (padrão) | Authorize (por bico) |
|---|---|---|
| Você aponta o alvo por | fuelType: todos os bicos desse combustível no ponto de abastecimento ficam liberados. | hoseNumber: só os bicos que você listar ficam liberados. |
| Preço | Um 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 quando | Todos 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.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
reserveId | string (GUID, 36 caracteres) | sim | Reserva do seu cadastro, confirmada com reason 0 e ainda sem autorização. |
price | matriz de números (number[][]) | sim | Preç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. |
limitType | string de 1 caractere | não | "$" limita por valor, em reais; "V" por volume, em litros. Use só "$" ou "V". |
limitValue | número | não | Valor 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). |
updateRate | inteiro | sim | Intervalo, em segundos, entre os callbacks de acompanhamento (reason 11). Aceita de 2 a 60; fora disso, 400. |
authTimeOut | inteiro | sim | Quanto 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
/V2/Delivery/AuthorizeByFuelTypeSecretKeyAuthorization assíncronoAlém dos campos comuns, esta rota tem um campo próprio:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
fuelType | inteiro (0 a 16) | sim | Mesmo 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
/V2/Delivery/AuthorizeSecretKeyAuthorization assíncronoEm vez de fuelType, esta rota recebe:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
hoseNumber | lista de inteiros | sim | Nú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
configPricefalse. A bomba pode cobrar o preço de tabela (resposta da reserva); o preço aplicado vem empriceda entrega. - Preço aplicado. Vem em
priceda entrega, e o de tabela empricewithoutdiscount. Cobre pelo total da entrega.
Limite do abastecimento
Envie limitType e limitValue juntos, exceto no caso GNV.
| Situação | Limite 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 litros | limitType "V" com os litros. O total em reais depende do preço enviado. |
| Completar o tanque | Teto 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.
| Campo | Tipo | Sempre presente | Descrição |
|---|---|---|---|
authId | string (GUID, 36 caracteres) | sim | Identificador da autorização. Aparece nos callbacks, no informe de pagamento e na consulta da entrega. |
reserveId | string (GUID, 36 caracteres) | sim | Eco 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.
| HTTP | Quando acontece | O que fazer |
|---|---|---|
| 400 | Campo 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. |
| 400 | A 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. |
| 401 | Cabeçalho SecretKeyAuthorization ausente ou com chave inválida. | Confira a chave (401 no acesso). |
| 401 | Rota 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. |
| 404 | A reserva existe, mas o ponto de abastecimento dela não é localizado. | Acione o suporte da ConectTec com o reserveId. |
| 500 | O reserveId não existe ou está mal formado. | Confira o valor contra o que a reserva devolveu. |
| 500 | O 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. |
| 500 | Você 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). |
| 500 | Erro 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).
reason | Nome | Significado | O que fazer |
|---|---|---|---|
| 4 | authSuccessful | O concentrador aceitou a autorização e a bomba está liberada. | O frentista pode tirar o bico do descanso. |
| 5 | authFailed | O concentrador recusou a autorização. | Desfaça a garantia do valor. A reserva não aceita nova autorização: faça uma nova. |
| 6 | authTimedOut | O prazo de authTimeOut passou e ninguém abasteceu. | Desfaça a garantia do valor; reserve de novo se o cliente ainda quiser abastecer. |
| 7 | authCancelled | A autorização foi cancelada, em geral por um Stop seu. | Desfaça a garantia do valor. |
| 13 | authInterrupted | A 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:
- Início do abastecimento: chega como callback com
fuelPointStatus4 (em geral comreason11; não exija o reason), seguido de callbacks de acompanhamento, a cadaupdateRatesegundos, com volume e total parciais (Acompanhar e cancelar). - 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).
- 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 é autorizado | Os bicos listados em hoseNumber | Todos os bicos do ponto de abastecimento com o fuelType informado |
Linhas de price | Níveis de preço | Níveis de preço |
Colunas de price | Uma por bico listado. Autorize um bico por chamada | Vale 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ível | Não na mesma autorização: autorize um dos bicos | O 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).
/V2/Delivery/AuthorizeByFuelTypeSecretKeyAuthorization assíncronoPOST /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):
/V2/Delivery/AuthorizeSecretKeyAuthorization assíncronoPOST /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
configPriceigual afalse. 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 (
fuelType15 efuelPoint.presetigual afalse). 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
priceda 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:
| Campo | Tipo | Sempre presente | Descrição |
|---|---|---|---|
authId | string (GUID) | sim | A autorização que você fez. |
hoseNumber | inteiro | sim | Bico que abasteceu. Se vier 0 ou nulo, compare price com todos os preços que você enviou para o ponto de abastecimento. |
volume | número | não | Litros abastecidos, como a bomba informou. |
price | número | não | Preço por litro aplicado pela bomba, já com a troca de preço, se ela foi aplicada. |
total | número | não | Valor cobrado, em reais. volume * price pode diferir de total por arredondamento da bomba; cobre pelo total. |
pricewithoutdiscount | número | sim | Preç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) efuelPointStatus(como o ponto de abastecimento está). Decida primeiro peloreason; oreserveIdidentifica 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 umreason0 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 doreserveId/authIdcontra 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 chegou | O que significa | Próximo passo |
|---|---|---|
reason 0, status 1 ou 2 | Reserva aceita pelo posto. Trate os dois status do mesmo jeito. | Leia price e hoseNumber e autorize. |
reason 1 | O posto recusou a reserva. | Encerre a tentativa. Ofereça outro ponto de abastecimento ou nova tentativa. Este reason chega com qualquer status. |
reason 2 | Passou o reserveTimeOut sem autorização. | Descarte a reserva. Para continuar, reserve de novo. Autorizar esta reserva responde 400. |
reason 3 | Reserva cancelada, em geral depois de um Stop seu. | Descarte a reserva. Ela não aceita mais autorização. |
reason 12 | A 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 5 | O 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 6 | Passou 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 7 | Autorizaçã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 encerramento | Ponto 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 13 | A 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 8 | Parada executada a pedido de um Stop seu. | Aceite como cancelamento concluído. Se já havia volume, espere a entrega parcial. |
reason 9 ou 14 | O cancelamento que você pediu não se completou. | A reserva ou a autorização segue ativa e expira sozinha no prazo. Veja Cancelar. |
| Status 0 | A 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 reason | Valor 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).
| Etapa | Prazo | O que você recebe |
|---|---|---|
| Reserva sem autorização | reserveTimeOut, de 1 a 120 s, definido por você na reserva | Callback com reason 2. Autorizar depois disso responde 400. |
| Autorização sem início do abastecimento | authTimeOut, de 1 a 200 s, definido por você na autorização | Callback com reason 6. A reserva não aceita nova autorização. |
| Ponto de abastecimento preso para uma nova reserva sua | reserveTimeOut + 120 s desde a criação da reserva, no pior caso | A API responde HTTP 406 na reserva seguinte no mesmo ponto de abastecimento, até a reserva anterior fechar. |
| Resposta ao callback | 5 s | Nada. 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 por | Começa em | Prazo sugerido | Quando estoura |
|---|---|---|---|
Callback reason 0 (reserva aceita) | 201 da reserva | 15 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ção | 20 s, ou authTimeOut se for menor | Envie Stop com reserveId e authId. Não cobre. Ofereça nova tentativa, que exige nova reserva. |
| Frentista tira o bico do descanso | Callback reason 4 | authTimeOut + 10 s | O 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 status | O maior entre 60 s e 3 vezes o updateRate que você enviou | Nã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 caso | Comece a conciliação (cronograma em Conciliar e recuperar entregas) e mantenha a reserva aberta no seu lado. |
Resposta ao Stop (callback) | 201 do Stop | 15 s | Nã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.
/Delivery/StopSecretKeyAuthorization assíncrono| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
reserveId | string (GUID) | não | Reserva a cancelar. Antes da autorização, envie só este campo. |
authId | string (GUID) | não | Autorizaçã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
| Campo | Tipo | Sempre presente | Descrição |
|---|---|---|---|
cancelId | string (GUID) | sim | Identificador 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:
reason3, 7 ou 8: o cancelamento foi concluído. Trate os três como o mesmo resultado.reason9 ou 14: o cancelamento não se completou. A reserva ou a autorização continua ativa e expira sozinha no prazo (reserveTimeOutouauthTimeOut).
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
| HTTP | Quando acontece | O que fazer |
|---|---|---|
| 400 | JSON inválido, corpo que a API não consegue ler ou corpo sem reserveId e sem authId. | Corrija a requisição. |
| 401 | O 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. |
| 500 | O 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
{base}/FuelPoint/Deliveryentrega concluída · enviado pela ConectTecrecebido 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:
- 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.
- A base de callback está cadastrada.
- 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.
| Campo | Tipo | Sempre presente | Descrição |
|---|---|---|---|
stationId | inteiro | sim | ID do posto, o mesmo que a ConectTec informou a você. |
fuelPointNumber | inteiro | sim | Número do ponto de abastecimento (o visor da bomba) onde ocorreu o abastecimento. |
hoseNumber | inteiro | sim | Nú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. |
reserveId | string (GUID de 36 caracteres) | pode ser nulo | A reserva a que o abastecimento pertence. |
authId | string (GUID de 36 caracteres) | sim | A autorização que o abastecimento consumiu. |
deliveryId | inteiro | sim | Identificador da entrega na ConectTec. É o mesmo valor que Delivery/ByAuthId devolve em deliveryId. |
dateTime | string | sim | Fim do abastecimento, no formato 2026-11-03T14:22:05-03:00. É a hora local do posto, com o sufixo -03:00 fixo. |
volume | número | pode ser nulo | Litros abastecidos. |
price | número | pode ser nulo | Preço por litro realmente aplicado pela bomba. Se houve troca de preço ou desconto, já vem com ele. |
total | número | pode ser nulo | Valor do abastecimento em R$, conforme a bomba. |
pricewithoutdiscount | número | sim | Preç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. |
ETotStart | número | pode ser nulo | Encerrante do bico antes do abastecimento. |
ETotEnd | número | pode ser nulo | Encerrante do bico depois do abastecimento. |
fuel.fuelType | inteiro | sim | Tipo de combustível, de 0 a 16. A tabela completa está em Enumerações e limites. |
fuel.name | string | pode ser nulo | Nome do combustível no cadastro do bico. |
tank.name | string | pode ser nulo | Nome do tanque que abastece o bico. |
tank.number | inteiro | pode ser nulo | Número do tanque. |
tank.fuel | objeto | sim | Cópia de fuel, com fuelType e name. |
attendant.id | inteiro | sim | ID do frentista no posto. Vale 0 quando não há frentista identificado. |
attendant.name | string | pode ser nulo | Nome do frentista. |
attendant.tag | string | sim | Tag do frentista. Vale "" quando não há. |
customer.id | inteiro | sim | ID do cliente no posto. Vale 0 quando não há. |
customer.name | string | pode ser nulo | Nome do cliente informado no posto. |
customer.tag | string | pode ser nulo | Tag do cliente informada no posto. |
customer.odometer | inteiro | sim | Odômetro informado no posto. Vale 0 quando não há. |
volume * pricepode diferir detotal: a bomba arredonda e trunca por conta própria. Cobre pelototal.volume,price,totalou 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 empricewithoutdiscount. Cobre pelototalda 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.
| Para | Use | Como |
|---|---|---|
| Achar a sua operação | authId | Compare e guarde exatamente como recebido (a ConectTec envia em minúsculas). |
| Conferir a reserva | reserveId | Deve ser a reserva da autorização encontrada. Quando vier nulo, confie no authId. |
| Conferir o local | stationId, fuelPointNumber, hoseNumber | Devem bater com a reserva e, se você autorizou por bico, com o bico autorizado. |
| Deduplicar | authId + ETotEnd | Cada 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.
- Consulte pelo
authId. A consulta devolve a entrega se a ConectTec a recebeu. - Se devolver, processe pelo mesmo caminho do callback. A consulta traz
eTotStart/eTotEndem camelCase epriceWithoutDiscountsempre 0: comparepricecom cada preço que você autorizou. Detalhes em Conciliar e recuperar entregas. - 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,reserveIdeauthId.
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
/V3/Delivery/TransactionStatusSecretKeyAuthorization síncronoCabeç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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
authId | string (GUID) | sim | Autorização do abastecimento, como a ConectTec devolveu (36 caracteres com hífens). |
reserveId | string (GUID) | não | Reserva 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. |
providerStationID | inteiro | sim | O 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. |
operationalDate | string (ISO 8601) | sim | Data e hora da operação financeira, com fuso (2026-11-03T14:22:05-03:00). Num pagamento futuro, a data do pagamento. |
transactionStatus | inteiro | sim | Estado do pagamento, de 0 a 4. Veja Estados do pagamento. Omitido, vale 0 sem erro. |
value | número | sim | Valor em reais (ponto decimal, zero ou mais). Veja Valor pago. |
invoiceType | inteiro | sim | O que o posto deve emitir, de 0 a 3. Veja Nota fiscal. Omitido, a API assume 0 (NF-e). |
Campos opcionais
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
customerIdentification | string | não | CPF (11 dígitos) ou CNPJ (14) de quem pagou. Envie só dígitos. Outro tamanho resulta em 400. |
paymentReconciliationId | string | não | Identificador da transação no seu agente pagador, por exemplo o txid de um Pix. Até 100 caracteres. |
paymentPartner | inteiro | não | Código do agente pagador. A tabela de códigos é combinada com a ConectTec na homologação. |
providerAutorizationCode | inteiro | não | Código de autorização do seu lado, maior ou igual a 1. Se enviado nulo ou omitido, qualquer valor anterior é apagado. |
invoiceFreeText | string | não | Texto livre para a NF-e. Até 250 caracteres. |
receiptFreeText | string | não | Texto 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.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
razaoSocial | string | não | Razão social ou nome do destinatário. |
inscricaoEstadual | string | não | Inscrição estadual. |
cfop | string | não | CFOP, até 4 caracteres. |
logradouro | string | não | Rua ou avenida. |
enderecoNumero | string | não | Número. Use S/N quando não houver. |
enderecoComplemento | string | não | Complemento. |
bairro | string | não | Bairro. |
cidade | string | não | Cidade. |
uf | string | não | Sigla da UF, 2 caracteres. |
cep | string | não | CEP só com dígitos, até 8 caracteres. |
codigoIbge | string | não | Có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.
| Valor | Nome | Significado | Quando usar |
|---|---|---|---|
0 | capturado | Pagamento capturado. | Combine o uso com a ConectTec antes. É o valor assumido quando o campo é omitido. |
1 | pago | Pagamento realizado pela sua aplicação diretamente ao estabelecimento. | O dinheiro foi confirmado: cartão aprovado, saldo debitado, Pix confirmado. |
2 | agendado | Pagamento 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. |
3 | contestado | Combine o uso com a ConectTec no cadastro. | O caso conhecido é a cobrança Pix que expirou sem pagamento. |
4 | antecipado | Combine 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.
| Valor | O posto emite | Quando usar |
|---|---|---|
0 | NF-e | O cliente pediu NF-e ou o seu contrato com o posto prevê NF-e. Envie os dados fiscais. |
1 | Cupom (recibo) | Só cupom. |
2 | NF-e e cupom | Os dois documentos. |
3 | Nenhum documento | Você 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ção | O que a ConectTec registra |
|---|---|
value igual ao total | Caso normal. Pagamento integral do combustível. |
value menor que o total | Pagamento parcial. O valor pago registrado é o que você enviou. |
value maior que o total | O 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.
| HTTP | Quando acontece | O que fazer |
|---|---|---|
| 400 | Campo 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. |
| 401 | Chave 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. |
| 404 | O 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. |
| 500 | Erro 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ário | Chamadas, em ordem |
|---|---|
| Pagamento imediato (cartão, saldo, carteira) | Uma chamada com transactionStatus: 1 assim que a entrega chegar e o pagamento estiver confirmado. |
| Pix confirmado | Uma chamada com transactionStatus: 1 quando o Pix é confirmado, com operationalDate da confirmação e o txid em paymentReconciliationId. |
| Pix que expira | Uma 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
dateTimedo 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
/Delivery/ByAuthIdSecretKeyAuthorizationsí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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
authId | string (query) | sim | O 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.
| Campo | Tipo | Sempre presente | Descrição |
|---|---|---|---|
delivery.stationId | inteiro | sim | ID do posto, o mesmo que a ConectTec informou a você. |
delivery.hoseNumber | inteiro | sim | Número do bico usado. Vale 0 quando o concentrador não informou. |
delivery.authId | string | sim | A autorização consumida. |
delivery.reserveId | string | sim | A reserva da autorização. Vem como "" quando não há. |
delivery.deliveryId | inteiro | sim | O mesmo número que o callback trouxe. |
delivery.dateTime | string | sim | Fim do abastecimento, sem sufixo de fuso: 2026-11-03T14:22:05. É a hora local do posto. |
delivery.volume | número | sim | Litros. Vale 0 quando a bomba não informou. |
delivery.price | número | sim | Preço por litro aplicado pela bomba. Vale 0 quando não informado. |
delivery.total | número | sim | Valor em R$. Vale 0 quando não informado. |
delivery.priceWithoutDiscount | número | sim | Sempre 0 nesta consulta; o preço de tabela vem em pricewithoutdiscount no callback. O preço aplicado é price. |
delivery.eTotStart | número | sim | Encerrante antes. Aqui é eTotStart; no callback, ETotStart. |
delivery.eTotEnd | número | sim | Encerrante depois. No callback é ETotEnd. |
delivery.fuel | objeto | sim | fuelType (0 a 16, veja Enumerações e limites), name, fuelTypeDescription e imagePath (sempre nulo). |
delivery.tank | objeto | sim | number, name e fuel. Os demais campos do tanque vêm zerados: ignore. |
delivery.attendant, delivery.customer | objetos | sim | Frentista e cliente informados no posto. Campos de texto ausentes vêm como "". customer.odometer vem 0. |
delivery.fuelPointId | inteiro | sim | Nã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
| HTTP | Quando acontece | O que fazer |
|---|---|---|
| 400 | authId vazio ou ausente. | Corrija a chamada. |
| 401 | Chave 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. |
| 404 | O 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. |
| 500 | Erro 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.
| Item | Callback | ByAuthId |
|---|---|---|
| Encerrantes | ETotStart, ETotEnd | eTotStart, eTotEnd |
dateTime | Com sufixo -03:00 | Sem fuso |
pricewithoutdiscount | Preço de tabela; vale 0 quando não informado | priceWithoutDiscount sempre 0 |
fuelPointNumber | Presente | Ausente (fuelPointId não é o número) |
tank | number, name, fuel | Os mesmos três campos; os demais vêm zerados (ignore) |
Estratégia recomendada
Um job seu consulta as autorizações que continuam sem entrega.
- Primeira consulta 15 minutos depois da autorização. Antes disso o 404 é esperado.
- 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.
- Com 200, processe pelo mesmo caminho do callback. Com 404, agende a próxima tentativa.
- Passadas as 48 horas, abra um caso com a ConectTec com
stationId,fuelPointNumber,reserveId,authIde 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) +ETotEndcom 3 casas decimais. SeETotEndvier nulo ou 0, useauthId+dateTimesem 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
pricewithoutdiscountna 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ção | Significa | Faça |
|---|---|---|
ByAuthId 200, callback nunca chegou | A 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 horas | O 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ás | Entrega tardia do posto. | Ingira. A hora do abastecimento é dateTime. Veja Entrega tardia. |
price igual ao preço de tabela, mas você autorizou desconto | A 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.
{base}/V3/FuelPoint/Statusstatus do ponto de abastecimento · enviado pela ConectTec{base}/FuelPoint/Deliveryentrega concluída · enviado pela ConectTec| Callback | Quando sai | O que fazer com ele |
|---|---|---|
{base}/V3/FuelPoint/Status recebido | Cada 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 recebido | Quando 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
- 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.
- 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.
- Responda 200 também ao que você não reconhece:
reasonreservado, campo novo, reserva desconhecida (o callback pode chegar antes de você gravar a reserva). - Ordem. Processe cada callback pelo
reason; um estado final não volta atrás, e ignore umreason0 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
| Callback | Chave | Por que funciona |
|---|---|---|
| Entrega | authId + ETotEnd | Cada 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. |
| Status | Estado por reserveId que só avança | Aceite 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.
- 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. - Confira os identificadores. Confirme que
reserveIdouauthIdexiste entre as suas operações e questationIdefuelPointNumberbatem. GUIDs: guarde e compare exatamente como recebidos (a ConectTec envia em minúsculas). - 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.
| Campo | Tipo | Sempre presente | Descrição |
|---|---|---|---|
stationId | inteiro | sim | ID do posto, o mesmo que a ConectTec informou a você. Confira contra a sua reserva. |
fuelPointNumber | inteiro | sim | Número do ponto de abastecimento. |
hoseNumber | lista de inteiros | sim | Nú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. |
reserveId | string (GUID de 36 caracteres) | sim | A reserva a que o evento pertence. É a chave do estado da sua operação. |
authId | string (GUID de 36 caracteres) | pode ser nulo | A autorização. É null nos eventos anteriores a ela, como a reserva aceita. |
fuelPointStatus | inteiro | sim | Situaçã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. |
reason | inteiro | sim | O 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. |
volume | número | sim | Litros parciais mostrados pela bomba naquele instante. Vale 0.0 quando ainda não há abastecimento. |
total | número | sim | Valor parcial em R$ mostrado pela bomba naquele instante. Vale 0.0 quando ainda não há abastecimento. |
fuel.fuelType | inteiro | sim | Tipo de combustível, de 0 a 16 (Enumerações e limites). Vale 0 quando não há um único bico identificado. |
fuel.name | string | pode ser nulo | Nome do combustível no cadastro do bico. |
tank.number | inteiro | pode ser nulo | Número do tanque. Vem preenchido em alguns eventos. |
tank.name | string | pode ser nulo | Nome do tanque. |
tank.fuel | objeto | sim | Cópia de fuel. |
customer.id | inteiro | sim | ID do cliente no posto. Vale 0 quando não há. |
customer.name | string | pode ser nulo | Nome do cliente informado no posto. |
customer.tag | string | pode ser nulo | Tag do cliente. |
customer.odometer | inteiro | sim | Sempre 0 neste callback. Use o odometer do callback de entrega. |
attendant.id | inteiro | sim | ID do frentista no posto. Vale 0 quando não há. |
attendant.name | string | pode ser nulo | Nome do frentista. |
attendant.tag | string | pode ser nulo | Tag do frentista. Vem null quando não há frentista identificado. |
price | matriz de números (number[][]) | sim | Preç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
reason0 (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 dehoseNumber. ComhoseNumberigual a[1, 2]epriceigual 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
priceda entrega. O preço aplicado e o valor a cobrar estão nos camposprice,pricewithoutdiscountetotaldo 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), comreasonefuelPointStatus. Decida primeiro peloreason. - 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; oauthIdaparece depois da autorização. - Processe cada callback pelo
reason; um estado final não volta atrás, e ignore umreason0 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
reasonoufuelPointStatusfora 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 pelototalda entrega. Se a autorização falhar ou expirar, desfaça a garantia.
Ciclo do abastecimento
Estados
| Estado | Final? | Como você sabe |
|---|---|---|
| Livre | não | Você não tem reserva aberta no ponto de abastecimento. |
| Reserva pedida | não | HTTP 201 da reserva. |
| Reservado | não | Callback com reason 0. |
| Autorização pedida | não | HTTP 201 da autorização. |
| Autorizado | não | Callback com reason 4. |
| Abastecendo | não | Callback com status 4 (em geral com reason 11). |
| Entregue | sim | Callback de entrega. |
| Ponto de abastecimento ocupado | não, volta a Livre | HTTP 406. |
| Reserva recusada | sim | reason 1. |
| Reserva expirada | sim | reason 2 ou 12. |
| Autorização recusada | sim | reason 5. |
| Autorização expirada | sim | reason 6. |
| Sem confirmação | sim | Seu prazo venceu sem callback. |
| Cancelada | sim | reason 3, 7 ou 8 depois do Stop. |
| Interrompido | não, espera a entrega | reason 13. |
| Entrega pendente | não | Seu prazo de entrega venceu. |
Transições
| De | Para | Você recebe | O que fazer |
|---|---|---|---|
| Livre | Reserva pedida | HTTP 201 da reserva | Espere o reason 0. |
| Livre | Ponto de abastecimento ocupado | HTTP 406 | Retome a reserva aberta do mesmo cliente ou tente depois. Veja Reservar com ponto de abastecimento ocupado. |
| Ponto de abastecimento ocupado | Livre | Nada; o prazo passa | Nova reserva. |
| Reserva pedida | Reservado | Callback reason 0 | Guarde price e hoseNumber e autorize. Se hoseNumber vier [0], autorize no preço de tabela; o preço aplicado é o price da entrega. |
| Reserva pedida | Reserva recusada | Callback reason 1 | Encerre. |
| Reserva pedida | Sem confirmação | Nada; seu prazo vence | Envie 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 pedida | Reserva expirada | Callback reason 2 ou 12 antes do 0 | Encerre. Para continuar, reserve de novo. |
| Reserva pedida | Cancelada | Stop 201, depois reason 3 ou 8 | Encerre. |
| Reservado | Reserva expirada | Callback reason 2 (ou 12) | Encerre. Para continuar, reserve de novo. |
| Reservado | Autorização pedida | HTTP 201 da autorização | Espere o reason 4. |
| Reservado | Cancelada | Stop 201, depois reason 3 ou 8 | Encerre. Depois do Stop, autorizar essa reserva responde 500 ou 400; reserve de novo. |
| Autorização pedida | Autorizado | Callback reason 4 | O bico deve sair do descanso em até authTimeOut segundos. Se o reason 6 não chegar até authTimeOut + 10 s, envie Stop. |
| Autorização pedida | Autorização recusada | Callback reason 5 | Desfaça o bloqueio do valor do cliente. Uma nova tentativa exige nova reserva. |
| Autorização pedida | Cancelada | Stop 201, depois reason 7 ou 8 | Use quando o reason 4 não chega em cerca de 20 s. Desfaça o bloqueio do valor do cliente. |
| Autorização pedida | Autorização expirada | Callback reason 6 antes do 4 | Desfaça o bloqueio do valor do cliente. Nova tentativa exige nova reserva. |
| Autorização pedida ou Autorizado | Autorização recusada | Callback reason 13 sem volume | Se 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. |
| Autorizado | Autorização expirada | Callback reason 6 | Desfaça o bloqueio do valor do cliente. Nova tentativa exige nova reserva. |
| Autorizado | Cancelada | Stop 201, depois reason 7 ou 8 | Desfaça o bloqueio do valor do cliente. |
| Autorizado | Abastecendo | Callback com status 4 | Cada callback reinicia a sua espera de silêncio. |
| Abastecendo | Entregue | Callback de entrega | Cobre 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. |
| Abastecendo | Entrega pendente | Stop 201, depois reason 8 | Espere a entrega parcial e capture só o que ela trouxer. |
| Abastecendo | Interrompido | Callback reason 13 | Espere a entrega parcial. Não cancele. |
| Abastecendo | Entrega pendente | Nada; callbacks de volume param | Não cancele. Inicie a conciliação quando o prazo vencer. |
| Interrompido | Entrega pendente | Nada | Sem volume parcial, mantenha o authId na conciliação pelo prazo normal. Com volume, espere a entrega. |
| Entrega pendente | Entregue | Entrega tardia ou registro na consulta | Processe 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.
/V4/Delivery/ReserveSecretKeyAuthorization assíncronoPOST /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.
reason | Nome | Vale para | Efeito na sua máquina |
|---|---|---|---|
| 0 | reserveSuccessful | Reserva | Reserva pedida passa a Reservado. |
| 1 | reserveFailed | Reserva | Reserva recusada. Chega com qualquer fuelPointStatus. |
| 2 | reserveTimedOut | Reserva | Reserva expirada. |
| 3 | reserveCancelled | Reserva | Cancelada, depois de um Stop seu. |
| 4 | authSuccessful | Autorização | Autorização pedida passa a Autorizado. |
| 5 | authFailed | Autorização | Autorização recusada. |
| 6 | authTimedOut | Autorização | Autorização expirada. |
| 7 | authCancelled | Autorização | Cancelada, depois de um Stop seu. |
| 8 | stopSuccessful | Cancelamento | Cancelada. Aceite como cancelamento concluído, de reserva ou de autorização. |
| 9 | stopFailed | Cancelamento | Nenhum. 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). |
| 11 | runningTotal | Abastecimento | Abastecendo. Traz volume e total parciais. |
| 12 | reserveInterrupted | Reserva | Trate como Reserva expirada. |
| 13 | authInterrupted | Autorização | Interrompido, se já havia volume. Sem volume, Autorização recusada. |
| 14 | stopInterrupted | Cancelamento | Nenhum. 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.
fuelPointStatus | Nome | Significado | Você recebe? |
|---|---|---|---|
| 0 | Não responde | A bomba não responde ao concentrador. | sim |
| 1 | Bloqueado | Ocioso, bicos no descanso, sem autorização. | sim |
| 2 | Autorizado | Ocioso, bicos no descanso, autorizado. | sim |
| 3 | Chamando | Bico fora do descanso, sem autorização. | sim |
| 4 | Abastecendo | Bico fora do descanso, autorizado, combustível saindo. | sim |
| 5 | Parada temporária | Bico fora do descanso, abastecimento pausado. | não |
| 6 | Fim | Bico 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.
| De | Para | Evento | Você recebe |
|---|---|---|---|
| 1 | 2 | Autorização aceita | Callback com reason 4 e status 2 (ou 1) |
| 1 | 3 | Frentista tira o bico do descanso sem autorização | Callback com status 3 |
| 2 | 4 | Frentista tira o bico do descanso e abastece | Callback com status 4 |
| 3 | 4 | Autorização aceita com o bico já fora do descanso | Callback com status 4 |
| 4 | 6 | Bico volta ao descanso | Nada; chega a entrega |
| 4 | 0 | Comunicação com a bomba cai | Callback com status 0, se o posto avisar |
| 0 | 1 | Bomba volta a responder | Callback 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.
| De | Para | Evento | Você envia |
|---|---|---|---|
| Não informado | 0 Capturado | Pagamento capturado | transactionStatus: 0 |
| Não informado | 2 Agendado | Repasse futuro feito por você | transactionStatus: 2 |
| Não informado | 1 Pago | Pagamento confirmado | transactionStatus: 1 |
| 0 Capturado | 1 Pago | Confirmação do pagamento | transactionStatus: 1 |
| 2 Agendado | 1 Pago | Pagamento confirmado | transactionStatus: 1 |
| Não informado | 3 Contestado | Cobrança Pix expirada | transactionStatus: 3 |
| 1 Pago | 3 Contestado | Combine o uso com a ConectTec no cadastro | transactionStatus: 3 |
| 1 Pago | 4 Antecipado | Combine o uso com a ConectTec no cadastro | transactionStatus: 4 |
| Qualquer | Qualquer | Nova chamada | Vale 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
- Decida pelo status HTTP. Vale o status, não o corpo.
- O 201 só confirma o recebimento. Reserva, autorização e
Stoprespondem 201 quando a ConectTec recebe o pedido; o resultado vem pelo callback de status. Veja Acompanhar e cancelar. - 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.
- O 500 tem duas famílias. Dado inválido seu (
providerIdfora do formato GUID,reserveIdinexistente,fuelTypeouhoseNumberque o ponto de abastecimento não tem, reserva comStoppendente) ou erro ao processar. - Erros de validação não passam com repetição. Exceções: o 404 de
ByAuthIde deTransactionStatus(abastecimento ainda não registrado) e o 400 da autorização com reserva ainda semreason0. - 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:
| Rota | Verifique | Se não achar nada |
|---|---|---|
POST /V4/Delivery/Reserve | Callback 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/Authorize | Callback 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/Stop | Callback com reason 3, 7 ou 8. | Se não vier e a reserva ainda estiver aberta, repita uma vez. |
POST /V3/Delivery/TransactionStatus | Seu registro da chamada. | Resultado desconhecido: se repetir, uma vez e com o mesmo corpo. O último estado enviado prevalece. |
Rotas GET | Nada. | 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}
| HTTP | Quando acontece | O que fazer |
|---|---|---|
| 400 | O código não tem exatamente 7 caracteres. | Envie o código como texto, com os zeros à esquerda. |
| 401 | Chave 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. |
| 500 | O 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}
| HTTP | Quando acontece | O que fazer |
|---|---|---|
| 500 | O 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. |
| 400 | stationId igual a 0, não numérico ou fora do intervalo de inteiro de 32 bits. | Corrija o stationId. |
| 401 | Chave 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. |
| 500 | Erro 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
| HTTP | Quando acontece | O que fazer |
|---|---|---|
| 400 | Campo ausente, tipo errado, JSON inválido, corpo vazio ou reserveTimeOut fora de 1 a 120. | Corrija o corpo. |
| 401 | Chave 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. |
| 404 | Posto 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. |
| 406 | O ponto de abastecimento tem reserva aberta do seu cadastro, por até reserveTimeOut + 120 s. | Veja Recebo 406 ao reservar. |
| 500 | providerId 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
| HTTP | Quando acontece | O que fazer |
|---|---|---|
| 400 | Campo 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. |
| 400 | A 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. |
| 401 | Chave ausente ou inválida; rota não liberada; reserveId de outro integrador. | Confira a chave e a origem do reserveId. |
| 404 | Ponto de abastecimento da reserva não localizado. | Não repita. Guarde o reserveId e acione a ConectTec. |
| 500 | reserveId 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
| HTTP | Quando acontece | O que fazer |
|---|---|---|
| 400 | JSON inválido ou corpo ilegível. | Corrija o corpo. |
| 401 | Chave 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. |
| 500 | Dado 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
| HTTP | Quando acontece | O que fazer |
|---|---|---|
| 400 | Campo 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. |
| 401 | Chave ausente ou inválida; authId inexistente ou de outro integrador; rota não liberada. | Confira chave e authId; depois peça a liberação. |
| 404 | O abastecimento ainda não foi registrado, ou authId e reserveId não formam um par. | Veja Recebo 404 no TransactionStatus. |
| 500 | Erro 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
| HTTP | Quando acontece | O que fazer |
|---|---|---|
| 400 | authId vazio ou ausente. | Corrija a consulta. |
| 401 | Chave ausente ou inválida; rota não liberada; authId inexistente ou de outro integrador. | Siga o diagnóstico de 401 em tudo. |
| 404 | Nenhum abastecimento encontrado para esse authId. | A entrega ainda não chegou à ConectTec. Veja A entrega não chegou. |
| 500 | Erro 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
- Header. O nome é
SecretKeyAuthorizatione o valor é a chave crua, semBearer. - Mapa de pista do posto de testes.
GET /V6/ForecourtMap/ById/{stationId}com ostationIddo cadastro. Com 200, chave e posto estão certos e o problema é outro (passo 4). Com 401, a chave está errada, ostationIdnã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. - Mapa 200 e outra rota 401: a rota não foi liberada para o seu cadastro. Confira Rotas.
- Chamada com identificadores:
reserveIdeauthIdprecisam ter sido devolvidos às suas próprias chamadas; na reserva, oproviderIddo corpo precisa ser o dono da chave. - 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.
- Prazo. Dentro do
reserveTimeOutenviado, o callback de confirmação é esperado. Veja Suas esperas. - Outro
reason. 1, 2, 3 ou 12 encerram a reserva; veja Confirmação pelo callback de status. Oreason1 pode vir com qualquer status. - 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. - stationStatus. O
stationStatusindica se o concentrador do posto está conectado; a disponibilidade do ponto de abastecimento vem na resposta da reserva. Veja stationStatus. - Venceu o prazo sem callback: envie
POST /Delivery/Stopcom oreserveIde ignore qualquerreason0 posterior. Só reserve o mesmo ponto de abastecimento depois doStopconfirmado ou da janela do 406. Veja Se a confirmação não chegar. - Acione a ConectTec se repetir com
stationStatus: truee 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.
- Procure no seu sistema uma reserva sua nesse ponto de abastecimento sem entrega e sem
reasonde encerramento. Se for do mesmo cliente, reutilize oreserveId. - Se não vai mais ser usada, envie
Stope esperereason3, 7 ou 8. A reserva fecha também quando o abastecimento é gravado ou chegareason1, 2, 5, 6, 12 ou 13. - Sem o
reserveId, espere a janela: a reserva se libera emreserveTimeOut+ 120 s contados da criação (240 s no pior caso, comreserveTimeOut120). UmreserveTimeOutmenor encurta a janela. - 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.
- Condições de envio. Status só sai para reservas e autorizações suas; ponto de abastecimento ocioso não gera callback;
fuelPointStatus5 e 6 não saem, salvo junto dereason1. A entrega só sai para abastecimento com autorização sua. Veja Condições para o callback sair. - Seu endpoint. Envie de fora da sua rede o payload de
reason0 de Testar o seu servidor, emPOST {base}/V3/FuelPoint/Status. O esperado é HTTP 200 em menos de 5 s. - 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/Statuse a entrega em/conecttec/8f3k2m9q/FuelPoint/Delivery. Cadastre a base sem barra no final, para não ficar//. - 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.
- 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.
- 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. - 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.
- 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
dateTimedo abastecimento. Veja Entrega tardia. - Confirme que houve abastecimento com autorização sua. Abastecimento feito sem passar por você não gera callback para o seu servidor.
- 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. - Com 404, a ConectTec ainda não recebeu o registro do posto. Repita no ritmo da estratégia de conciliação.
- 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.
- Confirme na entrega, não no status. Compare
pricedo 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 é opriceda entrega. Veja Conferir o preço cobrado na entrega. - Ponto de abastecimento sem troca de preço. Com
fuelPoint.configPricefalse, a bomba pode cobrar pela tabela. Veja Quando a troca de preço não vale. - Combustível. Em
AuthorizeByFuelType, GNV (fuelType15) em ponto de abastecimento sem preset ignora preço e limite. - 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 pelopriceda entrega. - Tratamento com o cliente em Se a bomba não aplicou o desconto.
- 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.
- 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). - Par de identificadores.
reserveIdeauthIdprecisam ser da mesma autorização: envie os dois que vieram juntos no callback de entrega. UmauthIdque não é seu responde 401. - 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ção | Dados que a ConectTec precisa |
|---|---|
| 401 que persiste com mapa funcionando | Rota completa, stationId, status, horário com fuso. |
| Reserva sem confirmação repetida | stationId, fuelPointNumber, reserveId, horário do 201, quantas reservas seguidas falharam, resultado do seu teste de endpoint. |
| 406 persistente | stationId, fuelPointNumber, reserveId da última reserva, reserveTimeOut usado, horário das tentativas. |
| Callbacks que não chegam | Dois ou três exemplos de reserveId ou authId, stationId, horário e a base de callback cadastrada. |
| Entrega ausente | stationId, fuelPointNumber, reserveId, authId, horário do abastecimento, resultado de ByAuthId. |
| Desconto não aplicado | stationId, fuelPointNumber, hoseNumber, reserveId, authId, price enviado e recebido, dateTime. |
| 404 ou 500 no TransactionStatus | authId, reserveId, stationId, status e horário da chamada. |
| 500 repetido em qualquer rota | Rota, 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.
| Valor | Combustível | fuelTypeDescription | Observação |
|---|---|---|---|
0 | Outra | outra | Também é o valor quando o combustível do bico não foi identificado (nos callbacks de status, fuel vem como {"fuelType": 0, "name": null}). |
1 | Etanol | etanol | Bico 2 do ponto de abastecimento 3 no posto de exemplo. |
2 | Etanol aditivado | etanolAditivada | |
3 | Etanol premium | etanolPremium | |
4 | Etanol premium aditivado | etanolPremiumAditivada | |
5 | Gasolina | gasolina | Gasolina comum. Bico 1 do ponto de abastecimento 3 no posto de exemplo. |
6 | Gasolina aditivada | gasolinaAditivada | |
7 | Gasolina premium | gasolinaPremium | |
8 | Gasolina premium aditivada | gasolinaPremiumAditivada | |
9 | Diesel S10 | dieselS10 | |
10 | Diesel S50 | dieselS50 | |
11 | Diesel S500 | dieselS500 | |
12 | Diesel S1200 | dieselS1200 | |
13 | Diesel marítimo | dieselMaritimo | |
14 | Querosene | querosene | |
15 | GNV | gnv | Em AuthorizeByFuelType, em ponto de abastecimento sem preset, a bomba cobra o preço dela, sem limite. Veja Caso GNV. |
16 | Arla | arla |
- O texto
fuelTypeDescriptionvem vazio ("") quando o número não está na tabela, e o campo só existe no mapa, na reserva e na consulta porauthId. Os callbacks trazem apenasfuelTypeename. - 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.
| Valor | Nome | Significado | Chega no callback de status |
|---|---|---|---|
0 | notResponding | A bomba não responde ao concentrador. | Sim |
1 | blocked | Ponto de abastecimento ocioso, não autorizado, com os bicos no descanso. | Sim |
2 | authorised | Ponto de abastecimento ocioso, autorizado, com os bicos no descanso. | Sim |
3 | calling | Ponto de abastecimento com bico fora do descanso e bomba ainda não liberada. | Sim |
4 | delivering | Abastecendo. | Sim |
5 | tempStopped | Ponto de abastecimento com bico fora do descanso, parada temporária. | Não |
6 | deliveryEnd | Ponto 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).
| Valor | Nome | Significado | O que fazer | Encerra |
|---|---|---|---|---|
0 | reserveSuccessful | O 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 |
1 | reserveFailed | O 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 |
2 | reserveTimedOut | Passou o reserveTimeOut sem autorização. | Descarte a reserva e reserve de novo se o cliente quiser continuar. | sim |
3 | reserveCancelled | Reserva cancelada, em geral depois de um Stop seu. | Descarte a reserva. | sim |
4 | authSuccessful | O posto aceitou a autorização e a bomba foi liberada. Chega com status 2 ou 1. | Aguarde o abastecimento. | não |
5 | authFailed | O 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 |
6 | authTimedOut | Passou o authTimeOut sem o abastecimento começar. | Desfaça o bloqueio do valor do cliente (cobrança, saldo). | sim |
7 | authCancelled | Autorização cancelada, em geral depois de um Stop seu. | Desfaça o bloqueio do valor do cliente (cobrança, saldo). | sim |
8 | stopSuccessful | A parada pedida por um Stop seu foi executada. | Aceite como cancelamento concluído. Se já havia volume, espere a entrega parcial. | sim |
9 | stopFailed | O 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 |
11 | runningTotal | Atualizaçã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 |
12 | reserveInterrupted | A reserva foi interrompida por um evento no posto. | Descarte a reserva e reserve de novo se o cliente quiser continuar. | sim |
13 | authInterrupted | A 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 |
14 | stopInterrupted | O 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.
| Valor | Significado | Unidade 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.
| Valor | Nome | Significado |
|---|---|---|
0 | captured | Pagamento capturado. Combine o uso com a ConectTec no cadastro. É o valor assumido quando o campo é omitido. |
1 | paid | Pagamento realizado pela sua aplicação diretamente ao estabelecimento. |
2 | scheduled | Pagamento realizado pela sua aplicação, com repasse ao estabelecimento feito mais tarde por você. |
3 | contested | Combine o uso com a ConectTec no cadastro. |
4 | anticipated | Combine 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.
| Valor | Nome | O posto emite |
|---|---|---|
0 | invoice | NF-e |
1 | receipt | Cupom (recibo) |
2 | both | NF-e e cupom |
3 | none | Nenhum 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.
| Campo | Callback de status | Callback de entrega |
|---|---|---|
hoseNumber | Lista de inteiros, um por bico do evento. É [0] quando nenhum bico é identificado. | Inteiro: o número do bico que abasteceu. |
price | Matriz 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. |
authId | null até a autorização. | Sempre preenchido. |
volume, total | Parciais, em litros e em R$, durante o abastecimento. | Finais, como a bomba informou, sem arredondar. |
dateTime | Ausente. | Hora local do posto com sufixo -03:00 fixo. |
fuel | fuelType 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
| Item | Valor | Observação | Onde ler |
|---|---|---|---|
reserveTimeOut | 1 a 120 s | Obrigató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 |
authTimeOut | 1 a 200 s | Obrigatório. Fora da faixa, 400. Ao expirar sem abastecimento, chega reason 6. | Autorizar |
updateRate | 2 a 60 s | Obrigatório e não desliga os callbacks de acompanhamento. | Autorizar |
| Janela do 406 | reserveTimeOut + 120 s | Contada 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 callback | HTTP 200, em menos de 5 s | Só 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 callback | Uma vez, no momento do evento | A 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 entrega | Quando a conexão volta | 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. | Entrega tardia |
| Esperas por callback | Sugerido: 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ção | Suas esperas | |
| Repetição após erro | Ver observação | Antes 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 pagamento | Depois da entrega | Envie depois que a entrega existir; antes disso a resposta é 404. | Informar o pagamento |
| Frequência e tentativas da conciliação | Veja a estratégia de conciliação | Combine 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
| Item | Valor | Observação | Onde ler |
|---|---|---|---|
reserveId, authId | GUID de 36 caracteres, minúsculas, com hífens | Exemplo: b8f2c6e4-1a3d-4f5b-8c7e-9d0a2b4c6e8f. | Convenções |
providerId | GUID com hífens | Tem que pertencer à chave usada. Um valor que não é GUID responde 500 na reserva. | Reservar |
stationId, fuelPointNumber, hoseNumber | Inteiros | stationId é 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 code | 7 dígitos numéricos | Com zeros à esquerda. | QR code |
| Níveis de preço | Até 4 por bico | price, price2, price3 e price4 no mapa. O valor 0 indica nível inexistente. | Campos do mapa |
price na autorização | Matriz de números | Em 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 |
limitValue | 1 ou mais | Reais ou litros conforme limitType. Mais de 2 casas são arredondadas para 2. | Limite |
| Decimais no JSON | Ponto, sem milhar, como número | Escreva 6.29, nunca "6,29". | Convenções |
volume, price, total na entrega | Como a bomba informou | Sem arredondamento. volume * price pode diferir de total; vale o total. | Campos da entrega |
| Datas | ISO 8601 | Nas 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 callback | HTTPS, sem barra no final | A ConectTec acrescenta o caminho de cada callback. | Cadastro |
customerIdentification | 11 ou 14 dígitos | Opcional. Se enviado, 11 (CPF) ou 14 (CNPJ) dígitos; outro tamanho dá 400. | Requisição do pagamento |
providerStationID | Inteiro, 1 ou mais, obrigatório | No informe de pagamento, o nome termina em ID. | Requisição do pagamento |
providerAutorizationCode | Inteiro, 1 ou mais, opcional | Requisição do pagamento | |
value | 0 ou mais | Em reais. Veja o que acontece quando é maior ou menor que o total. | Valor pago |
paymentReconciliationId | Até 100 caracteres | Requisição do pagamento | |
invoiceFreeText, receiptFreeText | Até 250 caracteres | Requisição do pagamento | |
cfop, uf, cep | Até 4, 2 e 8 caracteres | CEP 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.
- Combine a janela de testes com a ConectTec.
- Rode os 14 casos e guarde as evidências.
- 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.
- A ConectTec vincula os postos reais ao seu cadastro e informa o
stationIdde 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.
| Caso | Precisa de alguém na bomba | Depende de |
|---|---|---|
| 1 a 7 | não | nada além do concentrador online; cada caso faz a própria reserva |
| 8 | sim, se for seguido do caso 10: o operador precisa estar na bomba antes de você autorizar | uma reserva confirmada |
| 9 | sim, para confirmar o bico na entrega (sem operador, termina com Stop) | uma reserva confirmada |
| 10 | sim | caso 8 (a mesma autorização) |
| 11 | não | uma reserva confirmada |
| 12 | não | a entrega recebida no caso 10 |
| 13 | sim | um segundo abastecimento |
| 14 | não | a 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é-requisito | Como conferir |
|---|---|
Chave de API, providerId e stationId do posto de testes | Entregues no cadastro. O caso 1 prova que a chave funciona. |
| Rotas liberadas | Todas 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 cadastrada | Sem 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 testes | Rode 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
stationIdque 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
fuelType5 e o bico 2 temfuelType1. stationStatusétrue. Se forfalse, 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
reserveIde o objetofuelPoint. - Callback
POST {base}/V3/FuelPoint/Statuscom o mesmoreserveIdereason0. priceé lido pela posição emhoseNumber, 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. SehoseNumbervier[0], autorize sem desconto, no preço de tabela; o preço aplicado é opriceda entrega.- O callback pode chegar poucos milissegundos depois do 201. A autorização só vale depois do
reason0.
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
reserveIdereason2 (reserveTimedOut) logo depois dos 10 segundos. POST /V2/Delivery/AuthorizeByFuelTypenessa reserva responde HTTP 400.- A nova reserva no mesmo ponto de abastecimento responde 201.
- Se um
reason0 atrasado chegar depois doreason2, 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
reserveIdnovo. A primeira reserva segue ativa, sem alteração. - Uma reserva aberta bloqueia o ponto de abastecimento por até
reserveTimeOutmais 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
reason3 ou 8. Os dois indicam cancelamento concluído. Se vierreason9 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
authIde o mesmoreserveId. - Callback com
reason4 e oauthIdpreenchido. - O preço aplicado vem em
priceda entrega, conferido no caso 10 (O campo price). - Opcional: depois do
reason4, 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 comreason4. - Se houve abastecimento, a entrega traz
hoseNumber2 efuel.fuelType1, epriceigual 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
fuelPointStatus4 quando o abastecimento começa (em geral comreason11; não exija oreason), depois callbacks de andamento comvolumeetotalcrescentes, a cadaupdateRatesegundos aproximadamente. - O fim do abastecimento chega pelo callback
POST {base}/FuelPoint/Delivery, com o seuauthIde o seureserveId. - 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), epricewithoutdiscounté o de tabela (6,29). No exemplo do guia, 30,00 L a 6,09 dãototal182,70 com desconto e 188,70 sem.priceigual apricewithoutdiscountindica 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, eETotEndmenosETotStartfica próximo devolume. Cobre pelototalda entrega, não porvolumevezesprice.- 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
reason4 e, cerca de 20 segundos depois, callbackreason6 (authTimedOut). A expiração é definitiva. - Nenhum callback de entrega chega para esse
authId. - Nova autorização na mesma reserva responde 400.
- Se um
reason4 atrasado chegar depois doreason6, 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
authIdque você não criou é gravado como entrega órfã, sem cobrança, e a resposta continua 200. - Um callback de status com
reasonque 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.
- Reserve e autorize um novo abastecimento e espere o
reason4. - Tire o seu servidor de callback do ar (ou faça-o devolver 503) antes de o operador abastecer.
- O operador abastece e devolve o bico. Cada callback é enviado uma vez, no momento do evento.
- 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
priceWithoutDiscountvem 0; o preço aplicado é oprice. - 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
authIdda 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 200 | A 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 callback | Base 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 reserva | O callback reason 0 ainda não chegou, ou a reserva já expirou, foi autorizada ou cancelada. |
| Segunda reserva responde 406 sem motivo aparente | Há 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 pricewithoutdiscount | O 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 chegou | Consulte 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ção | Confira 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
reserveIde oauthIdusados. - O status HTTP de cada chamada e o
reasonde cada callback recebido, com a hora de recebimento. - Para o caso 10:
price,pricewithoutdiscount,volumeetotalda entrega e o valor que você cobrou. - Para o caso 13: a entrega recuperada gravada uma vez só, pela chave
authIdeETotEnd.
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:
| Item | Na homologação | Em produção |
|---|---|---|
| Postos | Só o posto de testes. | Os postos reais que a ConectTec vincular ao seu cadastro, cada um com o seu stationId. |
| Quem abastece | Um operador combinado com a ConectTec. | Clientes reais, com dinheiro real. |
| Pontos de abastecimento | Os 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. |
| Callbacks | Chegam 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:
stationIdefuelPointNumber.reserveIdeauthId, 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.