Payments
Solana Actions & Blinks
Build a Solana Actions response that a compatible client can render as a signable payment widget — a Blink. The API can construct transaction data; the wallet holder reviews, signs and submits it.
Transaction construction is not settlement
A generated transaction is not proof of a confirmed payment or merchant order. Confirm the asset, amount, recipient and order status, then verify the chain result. FURL pricing is returned only when configured; do not assume it is an available payment asset.
Endpoints
| Method | Path | Description |
|---|---|---|
| GET | /actions.json | Discovery rules mapping /pay/* → the Action API |
| GET | /api/actions/pay/[orderId] | Blink metadata: icon, title, pay buttons |
| POST | /api/actions/pay/[orderId]?asset=USDC|SOL|FURL | Base64 transfer transaction to sign (FURL only when FURL pricing is configured) |
| OPTIONS | /api/actions/* | CORS preflight for Blink clients |
Spec-correct by construction
These are the details most implementations get wrong — and Furlpay handles them:
- Dollar-denominated amounts — the SOL path converts via a live SOL/USD price rather than charging "25 SOL" for a $25 order.
- Idempotent merchant ATA creation — the first payment to a fresh token account doesn't fail.
transferChecked— validates mint + decimals on-chain, not a bare transfer.- Full header set —
ACTIONS_CORS_HEADERSplusX-Action-VersionandX-Blockchain-Ids(sRFC 31), and anOPTIONShandler so Blinks render.
Try it
bash
# metadata a Blink client reads to render the widget
curl https://furlpay.com/api/actions/pay/order_9f21
# then paste that URL into https://dial.to to render the BlinkStarter template
A standalone Next.js starter is open-sourced at
github.com/FurlPay/furlpay-solana-actions-template — clone it to ship spec-correct Blinks in minutes.Did this page help?
Edit this page on GitHub