Skip to main content
Every request to the Examino API must carry a valid API key. There are no cookies, no OAuth flows, and no session tokens — just a single Authorization header that you include on every call.

The Authorization Header

Send your API key as a Bearer token:
Request header
The key format is always exa_<prefix>_<secret>. The prefix is a short lookup identifier; the secret portion is never retrievable after creation.
Your secret is shown only once, immediately after the key is created. Copy it into a secrets manager (e.g., AWS Secrets Manager, HashiCorp Vault, or a CI/CD environment variable) before closing the creation dialog. If you lose it, you cannot recover it — revoke the key and create a new one.

Creating an API Key

1

Open Administration → API

In the Examino web app, navigate to Administration → API. You need admin rights on the team to see this section.
2

Click Create Key

Fill in the creation form with the settings below.
3

Copy the secret immediately

The full key (including secret) is displayed once. Store it in your secrets manager before clicking away.

Key Settings

string
required
An internal label for this key (e.g., "LMS production", "Nightly import job"). Not sent in requests — purely for your own bookkeeping.
UUID
required
The team this key is scoped to. The key can only access resources that belong to this team or any team in its subtree.
string[]
required
One or more permission scopes. See the Scopes table below.
ISO 8601 date
Optional expiry date. After this date the key is automatically rejected with 401 unauthorized. Leave blank for a non-expiring key.

Machine identity and audit trail

An API key is an independent machine identity. The administrator who creates it is stored only as historical metadata and is shown in the administration dashboard; their user account, memberships, preferences, and lifecycle do not authorize or own subsequent API operations. Resources and financial movements created through the API are attributed to the exact API key used. Team scope and scopes authorize each request. Deleting or changing the user who originally created a key does not transfer its activity to another user and does not revoke it; revoke the key explicitly when an integration must stop. In the Examino interface, organization members see API-created exams as Created by API. Administrators can inspect the exact key name and public prefix on audit surfaces, including exams, copies, correction credit movements, and transfers. The secret is never stored or displayed.

Key Rotation

You can have multiple active keys at the same time. This is the recommended approach for zero-downtime rotation:
  1. Create the new key and deploy it to your production environment.
  2. Verify the new key is working correctly.
  3. Revoke the old key.
Revocation is immediate — the old key stops working the moment you click Revoke.
Give each key a name that identifies its purpose and generation (e.g., "LMS import v2"). It makes auditing and rotation much easier.

Scopes

Scopes are the permissions attached to an API key. A request that requires a scope the key doesn’t have is rejected with 403 forbidden.
Write scopes do not automatically include their read counterpart — grant both domain:read and domain:write when you need full access to a domain. The reverse is also true: domain:read does not grant write access.
Grant only the scopes your integration actually needs. A key used only to fetch results, for example, only needs corrections:read and copies:read.

Team Scope & Visibility

Each API key is bound to exactly one team and covers that team’s entire subtree (all nested folders and workspaces). Resources outside the scope are completely hidden.
A request for a resource outside your key’s scope returns 404 not_found, not 403 forbidden. This is intentional: the API never confirms or denies the existence of resources your key cannot see.

Rejection Reference

Use this table to diagnose why a request was rejected:

Example: missing Authorization header

401 response

Example: missing scope

403 response