DuckyPay documentation
Accept stablecoin payments that settle straight to your own wallet. No custody, no KYC to start, integrated in minutes.
What is DuckyPay?#
DuckyPay is a non-custodial payment gateway for standard stablecoins (USDT, USDC). You create a charge through the API, your buyer pays on the hosted checkout, and the funds land in your wallet — DuckyPay never holds your money at any point.
- Non-custodial by construction. Funds move
payer → merchantandpayer → treasuryin one atomic on-chain transaction. There is no pooled balance and no withdrawal step. - Fees are capped on-chain. The protocol fee is enforced by an EIP-712 signature and can never exceed 1% — the cap is compiled into the smart contract, not a policy promise.
- 1,000 free transactions per month. Fees only apply beyond the monthly free tier — see Pricing & fees.
How a payment works#
Every charge is a signed PaymentIntent: the DuckyPay backend decides the fee off-chain, signs it, and the on-chain PaymentRouter verifies that signature before splitting the payment. Buyers can pay by connecting a wallet (wallet mode) or by sending a plain transfer to a per-invoice deposit address — which works from exchange withdrawals (transfer mode). See Payment modes.
What integration looks like#
One server-side call creates a charge; the response includes a hosted checkout URL you redirect the buyer to. A signed invoice.paid webhook confirms payment.
import { DuckyPay } from '@duckypay/node';
const duckypay = new DuckyPay(process.env.DUCKYPAY_API_KEY!);
const charge = await duckypay.charges.create({
chainId: 137, // Polygon
fiat: { currency: 'USD', amount: '25' }, // priced in fiat, paid in USDT
reference: order.id, // echoed back in the webhook
});
// Send the buyer to the hosted checkout:
res.redirect(charge.checkoutUrl!);Prefer not to write code? Payment links from the dashboard create the same hosted checkout with zero integration.