Crypto payments for SaaS
Let customers pay their subscription, seats or usage credits in crypto. Your billing system stays in charge: it creates one easyway invoice per renewal or top-up through the API, the customer pays in any of 23 coins on 12 networks, and a signed webhook tells your app when to extend the plan.
Crypto is push, not pull
A card can be charged again without the customer; a wallet cannot. There is no stored payment method and no automatic monthly charge in crypto, and easyway does not offer recurring billing. What works instead is what many SaaS teams already do for bank transfers: when a period is due, create an invoice, send the customer its link, and keep the account active until the invoice expires or is paid. A prepaid model fits even better — the customer buys credits or months in advance, and your app only checks the balance it keeps.
One invoice per renewal
Create the invoice from your server when the renewal is due. Put your own ids in order_id and metadata so the webhook can be matched to the account without a lookup table, and derive the Idempotency-Key from the subscription and period so a retried job never bills twice.
curl https://api.easyway.cash/v1/invoices \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: renewal-sub_8812-2026-11" \
-d '{
"amount": "49.00",
"currency": "USD",
"order_id": "sub_8812-2026-11",
"description": "Pro plan, November 2026",
"customer_email": "billing@customer.example",
"metadata": { "account_id": "acc_3391", "plan": "pro", "period": "2026-11" },
"success_url": "https://app.example.com/billing?paid=1",
"lifetime": 1440
}'The response carries the hosted payment_url: put it in your renewal e-mail or in-app banner. The customer picks a coin and network on that page, and the coin amount is locked at the rate of that moment.
| Field | Limit | Use in a SaaS |
|---|---|---|
| amount + currency | USD (or a coin) | The plan price; a USD price is converted when the customer picks a coin |
| order_id | Up to 128 characters | Your invoice or subscription-period id; list invoices by it later |
| metadata | Up to 20 keys, 500 characters each | Account id, plan, period — returned in every webhook |
| lifetime | 5 to 1,440 minutes (default 60) | How long the invoice can be paid; a day suits e-mailed renewals |
| allowed_assets | Any enabled coins | Accept only stablecoins if your prices are in dollars |
| customer_email | Optional | The customer's billing address |
Extend the plan on invoice.paid
Fulfil only on invoice.paid: the payment is final and on your balance. invoice.underpaid means the customer sent less (the default tolerance is 1 % and you can change it); they can top up from the same payment page, so keep the period open rather than cancelling it. invoice.expired means nothing was paid in time — create a fresh invoice for the next reminder. Verify every delivery with the HMAC signature and make the handler idempotent, because a delivery can repeat; the webhook signature guide has the code, and underpaid and late payments covers the edge cases.
Several products on one account
Give each product its own API key with only the scopes it needs (for example invoices:write and invoices:read, without payouts) and its own webhook URL. Events of invoices created with that key go to that URL only, signed with that endpoint's own secret, and the dashboard shows volume per key.
Fees and your balance
Each paid invoice costs a flat 0.5% platform fee, with no monthly plan. Payments arrive in the coin the customer chose and are not converted; pricing in USDT or USDC keeps revenue in dollars. easyway holds your balance until you withdraw it to a wallet address you have whitelisted; withdrawal fees and minimums per coin are on the pricing page.
What is not included
No automatic or recurring charges, no proration, no dunning e-mails and no tax invoices — those stay in your billing system, which decides when to create an invoice and what to do when one expires. Refunds are sent by you as a payout from your balance.
Start in test mode
Test keys create invoices that never touch a blockchain: create a renewal invoice, then press Simulate payment in the dashboard and watch your webhook extend the plan. The sandbox guide walks through it, and the crypto payment API overview and the invoice reference list every field.