Skip to content
Billing

Charge your users, and let the token know what they paid for

Plans, checkout, proration, dunning, invoices and EU VAT, on your own payment account. The plan and payment status land in the user's token, so one guard in your API checks them offline.

Who it's for

For products that sell subscriptions

SaaS startups

Launch paid plans without writing a subscription system or keeping it in sync with your users.

B2B products

An organisation's owners and admins manage the subscription for the whole team.

Sellers in the EU

Reverse charge for businesses, OSS rates for consumers, and VAT numbers checked against VIES.

What it does

A billing engine, not only a checkout

Your payment account

Connect your Adyen account for cards and SEPA Direct Debit. You are the merchant; your money never passes through us.

Plans and entitlements

Plans, prices and entitlements made in the dashboard. Upgrades apply now with proration, downgrades at the period end.

Dunning

Failed payments are retried, and the token's status says past_due, so your app can show a banner.

Invoices and VAT

Invoice PDFs, EU VAT with reverse charge and OSS, and refunds from the dashboard.

One guard

A guard's plan and entitlement checks answer 402 plan_required, so your app can offer the upgrade.

Webhooks and a server API

Subscription, invoice and payment events, and an admin client for your backend.

One token

Every check reads the same token

When a user signs in, their token carries who they are, their organisation and role, their plan and payment status, and what your flags target. Your API checks it in one guard, offline, and your UI reads the same answers.

Identitywho signed in, and howsub · amr
Rolesthe organisation and what it allowsorg.role
Billingthe plan and its payment statusbilling.plan
Flagswhat is switched on for this userflag()
In your code

Checkout in the browser, the plan in the guard

The user pays on the payment page and comes back to your app. From the next token refresh, the plan and its entitlements are in the token your API checks.

billing.ts
// In the browser: the user picks a plan and pays on your payment account
const { plans, subscription } = await auth.billing.get();
const { url } = await auth.billing.checkout({ price: 'pro_monthly' });
location.href = url!; // back in your app, the next token carries the plan

await auth.billing.change('max_monthly'); // upgrades now (prorated), downgrades at the period end

// In your API (the server SDK): plan and entitlement in one guard, offline. Not on it: 402 plan_required
app.get('/api/reports/export',
  api.require('report:read', { plan: ['pro', 'max'], entitlement: 'export' }),
  exportReports);
The plan

Sold separately, coming later

This will be its own product, sold separately from the plans. It is not sold yet. Want to use it? Talk to us.

Questions

Before you start

Who is the merchant?

You are. Charges run through your own Adyen account and settle there. Anchr.ing runs the plans, invoices and VAT around them.

What happens when a payment fails?

The subscription goes past due and the payment is retried. The plan still applies meanwhile, and the token's billing status tells your app to show a banner.

Can I try it before going live?

Yes. Test environments include billing, so you can build and test the checkout before you go live.

Start charging for your product

Set up plans in the test environment, wire up the checkout, and go live when your payment account is ready.

Products

Auth

Hosted sign-in, organisations, roles and enterprise SSO.

Organisations

Teams, invites, custom roles and org switching, with the role in the token.

Feature flags

Targeting and rollouts, evaluated offline from the token.

Support chat

Talk to your users beside their plan, roles and flags.

Support access

Act as a user with a reason, a time limit and an audit trail.

Lead gen

Chat with visitors, and keep them when they sign up.