Skip to Content
Platform
Identity and AccessSign-in for your users

Sign-in for your users

An application lets Introspection verify each end user, so their work is theirs and partners can trust who they are.

An application is a client ID your end users sign in through. Use one when Introspection itself should verify the end user; if your backend can vouch for them, an API key or service account is enough.

You need: a Max or Enterprise plan for every type except service-account.

Choose an application type

Type and environment are fixed at creation. Create applications in Project settings, Applications, or with introspection applications create.

Dashboard label--typeEnd users sign inPlan
Server credentialsservice-accountThey don’t; your backend authenticates (Credentials)Any
Federated authenticationjwksWith your identity providerMax, Enterprise
Hosted loginspaOn an Introspection login pageMax, Enterprise
Native appnativeIn your app, with an emailed codeMax, Enterprise

Every end user who signs in becomes a customer member under More, Users.

Sign in end users with your identity provider

  1. Create a jwks application for your issuer (any OIDC issuer with a JWKS: Auth0, Okta, Supabase Auth):
    introspection applications create --type jwks --name "Acme web" \ --environment production --issuer https://<ref>.supabase.co/auth/v1
  2. Optional: to require a specific audience on the provider’s JWT, attach the issuer with it:
    introspection applications idps create --app <application-id> \ --issuer https://<issuer> --audience-client-id <expected-aud>
  3. Your backend exchanges the end user’s ID token for an Introspection token, then opens the runner: federated broker.

Each end user becomes member <idp>:<sub>. A backend can’t act as them with user_id (that names a separate user:<id> member): exchange their token, or use an Admin Agent key.

Use hosted login

Create an spa application with at least one --redirect-uri. The browser redirects to an Introspection login page (authorization code with PKCE) and your app exchanges the code. Outside development the page must broker to your own identity provider: attach it with applications idps create (--issuer, --client-id, --client-secret).

Build a native app

Your users sign in withDo
Your own identity provider (Okta, or Google’s ID token with issuer https://accounts.google.com)A jwks application with that issuer. The app exchanges the provider’s token on the device
Introspection accounts (an emailed code)A native application (email-code sign-in)

REST routes for a native app

These tokens can’t look up runtimes: get runtime_id (a version ID) from your backend or config. The Swift package is https://github.com/introspection-org/introspection-swift-sdk (product IntrospectionSDK).

StepREST route
Start a task (its ID is the conversation ID)POST /v1/tasks
Stream AG-UI eventsGET /v1/tasks/<id>/runs/<run-id>/stream
Send the next messagePOST /v1/tasks/<id>/runs with prompt
Answer an interruptPOST /v1/tasks/<id>/runs with resume

Tell a partner who the end user is

  1. Link the partner’s MCP server or API endpoint to an application by its UUID (not the client ID):
    introspection bindings mcp connect --mcp-server-id partner-tools \ --endpoint-url https://mcp.partner.example/mcp --authorized-application <application-uuid> introspection bindings endpoints create --kind api --name partner-api \ --endpoint-url https://api.partner.example --authorized-application <application-uuid>
    It cannot be combined with --connector or a stored Authorization header.
  2. Give the partner the issuer, built from the client ID: https://api.introspection.dev/v1/applications/<client-id>. The JWKS is at <issuer>/.well-known/jwks.json, and the issuer serves OpenID discovery.

Each call then carries Authorization: Bearer <ES256 JWT> naming the end user.

JWT claims

ClaimValue
issThe issuer above
subuser:<id> for API-key user_id tasks; the partner’s own user ID for jwks apps; else the Introspection member ID. sub_type says which
audThe endpoint’s audience setting, else its URL
typeidentity_assertion or identity_attribution (trust levels)
member_idThe member; absent for API-key user_id tasks
task_id, azp, expTask, application, about one hour

The JWT proves who the end user is. It grants nothing: the partner still decides what that end user may do.

To rotate the signing key, run introspection applications keys create --app <application-id>. Delete the old key once partners that cache keys have updated.

Verify

introspection applications list shows the application. After an end user signs in, they appear under More, Users.

Next

Last updated on