Alter is a credential vault, an authorization layer, and an audit pipeline behind a single SDK method. This page walks the flow end-to-end so the rest of the docs can stop re-explaining it.Documentation Index
Fetch the complete documentation index at: https://docs.alterauth.com/llms.txt
Use this file to discover all available pages before exploring further.
The shape of an integration
Every integration with a third-party API has four problems:- Storage — somewhere to keep OAuth tokens or API keys.
- Retrieval — refreshing tokens before expiry, picking the right one per user.
- Authorization — deciding whether a given caller is allowed to use a given credential right now.
- Audit — recording every access with enough context to answer “who used what, when, and why.”
How a request flows
The four primitives
Alter exposes four primitives. The full definitions live in Concepts; this is the one-paragraph version.- App — the unit that owns API keys, provider configuration, and grants. One per integrated product.
- Provider — a third-party service Alter knows how to talk to. Two kinds: OAuth providers (Google, Slack, GitHub) and managed-secret providers (Stripe API key, Datadog API key, AWS).
- Grant — a stored authorization to call a provider on behalf of someone. Identified by a
grant_id. Created when a user completes OAuth or when an operator provisions a managed secret. - Agent (optional) — a workload identity with its own API key and access set. Use when an AI agent or background workload needs to be revocable and auditable independently of the app key.
Two credential paths, one SDK method
Alter handles two distinct credential models. Both reach the sameapp.request() method:
| OAuth grants | Managed secrets | |
|---|---|---|
| Provided by | An end user completing OAuth | An operator pasting the credential in the portal |
| Refresh | Automatic, per-provider | Operator rotates when the underlying credential rotates |
| Bound to | The user who authorized | A user, group, system, or agent (operator’s choice) |
| Read in code as | grant_id | grant_id |
Identity resolution
For OAuth grants, the SDK needs to know which grant to use. Three modes, explained on one page:- JWT identity — the recommended path for any app with logged-in users. Configure the IDP once, the SDK resolves the grant from each user’s JWT.
- Explicit
grant_id— for scripts, batch jobs, and managed-secret grants. - Headless —
app.connect()for CLIs, notebooks, and one-time setup flows.
What’s no longer required to build
- Token storage (encrypted at rest in a dedicated vault, never in the application database).
- Token refresh (handled per-provider, automatically).
- Per-user scoping (grants are bound to principals; the SDK resolves them).
- Audit logging (every call writes a row with caller, principal, provider, status).
- End-user revocation UX (end users get the Wallet dashboard for free).
- Policy enforcement (rules engine on every retrieval).
What’s next
Quickstart
Working code, under 10 minutes.
Concepts
One page per primitive.
Guides
End-to-end recipes for each use case.