Live on Polygon, BSC and Solana

Accept and pay USDT and USDC.
Non-custodial.
Frictionless.

144 Pay generates a disposable address for each payment, detects it on-chain and distributes the funds per your configuration. And with dispersions you pay 50 wallets in a single tx. Your business never touches keys.

~12s from payment to distribution ~50% less gas on dispersions 3 networks: Polygon, BSC, Solana
Built on open infrastructure
⬢ Polygon ◆ BNB Chain ◎ Solana ₮ Tether $ USDC ⨋ OpenAPI
Product

Crypto payments designed as a financial product.

Every technical decision rests on one simple invariant: fee + Σ destinations == gross. Not a single unit lost.

Disposable wallets

A fresh HD address for every payment, derived from a BIP-44 master mnemonic. Full traceability, no reuse, no mixing.

Automatic sweeping

A fee payer funds the gas, the disposable wallet transfers the USDT to your treasury. You never sign anything manually.

÷

Configurable split

Split the payment across N destinations by percentage, with a percentage or fixed maintenance fee. Editable from the panel.

On-chain detection

Our own polling with retries, reorg handling and a persisted cursor. No reliance on third-party webhooks.

Signed webhooks

Every state change fires a POST to your URL, signed with HMAC-SHA256. You verify it comes from 144 Pay and no one else.

Multi-network and multi-token

USDT on Polygon (6 dec.) and BSC (18 dec.), USDC and USDT on Solana (6 dec.). Decimals are handled per (chain, token) — the mistake that costs 10¹² units, avoided.

How it works

From API call to distributed funds in six steps.

Every step is idempotent and observable. If something fails, it stops and alerts — it never moves funds blindly.

1

The merchant calls POST /payments

We return a unique depositAddress and an expiresAt. The wallet stays in AWAITING_PAYMENT.

2

The customer sends the stablecoin to that address

USDT or USDC from any wallet — Metamask, Phantom, exchange, hardware. 144 Pay needs no SDK on the user side.

3

The poller detects the payment on-chain

On EVM via getLogs; on Solana via signatures over the ATA. Persisted cursor and N confirmations before marking the payment confirmed.

4

The fee payer funds the gas

It sends MATIC/BNB for the ERC-20 transfer or SOL for the SPL transfer, with a safety margin. Serialized queue to avoid collisions.

5

The disposable wallet sweeps the funds

We re-derive its key in memory and sign a transfer() (ERC-20 or SPL) to your hot wallet. The wallet becomes SWEPT.

6

Hot wallet distributes by the split

It deducts the fee and sends the rest to N destinations. We fire payment.completed to the webhook. State COMPLETED.

New · Dispersions

Pay 50 wallets with a single transaction.

Send to multiple recipients in one operation: on Polygon and BSC via our Disperse contract (~50% less gas than N separate transfers), and on Solana via batched SPL transfers. Same API key, same webhook model.

1 transaction, N recipients

The Disperse contract executes up to 200 transfers in a single tx.

~50% less gas

Measured on-chain: a batch of 10 pays 153k gas vs 350k for 10 separate transfers.

Minimal custody

Disposable wallet per dispersion; funds spend less than 1 minute in custody.

Ownerless contract, no upgrades

Auditable in 30 seconds. No one can drain it or freeze it.

Dedicated webhooks

dispersion.deposit_received, dispersion.completed, etc.

Deployed contracts:
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();
{
  "success": true,
  "data": {
    "id": "d_8a3f...",
    "status": "AWAITING_DEPOSIT",
    "chain": "polygon",
    "depositAddress": "0x4f...e2",
    "totalToDeposit": "156.55",
    "expiresAt": "2026-05-23T17:00:00Z"
  }
}
For developers

Clean REST API.
Real docs.

OpenAPI spec generated from the code — always in sync. Signed webhooks, idempotency-key, typed errors.

OpenAPI 3.0 + Redoc

Interactive documentation at /docs, browsable and always up to date.

Optional Idempotency-Key

Retry payment creation without fear of duplicates.

HMAC-SHA256 signed webhooks

Verify the signature with your webhook_secret and reject spoofing.

Rotatable API keys

Generate and revoke keys from the admin panel. Hashed with argon2.

PPolygonUSDT · 6 dec. BBNB ChainUSDT · 18 dec. SSolanaUSDC · USDT · 6 dec.
# 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"
  }'
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();
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();
  }
  res.status(200).end();
});
Pricing

No surprises. No setup fee.

Three plans to scale from your first payment to enterprise volume.

Starter

For your first payments.

0.9%
per confirmed payment
  • Up to 100 payments / month
  • Polygon, BSC and Solana
  • Signed webhooks
  • CRM panel
Get started

Enterprise

Tailored, with dedicated KMS.

Let's talk
custom pricing
  • Unlimited volume
  • Any EVM-compatible chain + Solana
  • Custody with HSM / KMS
  • Integration team
  • SLA 99.99% + on-call
Contact us

Request access to 144 Pay.

Assisted onboarding: we review your case, set up your account and hand you your API key. No card, no commitment.

View the API ↗