Saltar al contenido principal

Referencia de la API de Payment Intents

Referencia completa de los endpoints de la API de Payment Intents.

URL base​

https://api.orcarail.com/api/v1

La versión de la API va en la ruta (v1). Para usar otra versión, usa la URL base correspondiente (por ejemplo https://api.orcarail.com/api/v2). El SDK de Node usa baseUrl y apiVersion en la configuración; consulta SDK de Node.

Crear un Payment Intent​

Crea un nuevo Payment Intent.

POST /payment_intents

Autenticación​

  • Token Bearer (JWT) o clave de API (Basic Auth)

Cuerpo de la petición​

ParámetroTipoObligatorioDescripción
amountstringSíImporte a cobrar (por ejemplo "100.00")
currencystringSíCódigo de moneda (por ejemplo "usd")
payment_method_typesarraySíDebe incluir "crypto"
tokenIdnumberSíID del token (por ejemplo USDC, USDT)
networkIdnumberSíID de la red (por ejemplo Ethereum, Polygon)
return_urlstringSíURL de retorno tras el pago
cancel_urlstringNoURL de cancelación
descriptionstringNoDescripción del pago
metadataobjectNoMetadatos personalizados
expires_atstringNoMarca de tiempo de caducidad ISO 8601
withdrawal_addressesobjectNoDirecciones de retiro por tipo de cadena. Claves: tipos de cadena válidos (evm, solana, bitcoin, tron, cosmos, polkadot, move, ton). Omítelo o déjalo vacío para una cadena para usar el valor por defecto de tu cuenta en la configuración de retiros.

Respuesta​

{
"id": "550e8400-e29b-41d4-a716-446655440000",
"amount": "100.00",
"currency": "usd",
"status": "requires_payment_method",
"paymentMethodTypes": ["crypto"],
"clientSecret": "550e8400-e29b-41d4-a716-446655440000_secret_abc123",
"returnUrl": "https://merchant.example.com/return",
"paymentLink": {
"id": 1,
"link": "https://pay.orcarail.com/pay/pl_abc123"
},
"createdAt": "2024-01-01T00:00:00.000Z"
}

Obtener un Payment Intent​

Obtén los detalles de un Payment Intent.

GET /payment_intents/:id

Autenticación​

  • Token Bearer (JWT) o clave de API (Basic Auth)

Parámetros de ruta​

ParámetroTipoObligatorioDescripción
idstringSíID del Payment Intent (por ejemplo 550e8400-e29b-41d4-a716-446655440000)

Respuesta​

{
"id": "550e8400-e29b-41d4-a716-446655440000",
"amount": "100.00",
"currency": "usd",
"status": "succeeded",
"paymentMethodTypes": ["crypto"],
"latestTransaction": {
"id": "txn_1234567890",
"status": "completed",
"hash": "0x1234567890abcdef...",
"amount": "100.00"
},
"createdAt": "2024-01-01T00:00:00.000Z",
"updatedAt": "2024-01-01T00:00:00.000Z"
}

Confirmar un Payment Intent​

Confirma un Payment Intent para obtener la URL de redirección.

POST /payment_intents/:id/confirm

Autenticación​

  • Token Bearer (JWT) o clave de API (Basic Auth)

Parámetros de ruta​

ParámetroTipoObligatorioDescripción
idstringSíID del Payment Intent

Cuerpo de la petición​

ParámetroTipoObligatorioDescripción
client_secretstringSíClient secret del Payment Intent
return_urlstringNoSustituye la URL de retorno
payment_method_dataobjectNoDatos del método de pago

Respuesta​

{
"id": "550e8400-e29b-41d4-a716-446655440000",
"status": "requires_confirmation",
"nextAction": {
"type": "redirect_to_url",
"redirectToUrl": {
"url": "https://pay.orcarail.com/pay/pl_abc123?payment_intent=550e8400-e29b-41d4-a716-446655440000&payment_intent_client_secret=550e8400-e29b-41d4-a716-446655440000_secret_abc123"
}
}
}

Cancelar un Payment Intent​

Cancela un Payment Intent. Una vez cancelado, no se puede usar para pagar.

POST /payment_intents/:id/cancel

Autenticación​

  • Clave de API (Basic Auth): obligatoria

Parámetros de ruta​

ParámetroTipoObligatorioDescripción
idstringSíID del Payment Intent

Respuesta​

{
"id": "550e8400-e29b-41d4-a716-446655440000",
"status": "canceled",
"updatedAt": "2024-01-01T12:00:00.000Z"
}

Completar un Payment Intent​

Marca un Payment Intent como en procesamiento y lanza el webhook payment_intent.processing. Llámalo cuando el cliente haya vuelto a tu URL de retorno (por ejemplo, desde tu página de éxito) para que tu backend marque el intent como en procesamiento mientras consultas o esperas el webhook final payment_intent.complete.

POST /payment_intents/:id/complete

Autenticación​

  • Clave de API (Basic Auth): obligatoria

Parámetros de ruta​

ParámetroTipoObligatorioDescripción
idstringSíID del Payment Intent

Respuesta​

{
"id": "550e8400-e29b-41d4-a716-446655440000",
"status": "processing",
"updatedAt": "2024-01-01T12:00:00.000Z"
}

Simular un pago (solo sandbox)​

Completa un Payment Intent sin transferencia on-chain, solo en una organización sandbox. El pago sigue el flujo normal y emite los webhooks habituales con livemode: false, y su transacción tiene simulated: true. Los pagos simulados nunca se pueden retirar.

POST /payment_intents/:id/simulate

Autenticación​

  • Clave de API (Basic Auth) de una organización sandbox (ak_test_…): obligatoria

Errores​

EstadoCódigoCuándo
403SIMULATION_SANDBOX_ONLYEl intent pertenece a una organización live

La página de pago alojada usa el equivalente público POST /payments/links/:slug/simulate (solo enlaces sandbox).

Actualizar un Payment Intent​

Actualiza un Payment Intent antes de confirmarlo.

PATCH /payment_intents/:id

Autenticación​

  • Token Bearer (JWT) o clave de API (Basic Auth)

Parámetros de ruta​

ParámetroTipoObligatorioDescripción
idstringSíID del Payment Intent

Cuerpo de la petición​

Todos los campos son opcionales. Incluye solo los campos que quieras actualizar.

ParámetroTipoObligatorioDescripción
amountstringNoImporte actualizado
currencystringNoMoneda actualizada
descriptionstringNoDescripción actualizada
metadataobjectNoMetadatos actualizados
return_urlstringNoURL de retorno actualizada
cancel_urlstringNoURL de cancelación actualizada
withdrawal_addressesobjectNoDirecciones de retiro por tipo de cadena; omítelo para usar el valor por defecto de la cuenta

Respuesta​

{
"id": "550e8400-e29b-41d4-a716-446655440000",
"amount": "150.00",
"currency": "usd",
"status": "requires_payment_method",
"updatedAt": "2024-01-01T12:00:00.000Z"
}

Códigos de estado​

Código de estadoDescripción
200Correcto
201Creado
400Petición incorrecta
401No autorizado
404No encontrado
500Error interno del servidor

Formato de las respuestas de error​

{
"statusCode": 400,
"message": "Invalid request",
"error": "Bad Request"
}

Límites de frecuencia​

Las peticiones a la API tienen límites de frecuencia. Límites actuales:

  • Peticiones autenticadas: 100 peticiones por minuto por clave de API/usuario
  • Peticiones no autenticadas: 10 peticiones por minuto por IP

Las respuestas incluyen cabeceras de límite de frecuencia:

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1640995200

Consulta también​