/api/v3/paymentsRequiere Idempotency-KeyCrear un pago
La respuesta 201 incluye payment_url y expires_at. Lleva al cliente a payment_url; la página de pago es válida durante 24 horas. Si se devuelve 409 / 9000039, repite la misma solicitud con la misma Idempotency-Key.
Cuerpo de la solicitud
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
amount | string | Obligatorio | Importe positivo, como cadena decimal de escala fija con 2 decimales (p. ej. "250.00"), en currency_code. Debe estar dentro de los límites de pago de tu cuenta (comprobados en USD tras convertir al tipo actual; consultad los límites en API Key e Integración del panel); de lo contrario, la solicitud devuelve 422 9000005. |
currency_code | string | Obligatorio | Moneda de origen.USDEURAEDTRY |
merchant_reference | string | null | Opcional | Tu propia referencia de pedido (máximo 64 caracteres). Única por cuenta y entorno: una referencia no se puede reutilizar, ni siquiera para un pago caducado (409 9000007). Opcional.maxLength 64 |
webhook_url | string | null | Opcional | URL https:// que recibe las notificaciones firmadas (payment.paid, payment.refunded, payment.failed). El host debe resolverse por DNS a una dirección pública (sin IP privada ni reservada, sin localhost); la URL tiene como máximo 500 caracteres y no debe contener nombre de usuario ni contraseña. Opcional: si se omite, se usa la URL de webhook guardada en el panel para el entorno de tu clave de firma; si no hay ninguna guardada, no se envía ninguna notificación.maxLength 500 |
merchant_name | string | null | Opcional | Nombre que se muestra en la pantalla de pago. Opcional; por defecto es Hesap <account number> (tu número de cuenta de 6 dígitos). Un valor de más de 120 caracteres se trunca, no se rechaza. |
return_url | string · uri | null | Opcional | return_url opcional (hasta 2048 caracteres). Producción exige HTTPS; sandbox también acepta HTTP en localhost, 127.0.0.1 o [::1]. No se permiten información de usuario, fragmentos, caracteres de control ni espacios. Los nombres de dominio internacionales se normalizan a ASCII. URL no válida: 422 / 9000038. Cuando termina el pago, la página de resultado muestra un botón que lleva al cliente a esta dirección, con code, status y, si lo enviaste, merchant_reference añadidos a la consulta; no hay redirección automática. No la cambies al reintentar con la misma Idempotency-Key.maxLength 2048 |
Cuerpo de la solicitud · Ejemplo
{
"amount": "10.00",
"currency_code": "USD",
"merchant_reference": "INV-104",
"merchant_name": "Test Shop",
"return_url": "https://shop.example.invalid/return?basket=104"
}limits contiene currency_code, min_amount y max_amount (null: sin límite superior). Los importes de abajo son ejemplos, no tus límites.
HTTP 422 / 9000005
{
"type": "https://www.cryptoavans.com/errors/9000005",
"title": "Invalid amount",
"status": 422,
"code": "9000005",
"correlation_id": "example",
"detail": "Amount outside the account limits.",
"limits": {
"currency_code": "USD",
"min_amount": "25.00",
"max_amount": null
}
}Respuesta · 201
Pago creado. Si se repite con la misma Idempotency-Key, devuelve 200 en su lugar.
Payment
| Campo | Tipo | Descripción |
|---|---|---|
code | string | Código corto del pago (4–16 caracteres en minúsculas). |
merchant_reference | string | null | Tu referencia de pedido, devuelta tal cual. |
status | string | Estado del ciclo de vida del pago: created hasta que el cliente paga y luego paid; expired cuando el enlace caduca sin pagarse.createdpaidexpired |
amount | string | Importe bruto, como cadena decimal de escala fija con 2 decimales, en currency_code. |
currency_code | string | Moneda de origen de este pago; lee el valor devuelto en lugar de suponer la moneda del ejemplo.USDEURAEDTRY |
environment | string | Entorno al que pertenece este pago.sandboxlive |
payment_url | string | Lleva al cliente a la payment_url devuelta como una página normal (navegación de nivel superior); no construyas ni cambies la dirección tú mismo. La página no se puede incrustar en un iframe. No se envían datos de tarjeta a esta API. |
created_at | string · date-time | Fecha y hora de creación (UTC, ISO-8601). |
expires_at | string · date-time | UTC. La página de pago es válida durante 24 horas desde su creación. Crea un pago nuevo tras la caducidad; no hay un endpoint de renovación. Verifica el pago con GET /api/v3/payments/{code} o con un webhook firmado; el regreso del cliente a tu sitio es solo informativo. |
paid_at | string · date-time | null | Cuándo se pagó, o null. |
payment_url_kind | string | Siempre platform (nuestra página de pago). El campo se mantiene para las integraciones existentes; provider_hosted ya no se devuelve.platformprovider_hosted |
card | MerchantCardSummary | null | Datos de la tarjeta del intento aprobado; null hasta pagar o si no están disponibles. |
failure | PaymentFailureSummary | null | Último intento fallido mientras no esté pagado; en otro caso, null. No es definitivo: puede pagarse hasta expires_at. attempt_count cuenta los intentos fallidos entre reintentos. |
Respuesta · Ejemplo
{
"code": "a1b2c3d4",
"merchant_reference": "INV-104",
"status": "created",
"amount": "10.00",
"currency_code": "USD",
"environment": "live",
"payment_url": "https://pay.example.com/l/a1b2c3d4",
"payment_url_kind": "platform",
"created_at": "2026-10-05T12:00:00Z",
"expires_at": "2026-10-06T12:00:00Z",
"paid_at": null,
"card": null,
"failure": null
}Otras respuestas
200Repetición idempotente: se devuelve el pago original; no se crea un segundo pago.422Un importe fuera de los límites de la cuenta (9000005, incluido menos de 0.01 tras convertir o superar la capacidad) incluye limits en la moneda base de la cuenta. Sandbox aplica la misma validación. Otros errores pueden omitir limits.