# Altium Authentication

Sign users in to **Altium 365** from your own application and call the Altium 365 API on their behalf. Altium
Identity is a standard OAuth 2.0 / OpenID Connect provider; this site covers the parts that are specific to Altium:
the **ActionWait** desktop sign-in, workspace token exchange, **GovCloud** and **AES** (on-prem) installations. Client
libraries for TypeScript, .NET and Python implement it all, each validated against one shared specification.

[Get started](https://altiumdeveloper.github.io/altium-auth/guides/overview.md)
[Register your application](https://altiumdeveloper.github.io/altium-auth/guides/register-your-application.md)
[Read the specification](https://altiumdeveloper.github.io/altium-auth/specification/spec.md)

## Choose your flow

The flow depends on whether your application can host an HTTPS redirect. Both end with a workspace access token for
the Altium 365 API.

- [**Desktop apps**](https://altiumdeveloper.github.io/altium-auth/guides/desktop-apps.md) `public client · ActionWait`: Browser sign-in with PKCE for apps that cannot host a redirect; the result arrives over a long-poll

- [**Web & server apps**](https://altiumdeveloper.github.io/altium-auth/guides/web-and-server-apps.md) `confidential client · redirect`: The standard authorization-code flow for backends that host a callback and keep a client secret

Workspaces in **GovCloud** and on customer-hosted **AES** servers change where tokens are issued; see
[GovCloud](https://altiumdeveloper.github.io/altium-auth/guides/govcloud.md) and [AES (on-prem)](https://altiumdeveloper.github.io/altium-auth/guides/aes.md). What is inside a token is in
[Access token claims](https://altiumdeveloper.github.io/altium-auth/guides/token-claims.md).

## Use a library

Each library is a hand-written, idiomatic client with no runtime dependencies. All three are in **preview**: the API
may change as the specification evolves.

- [**TypeScript**](https://altiumdeveloper.github.io/altium-auth/libraries/typescript.md) `npm install @altium-developer/altium-auth`: Node 22+, Bun and Deno: sign-in, code exchange, workspace tokens, refresh and revocation

- [**.NET**](https://altiumdeveloper.github.io/altium-auth/libraries/dotnet.md) `dotnet add package Altium.Auth`: .NET 8 and 10, .NET Framework 4.6.1+ through netstandard2.0, and PowerShell

- [**Python**](https://altiumdeveloper.github.io/altium-auth/libraries/python.md) `pip install altium-auth`: Python 3.10+, standard library only; call it from async code with asyncio.to_thread

## How the libraries stay in sync

The [integration specification](https://altiumdeveloper.github.io/altium-auth/specification/spec.md) defines the behavior, and the
[conformance vectors](https://altiumdeveloper.github.io/altium-auth/specification/conformance.md) prove it: every library runs the same
`spec/conformance/vectors.json` and asserts the same requests and outcomes, so the implementations cannot drift.

## For AI assistants

Every page is also available as Markdown (add `.md` to its URL, or use **View as Markdown**).
[`llms.txt`](https://altiumdeveloper.github.io/altium-auth/llms.txt) indexes the site, and [`llms-full.txt`](https://altiumdeveloper.github.io/altium-auth/llms-full.txt) has every page
in one file.
