ROKIConnect

Crear un pago

POST /api/connect/v1/payments

7.1 Campos obligatorios

Campo Tipo Regla
amount number Mínimo 0.01. Unidades decimales, no centavos (150.50 = L 150.50). La API no impone un máximo.
external_reference string El id de tu orden. Máx 191. No es único (ver 11).
name string Etiqueta que el cliente ve en el checkout. Máx 191.

7.2 Campos opcionales

Campo Tipo Notas
currency_code string ISO 4217 numérico ("340" = HNL). Por defecto usa la moneda de la terminal. Solo se aceptan las monedas habilitadas en esa terminal.
description string Máx 120.
metadata object Tus propios pares clave/valor. Tiene que ser un objeto: un string devuelve 422. Ver 10.
success_url / cancel_url string URLs de retorno. Usá HTTPS (ver 12.4).
expires_at string Hora de Honduras (UTC-6), tiene que estar en el futuro. Acepta YYYY-MM-DD HH:MM:SS e ISO 8601.
sales_tax_type enum none (por defecto), fixed, percentage.
sales_tax_value number Obligatorio cuando el tipo no es none. Como porcentaje, máx 100.
tip_enabled boolean Ver 8.2.
service_fee_enabled boolean Ver 8.3.
reusable boolean Ver 8.4.
customer object Prellena el checkout: name, email, phone, identity_number. Ver 7.5.
lock_customer_fields boolean Deja los campos prellenados de solo lectura. Ver 7.5.

7.3 Ejemplo mínimo

{
  "amount": 150.00,
  "external_reference": "order-1001",
  "name": "Order #1001"
}

7.4 Respuesta (201)

{
  "id": 706,
  "status": "pending",
  "name": "Order #1001",
  "description": null,
  "amount": 150,
  "reusable": false,
  "subtotal": 150,
  "sales_tax_amount": 0,
  "service_fee_amount": 0,
  "total": 150,
  "currency": "340",
  "currency_iso": "HNL",
  "external_reference": "order-1001",
  "metadata": {},
  "checkout_url": "https://aura.roki.systems/pay/link/example1a2b3c",
  "transaction_id": null,
  "expires_at": "2026-08-09 18:00:00",
  "created_at": "2026-08-08 14:30:07",
  "paid_at": null
}

Guardá el id en tu base de datos - es la única forma de volver a consultar el pago (no hay búsqueda por external_reference). Después redirigí al cliente a checkout_url.

Dos notas sobre esa respuesta. transaction_id es null hasta que se cobra el pago, y es un string UUID - cambió de tipo, en una versión anterior era un entero, y es el identificador que exigen la anulación, el reembolso y los recibos. Y el slug de checkout_url es una cadena de 12 caracteres en minusculas: no lleva ningun prefijo, asi que la API de producción no usa, así que nunca hagas coincidencia de patrones sobre un slug - redirigí a la URL exacta que te dieron.

7.5 Prellenar los datos del cliente

El objeto opcional customer prellena el checkout alojado con los datos de un cliente conocido. Cada campo dentro de él es opcional e independiente:

{
  "customer": {
    "name": "Ahmed Khan",
    "email": "ahmed@example.com",
    "phone": "+50499999999",
    "identity_number": "0801199000000"
  },
  "lock_customer_fields": true
}

Por defecto los campos prellenados siguen siendo editables. Con lock_customer_fields: true, cada campo que envíes con un valor no vacío queda de solo lectura en el checkout; los campos que omitas quedan en blanco y editables incluso entonces.

Vale la pena enviar identity_number: también es el identificador preferido para buscar más adelante las tarjetas guardadas de ese cliente (ver sección 23).

Ambos campos se reflejan de vuelta en la respuesta, lo cual importa más de lo que suena: como esta API ignora silenciosamente los campos desconocidos, el objeto customer reflejado es tu única forma de confirmar desde la respuesta que el prellenado sí se aplicó. Revisalo en lugar de asumir que el 201 significa que funcionó.

"customer": { "name": "Ahmed Khan", "email": "ahmed@example.com",
              "phone": "+50499999999", "identity_number": "0801199000000" },
"lock_customer_fields": true