Primeros pasos
Para comenzar a integrar la API de PagoVeloz necesitas una clave de API. Puedes generar tus claves desde el panel de control en Configuración → API Keys.
Instalación del SDK
# npm npm install @pagoveloz/node # yarn yarn add @pagoveloz/node
Primera petición
const PagoVeloz = require('@pagoveloz/node'); const pv = new PagoVeloz('pk_live_TU_CLAVE_AQUI'); const pago = await pv.pagos.crear({ monto: 15000, moneda: 'CLP', metodo: 'tarjeta', cliente: 'cli_abc123', metadata: { pedido_id: 'ord_9821' } }); console.log(pago.id); // pay_xK8mN2qP...
Autenticación
La API usa claves de API tipo Bearer. Incluye tu clave en el header Authorization de cada petición.
Bearer Token
Prefija tu clave con Bearer. Las claves de producción empiezan con pk_live_ y las de sandbox con pk_test_.
Authorization: Bearer pk_live_xK8mN2qP4rT7vW1yZ3aB6cD
Errores y códigos de estado
PagoVeloz utiliza los códigos de estado HTTP estándar. Los errores devuelven un objeto JSON con el detalle.
| Código | Significado | Descripción |
|---|---|---|
| 200 | OK | Petición exitosa. |
| 201 | Created | Recurso creado correctamente. |
| 400 | Bad Request | Parámetros inválidos o faltantes. |
| 401 | Unauthorized | Clave de API inválida o expirada. |
| 402 | Payment Required | El pago fue rechazado por el emisor. |
| 422 | Unprocessable | Error de validación de negocio. |
| 429 | Too Many Requests | Límite de peticiones superado. |
| 500 | Server Error | Error interno. Reintenta con backoff. |
Estructura de error
{
"error": {
"codigo": "tarjeta_rechazada",
"mensaje": "La tarjeta fue declinada por el banco emisor.",
"campo": null,
"doc_url": "https://docs.pago-veloz.com/errores/tarjeta_rechazada",
"request_id": "req_7mKpN2xQ"
}
}
Rate limiting
Los límites se aplican por clave de API. La respuesta incluye headers informativos en cada petición.
| Header | Descripción |
|---|---|
| X-RateLimit-Limit | Peticiones permitidas por ventana (1 minuto). |
| X-RateLimit-Remaining | Peticiones disponibles en la ventana actual. |
| X-RateLimit-Reset | Unix timestamp de reset de la ventana. |
El límite por defecto es 300 peticiones/minuto para producción y 60/minuto para sandbox. Contacta a soporte para aumentar los límites.
Entornos
| Entorno | Base URL | Prefijo clave |
|---|---|---|
| Producción | https://api.pago-veloz.com/v1 | pk_live_ |
| Sandbox | https://sandbox.pago-veloz.com/v1 | pk_test_ |
Pagos
Crea un nuevo objeto de pago. Puede quedar en estado pendiente, procesando o aprobado dependiendo del flujo de autenticación.
Parámetros del cuerpo
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| monto | integer | requerido | Monto en centavos o unidad mínima de la moneda. Para CLP usar pesos enteros. |
| moneda | string | requerido | Código ISO 4217. Ej: CLP, USD, MXN. |
| metodo | string | requerido | tarjeta, transferencia, wallet. |
| cliente | string | opcional | ID de cliente existente (cli_...). Requerido para pagos recurrentes. |
| descripcion | string | opcional | Descripción visible en el estado de cuenta del cliente. Máx. 255 caracteres. |
| captura_automatica | boolean | opcional | Si false, el pago queda preautorizado hasta captura manual. Default: true. |
| metadata | object | opcional | Pares clave-valor libres. Máx. 20 claves, 500 bytes por valor. |
Ejemplo de petición
curl -X POST https://api.pago-veloz.com/v1/pagos \ -H "Authorization: Bearer pk_live_xK8mN2..." \ -H "Content-Type: application/json" \ -d '{ "monto": 25990, "moneda": "CLP", "metodo": "tarjeta", "cliente": "cli_abc123", "descripcion": "Suscripción mensual Plan Pro", "captura_automatica": true, "metadata": { "pedido_id": "ord_9821", "canal": "web" } }'
Respuesta
{
"id": "pay_xK8mN2qP4rT7vW",
"objeto": "pago",
"monto": 25990,
"moneda": "CLP",
"estado": "aprobado",
"metodo": "tarjeta",
"cliente": "cli_abc123",
"descripcion": "Suscripción mensual Plan Pro",
"capturado": true,
"codigo_autorizacion":"AUT-441829",
"creado_en": 1702915200,
"metadata": {
"pedido_id": "ord_9821",
"canal": "web"
}
}
Reembolsos
Clientes
Webhooks
Los webhooks notifican a tu servidor cuando ocurre un evento en PagoVeloz. Regístralos desde el panel en Configuración → Webhooks.
Eventos disponibles
| Evento | Descripción |
|---|---|
| pago.aprobado | El pago fue autorizado y capturado exitosamente. |
| pago.rechazado | El emisor rechazó la transacción. |
| pago.reembolsado | Se procesó un reembolso total o parcial. |
| pago.disputa.abierta | El titular abrió una disputa (chargeback). |
| pago.disputa.resuelta | La disputa fue resuelta por el banco. |
| cliente.creado | Nuevo cliente registrado en la plataforma. |
Verificar la firma
Cada webhook incluye el header X-PagoVeloz-Signature con un HMAC-SHA256 del cuerpo firmado con tu secreto de webhook.
const crypto = require('crypto'); function verificarFirma(payload, header, secreto) { const firma = crypto .createHmac('sha256', secreto) .update(payload, 'utf8') .digest('hex'); return crypto.timingSafeEqual( Buffer.from(firma), Buffer.from(header) ); }
timingSafeEqual para comparar las firmas. La comparación directa de strings es vulnerable a ataques de timing.