Auth API reference

Auth API reference

Every route served by auth.thundera.eu, generated from the router source so it cannot drift. For flows and payloads see Account & single sign-on and Plans & billing.

Conventions

  • Base URL https://auth.thundera.eu. JSON in, JSON out; errors are { "error": "message", "code": "MACHINE_CODE" } with the matching HTTP status.
  • session / bearer — the thundera_token cookie (browsers) or Authorization: Bearer <access token> (native clients). system role — additionally one of system-super-admin, system-admin, system-support (support is read-only). org admin / member — membership of the organization in the path.
  • Mutating requests from a browser must come from a *.thundera.eu origin (CORS allow-list); credentials are sent with credentials: "include".
  • /api/* is rate limited per IP; login and password flows have additional brute-force lockouts.
  • Platform routes under /api/v1/system/* are for operators and are listed for completeness.

Account, sessions and devices

Method Path Auth Notes
POST /api/v1/auth/change-email session / bearer
POST /api/v1/auth/confirm-email session / bearer
GET /api/v1/auth/devices session / bearer Active sessions of the user; the caller is flagged current.
DELETE /api/v1/auth/devices/:id session / bearer
POST /api/v1/auth/devices/:id/trust session / bearer
POST /api/v1/auth/devices/:id/untrust session / bearer
POST /api/v1/auth/devices/revoke-others session / bearer Revoke every session except the current one.
POST /api/v1/auth/forgot-password public Always 200; sends a reset link when the email exists.
POST /api/v1/auth/login public Body { email, password, trustDevice }. Sets thundera_token + thundera_refresh cookies; returns accessToken, refreshToken, sessionId.
POST /api/v1/auth/logout session / bearer Revokes the current session only.
POST /api/v1/auth/logout-everywhere session / bearer Bumps session_generation: every access token is rejected immediately.
GET /api/v1/auth/me optional session Current user (profile, roles, plan, org). With ?optional=1 anonymous callers get 200 {user:null}.
PUT /api/v1/auth/me session / bearer Update display name, phone, recovery email, avatar preference.
GET /api/v1/auth/mfa-cancel public
POST /api/v1/auth/mfa-removal-request public
POST /api/v1/auth/mfa-removal-verify public
POST /api/v1/auth/native-exchange public Exchange a one-time native code + PKCE verifier for tokens (60 s, single use).
GET /api/v1/auth/native-redirect public Desktop/mobile sign-in confirmation page (allow-listed callback, PKCE S256).
POST /api/v1/auth/native-redirect public
GET /api/v1/auth/native-tokens public
POST /api/v1/auth/native-tokens session / bearer
PUT /api/v1/auth/password session / bearer Body { currentPassword, newPassword }.
POST /api/v1/auth/refresh public Body { refreshToken }. Rotates the refresh token on the same session row; 401 only when the session is revoked.
POST /api/v1/auth/register public Create an account; Turnstile-protected; sends the verification email.
POST /api/v1/auth/reset-password public Body { token, password }. Revokes all sessions.
GET /api/v1/auth/session public Browser SPA refresh: renews the access cookie from the refresh cookie and returns the user.
GET /api/v1/auth/turnstile/config public
GET /api/v1/auth/verify session / bearer

Social sign-in

Method Path Auth Notes
GET /api/v1/auth/social/callback/:provider public
GET /api/v1/auth/social/login/:provider public
GET /api/v1/auth/social/providers public

Sign in with Apple

Method Path Auth Notes
POST /api/v1/auth/apple public

Apps catalogue

Method Path Auth Notes
GET /api/v1/auth/apps session / bearer Apps the signed-in user can open (drives the Shell apps menu).
GET /api/v1/auth/apps/announcements public
GET /api/v1/auth/apps/public public Public catalogue of listed apps.
GET /api/v1/auth/apps/status/:slug public

Plans, subscriptions and payment methods

Method Path Auth Notes
GET /api/v1/auth/billing session / bearer Subscriptions of the user.
POST /api/v1/auth/billing/cancel session / bearer
POST /api/v1/auth/billing/confirm-payment-method session / bearer
GET /api/v1/auth/billing/effective-plan/:app session / bearer Resolved tier and limits (including ai_monthly_usd) for the caller in one app.
GET /api/v1/auth/billing/invoices session / bearer
DELETE /api/v1/auth/billing/items/:app_slug session / bearer
GET /api/v1/auth/billing/payment-methods session / bearer
DELETE /api/v1/auth/billing/payment-methods/:id session / bearer
GET /api/v1/auth/billing/plans public Plan catalogue, single source of truth. ?app=. USD cents, cached 60 s, CORS for *.thundera.eu.
GET /api/v1/auth/billing/plans/:id/limits public
GET /api/v1/auth/billing/plans/by-tier/:app/:tier public
POST /api/v1/auth/billing/refresh session / bearer
POST /api/v1/auth/billing/resume session / bearer
POST /api/v1/auth/billing/setup-intent session / bearer
POST /api/v1/auth/billing/subscribe session / bearer Start or change a subscription.
GET /api/v1/auth/billing/summary session / bearer
POST /api/v1/auth/billing/webhook public Stripe webhook (signature verified, idempotent).

Promo codes

Method Path Auth Notes
POST /api/v1/auth/promo/redeem session / bearer
GET /api/v1/auth/promo/validate public

Regions

Method Path Auth Notes
GET /api/v1/auth/regions public
GET /api/v1/auth/regions/me session / bearer
PUT /api/v1/auth/regions/me session / bearer

Downloads

Method Path Auth Notes
GET /api/v1/auth/downloads/:product/:os/:arch public
POST /api/v1/auth/downloads/:product/:os/:arch?/track session / bearer
GET /api/v1/auth/downloads/:product/:os/latest public
GET /api/v1/auth/downloads/index public

Feedback and issues

Method Path Auth Notes
POST /api/v1/auth/feedback session / bearer

Site subscriptions

Method Path Auth Notes
POST /api/v1/site-subscriptions public
GET /api/v1/site-subscriptions/config public
GET /api/v1/site-subscriptions/opt-out/:token public

Public status

Method Path Auth Notes
GET /api/v1/status/events public Public 90-day incident feed.
GET /api/v1/status/summary public Public 7-day status grid.

Organizations (client admin)

Method Path Auth Notes
GET /api/v1/admin/orgs public Organizations the caller belongs to.
POST /api/v1/admin/orgs public Create an organization.
GET /api/v1/admin/orgs/:orgId org member
PUT /api/v1/admin/orgs/:orgId org admin
GET /api/v1/admin/orgs/:orgId/apps org member
PUT /api/v1/admin/orgs/:orgId/apps org admin
PUT /api/v1/admin/orgs/:orgId/domain org admin
GET /api/v1/admin/orgs/:orgId/domains org member
POST /api/v1/admin/orgs/:orgId/domains org admin
DELETE /api/v1/admin/orgs/:orgId/domains/:domainId org admin
GET /api/v1/admin/orgs/:orgId/members org member
POST /api/v1/admin/orgs/:orgId/members org admin
DELETE /api/v1/admin/orgs/:orgId/members/:userId org admin
PATCH /api/v1/admin/orgs/:orgId/members/:userId org admin
GET /api/v1/admin/orgs/:orgId/plan-billing org admin
GET /api/v1/admin/orgs/:orgId/sso org admin
POST /api/v1/admin/orgs/:orgId/sso org admin
DELETE /api/v1/admin/orgs/:orgId/sso/:connectorId org admin
PATCH /api/v1/admin/orgs/:orgId/sso/:connectorId org admin
GET /api/v1/admin/plans public

OIDC / OAuth 2.1 authorization server

Method Path Auth Notes
GET /.well-known/jwks.json public
GET /.well-known/oauth-authorization-server public
GET /.well-known/openid-configuration public
GET /api/v1/oidc/authorize public
POST /api/v1/oidc/authorize public
GET /api/v1/oidc/entitlements/:app public
POST /api/v1/oidc/register public
POST /api/v1/oidc/revoke public
POST /api/v1/oidc/token public
GET /api/v1/oidc/userinfo public

Activities log

Method Path Auth Notes
GET /api/v1/system/activities-log system role
GET /api/v1/system/activities-log/apps system role

Apps & announcements (system)

Method Path Auth Notes
GET /api/v1/system/apps public
POST /api/v1/system/apps public
PUT /api/v1/system/apps/:slug public
POST /api/v1/system/apps/:slug/disable public
POST /api/v1/system/apps/:slug/enable public
POST /api/v1/system/apps/:slug/maintenance public
POST /api/v1/system/apps/:slug/status public
POST /api/v1/system/apps/announcements public
DELETE /api/v1/system/apps/announcements/:id public
PUT /api/v1/system/apps/announcements/:id public
GET /api/v1/system/apps/announcements/all public

Billing operations (system)

Method Path Auth Notes
GET /api/v1/system/billing/customers system role
GET /api/v1/system/billing/customers/:id system role
POST /api/v1/system/billing/customers/:id/cancel system role
POST /api/v1/system/billing/customers/:id/cancel-item system role
POST /api/v1/system/billing/customers/:id/change-plan system role
POST /api/v1/system/billing/customers/:id/refund system role
POST /api/v1/system/billing/customers/:id/resume system role
POST /api/v1/system/billing/customers/:id/resync system role
GET /api/v1/system/billing/events system role
GET /api/v1/system/billing/invoices system role
GET /api/v1/system/billing/kpis system role

Feedback triage (system)

Method Path Auth Notes
GET /api/v1/system/feedback public
GET /api/v1/system/feedback/:id public
PATCH /api/v1/system/feedback/:id public
GET /api/v1/system/feedback/:id/attachments/:attachmentId public
GET /api/v1/system/issues public
POST /api/v1/system/issues public
GET /api/v1/system/issues/:id public
PATCH /api/v1/system/issues/:id public
GET /api/v1/system/issues/:id/attachments/:attachmentId public

Monitoring (system)

Method Path Auth Notes
GET /api/v1/system/monitoring/overview system role
POST /api/v1/system/monitoring/probe/:slug system role

Plan catalogue admin (system)

Method Path Auth Notes
GET /api/v1/system/plans system role
POST /api/v1/system/plans system role
DELETE /api/v1/system/plans/:id system role
PATCH /api/v1/system/plans/:id system role

Promo codes (system)

Method Path Auth Notes
GET /api/v1/system/promo public
POST /api/v1/system/promo public
DELETE /api/v1/system/promo/:id public
PUT /api/v1/system/promo/:id public
GET /api/v1/system/promo/:id/redemptions public

Site subscriptions (system)

Method Path Auth Notes
GET /api/v1/system/site-subscriptions public
POST /api/v1/system/site-subscriptions public
DELETE /api/v1/system/site-subscriptions/:id public
PATCH /api/v1/system/site-subscriptions/:id public
POST /api/v1/system/site-subscriptions/:id/opt-out public
POST /api/v1/system/site-subscriptions/:id/use public

Status page admin (system)

Method Path Auth Notes
GET /api/v1/system/status/apps public
GET /api/v1/system/status/incidents public
POST /api/v1/system/status/incidents public
DELETE /api/v1/system/status/incidents/:id public
GET /api/v1/system/status/incidents/:id public
PATCH /api/v1/system/status/incidents/:id public
POST /api/v1/system/status/incidents/:id/updates public

System administration

Method Path Auth Notes
GET /api/v1/system/audit system role
GET /api/v1/system/bedrock system role
POST /api/v1/system/bedrock/block public
POST /api/v1/system/bedrock/unblock public
GET /api/v1/system/orgs system role
GET /api/v1/system/orgs/:orgId system role
PUT /api/v1/system/orgs/:orgId public
GET /api/v1/system/orgs/:orgId/apps system role
PUT /api/v1/system/orgs/:orgId/apps public
PUT /api/v1/system/orgs/:orgId/domain public
GET /api/v1/system/orgs/:orgId/domains system role
POST /api/v1/system/orgs/:orgId/domains public
DELETE /api/v1/system/orgs/:orgId/domains/:domainId public
POST /api/v1/system/orgs/:orgId/members public
DELETE /api/v1/system/orgs/:orgId/members/:userId public
PATCH /api/v1/system/orgs/:orgId/members/:userId public
GET /api/v1/system/orgs/:orgId/sso system role
POST /api/v1/system/orgs/:orgId/sso public
DELETE /api/v1/system/orgs/:orgId/sso/:connectorId public
PATCH /api/v1/system/orgs/:orgId/sso/:connectorId public
GET /api/v1/system/settings/privacy public
PUT /api/v1/system/settings/privacy public
GET /api/v1/system/stats system role
GET /api/v1/system/stats/insights system role
GET /api/v1/system/users system role
GET /api/v1/system/users/:userId system role
PUT /api/v1/system/users/:userId public
PUT /api/v1/system/users/:userId/app-roles public
POST /api/v1/system/users/:userId/notes system role
POST /api/v1/system/users/:userId/reset-password system role
PUT /api/v1/system/users/:userId/roles public
POST /api/v1/system/users/:userId/unblock public