Sign-in, roles and SSO, done once for every app
Hosted login with passkeys, social logins and email codes, organisations and typed roles, enterprise SSO with SCIM, and a token your API verifies offline. One SDK for your browser app, API and CLI.
Hosted login with passkeys, social logins and email codes, organisations and typed roles, enterprise SSO with SCIM, and a token your API verifies offline. One SDK for your browser app, API and CLI.
Add sign-in to a new app in an afternoon, with a real test environment from the first minute.
Organisations, invites and roles inside your app, without building an admin panel for them.
Sell to companies that need their own SAML or OIDC sign-in and SCIM provisioning.
Passkeys, passwords, email codes and magic links, Google, GitHub, Apple and more, and two-step verification.
Your logo and colours on the login pages, in English and Danish. Your app never handles a password.
Teams, invites, custom org roles and org switching in your app. Permissions are typed and checked offline.
SAML and OIDC connections per organisation, with SCIM provisioning, set up in the dashboard.
Every project has a test environment with its own users and keys. Promote to production in one step.
Your API checks tokens against cached keys, so sign-in never sits in your request path.
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.
sub · amrorg.rolebilling.planflag()The browser client handles the redirect, the callback and token refresh. Your API verifies the same token offline and checks the role in one guard.
// web/auth.ts: the browser
import { createAuth } from '@anchring/auth/browser';
export const auth = createAuth({ project: 'acme', env: 'test', clientId: 'test_…' });
await auth.ready(); // finishes the callback, restores the session
if (!auth.user()) await auth.signIn(); // hosted login: passkey, password, email code or social
// api/server.ts: your API verifies the same token, offline
import { createAuth } from '@anchring/auth/server';
import { access } from './access'; // your roles, shared with the browser
const api = createAuth({ project: 'acme', env: 'test', audience: 'acme-api', access });
app.use('/api/*', api.middleware());
app.put('/api/settings', api.require('settings:write', { orgRole: 'admin' }), saveSettings);Prices in euros, excluding VAT. Test environments include every feature on every plan.
5,000 monthly active users, 2 sign-in apps
20,000 monthly active users, 5 sign-in apps
50,000 monthly active users, 15 sign-in apps
1 enterprise SSO connection with SCIM
150,000 monthly active users, Unlimited sign-in apps
3 enterprise SSO connections with SCIM
Unlimited monthly active users, Unlimited sign-in apps
Unlimited enterprise SSO connections with SCIM
Unlimited monthly active users, Unlimited sign-in apps
Unlimited enterprise SSO connections with SCIM
Yes. It is OpenID Connect underneath, so any OIDC library works. The SDK adds typed permissions, flags, billing and token refresh on top.
Yes. Export them from your current provider and upload the file in the dashboard. Passwords carry over where the provider exports the hashes, and you can try the import in test first.
In the EU. Each customer has its own namespace with separate test and production databases, so a bug in the request path can't reach another customer's users.
Create a project, sign in from the test environment and verify your first token in a few minutes.
Teams, invites, custom roles and org switching, with the role in the token.
Plans, checkout, invoices and EU VAT, with the plan in the token.
Targeting and rollouts, evaluated offline from the token.
Talk to your users beside their plan, roles and flags.
Act as a user with a reason, a time limit and an audit trail.
Chat with visitors, and keep them when they sign up.