Skip to main content

Authentication

Audience

Integrators automating AIR with bearer API keys.

TL;DR

  1. Create a domain-scoped API key in the AIR portalGetting started.
  2. Send Authorization: Bearer <rawKey> on every request.
  3. Each key works in one domain only — other domains return 404.
  4. Request scopes when creating the key, or use integrations:full. Missing scope → 403 with API key missing required scope: ….
  5. Poll documents and assessments for async work — Async jobs.

Bearer API keys

Authorization: Bearer <rawKey>

Keys are opaque strings (three dot-separated segments). The server trims whitespace after Bearer.

Key lifecycle

StepWhere
Create service accountPortal → domain → API Keys
Mint keySelect scopes; copy rawKey once
UseAuthorization: Bearer &lt;rawKey&gt; on every request
RotateCreate new key, deploy, revoke old key in portal
RevokeRevoked keys return 401

Keys are bound to the domain where they are created. Use one key per domain.

Domain scoping

SymptomLikely cause
403 — missing scopeKey lacks that scope
404 on project/assessment routesKey is for a different domain

Confirm your domain: GET /domains/.

What API keys can access

AreaAPI key
Domains, projects, assessments, uploads, searchYes — per scopes
Domain portfolio dashboardYes — portfolio:read
Org portfolio dashboardNo — portal users only
API key / service account managementNo — portal only
Billing, user profileNo — portal only

Scopes

Format: resource:action (for example, projects:read).

ScopeGrants
projects:readDocuments, artifacts, sources; slug lookup
projects:writeUpload, archive, delete, regenerate
assessments:readAssessments, reports, stages
assessments:writeStart, retry, terminate assessments
domains:readGET /domains/, list domain projects, slug lookups
domains:writeCreate projects in the domain
portfolio:readDomain portfolio dashboard
search:readPOST /search
integrations:fullAll integrator scopes above

Rules: at least one scope required; write implies read on the same resource.

Use these when creating a key in the portal:

Report reader — download completed reports only:

["assessments:read", "projects:read", "domains:read"]

Assessment runner — upload, assess, read reports:

["assessments:read", "assessments:write", "projects:read", "projects:write", "domains:read"]

Full pipeline — create projects, upload, assess, search:

[
"projects:read",
"projects:write",
"assessments:read",
"assessments:write",
"domains:read",
"domains:write",
"portfolio:read",
"search:read"
]

All integrator scopes: ["integrations:full"]


Portal users

Humans sign in at https://air.thalus.ai to manage projects, review assessments, and create API keys. Automations should use bearer API keys, not browser sessions.