Criar Transação
Cria uma transação de pagamento. Suporta PIX, BOLETO e CREDIT_CARD. Valores monetários são sempre em centavos (inteiros).
Endpoint
POST /api/v1/transactions/createHeaders
Content-Typeapplication/jsonObrigatórioAcceptapplication/jsonObrigatórioX-Client-Id<client_id>ObrigatórioX-API-Key<api_key>ObrigatórioIdempotency-Keytx_<unique>RecomendadoNota: O header Idempotency-Key é recomendado para evitar duplicidade de transações.
Request Body (PIX)
Importante: Todos os valores monetários (amount, unitPrice, fee) devem ser informados em centavos (inteiros).
{
"amount": 500,
"currency": "BRL",
"paymentMethod": "PIX",
"installments": 1,
"customer": {
"id": "CUST-1729131560000",
"name": "João Teste",
"email": "joao.teste+1729131560000@exemplo.com",
"document": { "number": "24577481600", "type": "CPF" },
"phone": "11987654321",
"externalRef": "LEAD-1234"
},
"shipping": {
"fee": 0,
"address": {
"street": "Rua dos Testes",
"streetNumber": "123",
"complement": "Sala 2",
"zipCode": "01001000",
"neighborhood": "Centro",
"city": "São Paulo",
"state": "SP",
"country": "BR"
}
},
"items": [
{
"title": "Produto X",
"unitPrice": 500,
"quantity": 1,
"tangible": true,
"externalRef": "SKU-001"
}
],
"pix": { "expiresInDays": 1 },
"postbackUrl": "",
"metadata": "{\"origem\":\"n8n\",\"ambiente\":\"homologacao\"}",
"traceable": true,
"ip": "177.123.45.67"
}Response 200 (PIX)
Exemplo Mínimo
Retorno básico já observado em produção:
{
"data": {
"id": "ebe485c6-cdf4-4736-aa3e-464044c4d4eb",
"externalRef": "686725",
"amount": 500,
"refundedAmount": 0,
"providerCompanyId": "b6877393-8a98-4e4e-8a20-e086aacf3d8c",
"companyId": null,
"installments": 1,
"paymentMethod": "PIX",
"status": "WAITING_PAYMENT",
"postbackUrl": "",
"metadata": null,
"traceable": true,
"secureId": null,
"secureUrl": null
},
"status": 200,
"message": "Transação criada com sucesso."
}Exemplo Completo
Quando o provedor retorna campos adicionais:
{
"data": {
"id": "43836dbe-be02-47bc-965b-c51487b83b06",
"externalRef": "686671",
"amount": 500,
"refundedAmount": 0,
"providerCompanyId": "b6877393-8a98-4e4e-8a20-e086aacf3d8c",
"installments": 1,
"paymentMethod": "PIX",
"status": "WAITING_PAYMENT",
"postbackUrl": "",
"metadata": null,
"traceable": true,
"createdAt": "2025-10-17T01:38:51.943Z",
"updatedAt": "2025-10-17T01:38:51.943Z",
"paidAt": "2025-10-17T01:38:58.193Z",
"ip": "146.190.148.63",
"endToEndId": null,
"externalNsu": null,
"currency": "BRL",
"pix": {
"qrcode": "0002010102122682...6304",
"url": null,
"expirationDate": "2025-10-18T01:38:51.943Z"
}
},
"status": 200,
"message": "Transação criada com sucesso."
}📌 Observações Importantes
amount,unitPrice,feeestão em centavosproviderCompanyIdé o GUID do provedor (diferente docompanyIdinterno)- Em PIX, se
pix.urlviernull, use oqrcodecomo BR Code - Datas podem não vir em todos os cenários; quando presentes, são ISO-8601 UTC
- Guarde o
data.idcomoproviderTxIdpara consultas posteriores e reconciliação
Erros
Todos os erros seguem o formato RFC 7807 Problem Details:
{
"type": "https://httpstatuses.com/400",
"title": "Bad Request",
"status": 400,
"detail": "Campo 'amount' é obrigatório",
"errors": { "amount": ["O valor precisa ser inteiro em centavos."] },
"traceId": "00-3a2b...-01"
}400 Bad Request: Dados inválidos ou campos obrigatórios ausentes
401 Unauthorized: Credenciais inválidas ou ausentes
403 Forbidden: Acesso negado ao recurso
404 Not Found: Recurso não encontrado
409 Conflict: Conflito de estado (ex: transação duplicada)
422 Unprocessable Entity: Validação de negócio falhou
500 Internal Server Error: Erro interno do servidor
Exemplo cURL
curl -X POST https://dfpay.app/api/v1/transactions/create \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "X-Client-Id: <CLIENT_ID>" \
-H "X-API-Key: <API_KEY>" \
-H "Idempotency-Key: tx_$(date +%s)_$RANDOM" \
-d '{
"amount": 500,
"currency": "BRL",
"paymentMethod": "PIX",
"installments": 1,
"customer": {
"id": "CUST-123",
"name": "João",
"email": "joao@ex.com",
"document": {"number": "24577481600", "type": "CPF"},
"phone": "11987654321"
},
"items": [{
"title": "Produto X",
"unitPrice": 500,
"quantity": 1,
"tangible": true
}],
"pix": { "expiresInDays": 1 },
"postbackUrl": "",
"traceable": true,
"ip": "177.123.45.67"
}'Exemplo JavaScript (fetch)
const response = await fetch("https://dfpay.app/api/v1/transactions/create", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Accept": "application/json",
"X-Client-Id": "<CLIENT_ID>",
"X-API-Key": "<API_KEY>",
"Idempotency-Key": `tx_${Date.now()}_${Math.floor(Math.random()*1e6)}`
},
body: JSON.stringify({
amount: 500,
currency: "BRL",
paymentMethod: "PIX",
installments: 1,
customer: {
id: "CUST-123",
name: "João",
email: "joao@ex.com",
document: { number: "24577481600", type: "CPF" },
phone: "11987654321"
},
items: [{
title: "Produto X",
unitPrice: 500,
quantity: 1,
tangible: true
}],
pix: { expiresInDays: 1 },
postbackUrl: "",
traceable: true,
ip: "177.123.45.67"
})
});
const data = await response.json();
console.log(data);Notas Finais
✅ Salve o id retornado como providerTxId para consultas posteriores e reconciliação.
🔔 Atualizações de status também chegam via webhook configurado no postbackUrl.
🔍 O polling com GET /api/checkout/status/{id} é opcional, mas útil para verificar o status atual da transação.