Integración API
La API PayGate PoS es una solución integral de procesamiento de pagos diseñada específicamente para implementaciones de Punto de Venta (PoS). Esta API proporciona un conjunto completo de endpoints para manejar diversas operaciones de pago, incluyendo pagos, reembolsos, pre-autorizaciones y gestión de terminales.
URL Base: https://terminal-ip:8081/api/v1
Autenticación
La API utiliza autenticación mediante clave API para todas las solicitudes:
- Header:
X-API-Key
- Descripción: Clave API para autorizar las solicitudes
- Requerido: Sí. Será enviado por el punto de venta.
Adicionalmente, para operaciones específicas del terminal:
- Header:
X-Terminal-Serial
- Descripción: Número de serie del terminal para autorización
- Requerido: Para ciertas operaciones. Se calcula automáticamente.
Cabeceras Comunes
Todas las solicitudes de la API requieren el siguiente header:
- Idempotency-Key: Clave única para idempotencia (requerido)
Estructura Base de Solicitud
Todas las solicitudes siguen una estructura base común:
{
"object": "string", // Tipo de operación (init, payments, refunds, preauths, etc.)
"locale": "string", // Idioma para las respuestas (es_ES, en_US)
"print": false, // Opcional: Imprimir resultado en terminal (por defecto: false)
"metadata": { // Opcional: Pares clave-valor personalizados
"custom_field_1": "anyvalue",
"custom_field_n": "anyvalue"
}
}
Estructura Base de Respuesta
Todas las respuestas incluyen campos comunes:
{
"request_id": "string", // Identificador único de transacción
"object": "string", // Tipo de operación
"locale": "string" // Idioma de respuesta
}
Endpoints API
1. Inicialización del Dispositivo
POST /init
Inicializa el dispositivo de pago y recupera información del terminal. Esta operación es fundamental para establecer la comunicación con el terminal y obtener información sobre sus capacidades y configuración.
Cuerpo de la Solicitud:
{
"object": "init",
"locale": "es_ES",
"datetime": "2020-01-01T00:00:00Z", // Opcional: Formato ISO 8601
"callback_url": "https://example.com/callback" // Opcional: URL para mostrar información
}
Respuesta (200):
{
"request_id": "unique-id",
"object": "init",
"locale": "es_ES",
"serial_number": "58233707725", // Número de serie del terminal
"buffer_size": "00009990", // Tamaño del buffer disponible
"public_keys_version": "000", // Versión de claves públicas
"symmetric_keys_version": "223", // Versión de claves simétricas
"param_version": "000", // Versión de parámetros
"terminal_vendor": "28", // Código del fabricante del terminal
"terminal_model": "A8", // Modelo del terminal
"capabilities": "FD02", // Capacidades del terminal
"app_name": "APPPUP01", // Nombre de la aplicación
"app_version": "1907", // Versión de la aplicación
"spec_version": "191", // Versión de especificación
"initialized_boxes": "02", // Cajas inicializadas
"boxes": { // Información de los cajones de claves de PIN
"02": "223A84EA459DC39",
"03": "001936DDF8BDA45"
},
"pci_scenary": "1" // Escenario de cumplimiento PCI
}
2. Operaciones de Pago
POST /payments
Procesa una transacción de pago con un importe especificado. Esta es la operación principal para realizar cobros con tarjeta de crédito/débito.
Cuerpo de la Solicitud:
{
"object": "payments",
"locale": "es_ES",
"amount": 1000, // importe en céntimos (10.00 EUR)
"currency": "eur", // Código de moneda (ISO 4217)
"order": "ORDER-00001", // Identificador único del pedido
"token": { // Opcional: Gestión de tokens
"id": "token-1234", // ID del token
"expires_at": "2020-01-01T00:00:00Z", // Fecha de expiración
"type": "local", // Tipo de token (local/scheme)
"action": "store" // Acción (store para guardar, pay para pagar)
},
"order_summary": { // Opcional: Resumen del ticket de venta
"total": 1000, // Total final
"discount": 0, // Descuentos aplicados
"shipping": 0, // Gastos de envío
"subtotal": 1000, // Subtotal
"tip": 0 // Propina
},
"order_details": [ // Opcional: Detalles de los artículos
{
"product": "SKU000001", // SKU del producto
"quantity": 1, // Cantidad
"amount": 100, // Precio unitario
"tax": 9, // Impuestos
"discount": 0, // Descuento del artículo
"total": 109 // Total del artículo
}
],
"callback_url": "https://example.com/callback" // URL para notificaciones
}
Respuesta (200) - Éxito:
{
"request_id": "unique-id",
"object": "payments",
"locale": "es_ES",
"order": "ORDER-00001",
"amount": 1000,
"currency": "eur",
"payment_method": "card",
"token": { // Presente si se solicitó tokenización
"id": "token-1234",
"expires_at": "2020-01-01T00:00:00Z",
"type": "local"
},
"payment_details": {
"card_authorization_code": "123456", // Código de autorización
"card_processor_center": "REDSYS", // Centro procesador
"card_bin": "543200", // BIN de la tarjeta (primeros 6 dígitos)
"card_masked": "543200*****1234", // Tarjeta enmascarada
"card_subtype": "corporate", // Subtipo (corporate/consumer)
"card_brand": "VISA", // Marca de la tarjeta
"card_type": "credit", // Tipo (credit/debit)
"card_issuer": "Caixabank", // Emisor de la tarjeta
"card_issuer_code": 2100, // Código del emisor
"card_authorization_mode": "D" // Modo de autorización (D=Online, O=Offline)
},
"printing_details": {
"printable_data_encoded": "base64-encoded-data", // Datos codificados para impresión
"printable_data": { // Datos estructurados para impresión
"elemento_1": "value1",
"elemento_n": "valueN"
}
}
}
Respuesta (402) - Pago Denegado:
{
"request_id": "unique-id",
"object": "payments",
"locale": "es_ES",
"order": "ORDER-00001",
"amount": 1000,
"currency": "eur",
"payment_method": "card",
"payment_details": {
"card_declined_code": "190", // Código de denegación
"card_declined_message": "DENEGADA POR MOTIVOS DIVERSOS", // Mensaje de denegación
"card_processor_center": "REDSYS",
"card_bin": "543200",
"card_masked": "543200*****1234",
"card_subtype": "corporate",
"card_brand": "VISA",
"card_type": "credit",
"card_issuer": "Caixabank",
"card_issuer_code": 2100
},
"error": {
"code": "190",
"message": "denegada por motivos diversos"
}
}
DELETE /payments/{request_id}
Cancela una operación de pago. Útil para cancelar transacciones que están en proceso.
Cuerpo de la Solicitud:
{
"object": "payments/cancel",
"locale": "es_ES",
"order": "ORDER-00001",
"amount": 1000,
"currency": "eur"
}
Respuesta (200):
{
"request_id": "unique-id",
"object": "cancel",
"locale": "es_ES",
"order": "ORDER-00001",
"amount": 1000,
"currency": "eur",
"payment_method": "card"
}
3. Operaciones de Reembolso
POST /refunds
Procesa una transacción de reembolso referenciada a un pedido existente. Permite devolver total o parcialmente el importe de una transacción anterior.
Cuerpo de la Solicitud:
{
"object": "refunds",
"locale": "es_ES",
"amount": 1000, // importe a reembolsar
"currency": "eur",
"order": "ORDER-00001", // ID del pedido original
"token": { // Opcional: Gestión de tokens
"id": "token-1234",
"expires_at": "2020-01-01T00:00:00Z",
"type": "local",
"action": "store"
},
"order_summary": { // Opcional: Resumen del ticket de reembolso
"total": 1000,
"discount": 0,
"shipping": 0,
"subtotal": 1000,
"tip": 0
},
"order_details": [ // Opcional: Artículos a reembolsar
{
"product": "SKU000001",
"quantity": 1,
"amount": 100,
"tax": 9,
"discount": 0,
"total": 109
}
]
}
Respuesta (200):
{
"request_id": "unique-id",
"object": "refunds",
"locale": "es_ES",
"order": "ORDER-00001",
"amount": 1000,
"currency": "eur",
"payment_method": "card",
"token": { // Presente si se solicitó tokenización
"id": "token-1234",
"expires_at": "2020-01-01T00:00:00Z",
"type": "local"
},
"printing_details": {
"printable_data_encoded": "base64-encoded-data",
"printable_data": {
"elemento_1": "value1",
"elemento_n": "valueN"
}
}
}
DELETE /refunds/{request_id}
Cancela una operación de reembolso.
Cuerpo de la Solicitud:
{
"object": "payments/cancel",
"locale": "es_ES",
"order": "ORDER-00001",
"amount": 1000,
"currency": "eur"
}
Respuesta (200):
{
"request_id": "unique-id",
"object": "cancel",
"locale": "es_ES",
"order": "ORDER-00001",
"amount": 1000,
"currency": "eur",
"payment_method": "card"
}
4. Operaciones de Pre-autorización
POST /preauths
Procesa una transacción de pre-autorización. Útil para reservar fondos sin completar la transacción inmediatamente (hoteles, alquiler de coches, etc.).
Cuerpo de la Solicitud:
{
"object": "preauths",
"locale": "es_ES",
"amount": 1000, // importe a pre-autorizar
"currency": "eur",
"order": "ORDER-00001",
"order_summary": { // Opcional: Resumen del ticket de venta
"total": 1000,
"discount": 0,
"shipping": 0,
"subtotal": 1000,
"tip": 0
},
"order_details": [ // Opcional: Detalles de los artículos
{
"product": "SKU000001",
"quantity": 1,
"amount": 100,
"tax": 9,
"discount": 0,
"total": 109
}
]
}
Respuesta (200):
{
"request_id": "unique-id",
"object": "preauths",
"locale": "es_ES",
"order": "ORDER-00001",
"amount": 1000,
"currency": "eur",
"payment_method": "card",
"payment_details": {
"card_authorization_code": "123456", // Código de autorización (necesario para confirmar)
"card_processor_center": "REDSYS",
"card_bin": "543200",
"card_masked": "543200*****1234",
"card_subtype": "corporate",
"card_brand": "VISA",
"card_type": "credit",
"card_issuer": "Caixabank",
"card_issuer_code": 2100
},
"printing_details": {
"printable_data_encoded": "base64-encoded-data",
"printable_data": {
"elemento_1": "value1",
"elemento_n": "valueN"
}
}
}
DELETE /preauth/{request_id}
Cancela una pre-autorización (libera/desbloquea los fondos reservados).
Cuerpo de la Solicitud:
{
"object": "preauths/cancel",
"locale": "es_ES",
"order": "ORDER-00001",
"amount": 1000,
"currency": "eur",
"payment_method": "card",
"payment_details": {
"card_authorization_code": "123456" // Código de la pre-autorización original
}
}
Respuesta (200):
{
"request_id": "unique-id",
"object": "preauths/cancel",
"locale": "es_ES",
"order": "ORDER-00001",
"amount": 1000,
"currency": "eur",
"payment_method": "card"
}
POST /preauth/{request_id}/confirm
Confirma una pre-autorización (cobra los fondos previamente reservados).
Cuerpo de la Solicitud:
{
"object": "preauths/confirm",
"locale": "es_ES",
"amount": 1000, // importe a confirmar (puede ser menor al pre-autorizado)
"currency": "eur",
"order": "ORDER-00001",
"payment_method": "card",
"payment_details": {
"card_authorization_code": "123456" // Código de la pre-autorización original
}
}
Respuesta (200):
{
"request_id": "unique-id",
"object": "payments", // Cambia a "payments" al confirmar
"locale": "es_ES",
"order": "ORDER-00001",
"amount": 1000,
"currency": "eur",
"payment_method": "card",
"payment_details": {
"card_authorization_code": "123456",
"card_processor_center": "REDSYS",
"card_bin": "543200",
"card_masked": "543200*****1234",
"card_subtype": "corporate",
"card_brand": "VISA",
"card_type": "credit",
"card_issuer": "Caixabank",
"card_issuer_code": 2100,
"card_authorization_mode": "D"
},
"printing_details": {
"printable_data_encoded": "base64-encoded-data",
"printable_data": {
"elemento_1": "value1",
"elemento_n": "valueN"
}
}
}
5. Totales de Ticket
GET /totals
Recupera los totales del ticket. Útil para cierres de caja y reportes de ventas.
Parámetros de Consulta:
session
(requerido): Tipo de sesióncurrent
: Cierra la sesión actual y devuelve totaleslast
: Devuelve totales de la última sesiónlast1
: Devuelve totales de la penúltima sesión
Respuesta (200):
{
"request_id": "unique-id",
"object": "totals",
"locale": "es_ES",
"totals": {
"currency": "eur", // Moneda de los totales
"total": 1000, // Total general
"count": { // Conteo de transacciones
"refunds": 100, // Número de reembolsos
"payments": 100, // Número de pagos
"payments_cancelled": 100, // Número de pagos cancelados
"refunds_cancelled": 100 // Número de reembolsos cancelados
},
"sum": { // Suma de importes
"refunds": 100, // Total de reembolsos
"payments": 100, // Total de pagos
"payments_cancelled": 100, // Total de pagos cancelados
"refunds_cancelled": 100 // Total de reembolsos cancelados
},
"card_types": { // Desglose por tipo de tarjeta
"mastercard": {
"total": 100, // Total para Mastercard
"count": { // Conteo por Mastercard
"refunds": 100,
"payments": 100,
"payments_cancelled": 100,
"refunds_cancelled": 100
},
"sum": { // Suma por Mastercard
"refunds": 100,
"payments": 100,
"payments_cancelled": 100,
"refunds_cancelled": 100
}
}
}
},
"printing_details": {
"printable_data_encoded": "base64-encoded-data",
"printable_data": {
"elemento_1": "value1",
"elemento_n": "valueN"
}
}
}
6. Gestión de Configuración
POST /tools/config
Actualiza la configuración de PayGate o archivos BIN. Permite recargar configuraciones sin reiniciar el terminal.
Parámetros de Consulta:
action
(requerido): Tipo de acciónreload
: Recarga la configuraciónreloadbinlist
: Recarga la lista de BIN
Cuerpo de la Solicitud:
{
"object": "config/reload",
"locale": "es_ES"
}
Respuesta (200):
{
"request_id": "unique-id",
"object": "config/reload",
"locale": "es_ES",
"digest": "075bcb53e75c2400cb0c25ae5c7c77538f6a7a61bf17bd1b95ab3ef84e7bd603" // Hash de verificación
}
7. Gestión del Terminal
POST /tools/idle
Establece el PIN pad en modo inactivo. Útil para ahorrar energía o cuando no se necesita el terminal.
Cuerpo de la Solicitud:
{
"object": "idle",
"locale": "es_ES"
}
Respuesta (200):
{
"object": "idle"
}
POST /tools/file3000
Carga el archivo 3000. Este archivo contiene configuraciones específicas del terminal.
Parámetros de Consulta:
action
(requerido):load
Cuerpo de la Solicitud:
{
"object": "file3000/load",
"locale": "es_ES",
"path": "/storage/emulated/0/Android/data/com.sipay.paygate/files/3000.file" // Ruta del archivo
}
Respuesta (200):
{
"request_id": "unique-id",
"object": "load3000",
"locale": "es_ES",
"digest": "075bcb53e75c2400cb0c25ae5c7c77538f6a7a61bf17bd1b95ab3ef84e7bd603"
}
POST /tools/pinonline_keys
Actualiza las claves PIN online. Necesario para mantener la seguridad del terminal.
Parámetros de Consulta:
action
(requerido):update
Cuerpo de la Solicitud:
{
"object": "pinonline_keys/update",
"locale": "es_ES",
"box": "2" // Número de caja de seguridad
}
Respuesta (200):
{
"request_id": "unique-id",
"object": "update_pinonline_keys",
"locale": "es_ES"
}
8. Información del Sistema
GET /version
Obtiene información de la versión de la API. Útil para verificar compatibilidad.
Respuesta (200):
{
"request_id": "unique-id",
"object": "version",
"locale": "es_ES",
"paygate": "1.0.0", // Versión de PayGate
"pup": "1.9" // Versión del PUP (Payment Unit Protocol)
}
GET /health
Verifica el estado de salud del centro de procesamiento de datos. Útil para monitoreo.
Respuesta (200):
{
"request_id": "unique-id",
"object": "keepalive",
"locale": "es_ES",
"result": [
{
"datacenter": "node1.pcp.sipay.es", // Nombre del datacenter
"response_time": 240.4, // Tiempo de respuesta en ms
"status": "success" // Estado de la conexión
},
{
"datacenter": "node2.pcp.sipay.es",
"response_time": 50.11,
"status": "success"
}
]
}
9. Detalles de Operación
GET /operations
Obtiene datos de una operación (llamada REQUEST PRINTABLE DATA al gateway). Útil para recuperar información detallada de transacciones anteriores.
Parámetros de Consulta:
request_id
: Identificador de la transacción
Respuesta (200):
{
"request_id": "unique-id",
"object": "operations",
"locale": "es_ES",
"order": "ORDER-00001",
"amount": 1000,
"currency": "eur",
"payment_method": "card",
"payment_details": {
"card_authorization_code": "123456",
"card_processor_center": "REDSYS",
"card_bin": "543200",
"card_masked": "543200*****1234",
"card_subtype": "corporate",
"card_brand": "VISA",
"card_type": "credit",
"card_issuer": "Caixabank",
"card_issuer_code": 2100,
"card_authorization_mode": "D"
},
"printing_details": {
"printable_data_encoded": "base64-encoded-data",
"printable_data": {
"elemento_1": "value1",
"elemento_n": "valueN"
}
}
}
10. Generación de Firma
GET /tools/signature
Genera una firma de documento. Útil para verificar la autenticidad de los datos.
Parámetros de Consulta:
action
(requerido):sign
Respuesta (200):
{
"request_id": "unique-id",
"object": "signature",
"locale": "es_ES",
"format": "propietary", // Formato de la firma
"signature": "FFD8FFE000104A46494600010100000100010000FFDB004300FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB004301FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC000110800C4012803012200021101031101FFC40017000101010100000000000000000000000000020103FFC4002710010100010303040105010000000000000001021121311241516171A1B13252628191D172FFC40014010100000000000000000000000000000000FFC40014110100000000000000000000000000000000FFDA000C03010002110311003F00E80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CB64E41A9B976C77BF0CDF2F49F355249C0340000000000000000000000000000000000000000000000001372ED8EF7CF6805CB4DA6F7C131EF77BF44C74F5BDEA80000000000000000000000000000000000000000000000000046F971B63F605B72DA71DEFF8A924E1B269B40000000000000000000000000000000000000000000000000065BA6F5B6E9BD449D575BC76806F973B63E3CAC00000000000000000000000000000000000000000038004DCF1F7F646595BDAC9F60AB96FA63BD5B9E3329C49FCB75CBF4FC82CE11D5E71B19AF55DF89DBC837F2BADE3B4F2B000000000000000000000000000000000000000000002F1E5CB4CB2BBCFEF88EA0266327AD67E597A4F9ADCAE93D6ED1B2693406823F3FF009FB03F2BFB67CAAe32F66808E9B38CAFF3B9AE5399AFAC5809994BDF4F7532C97989E9F16CFA0588D729DA5F66F5CEFACF70506B2F00000000000000000000000000000000000000239CBD31FB5F0E78D926B79B6ECDD2E5CED3C7FA06F97A63F6B000000000000004F44F6F666994E2EBEEB011D5A732CFA54B2F15A9B8CBD81423A6CE32FECD729CCD7D81627AE77D67BB65978A0D00000000000000000000000000193192EBA3400000000000000000000000000D3564926F23400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007FFD9" // Firma codificada en base64
}
11. Modo Offline
POST /offline
Establece el sistema de pago en modo offline. Útil cuando no hay conectividad de red.
Parámetros de Consulta:
action
(requerido): Tipo de acciónenable
: Habilita el modo offlinedisable
: Deshabilita el modo offlinestatus
: Verifica el estado del modo offline
Cuerpo de la Solicitud:
{
"object": "offline",
"locale": "es_ES"
}
Respuesta (200):
{
"request_id": "unique-id",
"object": "offline",
"locale": "es_ES",
"status": true // true = offline habilitado, false = online
}
Gestión de Errores
La API utiliza códigos de estado HTTP estándar:
- 200: Éxito - Operación procesada correctamente
- 400: Solicitud Incorrecta - Parámetros inválidos o campos requeridos faltantes
- 401: No Autorizado - Clave API inválida
- 402: Pago Fallido - Operación fallida o denegada
- 403: Prohibido - La clave API carece de permisos requeridos
- 404: No Encontrado - El recurso solicitado no existe
- 500: Error Interno del Servidor - Error del sistema
Formato de Respuesta de Error
{
"error": {
"code": "190", // Código de error específico
"message": "denegada por motivos diversos" // Descripción del error
}
}
Tipos de Datos
Códigos de Moneda
- Formato: ISO 4217 en minúsculas (ej.,
eur
,usd
) - Patrón:
^[a-z]{3}$
IDs de Pedido
- Formato: Alfanumérico con guiones
- Patrón:
^[a-zA-Z0-9-]{2,255}$
- Longitud: 2-255 caracteres
BIN de Tarjeta
- Formato: Número de 6-8 dígitos
- Patrón:
^[0-9]{6,8}
- Ejemplo:
543200
Modos de Autorizaci ón
D
: ONLINE - Autorización en línea con el bancoO
: OFFLINE - Autorización offline (cuando no hay conectividad)
Subtipos de Tarjeta
corporate
: Tarjeta corporativaconsumer
: Tarjeta de consumo
Tipos de Token
local
: Token local (almacenado en el terminal)scheme
: Token del esquema (Visa, Mastercard, etc.)
Acciones de Token
store
: Tokenizar tarjeta (guardar para uso futuro)pay
: Pagar con token (usar token existente)
Formatos de Firma
propietary
: Formato propietariobmp_type
: Formato tipo BMPjpg
: Formato JPEGtif
: Formato TIFFbmp
: Formato BMP
Mejores Prácticas
- Idempotencia: Siempre use headers Idempotency-Key únicos para prevenir transacciones duplicadas
- Manejo de Errores: Implemente manejo de errores apropiado para todos los códigos de respuesta
- Tokenización: Use tokens para pagos recurrentes para mejorar la seguridad
- Impresión: Configure
print: true
cuando desee impresión automática en el terminal - Callbacks: Use URLs de callback para recibir información en tiempo real del PIN pad
- Metadatos: Use campos de metadatos para almacenar información personalizada sobre las transacciones
- Validación: Valide siempre los importes y monedas antes de enviar las solicitudes
- Logging: Mantenga logs detallados de todas las transacciones para auditoría
Consideraciones de Seguridad
- Seguridad de Clave API: Mantenga las claves API seguras y rótelas regularmente
- HTTPS: Siempre use HTTPS para todas las comunicaciones de la API
- Cumplimiento PCI: Siga las directrices PCI DSS al manejar datos de tarjetas
- Almacenamiento de Tokens: Almacene tokens de forma segura y respete las fechas de expiración
- Logging de Auditoría: Mantenga logs de todas las interacciones de la API para cumplimiento
- Validación de Entrada: Valide siempre los datos de entrada antes de procesarlos
- Manejo de Errores: No exponga información sensible en los mensajes de error
Inicio rápido
Pago Simple
POST /payments
{
"object": "payments",
"locale": "es_ES",
"amount": 2500, // 25.00 EUR
"currency": "eur",
"order": "ORDER-001"
}
Pago con Tokenización
POST /payments
{
"object": "payments",
"locale": "es_ES",
"amount": 1500,
"currency": "eur",
"order": "ORDER-002",
"token": {
"action": "store"
}
}
Pre-autorización para Hotel
POST /preauths
{
"object": "preauths",
"locale": "es_ES",
"amount": 5000, // 50.00 EUR para depósito
"currency": "eur",
"order": "HOTEL-001"
}
Confirmación de Pre-autorización
POST /preauth/HOTEL-001/confirm
{
"object": "preauths/confirm",
"locale": "es_ES",
"amount": 3500, // 35.00 EUR (importe final)
"currency": "eur",
"order": "HOTEL-001",
"payment_details": {
"card_authorization_code": "123456"
}
}
Reembolso Parcial
POST /refunds
{
"object": "refunds",
"locale": "es_ES",
"amount": 500, // 5.00 EUR de reembolso
"currency": "eur",
"order": "ORDER-001"
}