RAYO
POST

Criar Transação

Cria uma transação de pagamento. Suporta PIX. Valores monetários são sempre em centavos (inteiros).

Endpoint

POST/api/v1/transactions/create

Cria uma nova transação PIX com QR Code dinâmico

Headers

ParametroTipoDescricao
Content-Typeobrigatorio
stringapplication/json
Acceptobrigatorio
stringapplication/json
X-Client-Idobrigatorio
stringClient ID do seu aplicativo
X-API-Keyobrigatorio
stringChave secreta da sua empresa
Idempotency-Key
stringChave única para evitar duplicidade (ex: tx_123456789). Recomendado

Idempotency-Key

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).
request-body.json
json
{
"amount": 500,
"currency": "BRL",
"paymentMethod": "PIX",
"installments": 1,
"customer": {
"id": "CUST-1729131560000",
"name": "João Teste",
"email": "joao.teste@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\":\"api\",\"ambiente\":\"producao\"}",
"traceable": true,
"ip": "177.123.45.67"
}

Campos do Body

ParametroTipoDescricao
amountobrigatorio
integerValor em centavos (500 = R$ 5,00)
currencyobrigatorio
stringMoeda (BRL)
paymentMethodobrigatorio
stringMétodo de pagamento (PIX)
installmentsobrigatorio
integerNúmero de parcelas (1 para PIX)
customerobrigatorio
objectDados do cliente
customer.nameobrigatorio
stringNome completo do cliente
customer.emailobrigatorio
stringEmail do cliente
customer.documentobrigatorio
objectDocumento (number + type: CPF/CNPJ)
customer.phoneobrigatorio
stringTelefone do cliente
itemsobrigatorio
arrayLista de itens da transação
pix.expiresInDays
integerDias para expirar o QR Code (padrão: 1)
postbackUrl
stringURL de callback para webhooks
metadata
stringMetadados em JSON string
traceable
booleanHabilitar rastreamento
ip
stringIP do cliente

Response 200 (PIX)

Exemplo Mínimo

response-minimo.json
json
{
"data": {
"id": "ebe485c6-cdf4-4736-aa3e-464044c4d4eb",
"externalRef": "686725",
"amount": 500,
"refundedAmount": 0,
"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:

response-completo.json
json
{
"data": {
"id": "43836dbe-be02-47bc-965b-c51487b83b06",
"externalRef": "686671",
"amount": 500,
"refundedAmount": 0,
"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": null,
"ip": "146.190.148.63",
"endToEndId": null,
"currency": "BRL",
"pix": {
"qrcode": "00020101021226820014br.gov.bcb.pix...",
"url": null,
"expirationDate": "2025-10-18T01:38:51.943Z"
}
},
"status": 200,
"message": "Transação criada com sucesso."
}

Observações Importantes

  • amount, unitPrice, fee estão em centavos
  • Em PIX, se pix.url vier null, use o qrcode como BR Code
  • Datas podem não vir em todos os cenários; quando presentes, são ISO-8601 UTC
  • Guarde o data.id para consultas posteriores e reconciliação

Erros

Todos os erros seguem o formato RFC 7807 Problem Details:

error.json
json
{
"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"
}
CódigoNomeDescrição
400Bad RequestDados inválidos ou campos obrigatórios ausentes
401UnauthorizedCredenciais inválidas ou ausentes
403ForbiddenAcesso negado ao recurso
409ConflictConflito de estado (ex: transação duplicada)
422Unprocessable EntityValidação de negócio falhou
500Internal Server ErrorErro interno do servidor

Exemplo cURL

cURL
bash
curl -X POST https://rayopay.com.br/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)

JavaScript (fetch)
javascript
const response = await fetch("https://rayopay.com.br/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

Salve o id retornado para consultas posteriores e reconciliação.

Webhooks

Atualizações de status também chegam via webhook configurado no postbackUrl.