Saltar al contenido principal

Crear un cobro PayIN

PayIN permite que un merchant emita cobros mediante Orkestral. La plataforma selecciona el Proveedor de Servicios de Pago (PSP) configurado en el flujo de pago y acompaña la transacción hasta su estado final.

Antes de comenzar

Necesitas:

  • una cuenta activa en Orkestral;
  • al menos un PSP registrado;
  • un flujo para cada medio de pago;
  • un token OAuth/JWT;
  • el UUID del merchant (merchantId);
  • una URL HTTPS pública si deseas recibir webhooks.

Ambientes

AmbienteURL base
QAShttps://api-qas.orkestralpay.com.br

Solicita al equipo de Orkestral la URL y las credenciales de producción. No reutilices tokens o credenciales entre ambientes.

Autenticación

Envía el token en el header Authorization:

Authorization: Bearer <access_token>
Content-Type: application/json

Endpoint

POST /transaction/payin/{merchantId}
curl --request POST \
--url "https://api-qas.orkestralpay.com.br/transaction/payin/<merchantId>" \
--header "Authorization: Bearer <access_token>" \
--header "Content-Type: application/json" \
--data '{
"transaction_id": "123e4567-e89b-12d3-a456-426614174000",
"amount": 10000,
"currency": "COP",
"description": "Payment for services",
"payment_method": "TRANSFER",
"origin_url": "https://merchant.example.com/checkout",
"ok_url": "https://merchant.example.com/payment/success",
"error_url": "https://merchant.example.com/payment/error",
"webhook_url": "https://merchant.example.com/webhooks/orkestral",
"expiration": "2027-12-31T23:59:59"
}'

Reemplaza fechas, identificadores, URLs y credenciales con los valores de tu ambiente. La fecha de expiración debe estar en el futuro.

Campos de la solicitud

CampoTipoObligatorioDescripción
transaction_idUUIDIdentificador único definido por el merchant.
amountenteroValor positivo en la unidad menor. Ej.: 100 = 1,00.
currencystringCódigo de moneda en mayúsculas.
descriptionstringNoDescripción del cobro.
payment_methodstringNoMedio de pago seleccionado.
origin_urlstringNoURL de origen del checkout.
ok_urlstringNoRedirección después del éxito.
error_urlstringNoRedirección después de un error.
webhook_urlstringNoEndpoint que recibe las actualizaciones.
clientobjetoCondicionalDatos del pagador exigidos por algunos PSP.
beneficiary_senderobjetoCondicionalRequerido por WePayments.
product_infoobjetoNoDatos del producto.
expirationfecha/horaFecha futura en formato ISO 8601 local.

Los campos condicionales y la información adicional dependen del PSP y del medio de pago.

Valores aceptados

CampoValores
currencyBRL, COP, CRC, ECS, GTQ, PEN, MXN, NIO, PAB, HNL, CLP, SVC, USD
payment_methodCREDIT_CARD, DEBIT_CARD, WALLETS, CASH, TRANSFER, PIX, PSE

Los tipos de documento dependen del país y del PSP. Algunos ejemplos son CPF, CNPJ, CC, CE, DNI, NIT, RFC y RUC.

Crear sin medio de pago

Omite payment_method cuando el cliente lo elegirá posteriormente:

{
"transaction_id": "123e4567-e89b-12d3-a456-426614174000",
"amount": 10000,
"currency": "COP",
"description": "Payment for services",
"webhook_url": "https://merchant.example.com/webhooks/orkestral",
"expiration": "2027-12-31T23:59:59"
}

La transacción puede crearse con el estado WAITING_PAYMENT_METHOD.

Respuesta exitosa

La creación exitosa devuelve 201 Created. Los campos opcionales dependen del PSP y del medio de pago:

{
"id": "123e4567-e89b-12d3-a456-426614174000",
"merchant_id": "11111111-1111-1111-1111-111111111111",
"amount": 10000,
"currency": "COP",
"payment_method": "TRANSFER",
"status": "WAITING_CUSTOMER_PAYMENT",
"custom_code": "merchant-reference",
"created_date": "2026-07-30T15:00:00",
"country": "CO",
"checkout_url": "https://checkout.example.com/transaction"
}

Guarda id para la conciliación. Un cobro creado no está necesariamente pagado; utiliza el estado de la respuesta y los webhooks.

Tratamiento de errores

HTTPCausa comúnAcción recomendada
400Campo, moneda o medio inválidoCorrige el payload antes de repetir.
401Token ausente, inválido o vencidoObtén un token válido.
403Credencial sin accesoRevisa los permisos del merchant.
404Merchant o configuración inexistenteRevisa merchantId y el ambiente.
409Identificador ya utilizadoConcilia el cobro original.
422Regla de negocio o configuración del PSPRevisa el PSP y el flujo.
5xxFalla temporalConsulta la transacción antes de repetir y usa backoff.

No repitas con otro transaction_id después de un timeout o error 5xx hasta confirmar si la primera solicitud fue procesada.

Webhooks

Orkestral envía las actualizaciones al webhook_url de la transacción o a la URL predeterminada del merchant, cuando corresponda:

PATCH <webhook_url>
Content-Type: application/json
IP: <dirección del servicio notificador>
{
"status": {
"paymentStatusId": 3,
"name": "APPROVED"
},
"message": "Pago aprobado"
}

Responde rápidamente con un estado HTTP 2xx. Las entregas fallidas se reintentan, por lo que debes procesarlas de forma idempotente. El header IP no es una firma criptográfica y no debe ser el único mecanismo de autenticación del origen.

Los estados PayIN son WAITING_CUSTOMER_PAYMENT, EXPIRED, APPROVED, DENIED, ERROR, WAITING_PAYMENT_METHOD, CHARGEBACK, WAITING_REFUND, REFUNDED, REFUND_ERROR, DECLINED y CAPTURED.

Seguridad y PCI DSS

  • Nunca envíes PAN, CVV o datos de tarjeta sin tokenizar a este endpoint.
  • Utiliza el flujo de tokenización/SDK aprobado por Orkestral.
  • Mantén los tokens exclusivamente en servicios backend.
  • No registres credenciales ni datos sensibles en logs.
  • Utiliza TLS y certificados HTTPS válidos.
  • La tokenización reduce la exposición, pero no elimina automáticamente las obligaciones PCI DSS del merchant.

Consulta también Clave secreta y URL de notificación.