Skip to main content

Pagar a un proveedor

Qopper no es solo para agentes que cobran. La otra mitad es una empresa que paga a sus proveedores. Una compañía fondea un saldo en USDC y paga a proveedores internacionales con el flujo completo de cuentas por pagar: invoice → verify → quote → approve → execute → reconcile. Al igual que el lado agente, la empresa entra desde la consola; todo queda acotado a tu cuenta (ownerId).

El flujo

Cada paso es su propio endpoint, para poder mostrarle al CFO el quote y obtener su aprobación humana antes de mover dinero.

1. Fondear la cuenta de la empresa

Toma el businessId y abónalo:
El abono es idempotente: reenviar el mismo idempotencyKey no abona dos veces.

2. Dar de alta un proveedor

Un proveedor es una cuenta de banco (recibe moneda local, p. ej. COP) o una wallet (recibe USDC). Qopper detecta un cambio en los datos del banco y sube bankRev, lo que obliga a re-verificar antes del siguiente pago.

3. Crear y verificar una factura

El agente de cuentas por pagar revisa duplicados, un proveedor sin verificar, un cambio de banco e importes inválidos, y devuelve un arreglo riskFlags. Sin riesgos, la factura pasa a verified.

4. Quote, aprobar, ejecutar

El routing engine

El quote lo produce integrations/routing-engine.js. Los rails son adaptadores; hoy hay dos:
  • on-chain (onchain) — USDC directo a la wallet del proveedor. Sin FX, sin fee para el proveedor, en minutos.
  • off-ramp (offramp) — USDC → moneda local a una cuenta de banco (COP, MXN, …). Aplica un spread FX y un fee.
El router puntúa cada candidato por coste, velocidad y confiabilidad, y devuelve el mejor. Configura FX y corridors con QOPPER_FX_USD_COP, QOPPER_OFFRAMP_CORRIDORS (JSON) y el proveedor real de payouts con QOPPER_OFFRAMP_EXECUTOR_URL.

Pagos en lote (Mass Payments)

Paga a N destinatarios en una operación: la empresa se debita una vez por el total, y el rail es chain.batchSendUsdc (transferencias secuenciales desde la cuenta qopper-treasury).
Lístalos con GET /api/business/:id/payouts/batches. El lote es idempotente por idempotencyKey; si el rail falla, el saldo de la empresa se repone y el lote queda failed.

Fondear con Onramp (fiat → USDC)

Abona USDC real. El servidor firma el token de sesión de Coinbase (la clave secreta de CDP nunca llega al navegador) y devuelve un onrampUrl de un solo uso que abres en pestaña nueva.
Tras la compra, reclama el USDC on-chain al saldo interno (idempotente por delta):
Wallets de agente (Product B) se fondean igual: POST /agents/:id/onramp/session — el watcher de depósitos acredita el saldo del agente automáticamente cuando llega el USDC.
Para demos, define QOPPER_ONRAMP_SANDBOX=1: la compra siempre “triunfa” y tu tarjeta nunca se carga.

Facturar a clientes (Invoicing / AR)

El mismo negocio también puede cobrar: emite una factura a un cliente, comparte el link y el dinero llega a tu saldo cuando paga.
Comparte paymentUrl. El cliente paga desde una wallet de agente (autenticada con su qp_sk_) o on-chain en USDC (x402):
Al pagar, la factura pasa a paid y businesses.balance_minor se acredita — de forma idempotente (una factura paga una sola vez). Lístalas con GET /api/business/:id/invoicing.