¿Cómo obtengo mis credenciales de API?
¿Cómo obtengo mis credenciales de API?
¿Puedo usar las mismas credenciales en Sandbox y Producción?
¿Puedo usar las mismas credenciales en Sandbox y Producción?
Recibo 422 Invalid signature. ¿Qué reviso?
Recibo 422 Invalid signature. ¿Qué reviso?
- Reloj del servidor sincronizado (NTP). El
x-datedebe estar dentro de ±1 minuto del reloj de Vita. - Formula correcta. La API general ordena las claves del body alfabéticamente y concatena sin separadores. El módulo Users y la verificación de Webhooks entrantes usan
JSON.stringify(body)tal cual — no sort. - Credenciales del ambiente correcto. Sandbox vs Producción no se cruzan.
- Body no modificado después de calcular la firma.
¿Cuál es la diferencia entre x-login, x-trans-key y secret?
¿Cuál es la diferencia entre x-login, x-trans-key y secret?
x-login: identificador de tu business (40 caracteres hex). Se envía en el header de cada request.x-trans-key: segundo identificador (ligado a la operación API). Se envía en el header.secret: clave privada usada como key del HMAC. Nunca se envía al servidor, solo se usa para firmar.
¿Qué pasa si un POST a /transactions responde timeout?
¿Qué pasa si un POST a /transactions responde timeout?
GET /api/businesses/transactions?order=<tu-order>:- Si vuelve un resultado → la transacción se creó; usa ese ID.
- Si no vuelve nada → puedes reintentar el POST con el mismo
order.
Un payment_order_attempt.cancelled ¿cancela el Payment Order?
Un payment_order_attempt.cancelled ¿cancela el Payment Order?
paid. Un Payment Order solo pasa a estado terminal con payment_order.paid, payment_order.expired, o payment_order.cancelled (este último lo dispara Vita internamente, no el cliente).¿Por qué no recibo webhooks de payment_order.*?
¿Por qué no recibo webhooks de payment_order.*?
payment_order.* y payment_order_attempt.* solo se envían si tu configuración incluye la categoría payment. Estar suscrito a deposit u otras categorías no entrega estos eventos. Verifica con GET /api/businesses/webhooks y actualiza con PUT /api/businesses/webhooks incluyendo payment en la lista.¿Puedo recibir webhooks en una IP privada o localhost?
¿Puedo recibir webhooks en una IP privada o localhost?
¿Cuánto tiempo tengo para responder un webhook?
¿Cuánto tiempo tengo para responder un webhook?
200 OK. Procesa la lógica pesada de forma asíncrona (encola el evento y responde 200). Si tardas más, Vita puede cerrar la conexión y reintentar — lo que te obliga a deduplicar.¿Cómo deduplico eventos de webhook?
¿Cómo deduplico eventos de webhook?
event_id como clave de deduplicación. Trátalo como un string opaco — no asumas formato UUID aunque lo parezca; algunos eventos añaden sufijos numéricos.¿Se puede cancelar un Payment Order desde la API?
¿Se puede cancelar un Payment Order desde la API?
- Pago exitoso (
paid) - Expiración (
expired) - Cancelación interna de Vita por motivos operativos o compliance (
cancelled)
¿Cómo calculo cuánto va a recibir el beneficiario de un payout bancario?
¿Cómo calculo cuánto va a recibir el beneficiario de un payout bancario?
- Consulta
GET /api/businesses/prices— obtienes la tasa de cambio y el costo fijo por destino. - Calcula:
monto_destino = (monto_origen × tasa) − costo_fijo_destino. - Confirma con
GET /api/businesses/withdrawal_rulespara el país destino: puede haber mínimos/máximos adicionales.
valid_until del endpoint de prices limita cuánto tiempo esa tasa es válida para crear el payout.¿Puedo hacer exchange fiat → fiat?
¿Puedo hacer exchange fiat → fiat?
¿Qué incluyo en la firma del body del payout?
¿Qué incluyo en la firma del body del payout?
transactions_type. Un error común es excluir transactions_type del body ordenado — causa Invalid signature.¿Cómo reconcilio diariamente?
¿Cómo reconcilio diariamente?
- Llame a
GET /api/businesses/transactions/get_all_transactionscon un rango de fecha (YYYY-MM-DD). - Pagine todos los resultados.
- Cruce contra tu base de datos por
order(tu identificador). - Marque discrepancias para revisión manual.
¿Dónde reporto bugs o pido features?
¿Dónde reporto bugs o pido features?
- Ambiente (Sandbox / Producción)
- Timestamp y
x-login - Request body / response completos (sin credenciales)
- Comportamiento esperado vs observado