A fresh address every order
No reuse…
GaaPay adds a crypto checkout to your game in an afternoon…
The wallets your players already have
Six chains out of the box. No bridge, no wrapped assets, no new app to install.
The sandbox is the default…
One signed POST…
They scan or tap…
A signed webhook arrives…
const order = await gaapay.orders.create({
amount: '19.90',
merchant_order_ref: 'order_20261021_001',
description: 'Season Pass · 30 days',
});
// → { checkout_url, short_code, expires_at }
That is the whole integration
Everything you would otherwise build twice…
No reuse…
The screen can say “detected”…
Funds go to addresses you control…
Built-in fiat on-ramp…
Signed, idempotent…
Roles, 2FA…
Signed requests, idempotent calls…
# signed request, 4 headers
curl -X POST https://api.gaapay.com/api/v1/orders \
-H "x-gaapay-app: app_xxx" \
-H "x-gaapay-timestamp: 1792596770" \
-H "x-gaapay-nonce: 3f1c9a2e" \
-H "x-gaapay-signature: 9d1f…" \
-d '{"amount":"19.90"}'
200 OK // idempotent — retry freely
You pay the network, not us…
Gateway rails carry their own fee…
Numbers below come from the running service…
No…
We detect it…
No…
The sandbox is the default…