Transações
Endpoints para processar pagamentos, consultar histórico e realizar estornos.
Autenticação
Todas as requisições exigem Basic Auth. Use as credenciais configuradas no TEF IP (admin / senha definida na instalação).
POST /transaction
Inicia um pagamento no terminal. O TEF IP aguarda o app estar em primeiro plano por até 15 segundos antes de processar — se o app estiver minimizado, o endpoint retorna 503.
App em segundo plano
Se o TEF IP estiver minimizado, aguarda até 15 s pelo retorno ao primeiro plano antes de processar — caso contrário retorna 503. Veja Comportamento → App em segundo plano.
Corpo da requisição
{
"tPag": "17",
"amount": 50.00,
"referenceId": "pedido-001",
"installments": 1,
"installmentType": "single",
"details": {}
}
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
tPag |
string | Sim | Tipo de pagamento (ver tabela abaixo) |
amount |
number | Sim | Valor da transação |
referenceId |
string | Não | Identificador externo para conciliação. Sem este campo, a transação não pode ser estornada individualmente — aparece apenas na listagem geral. Use o número do pedido ou UUID da venda. |
installments |
int | Não | Número de parcelas (padrão: 1) |
installmentType |
string | Não | Modalidade de parcelamento (padrão: "single") |
details |
object | Não | Metadados adicionais da transação |
referenceId é necessário para estornos
Sem referenceId, a transação só aparece na listagem geral (GET /transaction) e não pode ser estornada individualmente. Defina-o sempre que a operação puder precisar de estorno futuro.
Valores de tPag
| Valor | Descrição |
|---|---|
"03" |
Crédito |
"04" |
Débito |
"17" |
PIX |
"99" |
Desconhecido |
Valores de installmentType
| Valor | Descrição |
|---|---|
"single" |
Pagamento à vista (padrão) |
"seller" |
Parcelado pelo lojista (sem juros ao comprador) |
"buyer" |
Parcelado pelo comprador (juros ao comprador) |
Resposta — 200
| Campo | Tipo | Descrição |
|---|---|---|
nsu |
string | Número sequencial único gerado pelo adquirente |
message |
string | Mensagem de status da transação |
details |
object | Dados adicionais retornados pelo adquirente |
Resposta — 503 (app em segundo plano)
Exemplos de integração
// pub.dev/packages/dart_tefip — configure uma vez; demais exemplos nesta página omitem esta etapa
TefIP.baseUrl = 'http://localhost:9050';
TefIP.username = 'admin';
TefIP.password = '1234';
final result = await TefIP.instance.transaction.post(
transactionRequest: TransactionRequestModel(
type: TefIPTransactionType.pix,
amount: 50.00,
referenceId: 'pedido-001',
),
);
print(result.nsu);
// TODO: pacote JavaScript ainda não criado — usando fetch diretamente
const res = await fetch('http://localhost:9050/transaction', {
method: 'POST',
headers: {
'Authorization': 'Basic ' + btoa('admin:1234'),
'Content-Type': 'application/json',
},
body: JSON.stringify({ tPag: '17', amount: 50.00, referenceId: 'pedido-001' }),
});
const data = await res.json();
<?php
// TODO: pacote PHP ainda não criado — usando curl diretamente
$ch = curl_init('http://localhost:9050/transaction');
curl_setopt($ch, CURLOPT_USERPWD, 'admin:1234');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'tPag' => '17',
'amount' => 50.00,
'referenceId' => 'pedido-001',
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
# TODO: pacote Ruby ainda não criado — usando Net::HTTP diretamente
require 'net/http'
require 'json'
uri = URI('http://localhost:9050/transaction')
req = Net::HTTP::Post.new(uri, 'Content-Type' => 'application/json')
req.basic_auth('admin', '1234')
req.body = { tPag: '17', amount: 50.00, referenceId: 'pedido-001' }.to_json
res = Net::HTTP.start(uri.hostname, uri.port) { |h| h.request(req) }
data = JSON.parse(res.body)
GET /transaction
Lista todas as transações registradas no terminal.
Resposta — 200
Array de transações, cada uma com a mesma estrutura do retorno de POST /transaction.
Exemplos de integração
# TODO: pacote Ruby ainda não criado — usando Net::HTTP diretamente
require 'net/http'
require 'json'
uri = URI('http://localhost:9050/transaction')
req = Net::HTTP::Get.new(uri)
req.basic_auth('admin', '1234')
res = Net::HTTP.start(uri.hostname, uri.port) { |h| h.request(req) }
data = JSON.parse(res.body)
GET /transaction/{referenceId}
Busca uma transação específica pelo identificador externo informado no momento do pagamento.
Parâmetros de rota
| Parâmetro | Tipo | Descrição |
|---|---|---|
referenceId |
string | Identificador externo da transação |
Resposta — 200
Exemplos de integração
<?php
// TODO: pacote PHP ainda não criado — usando curl diretamente
$referenceId = 'pedido-001';
$ch = curl_init("http://localhost:9050/transaction/{$referenceId}");
curl_setopt($ch, CURLOPT_USERPWD, 'admin:1234');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
# TODO: pacote Ruby ainda não criado — usando Net::HTTP diretamente
require 'net/http'
require 'json'
reference_id = 'pedido-001'
uri = URI("http://localhost:9050/transaction/#{reference_id}")
req = Net::HTTP::Get.new(uri)
req.basic_auth('admin', '1234')
res = Net::HTTP.start(uri.hostname, uri.port) { |h| h.request(req) }
data = JSON.parse(res.body)
POST /transaction/{referenceId}/reversal
Realiza o estorno de uma transação pelo seu referenceId. Assim como o pagamento, aguarda o app estar em primeiro plano por até 15 segundos.
Parâmetros de rota
| Parâmetro | Tipo | Descrição |
|---|---|---|
referenceId |
string | Identificador externo da transação a estornar |
Não há corpo na requisição.
Resposta — 200
Mesma estrutura de POST /transaction.
Resposta — 503 (app em segundo plano)
Exemplos de integração
<?php
// TODO: pacote PHP ainda não criado — usando curl diretamente
$referenceId = 'pedido-001';
$ch = curl_init("http://localhost:9050/transaction/{$referenceId}/reversal");
curl_setopt($ch, CURLOPT_USERPWD, 'admin:1234');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
# TODO: pacote Ruby ainda não criado — usando Net::HTTP diretamente
require 'net/http'
require 'json'
reference_id = 'pedido-001'
uri = URI("http://localhost:9050/transaction/#{reference_id}/reversal")
req = Net::HTTP::Post.new(uri)
req.basic_auth('admin', '1234')
res = Net::HTTP.start(uri.hostname, uri.port) { |h| h.request(req) }
data = JSON.parse(res.body)