Saltar al contenido

    Conversión de monto en la web

    La moneda viene del catálogo PlatformData.Currency del backend: GET /v1/platforms publica currency y GET /me/usersbank devuelve currency resuelta para cada cuenta. El frontend no tiene un mapa de monedas por banco. El selector de Verificar pago inicia con esa moneda: VES para bolívares, USDT para Binance y USD para Zinli. VES se normaliza internamente como VEF. Si eliges otra moneda, el frontend obtiene las tasas de GET /exchange/rate y calcula monto × tasa_origen / tasa_destino, con tasas expresadas en bolívares por unidad. Redondea una sola vez a dos decimales y muestra “Se validarán” con el importe exacto.

    El POST de verificación recibe únicamente ese monto calculado en amount, junto con los campos habituales. El backend no vuelve a convertirlo. Si ambas monedas coinciden, se conserva el monto introducido y no aparece el aviso de conversión. Sin una tasa válida se bloquea el envío; no se utilizan tasas de respaldo inventadas. Este selector pertenece a Verificar pago y no cambia el flujo de enlaces de pago.

    Validación Bancaria
    Tiempo Real

    Verificar Pagos vía API

    Valida transferencias y pagos móviles de forma automática directamente contra las entidades bancarias.

    Fraude Cero

    Elimina los comprobantes falsos. La verificación consulta directamente los registros del banco en tiempo real.

    Respuesta Inmediata

    Tus clientes y sistemas reciben confirmación en segundos, automatizando despachos y suscripciones.

    Modo GENERIC Amplio

    Casi todos los bancos aceptan validación genérica con tan solo la referencia del pago.

    Endpoint

    Consulta si una transacción bancaria ha sido recibida y acreditada en tu cuenta registrada.

    POST
    https://api.pabilo.app/userbankpayment/{userBankId}/betaserio

    Parámetros de la URL

    ParámetroTipoRequeridoDescripción
    userBankIdstringSíID de tu cuenta bancaria configurada en Pabilo donde se recibió el dinero. Ver cómo copiarlo desde el panel →

    Cuerpo de la Petición (JSON)

    Consulta la referencia completa de campos dinámicos para ver el desglose detallado campo por campo.

    CampoTipoRequeridoDescripción
    bank_referencestringSíDígitos de la referencia bancaria emitida por el banco de origen.
    movement_typestringSíTipo de validación a ejecutar:
    • "GENERIC": Soportado por la gran mayoría de bancos y cuentas (Venezuela Personas/Jurídico, Provincial, Banesco, Binance, Test). Recomendado por defecto.
    • "MOVIL_PAY": Obligatorio para Banco Mercantil (único método soportado). También soportado por Banco de Venezuela (Jurídico) y Banesco.
    • "TRANSFER": Transferencias bancarias tradicionales según compatibilidad del banco.
    amountnumberCondicionalMonto de la transferencia. Opcional en Banco de Venezuela (Personas) y Provincial en modo GENERIC. Requerido en Banco Mercantil y demás cuentas.
    dni_pagadorobjectCondicionalCédula o RIF del cliente pagador. Requerido para Banco Mercantil, y para Banco de Venezuela Jurídico y Banesco en modo MOVIL_PAY. Formato: { "dni_type": "V", "dni_number": "12345678" }.
    phone_pagadorstringCondicionalTeléfono del cliente pagador afiliado a Pago Móvil (ej. "04141234567"). Requerido en Banco Mercantil, así como en Venezuela Jurídico y Banesco cuando se usa MOVIL_PAY.
    bank_originstringCondicionalCódigo de 4 dígitos del banco emisor del cliente (ej. "0102"). Requerido en Banco Mercantil (MOVIL_PAY).
    fecha_pagostringOpcionalFecha del pago en formato YYYY-MM-DD (ej. "2026-08-03"). Si no se envía, toma por defecto la fecha actual.

    Ejemplos de Código

    Recomendado

    cURL (Modo GENERIC - Casi todos los bancos, incluidos BDV y Banesco)

    Ideal para Venezuela (Personas y Jurídico), Banesco, Provincial, Binance y Sandbox. Solo requiere la referencia bancaria (y monto opcional/según banco):

    cURL (Modo GENERIC)
    curl -X POST https://api.pabilo.app/userbankpayment/USER_BANK_ID/betaserio \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer TU_API_KEY" \
      -d '{
        "bank_reference": "67890",
        "amount": 0,
        "movement_type": "GENERIC",
        "fecha_pago": "2026-08-03"
      }'
    Mercantil Requerido / BDV & Banesco

    cURL (Modo MOVIL_PAY - Banco Mercantil, Venezuela Jurídico y Banesco)

    Obligatorio para Banco Mercantil (no soporta GENERIC). Opcional para Banco de Venezuela Jurídico y Banesco cuando se desea validar puntualmente por Pago Móvil con datos del pagador:

    cURL (Modo MOVIL_PAY)
    curl -X POST https://api.pabilo.app/userbankpayment/USER_BANK_ID/betaserio \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer TU_API_KEY" \
      -d '{
        "bank_reference": "123456",
        "amount": 100.00,
        "movement_type": "MOVIL_PAY",
        "dni_pagador": { "dni_type": "V", "dni_number": "12345678" },
        "phone_pagador": "04141234567",
        "bank_origin": "0102"
      }'

    JavaScript (Fetch - Modo GENERIC)

    fetch (GENERIC)
    const verifyPaymentGeneric = async () => {
      const userBankId = "TU_USER_BANK_ID";
    
      const response = await fetch(`https://api.pabilo.app/userbankpayment/${userBankId}/betaserio`, {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          "Authorization": "Bearer TU_API_KEY"
        },
        body: JSON.stringify({
          bank_reference: "67890",
          amount: 50.00,
          movement_type: "GENERIC"
        })
      });
    
      const data = await response.json();
      console.log(data);
    };

    JavaScript (Fetch - Modo MOVIL_PAY para Banco Mercantil, BDV Jurídico o Banesco)

    fetch (Mercantil / BDV Jurídico / Banesco)
    const verifyPaymentMovilPay = async () => {
      const userBankId = "TU_USER_BANK_ID";
    
      const response = await fetch(`https://api.pabilo.app/userbankpayment/${userBankId}/betaserio`, {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          "Authorization": "Bearer TU_API_KEY"
        },
        body: JSON.stringify({
          bank_reference: "123456",
          amount: 100.00,
          movement_type: "MOVIL_PAY", // Obligatorio en Mercantil; opcional en BDV Jurídico y Banesco
          dni_pagador: {
            dni_type: "V",
            dni_number: "12345678"
          },
          phone_pagador: "04141234567",
          bank_origin: "0102"
        })
      });
    
      const data = await response.json();
      console.log(data);
    };

    Respuestas de la API

    La respuesta indicará si el pago fue validado exitosamente y si es una transacción nueva o previamente registrada.

    Respuesta Exitosa - Pago Nuevo (200 OK)

    200 OK (is_new: true)
    {
      "user_bank_payment": {
        "id": "ubp_68b1a2c3d4e5f6a7b8c9d0e1",
        "bank_reference_id": "123456",
        "amount": 100,
        "user_bank_id": "685725c59e6febc736848bf5",
        "status": "verified",
        "created_at": "2026-08-03T14:58:07.081Z"
      },
      "payment_date": "2026-08-03",
      "is_new": true,
      "credit_cost": 1,
      "user_credits_total": 99,
      "user_credits_total_in_usd": 4.95
    }

    Respuesta Exitosa - Pago Ya Validado Anteriormente (is_new: false)

    Si la referencia ya había sido procesada en tu sistema, la API la devuelve con is_new: false y costo 0 créditos para evitar duplicaciones.

    200 OK (is_new: false)
    {
      "data": {
        "credit_cost": 0,
        "is_new": false,
        "user_bank_payment": {
          "id": "6a70ac7f7e8da56b6db795bc",
          "bank_reference_id": "123456",
          "amount": 100,
          "user_bank_id": "685725c59e6febc736848bf5",
          "status": "paid",
          "movement_type": "GENERIC"
        },
        "payment_date": "2026-08-03",
        "user_credits_total": 99,
        "user_credits_total_in_usd": 4.95
      },
      "message": "payment confirmed"
    }

    Respuesta de Error - Pago No Encontrado (404)

    404 Not Found
    {
      "error": "PAYMENT_NOT_FOUND",
      "message": "payment not found: movement not found with bank reference 67890, movements counts 0"
    }

    Campos Clave de la Respuesta

    • is_new (boolean): Indica si es la primera vez que se verifica este pago (true) o si ya había sido verificado anteriormente (false). ¡Fundamental para evitar procesar la misma orden de compra dos veces!
    • user_bank_payment (object): Objeto con los detalles del movimiento registrado en el sistema.
    • payment_date (string): Día del movimiento confirmado por el banco en formato YYYY-MM-DD, en hora de Caracas. Es distinto de user_bank_payment.created_at, que indica cuándo Pabilo registró o verificó el pago.
    • credit_cost (number): Cantidad de créditos debitados en esta consulta (las consultas duplicadas tienen costo 0).
    • user_credits_total (number): Balance de créditos restante en tu cuenta.

    Códigos de Estado HTTP

    • 404 Not Found: El movimiento no existe en el banco. Revisa que el cliente haya realizado el pago a la cuenta correcta y que los dígitos de la referencia coincidan.
    • 400 Bad Request: Faltan datos obligatorios para el banco seleccionado (por ejemplo, omitir phone_pagador o usar GENERIC en Banco Mercantil).
    • 401 Unauthorized: API Key inválida, inactiva o ausente en los headers.
    • 402 Payment Required: No cuentas con créditos suficientes para completar la validación bancaria.

    Cobros, clientes y productos

    Usa el mismo client_id para identificar al comprador, tenga o no credenciales B2B2B. Asócialo en Betaserio, enlaces y suscripciones para consultar lo cobrado por cliente y descargar reportes.

    Ver parámetros, ejemplos y API de reportes JSON / CSV