← All articles

6 min read

Best Stablecoin Subscription Billing APIs in 2026

Compare the best stablecoin subscription billing APIs in 2026 to automate recurring USDC and USDT payments sent straight to your wallet.

If you're building a SaaS or membership product and want to bill in USDC, the checkout page is the easy part. The hard part is the stablecoin subscription billing API behind it: creating plans and subscriptions, knowing when a renewal succeeded or failed, testing a year of renewals without waiting a year, and knowing where the money actually ends up.

This guide compares five APIs from a developer's point of view, using each provider's own documentation.

Quick picks

  • Best for automatic on-chain renewals with test clocks: TidePay

  • Best if you already run Stripe Billing: Stripe (stablecoin subscriptions, private preview)

  • Best for a gateway with a recurring endpoint and many coins: Cryptomus or NOWPayments

  • Best for low percentage fees with off-ramp: Radom

Last checked: November 2026.

What a subscription billing API needs

Before comparing providers, here's the checklist we used:

  1. Subscription objects, not just invoices. Plans or prices, subscriptions with statuses, trials, cancel now or at period end.

  2. Automatic renewals. The API should charge each cycle on its own. If every renewal is a new payment link, your app becomes the billing engine.

  3. Signed webhooks with retries. Events for created, renewed, failed and canceled, signed so you can verify them, and retried when your endpoint is down.

  4. Safe retries on your side. An idempotency key, so a network timeout doesn't create two subscriptions.

  5. A real sandbox. Test keys, simulated payments and a way to fast-forward billing cycles.

  6. Clear settlement. Do funds arrive in your wallet, in a fiat balance, or in a crypto balance you have to withdraw?

  7. Failure handling. Retries and a grace period before access is cut.

The 5 best stablecoin subscription billing APIs

1. TidePay

A REST API at https://api.tidepay.cc/v1, authenticated with an X-API-Key header, with a published OpenAPI spec and reference at docs.tidepay.cc. You create an offer with one or more pricing options, a customer, then a subscription; the response returns a subscribeUrl where the customer connects a wallet and authorizes. After that, every renewal is charged on-chain automatically within the limits the customer signed, and the funds go straight to your wallet.

  • Objects: offers and prices, customers, subscriptions, payments, wallets, customer portal sessions.

  • Subscription options: trials (trialEnd), billing cycle anchors, cancel now or at period end, customVariables echoed on every response and webhook.

  • Webhooks: subscription.created, authorized, active, updated, canceled and payment.succeeded, failed, underpaid, refunded, among others. Signed with HMAC-SHA256 over timestamp.body and retried on a backoff of 1, 5, 30, 120 and 360 minutes.

  • Retries on your side: an idempotencyKey on create returns the original object instead of a duplicate.

  • Sandbox: test keys simulate charges on real networks with test wallets; POST /v1/sandbox/advance fast-forwards a subscription up to 12 billing cycles, like Stripe's test clocks.

  • Money: USDC, USDT and EURC; Polygon, Arbitrum, Base, Optimism, Solana; 1% per charge, gas covered on renewals.

2. Stripe

Stablecoin subscriptions plug into the standard Stripe Billing API: you create a price and a Checkout Session in subscription mode, and the customer authorizes their wallet for future payments (guide). You get Stripe's usual events (invoice.paid, invoice.payment_failed) and sandbox, and Stripe documents testing with testnet USDC on Polygon Amoy.

  • Strength: the most mature billing API in this list, if you already use it.

  • Limits: private preview with an access request; payments settle as fiat in your Stripe balance (docs); 1.5% plus 0.7% Billing (pricing).

3. Cryptomus

A dedicated recurring API: POST /v1/recurrence/create with amount, currency, period (weekly, monthly, three_month), an optional discounted first period and a url_callback for webhooks, plus endpoints to get, list and cancel (create, cancel). The payer confirms the plan by logging in to Cryptomus.

  • Strength: simple endpoints, many coins.

  • Limits: three fixed periods; payer needs a Cryptomus account; funds go to your Cryptomus balance; 2% for new users (fees).

4. NOWPayments

Plans and subscriptions endpoints: POST /v1/subscriptions/plans (with interval_day, amount, currency and ipn_callback_url) and POST /v1/subscriptions, which takes a plan ID and the customer's email (API overview). Standard subscriptions email a payment link each period; automatic renewals draw from the customer's ChangeNOW balance (source).

  • Strength: 75+ coins, plans you can update for new payments.

  • Limits: standard renewals depend on the customer paying an emailed link; 1% to 1.5% plus network fees (fees).

5. Radom

