Saltar al contenido principal

Crear Transacción

Utilice este endpoint para crear transacciones de ventas de productos físicos o digitales.

Entornos Disponibles​

https://api.gateway.com.br/core

Endpoint​

  • Método: POST
  • Endpoint: /transaction
  • Autenticación: Bearer token

Request Body​

⚠️ Importante: Montos en Centavos

Todos los valores monetarios (amount, unitPrice) deben enviarse en centavos, como números enteros.

Ejemplos:

  • BRL 10.00 = 1000
  • BRL 99.99 = 9999
  • BRL 100.50 = 10050

NO use: 99.99, 10.00, valores negativos USE: 9999, 1000 (siempre enteros)

NombreTipoObligatorioDescripciónValidaciones
amountnumberSíMonto de la transacción (entero, en centavos)Debe ser entero en centavos; mínimo 1 (BRL 0.01) y máximo 10000000 (BRL 100,000.00)
paymentMethodstring (enum) - PIXSíMétodo de pagoDebe ser un enum válido
webhookUrlstring (URL)NoURL HTTPS que recibe las notificacionesDebe ser una URL válida con https obligatorio; sin fragmento (#); host y TLD obligatorios; query permitida
externalCodestringNoSu código de referenciaDebe tener entre 8 y 255 caracteres
idempotencyKeystringSíIdentificador único para evitar duplicadosDebe tener entre 8 y 255 caracteres
customerobjectNoDatos del cliente (ver Sub-Objeto Customer)
sellerobjectNoDatos del vendedor (ver Sub-Objeto Seller)
isInfoProductboolean (Valor por defecto: true)NoIndica si el producto es digital o físico
addressobjectSí (si isInfoProduct es false)Dirección del cliente (ver Sub-Objeto Address)
itemsobject[]NoLista de productos (ver Sub-Objeto Item)
metadataobjectNoMetadatos
NombreTipoObligatorioDescripciónValidaciones
pixobjectSí (si paymentMethod es PIX)Datos del PIX (ver Sub-Objeto Pix)

Sub-Objetos​

Customer​

CampoTipoObligatorioDescripciónValidaciones
ipstringNoIPDebe ser IPv4 o IPv6 válido
namestringSíNombreDebe ser alfanumérico internacional
documentstringSíDocumentoDebe ser un CPF o CNPJ válido
emailobjectNoCorreo electrónicoDebe tener formato de correo válido
landlineobjectNoTeléfono fijoDebe tener formato de teléfono fijo válido
mobilePhoneobjectNoTeléfono celularDebe tener formato de teléfono móvil válido
birthdateobjectNoFecha de nacimientoDebe ser una fecha ISO sin hora

Seller​

CampoTipoObligatorioDescripciónValidaciones
namestringSíNombreDebe ser alfanumérico internacional
documentstringSíDocumentoDebe ser un CPF o CNPJ válido

Address​

CampoTipoObligatorioDescripciónValidaciones
postalCodestringSíCódigo postal de Brasil (CEP)Debe tener formato de CEP válido
complementstringNoInformación adicionalDebe tener entre 2 y 150 caracteres
numberstringSíNúmero de la casaDebe tener entre 1 y 10 caracteres, solo dígitos
streetstringSíNombre de la calleDebe tener entre 2 y 200 caracteres
neighborhoodstringSíNombre de la colonia o barrioDebe tener entre 2 y 100 caracteres
citystringSíNombre de la ciudadDebe tener entre 2 y 100 caracteres
statestringSíNombre o abreviatura del estadoDebe tener entre 2 y 50 caracteres
countrystringSíNombre del paísDebe tener entre 2 y 60 caracteres

Item​

CampoTipoObligatorioDescripciónValidaciones
titlestringSíTítuloDebe tener entre 2 y 150 caracteres
descriptionstringNoInformación adicionalDebe tener entre 2 y 255 caracteres
unitPricenumberSíMonto del artículo (entero, en centavos)Debe ser entero en centavos; mínimo 1 (BRL 0.01) y máximo 10000000 (BRL 100,000.00)
quantitynumber (Valor por defecto: 1)NoCantidad de este artículoDebe ser entero; mínimo 1; máximo 100

Pix​

CampoTipoObligatorioDescripciónValidaciones
expirationSecondsnumber (Valor por defecto: 1800 (30 minutos))NoTiempo hasta que expira el código QR del PIX, en segundosDebe ser entero; mínimo 60; máximo 86400

Ejemplo de Solicitud​

curl --request POST \
--url https://api.gateway.com.br/core/transaction \
--header 'Authorization: Bearer su-token-jwt' \
--header 'Content-Type: application/json' \
--data '{
"amount": 500,
"paymentMethod": "PIX",
"webhookUrl": "https://sua-api.com/webhooks/transaction",
"externalCode": "TRANSACTION-123",
"idempotencyKey": "unique-key-12345",
"customer": {
"ip": "123.123.123.123",
"name": "Customer",
"document": "123.123.123-12",
"email": "customer@gmail.com",
"landline": "(12) 12345-1234",
"mobilePhone": "(12) 12345-1234"
},
"seller": {
"name": "Seller",
"document": "123.123.123-12"
},
"isInfoProduct": false,
"address": {
"postalCode": "54753-800",
"number": "155",
"street": "Rua Santa Mariana",
"neighborhood": "São Pedro",
"city": "Camaragibe",
"state": "Pernambuco",
"country": "Brazil",
"complement": "Casa Azul"
},
"items": [
{
"title": "Fone Bluetooth PulseWave X200",
"unitPrice": 500,
"quantity": 1,
"description": "Fone de ouvido sem fio com cancelamento ativo de ruído, bateria de 30h e microfone embutido. Compatível com Android e iOS."
}
],
"metadata": {
"moeda": "BRL",
"autorizacao": "A1B2C3",
"status": "aprovada"
},
"pix": {
"expirationSeconds": 600
}
}'

Respuesta Exitosa​

CampoTipoObligatorioDescripción
idstring (UUID)SíIdentificador único de la transacción
externalCodestringNoSu código de referencia
amountnumberSíMonto de la transacción (entero, en centavos)
typestring (enum) - TRANSACTIONSí
statusstring (enum) - PIX_QRCODE_GENERATEDSí
  • PIX_QRCODE_GENERATED: código QR generado, esperando el pago
pixResponseobjectSíDatos del PIX (ver Sub-Objeto PixResponse)

Sub-Objetos​

PixResponse​

CampoTipoObligatorioDescripción
uristringSíCódigo de copiar y pegar del código QR
qrCodeBase64stringSíImagen del código QR
expirationDatestringSíFecha de expiración del código QR

Ejemplo de Respuesta​

{
"id": "553e8400-e29b-41d4-a716-436251480000",
"externalCode": "TRANSACTION-123",
"amount": 500,
"status": "PIX_QRCODE_GENERATED",
"pixResponse": {
"uri": "00020126580014br.gov.bcb.pix0136123e4567-e89b-12d3-a456-426614174000",
"qrCodeBase64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
"expirationDate": "2026-03-06T12:49:04.681Z"
}
}

Errores Posibles​

CódigoDescripciónSolución
401Credenciales inválidasVerifique sus credenciales
403Sin permiso/autorizaciónContacte al soporte
422Datos inválidos o faltantesVerifique el formato de los datos
422ValidacionesContacte al soporte
429Demasiadas solicitudesEspere e intente de nuevo
500Error internoContacte al soporte