Accept USDC subscriptions in minutes
AuthOnce gives your SaaS product a recurring billing layer that requires no smart contract knowledge. Share a pay link, receive USDC. Everything else is automatic.
No code required to get started. Create a product, share your pay link, and receive your first payment — all from the dashboard. Webhooks and the REST API are available when you're ready to go deeper.
Quickstart
From zero to first payment in four steps:
Apply as a founding merchant
Go to authonce.io and submit your application. The first 10 approved merchants pay zero protocol fees for 3 months.
Connect your wallet
Your merchant wallet is where USDC lands when a payment executes. Connect MetaMask, Coinbase Wallet, or any EVM-compatible wallet. This address is public — it's your on-chain identity as a merchant.
Create a subscription product
Set a name, price, billing interval (weekly / monthly / yearly), and which payment methods you accept. Takes under 2 minutes.
Share your pay link
Every product gets a unique URL: authonce.io/pay/your-name/your-product. Send it by email, embed it in your app, or put it in a button. Subscribers click, connect a wallet, and they're subscribed.
Create a product
From your merchant dashboard, click Add product. You'll configure:
| Field | Description |
|---|---|
| Product name | Shown to subscribers on the pay page. E.g. "Pro Plan". |
| Slug | URL-friendly identifier. Auto-generated from the name. E.g. pro-plan. |
| Price | Set in USDC or your preferred fiat currency. All tokens are priced 1:1 with USD. |
| Interval | Weekly, Monthly, or Yearly. Immutable after the first subscriber. |
| Payment methods | Choose any combination: USDC, EURC, or USDT. All non-custodial, wallet to wallet — see Payment methods below. |
| Grace period | 1–30 days. How long a failed payment retries before the subscription expires. Default: 7 days. |
| Introductory pricing | Optional. First N payments at a lower price. Useful for free trials and launch discounts. |
Interval is immutable. Once a subscriber is on a product, the billing interval cannot change. If you need a different interval, create a new product and migrate subscribers.
Share your pay link
Every product generates a unique pay link:
https://authonce.io/pay/{merchant-slug}/{product-slug}
From your dashboard you can:
- Copy the URL directly
- Download a QR code to use in print, email, or presentation slides
- Share via WhatsApp, email, or any messaging app
The pay page is fully responsive and works on any device. Subscribers choose their payment method on arrival — no friction, no account required.
Payment methods
AuthOnce is fully non-custodial. Every payment method moves USDC, EURC, or USDT directly from the subscriber's own wallet to yours — AuthOnce never processes a card, never touches fiat, and never holds a key to either side's funds.
USDC / EURC — one signature, gasless
The subscriber connects a wallet and signs a single EIP-2612 permit. No gas required. From that point, AuthOnce's keeper bot pulls the subscription amount on each billing date directly to your wallet. The subscriber never needs to sign again.
USDT — two-step approval
USDT doesn't support EIP-2612 permits. The subscriber approves the vault on-chain first (one gas transaction), then confirms the subscription. Slightly more friction up front than USDC/EURC, but the same non-custodial, pull-based billing from then on.
Zero chargebacks. On-chain payments are cryptographically final. There is no chargeback mechanism — once the payment executes, it's settled.
Subscribers without a stablecoin wallet yet
AuthOnce doesn't process cards and doesn't touch fiat at any point. A subscriber who doesn't already hold USDC, EURC, or USDT gets it through an onramp partner (Circle or Coinbase Onramp), which delivers stablecoin straight to their own wallet — AuthOnce is never in that path. This onramp integration is not yet live; until it is, subscribers need a stablecoin wallet before they can subscribe.
Grace period & dunning
When a payment fails — either because the subscriber's wallet has insufficient balance or their approval expired — AuthOnce does not immediately cancel the subscription. Instead, it enters a grace period.
During the grace period:
- The keeper retries the payment once every 24 hours
- The subscriber receives an email notification immediately, and a reminder every 48 hours
- You receive a notification that the payment failed and the grace period end date
- The subscription status shows as Grace in your dashboard
If the subscriber tops up their wallet (or re-approves), the next daily retry will succeed and billing continues normally. If the grace period ends with no successful payment, the subscription expires.
| Setting | Range | Default |
|---|---|---|
| Grace period | 1 – 30 days | 7 days |
| Retry frequency | Every 24 hours | Fixed |
Set grace period per product, not per subscriber. Configure it when creating or editing the product. All subscribers on that product share the same grace period setting.
Fees
AuthOnce charges a single flat fee, hardcoded in the smart contract:
| Fee type | Amount | Who pays |
|---|---|---|
| Protocol fee | 0.5% per successful payment | Deducted from each pull — merchant receives 99.5% |
| Monthly fee | €0 on Starter tier | Optional tiers unlock additional features — billed in USDC through AuthOnce's own protocol, see Pricing tiers |
| Setup / withdrawal fee | None | — |
The 0.5% fee is a hard ceiling. It is encoded in the smart contract and can only be lowered, never raised. No surprise increases.
Webhooks
Webhooks let your backend react in real time to subscription events. AuthOnce sends a signed HTTPS POST to your endpoint within seconds of each event.
Configure your webhook endpoint
From Dashboard → Settings → Webhooks, enter your endpoint URL. AuthOnce will sign every request with HMAC-SHA256 using your webhook secret.
Every webhook payload follows the same structure:
{
"event": "payment.success",
"timestamp": 1750000000,
"data": {
"subscription_id": "42",
"merchant_address": "0xbb6d...",
"vault_address": "0xd889...",
"amount_usdc": "10.00",
"merchant_received_usdc": "9.95",
"tx_hash": "0xecb0...",
"status": "active"
}
}
Webhook events
A new subscriber authorised a recurring payment. Billing will begin on the next billing date.
A payment was pulled successfully. USDC is now in your wallet. Includes transaction hash.
Payment failed — insufficient balance or expired approval. Grace period has started. Includes grace period end date.
A subscriber has a payment due in 3 days. Fired once per billing cycle as an advance notice.
A subscriber cancelled. No further payments will be collected. Merchants cannot trigger this event.
Grace period ended without a successful payment. Subscription is permanently closed.
A subscription that was in grace period recovered — subscriber topped up and the retry succeeded.
You set a product expiry date. This fires when the 30-day notice was sent to the subscriber.
Signature verification
Every webhook includes an X-AuthOnce-Signature header. Always verify it before processing the event — it protects you from spoofed requests.
// Node.js example
const crypto = require("crypto");
function verifyWebhook(rawBody, signature, secret) {
const expected = "sha256=" + crypto
.createHmac("sha256", secret)
.update(rawBody)
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(signature)
);
}
// In your Express route:
app.post("/webhook/authonce", (req, res) => {
const sig = req.headers["x-authonce-signature"];
if (!verifyWebhook(req.rawBody, sig, process.env.AUTHONCE_WEBHOOK_SECRET)) {
return res.status(401).send("Unauthorized");
}
// Safe to process
const { event, data } = req.body;
// ...
res.status(200).send("OK");
});
Dashboard
Your merchant dashboard at authonce.io gives you:
- Subscribers — list of all active, grace, cancelled, and expired subscribers with wallet addresses and payment history
- Payments — full payment history with transaction hashes, amounts, and Basescan links
- Analytics — MRR, GTV, ARPU, churn rate, new vs churned subscribers over time
- Webhooks — delivery log, retry status, response codes
- Products — manage all your subscription products
Cancellations
Merchants cannot cancel subscriptions. Only the subscriber or their designated guardian can cancel. This is a deliberate protocol design — it guarantees subscribers that merchants cannot cut off their access or manipulate billing.
If you need to stop billing a subscriber, contact them directly and ask them to cancel from their subscriber portal at authonce.io/my-subscriptions. Alternatively, you can pause your product from the dashboard — no new payments will be attempted while paused.
Tax exports
From Dashboard → Payments → Export, you can download:
- CSV — all payments with date, subscriber, amount in USDC and EUR equivalent, transaction hash
- XLSX — same data as a spreadsheet, with a separate guide tab explaining the columns for your accountant
Pricing tiers
| Tier | Monthly fee | Protocol fee | Key features |
|---|---|---|---|
| Starter Free | €0 | 0.5% | Full protocol, up to 3 products, all tokens, webhooks, basic email notifications |
| Growth | €49 | 0.5% | + Branded emails (your name and colour), unlimited products, advanced analytics |
| Business | €199 | 0.5% | + Custom sender domain ([email protected]), priority support |
| Enterprise | Custom | 0.5% | + Custom integrations, SLA, white-label |
Tier fees are billed in USDC. Growth, Business, and Enterprise are billed the same way your own subscribers pay you — a recurring USDC subscription through AuthOnce's own protocol. No card, no separate billing system.
Founding merchant offer. The first 10 approved merchants pay zero fees for 3 months. The first 5 receive lifetime Growth tier free. Apply now →
Ready to get started?
Apply as a founding merchant and receive zero fees for your first 3 months.
Apply now → Back to site