SDK and API coverage
Use this page when you are choosing how to integrate Switera into an application or backend service. The matrix reflects the packages that exist in the current repository and the launch API families exposed by the Switera API.
The 6 September 2026 live founder test verified hosted password login and PKCE, profile/session reads, metadata updates, scoped search access, and signed webhook receive/retry/replay using Go and browser TypeScript clients. It did not establish complete Auth or platform launch readiness.
A separate Python SDK pass verified twelve read operations and cross-app credential rejection; it did not validate complete Python workflow parity.
The 7 September follow-up verified browser SDK authenticator enrollment, fresh hosted TOTP login, backup-code recovery, regeneration, concurrent one-use consumption, replay rejection and login after disabling TOTP. This used a dedicated managed app with optional MFA, not builder-account MFA or mandatory enrollment. See the MFA guide.
The 19 September passkey follow-up adds the inventory read route and tests
auth.listPasskeys() against real HTTP middleware, database lookup and response
decoding, using fixture tokens/provider data. That contract test is not a real
passkey login. Registration, login and per-key removal still require acceptance.
See passkey inventory.
Realtime token issuance succeeds, but customer-browser websocket connections remain blocked by the current origin policy. Search totals and webhook delivery status reporting were corrected and live-retested on 14 September. Those fixes do not establish validation of every integration path.
Mailbox receipt/code redemption, mandatory MFA enrollment, SMS/security-key ceremonies, and social provider consent remain unverified. Additional login-attempt binding checks remain open. Package build/smoke checks are separate from successful customer journeys.
Integration paths
| Integration need | Recommended path | Notes |
|---|---|---|
| Browser or framework authentication | @switera/auth plus a framework adapter | Hosted login, OAuth callback handling, and sessions. Other Auth helpers exist, but see the live validation limits above. |
| Trusted backend automation | Node.js, Go, Python, PHP, Ruby, or direct REST | Use an app-scoped secret key from your backend only. Do not ship secret keys to browsers or mobile apps. |
| Embedded sign-in UI | @switera/widgets | Use for a small hosted-auth surface inside a builder-owned app. |
| Mobile app authentication | React Native, Flutter, Android, or Swift packages | Mobile packages are launch scaffolds unless noted otherwise below. |
| AI-assisted platform operations | MCP packages | Use only in controlled developer environments with least-privilege tokens. |
| Unsupported language or full route coverage | Direct REST | The generated reference in docs/api-docs tracks the current backend route surface. |
SDK package matrix
| Package | Runtime | Launch status | Covered surface |
|---|---|---|---|
@switera/auth | Browser TypeScript | Partial live validation; known gaps above | OAuth2/PKCE, hosted auth redirects, session state, profile, MFA, SSO/LDAP, passkeys, OTP, magic links, invitations, metadata, privileged sessions, browser Search, current-user Feature Flags, and Realtime token helpers. |
@switera/auth-react | React | Available; adapter E2E not repeated in this run | Provider, hooks, guards, sign-in/sign-up components, user and organization components, current-user Feature Flags. |
@switera/auth-nextjs | Next.js | Available; adapter E2E not repeated in this run | Server auth helpers, middleware, route protection, shared browser auth client exports. |
@switera/auth-node | Node.js servers | Available; adapter E2E not repeated in this run | Express, Fastify, Hono, and token introspection helpers. |
@switera/node | Node.js backend | Vault plus workspace starter resources | Trusted-server Vault helpers, paginated user search, organization creation/membership, and managed collection/record CRUD. |
@switera/auth-svelte | Svelte | Available; adapter E2E not repeated in this run | Provider, guards, signed-in/signed-out helpers, user auth state, current-user Feature Flags. |
@switera/auth-vue | Vue | Available; adapter E2E not repeated in this run | Vue auth adapter around the core browser client. |
@switera/auth-angular | Angular | Available; adapter E2E not repeated in this run | Angular auth service and route guards. |
@switera/widgets | Browser widgets | Partial launch support | Login, signup, user button, and organization switcher widgets. |
github.com/switera/switera-go | Go backend | Broad launch backend coverage | Users, organizations, auth settings, SSO, FGA, Vault, audit logs, auth hooks, managed Email, customer Webhooks, directory sync, sessions. |
switera | Python backend | Broad launch backend coverage | Users, organizations, auth settings, SSO, FGA, Vault, audit logs, auth hooks, managed Email, customer Webhooks, directory sync, sessions. |
switera/sdk | PHP backend | Broad launch backend coverage | Users, organizations, auth settings, SSO, FGA, Vault, audit logs, auth hooks, managed Email, customer Webhooks, directory sync, sessions. |
switera | Ruby backend | Broad launch backend coverage | Users, organizations, auth settings, SSO, FGA, Vault, audit logs, auth hooks, managed Email, customer Webhooks, directory sync, sessions. |
com.switera:switera-java | Java backend | Scaffold | Package metadata and baseline HTTP dependencies exist; route resources are not launch-complete. |
Switera | .NET backend | Scaffold | Package metadata exists; route resources are not launch-complete. |
@switera/react-native | React Native | Partial launch support | Mobile auth package scaffold with typed entrypoint. |
switera | Flutter/Dart | Scaffold | Package metadata and mobile auth dependencies exist. |
com.switera.sdk | Android/Kotlin | Scaffold | Library package metadata and mobile auth dependencies exist. |
Switera | Swift | Scaffold | Swift package manifest exists. |
@switera/mcp-server | MCP | Partial launch support | Platform administration helper for controlled developer environments. |
@switera/mcp-context | MCP | Partial launch support | End-user context provider for AI assistant integrations. |
Product API coverage
| Product area | REST API | Node | Go | Python | PHP | Ruby | Browser/framework auth SDKs | Notes |
|---|---|---|---|---|---|---|---|---|
| Auth, sessions, hosted login | Yes | Auth middleware | Partial | Partial | Partial | Partial | Yes | Browser/framework SDKs are the main path for end-user auth. Backend SDKs cover admin/user/session surfaces. |
| Users and organizations | Yes | Partial typed resources | Yes | Yes | Yes | Yes | Limited | Node covers user search and workspace membership/creation. Other admin operations still use REST. |
| SSO and directory sync | Yes | Direct REST | Yes | Yes | Yes | Yes | SSO login helpers only | Backend SDKs manage provider configuration; browser SDKs start login flows. |
| MFA, passkeys, OTP, magic links | Partial live validation | Auth middleware | Limited | Limited | Limited | Limited | Optional TOTP/recovery verified; other methods have gaps | Hosted TOTP and one-use backup-code recovery pass. Passkey management, inbox-backed OTP/magic links and mandatory MFA still need validation. |
| FGA | Yes | Direct REST | Yes | Yes | Yes | Yes | No | Backend-only launch surface. |
| Vault | Yes | Yes | Yes | Yes | Yes | Yes | No | Backend-only; keep key and payload workflows off browsers. |
| Yes | Direct REST | Yes | Yes | Yes | Yes | No | Managed Email config, route test, workflow test-run, runtime, suppressions, and previews are backend/admin workflows. | |
| Customer Webhooks | Yes | Direct REST | Yes | Yes | Yes | Yes | No | Backend SDKs cover endpoints, event catalog, delivery history, replay, test sends, and emits where implemented. |
| Billing | Yes | Direct REST | Direct REST | Direct REST | Direct REST | Direct REST | No | Public docs cover the launch routes; typed SDK resources are still later work. |
| Storage objects | Yes | Direct REST | Direct REST | Direct REST | Direct REST | Direct REST | No | Use the REST API and examples until typed SDK resources land. |
| Managed Data | Yes | Typed collection/record CRUD | Direct REST | Direct REST | Direct REST | Direct REST | No | Node server resources accept tenant scope. Your backend must authorize the end user before using a secret key. |
| Search | Yes | Direct REST | Yes | Yes | Direct REST | Direct REST | Tenant token/query helpers | Go and Python cover trusted server-side indexes, documents, and queries. Browser auth SDKs cover short-lived tenant token issuance and browser-safe query. |
| Feature Flags | Yes | Direct REST | Yes | Yes | Direct REST | Direct REST | Current-user evaluation | Go and Python cover trusted server-side flag CRUD and evaluation. Browser/framework auth SDKs evaluate flags for the signed-in user without exposing a secret app key. |
| Realtime | Yes | Direct REST | Direct REST | Direct REST | Direct REST | Direct REST | Connection/subscription token helpers | Browser auth SDKs issue signed tokens for the current user. Server-side publish SDK wrappers are still later work. |
| API keys and usage | Yes | Direct REST | Direct REST | Direct REST | Direct REST | Direct REST | No | Trusted backend calls can use REST for key controls and usage rollups. |
Vault key identifiers and rotation
Keep Vault operations on your trusted backend. Key creation returns both an
id (UUID) and a name. Get, rotate, and delete take the UUID; encryption,
signing, and tokenization take the name. Do not pass the name into a key
management URL.
const key = await client.vault.createKey({ name: 'customer-documents', purpose: 'encryption' });
await client.vault.getKey(key.id);
const encrypted = await client.vault.encrypt(key.name, 'private text');
await client.vault.rotateKey(key.id);
const decrypted = await client.vault.decrypt(key.name, encrypted.ciphertext);
const text = Buffer.from(decrypted.plaintext, 'base64').toString('utf8');
The SDK encodes encryption/signing input as base64 for the REST API. Tokenization
sends value and optional ttl_sec, not plaintext or ttl_seconds.
Keep the complete version-prefixed ciphertext and any authenticated context;
stripping the prefix or changing context prevents correct decryption.
Rotation retains earlier encrypted key material so existing ciphertext, tokens, and signatures remain usable. Disabling a key prevents use; deleting it is destructive. A rotation cannot restore key material already lost before history was retained. Java and .NET remain scaffolds, not verified production integrations.
Generated API reference
The docs repository includes a generated Markdown reference under docs/api-docs, refreshed from the backend repository's src/api/docs/swagger.json. It describes annotated API contracts; a generated entry does not establish live acceptance of that operation.
The public docs intentionally keep the machine-generated reference separate from the main navigation until operation IDs, model names, and examples are fully curated for external readers. Use the task pages first, then use the generated reference for exact route names and request/response shapes.
SDK smoke checks
The repository includes a package smoke runner for launch readiness:
scripts/smoke-sdks.sh
The runner installs and builds available JavaScript packages, imports their public entrypoints where safe, runs Go SDK tests, runs Python SDK tests in an isolated virtual environment, and checks other language packages when their toolchains are installed. Jenkins runs it with Node, Go, Python, Ruby, and PHP before image builds. Its separate quality gate also runs API/starter race tests against a disposable database, the Node Vault SDK against real API handlers, frontend checks, and a reachable-vulnerability scan.
Refresh command
From the docs repository root, point the refresh script at the backend's generated OpenAPI file:
scripts/refresh-api-docs.sh ../switera-backend/src/api/docs/swagger.json
The script only reads the supplied file and rebuilds docs/api-docs. It does not
modify another repository. Regenerate and commit backend Swagger annotations
in the backend repository before refreshing this reference.
Current launch gaps
- Complete real passkey registration/login/removal and the authenticated inventory retest; resolve the browser Realtime origin failure. Complete MFA login-attempt binding checks and mailbox-backed Auth/tenant-isolation journeys before treating package availability as launch readiness.
- Billing, Storage, Managed Data, Realtime publish, and API-key management need first-class typed resources in the backend SDKs. Node now covers Vault, while Search, Feature Flags, and Realtime need broader backend language parity.
- Java, C#, Flutter, Android, Swift, and React Native packages have smoke coverage only when the matching local or CI toolchain is available.
- Generated operation IDs still need curation before the machine-generated API reference should become the main public reference.