144 Pay genera una dirección desechable por cada cobro, detecta el pago on-chain y reparte los fondos según tu configuración. Y con dispersiones envías a 50 wallets en una sola tx. Tu comercio no toca claves.
Cada decisión técnica está respaldada por una invariante simple:
fee + Σ destinos == bruto.
Ni una unidad perdida.
Una dirección HD nueva por cada cobro, derivada de un mnemónico maestro BIP-44. Trazabilidad total, sin reuso, sin mezcla.
Un fee payer financia el gas, la wallet desechable transfiere los USDT a tu tesorería. Tú no firmas nada manualmente.
Reparte el pago entre N destinos por porcentaje, con fee de mantenimiento porcentual o fijo. Editable desde el panel.
Polling propio con reintentos, manejo de reorgs y cursor persistido. Sin dependencia de webhooks de terceros.
Cada cambio de estado dispara un POST a tu URL, firmado con HMAC-SHA256. Verificas que viene de 144 Pay y nadie más.
USDT usa 6 decimales en Polygon, 18 en BSC. Lo manejamos por (chain, token) — el error que cuesta 10¹² unidades, evitado.
Cada paso es idempotente y observable. Si algo falla, frena y alerta — nunca mueve fondos a ciegas.
POST /paymentsLe devolvemos una depositAddress única y un expiresAt. La wallet queda en estado AWAITING_PAYMENT.
Lo hace desde cualquier wallet — Metamask, exchange, hardware. 144 Pay no necesita SDK del lado del usuario.
Vía getLogs con cursor persistido. Espera N confirmaciones antes de marcar el cobro confirmado.
Envía MATIC/BNB para el transfer ERC-20, con margen de seguridad. Cola serializada para evitar colisiones de nonce.
Re-derivamos su clave en memoria, firmamos un transfer() a tu hot wallet. La wallet queda SWEPT.
Descuenta el fee, envía el resto a N destinos. Disparamos payment.completed al webhook. Estado COMPLETED.
Envía USDT a múltiples destinatarios en una sola tx on-chain vía nuestro contrato Disperse desplegado en Polygon y BSC. ~50% menos gas que enviar N transferencias individuales. Misma API key, mismo modelo de webhook.
El contrato Disperse ejecuta hasta 200 transferencias en una sola tx.
Medido on-chain: batch de 10 paga 153k gas vs 350k de 10 transfers sueltos.
Wallet desechable por dispersión, fondos pasan menos de 1 minuto en custodia.
Contrato auditable en 30 segundos. Nadie puede drenarlo ni bloquearlo.
dispersion.deposit_received, dispersion.completed, etc.
Contratos desplegados:
Polygon · 0xDaC2…6981
BSC · 0x9416…04a6
# Pagar a 3 destinos en una sola tx $ curl -X POST https://144pay.com/api/v1/dispersions \ -H "X-API-Key: pk_live_xxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{ "chain": "polygon", "token": "USDT", "reference": "payout_001", "destinations": [ { "address": "0xA1...", "amount": "50.00" }, { "address": "0xB2...", "amount": "75.00" }, { "address": "0xC3...", "amount": "30.00" } ] }'
const disp = await fetch('https://144pay.com/api/v1/dispersions', { method: 'POST', headers: { 'X-API-Key': process.env.PAY144_KEY, 'Content-Type': 'application/json', }, body: JSON.stringify({ chain: 'polygon', token: 'USDT', destinations: recipients.map(r => ({ address: r.wallet, amount: r.amount, })), }), }); const { data } = await disp.json(); // Decir al user: deposita data.totalToDeposit USDT en // data.depositAddress y dispersamos automáticamente.
{
"success": true,
"data": {
"id": "d_8a3f...",
"status": "AWAITING_DEPOSIT",
"chain": "polygon",
"depositAddress": "0x4f...e2",
"totalAmount": "155.00",
"feeAmount": "1.55",
"totalToDeposit": "156.55",
"destinations": [/* ... 3 items ... */],
"expiresAt": "2026-05-23T17:00:00Z"
}
}
Spec OpenAPI generada desde el código — siempre sincronizada. Webhooks firmados, idempotency-key, errores tipados.
Documentación interactiva en /docs, navegable y siempre actualizada.
Reintenta la creación de cobros sin miedo a duplicar.
Verificas la firma con tu webhook_secret y descartas suplantaciones.
Genera y revoca claves desde el panel admin. Hashed con argon2.
# Crear cobro $ curl -X POST https://144pay.com/api/v1/payments \ -H "X-API-Key: pk_live_xxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: ord-991" \ -d '{ "reference": "ord-991", "chain": "polygon", "token": "USDT", "amount": "250.00" }' # Consultar estado $ curl https://144pay.com/api/v1/payments/pi_3f9a... \ -H "X-API-Key: pk_live_xxxxxxxxxxxx"
const res = await fetch('https://144pay.com/api/v1/payments', { method: 'POST', headers: { 'X-API-Key': process.env.PAY144_KEY, 'Content-Type': 'application/json', 'Idempotency-Key': order.id, }, body: JSON.stringify({ reference: order.id, chain: 'polygon', token: 'USDT', amount: order.total, }), }); const { data } = await res.json(); // → muestra data.depositAddress al cliente
import requests, os res = requests.post( 'https://144pay.com/api/v1/payments', headers={ 'X-API-Key': os.environ['PAY144_KEY'], 'Idempotency-Key': order.id, }, json={ 'reference': order.id, 'chain': 'polygon', 'token': 'USDT', 'amount': str(order.total), }, ) deposit_address = res.json()['data']['depositAddress']
// Verificar webhook entrante (Express) import { createHmac, timingSafeEqual } from 'crypto'; app.post('/webhooks/144pay', (req, res) => { const sig = req.headers['x-signature']; const expected = 'sha256=' + createHmac('sha256', SECRET) .update(JSON.stringify(req.body)) .digest('hex'); if (!timingSafeEqual(Buffer.from(sig), Buffer.from(expected))) { return res.status(401).end(); } if (req.body.event === 'payment.completed') { // marcar pedido como pagado } res.status(200).end(); });
Tres planes para escalar desde tu primer cobro hasta volumen empresarial.
Para tus primeros cobros.
Para comercios con volumen real.
A medida, con KMS dedicado.
Onboarding asistido: revisamos tu caso, configuramos tu cuenta y te entregamos tu API key. Sin tarjeta, sin compromiso.