Dispersión de pagos: paga a tus usuarios con tus ventas
Acredita a cada uno de tus usuarios finales (personal, contratistas, afiliados) en dólares a tasa BCV con el dinero que cobras, deja que retiren a su propio Pago Móvil y descarga un estado de cuenta mensual por persona.
Qué vas a hacer
Tus ventas llegan a tu saldo de VEXPay. En cada período acreditas a cada usuario final un monto en dólares; VEXPay lo convierte a la tasa oficial BCV y lo guarda en el saldo de esa persona. Luego cada persona retira a su propio Pago Móvil cuando quiera, desde tu propio sistema. La comisión de retiro la pagas tú, no ellos. En la API, cada usuario final es un merchant.
- La dispersión de pagos activada en tu cuenta. Pídela a VEXPay; funciona en modo Test de inmediato y en Live después de la aprobación de salida a producción.
- Tu servidor guarda tu API key. Tus usuarios finales nunca entran a VEXPay: tu sistema administrativo llama a la API por ellos.
- Cada usuario final registrado con un Pago Móvil verificado (mira Registrar un vendedor).
Pasos
- Cobra
Vende con links de pago, sesiones de checkout o cobros como siempre. Cada venta queda retenida 24 horas en tu saldo (
heldVes) antes de estar disponible. - Registra a tus usuarios finales
POST /v1/merchantsuna vez por persona; luego agrega y verifica su método de payout Pago Móvil. Guarda elmerchantIdque recibes en tu sistema, junto a la persona. - Acredita a cada persona en dólares
POST /v1/merchants/:id/transfersconamountUsdy untransferKeyúnico por persona y período (por ejemplo2026-11-q1-emp-104). La respuesta muestraamountVes, la tasa (rate) yrateAsOf. Si envías el mismotransferKeyotra vez recibes el primer resultado, nunca un segundo crédito a otra tasa. - La persona retira
Cuando la persona pide un retiro en tu sistema, llama a
POST /v1/payoutscon sumerchantId, elmontoen bolívares,concepto, unexternalRefúnico yfromMerchantBalance: true. Recibe elmontocompleto; la comisión de retiro se cobra de tu saldo. - Descarga el mes
GET /v1/merchants/:id/statement?month=2026-11(agrega&format=csvpara un archivo), o Portal → Merchants → Monthly statement para una persona o para todas en un solo CSV.
curl --request POST "${API_URL}/v1/merchants/MERCHANT_ID/transfers" \
--header "content-type: application/json" \
--header "x-api-key: ${VEXPAY_API_KEY}" \
--data '{
"amountUsd": "100.00",
"transferKey": "2026-11-q1-emp-104"
}'
# → { "pendingVes": "...", "availableVes": "...",
# "transfer": { "amountVes": "21540.00", "amountUsd": "100.00", "rate": "215.4000", "rateSource": "bcv", ... } }curl --request POST "${API_URL}/v1/payouts" \
--header "content-type: application/json" \
--header "x-api-key: ${VEXPAY_API_KEY}" \
--data '{
"merchantId": "MERCHANT_ID",
"monto": "20000.00",
"concepto": "Retiro",
"externalRef": "wd-emp-104-0001",
"fromMerchantBalance": true
}'curl "${API_URL}/v1/merchants/MERCHANT_ID/statement?month=2026-11&format=csv" \
--header "x-api-key: ${VEXPAY_API_KEY}" --output emp-104-2026-11.csvCuándo se puede retirar el dinero
Un crédito pagado con dinero que ya está disponible en tu saldo se puede retirar de inmediato. Un crédito pagado con ventas que siguen en su retención de 24 horas queda en el pendingVes de la persona y pasa a availableVes cuando esa retención termina. Acreditar al día siguiente de las ventas evita la espera.
La comisión de retiro
Cada retiro cuesta un porcentaje del monto con un mínimo en dólares, más una parte fija en dólares; las partes en dólares se convierten a la tasa BCV de ese momento. VEXPay acuerda el precio contigo antes de salir a producción.
| Ejemplo: 1% (mín. $0,25) + $0,25, BCV 215,40 | Comisión |
|---|---|
| Retiro de Bs 20.000,00 | Bs 200,00 + Bs 53,85 = Bs 253,85 |
| Retiro de Bs 2.000,00 | Bs 53,85 (mínimo) + Bs 53,85 = Bs 107,70 |
- El payout muestra
feeVesyfeePayer: "tenant"; a la persona solo se le debitó elmonto. - Tu saldo muestra un movimiento
disbursement_payout_fee. Si el banco rechaza el retiro, elmontovuelve a la persona y la comisión vuelve a ti (disbursement_payout_fee_reversal). - Mantén una pequeña reserva en tu saldo: si no alcanza para la comisión, el retiro se rechaza con 422
insufficient_balanceyreason: "tenant_fee_unfunded".
Comprueba que funcionó
GET /v1/merchants/:id/balancemuestra el crédito enpendingVesoavailableVes.GET /v1/merchants/:id/transactionslista créditos (conamountUsdyrate), liberaciones y retiros, del más reciente al más antiguo.- En el estado de cuenta, saldo inicial + la suma de
amountVes= saldo final. Una filareleasemueve dinero de pendiente a disponible, por eso suamountVeses 0.00.
Sobrantes y contracargos
- El dinero que acreditas es de la persona hasta que lo retire; VEXPay no lo devuelve por su cuenta. Acredita solo lo que debes.
- Los meses van en hora de Venezuela (America/Caracas).
- Un reembolso o contracargo de tarjeta sobre una de tus ventas se descuenta de tu saldo, aunque ya hayas acreditado ese dinero a tus usuarios finales. Recuperarlo de ellos te corresponde a ti.
Si algo sale mal
| Síntoma | Causa probable | Qué hacer |
|---|---|---|
422 insufficient_balance al acreditar | Tu saldo no alcanza | Revisa GET /v1/balance; espera más ventas. |
503 rate_unavailable al acreditar o retirar | No se pudo leer la tasa BCV en ese momento; no se registró nada | Reintenta en un minuto con el mismo transferKey o externalRef. |
422 insufficient_merchant_balance al retirar | El crédito sigue pendiente (ventas en retención), o la persona tiene menos disponible | Revisa GET /v1/merchants/:id/balance; espera la liberación. |
422 insufficient_balance con reason: "tenant_fee_unfunded" | Tu saldo no alcanza para la comisión de retiro | Mantén una reserva; reintenta con el mismo externalRef. |
Retiro en awaiting_approval | Supera el límite de pagos de los primeros 30 días | No hace falta hacer nada; VEXPay lo revisa. |
Relacionado: Receta: paga a tus usuarios · Registrar un vendedor · Comerciantes y payouts · Leer saldo y retenciones