Radom's developer docs list an API reference, API tokens and a webhooks guide, and its billing page says subscriptions "automatically pull funds from a customer's wallet to your own at an agreed interval."

  • Strength: "0.5% + 50¢ for all crypto payments" (pricing) and a fiat off-ramp at 1%.

  • Limits: the overview pages don't detail subscription endpoints, webhook signing or a sandbox. [VERIFY]

API features side by side

TidePay

Stripe

Cryptomus

NOWPayments

Radom

Subscription objects

Offers, prices, customers, subscriptions

Products, prices, subscriptions

Recurring payments

Plans, subscriptions

Subscriptions (details not in overview)

Renewal

Charged on-chain within signed limits

Charged from saved wallet

Through payer's Cryptomus account

Emailed link, or ChangeNOW balance

Pulled from wallet

Intervals

Configurable, with trials and anchors

Stripe Billing intervals

Weekly, monthly, three-month

interval_day

Not stated

Webhooks

Signed (HMAC-SHA256), retried with backoff

Stripe events, signed

url_callback

ipn_callback_url

Webhook guide

Idempotency

idempotencyKey on create

Stripe idempotency keys

Not documented on these pages

Not documented on these pages

Not documented on these pages

Sandbox

Test keys + fast-forward up to 12 cycles

Sandbox + testnet USDC

Not documented on these pages

Not documented on these pages

Not documented on these pages

Settlement

Stablecoins in your wallet

Fiat in Stripe balance

Your Cryptomus balance

Your wallet (non-custodial)

Crypto, or fiat via off-ramp

Fee

1% (0.8% above $25K/month)

1.5% + 0.7% Billing

2% new users (to 0.4%)

1% to 1.5% + network

0.5% + 50¢

Status

Live

Private preview

Live

Live

Live

"Not documented on these pages" means we didn't find it on the pages linked here, not that the feature doesn't exist. Check the full API reference before deciding.

Example: a USDC subscription with the TidePay API

Three calls create a subscription. With an offer and a customer in place, create the subscription and send the customer to the returned subscribeUrl:

curl https://api.tidepay.cc/v1/subscriptions \
  -H "X-API-Key: $TIDEPAY_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "offerId": "offer_...",
    "customerId": "cust_...",
    "trialEnd": "2026-12-01T00:00:00.000Z",
    "customVariables": { "accountId": "acct_42" },
    "idempotencyKey": "signup-acct_42"
  }'

In the sandbox, skip ahead a few renewals to test your webhook handling:

curl https://api.tidepay.cc/v1/sandbox/advance \
  -H "X-API-Key: $TIDEPAY_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "subscriptionId": "sub_...", "cycles": 3 }'

Verify each webhook before trusting it. TidePay signs timestamp.rawBody with your webhook secret and sends the result in X-Tidepay-Signature, with the timestamp in X-Tidepay-Timestamp:

import { createHmac, timingSafeEqual } from "node:crypto";

export function verifyTidepayWebhook(rawBody: string, headers: Headers, secret: string) {
  const timestamp = headers.get("x-tidepay-timestamp") ?? "";
  const signature = headers.get("x-tidepay-signature") ?? "";
  const expected = createHmac("sha256", secret)
    .update(`${timestamp}.${rawBody}`)
    .digest("hex");
  return (
    signature.length === expected.length &&
    timingSafeEqual(Buffer.from(signature), Buffer.from(expected))
  );
}

Then handle payment.succeeded to extend access, payment.failed to warn the user, and subscription.canceled to close it. The full reference is at docs.tidepay.cc.

FAQ

What is a stablecoin subscription billing API?

An API that creates and manages recurring payments in stablecoins like USDC: plans, subscriptions, renewals, failures and cancellations, with webhooks so your app knows what happened. The best ones charge each renewal automatically instead of sending a new payment link.

Can I test a year of renewals without waiting?

With TidePay, yes: POST /v1/sandbox/advance runs up to 12 billing cycles on a test subscription at once. Stripe offers a sandbox with testnet USDC for its stablecoin flow.

How do I verify a webhook from a crypto billing API?

Check the signature before acting on the event. TidePay signs timestamp.rawBody with HMAC-SHA256 using your webhook secret and sends it in the X-Tidepay-Signature header, so you recompute it and compare in constant time.

Which stablecoin billing API settles to my own wallet?

TidePay sends each charge to your wallet in the same transaction. NOWPayments calls itself non-custodial. Stripe settles in fiat to your Stripe balance, and Cryptomus credits your Cryptomus balance.

Is Stripe's stablecoin subscription API generally available?

Not yet. Stripe's guide still asks you to request access to the preview, and accepting stablecoin payments is limited to US businesses, with some other countries in preview.

Build on TidePay

Create a free TidePay account, grab a test API key, and read the API reference. You pay 1% per successful charge and nothing else.

← All articles
© 2026 TidePay Inc. · Virtual assets are volatile; services may not be available in all jurisdictions.