Desarrolladores/Primeros pasos
API para comercios de CardV
CardV vende productos digitales prepagados a empresas: tarjetas de regalo, recargas de juegos, eSIM y más. Con la API para comercios (Merchant API), tu servidor puede comprarlos de forma automática. Consultas tu saldo, buscas un producto, ves su precio, haces el pedido y recibes los códigos. Los pedidos se pagan con el saldo prepagado de tu billetera CardV. Todo lo demás, como agregar fondos o revisar el historial de pedidos, se hace en el Merchant Portal.
#Documentación
| Documento | Contenido |
|---|---|
| Autenticación | Encabezados, firma de solicitudes, configuración de claves |
| Catálogo y pedidos | Saldo, tipo de cambio, productos, precios, pedidos, códigos |
| Recargas de celular | Recargas de teléfonos: operadores, cotizaciones, pedidos de recarga |
| Convenciones | Montos, fechas, IDs, límite de solicitudes, errores |
| Webhooks | Avisos de pedidos que CardV envía a tu servidor |
| Sandbox | Pruebas y lista de verificación para salir a producción |
| Seguridad | Cómo proteger tus claves y códigos |
#Entornos
| Live | Sandbox | |
|---|---|---|
| URL base de la API | https://b2b.cardv.net/api/v1 | https://sandbox.cardv.net/api/v1 |
| Merchant Portal | https://b2b.cardv.net/portal/ | El mismo Portal, cambiando a Sandbox |
Sandbox es una copia de CardV separada, solo para pruebas, con dinero de prueba. Las claves, los saldos, los pedidos y los IDs de producto son distintos en cada entorno.
#Primeros pasos
Solicita una cuenta de comercio en el Portal y confirma tu correo.
Espera la aprobación. CardV revisa los datos de tu empresa. Luego recibes tu Merchant ID (número de comercio), por ejemplo
M00000001.Entra a Sandbox. Inicia sesión en el Portal y elige Sandbox en la parte superior. Recibes 1,000 USD de dinero de prueba.
Crea una clave de API. En el Portal, ve a Integrations → API keys. Crea una clave. El Portal muestra el key ID y el secreto de firma una sola vez. Guarda el secreto en tu gestor de secretos.
Consulta tu saldo:
export CARDV_BASE=https://sandbox.cardv.net export CARDV_KEY_ID=ck_test_... # shown in the Portal export CARDV_SIGNING_SECRET=cs_test_... # from your secret store cardv_get() { # every call is signed, see Authentication local ts nonce sig ts=$(date +%s); nonce=$(openssl rand -hex 16) sig=$(printf 'GET\n%s\n%s\n%s\n%s' "$1" "$ts" "$nonce" \ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 \ | openssl dgst -sha256 -hmac "$CARDV_SIGNING_SECRET" -hex | sed 's/^.*= //') curl -sS "$CARDV_BASE$1" -H "X-Key-Id: $CARDV_KEY_ID" \ -H "X-Timestamp: $ts" -H "X-Nonce: $nonce" -H "X-Signature: $sig" } cardv_get "/api/v1/balance"Busca un producto:
cardv_get "/api/v1/skus?search=steam&limit=20"Elige uno con
"availability": "available"y anota susku_id.Consulta el precio:
cardv_get "/api/v1/skus/S000001/quote?quantity=1"Anota
merchant_price. Es lo que pagas por unidad.Haz el pedido. Fírmalo como cualquier llamada. Usa uno de los ejemplos de Autenticación con este cuerpo:
{ "external_order_id": "TEST-0001", "items": [ {"sku_id": "S000001", "quantity": 1, "expected_unit_price": "9.25"} ] }Recibes HTTP 201 con un ID de pedido de CardV, como
O-00001234.Lee los códigos. Llama a
GET/api/v1/orders/O-00001234hasta que el estado seasucceeded. Los códigos están enitems[].deliveries[]:card_number,pin_codeyredeem_url. También puedes recibir un webhook cuando el pedido termine.Sal a producción después de completar la lista de verificación de Sandbox.
Los IDs y precios de arriba son ejemplos. Usa los valores que te devuelva tu propio catálogo.
#La API en resumen
Hay dieciséis endpoints. Todas las rutas empiezan con /api/v1.
| Endpoint | Para qué sirve | Firmado |
|---|---|---|
GET/account | Datos de tu empresa y estado de acceso a la API | No |
GET/balance | Cuánto dinero puedes gastar | No |
GET/fx-rates | Tipo de cambio desde USD, para tiendas en otra moneda | No |
GET/products | Lista de productos, cada uno con todos sus SKU | No |
GET/products/{product_id} | Un producto con sus SKU y textos completos | No |
GET/skus | Productos que puedes comprar, con tu precio | No |
GET/skus/{sku_id} | Un solo producto | No |
GET/skus/{sku_id}/quote | Precio actual para una cantidad | No |
POST/orders | Hacer un pedido, pagado con tu billetera | Sí |
GET/orders/{order_id} | Estado del pedido y códigos | No |
GET/recharge/countries | Países que puedes recargar | No |
GET/recharge/operators | Operadores telefónicos y montos de un país | No |
POST/recharge/quote | Precio de una recarga de celular | Sí |
POST/recharge/orders | Recargar un teléfono, pagado con tu billetera | Sí |
GET/recharge/orders | Lista de tus pedidos de recarga | No |
GET/recharge/orders/{order_id} | Estado de un pedido de recarga | No |
Cualquier otro endpoint responde HTTP 403 si lo llamas con una clave de API:
{"detail": "This operation is only available in the Merchant Portal."}Las recargas de celular se explican en Recargas de celular.
#IDs
| Qué es | Ejemplo | Notas |
|---|---|---|
| Merchant ID | M00000001 | Es tuyo. Nunca cambia. |
| SKU (un producto que puedes comprar) | S000456 | Lo usas para cotizar y pedir. |
| ID de pedido de CardV | O-00001234 | Guárdalo junto con tu pedido. |
| Tu número de pedido | SHOP-10001 | Lo eliges tú (external_order_id). |
Guarda los IDs como texto. No intentes interpretarlos. Consulta Convenciones.
#Lo que se hace en el Merchant Portal
- Agregar fondos a tu billetera y la alerta por correo de saldo bajo
- Historial de pedidos, búsqueda y exportación a CSV
- Facturas de pedidos
- Movimientos de la billetera y conciliación
- Configuración de webhooks, historial de envíos y reenvíos
- Claves de API
- Lista de IPs permitidas
- Miembros del equipo y roles
- Registro de auditoría
- Verificación en dos pasos (2FA)
- Cambio entre Live y Sandbox
#Compatibilidad y soporte
Podemos agregar campos nuevos a las respuestas y nuevos valores de estado sin previo aviso. Ignora los campos que no conozcas. Si un pedido tiene un estado desconocido, trátalo como "todavía no terminado". No dependas del texto exacto de los mensajes de error.
Escribe a [email protected] con tu Merchant ID, el entorno, los IDs de pedido, la hora (UTC) y el código HTTP.
Nunca envíes claves de API, firmas, secretos de webhook ni códigos de tarjetas.
¿Dudas sobre tu integración? Escribe a [email protected] con tu Merchant ID y el ID del pedido o de la solicitud.