Overview
An integration is a connection between Lumos and one of your apps (for example Okta or Google Workspace). Once connected, Lumos syncs that app’s accounts and entitlements so you can review and manage access. With this API you can browse the catalog of integrations you can connect, discover what each one needs to connect, connect one by supplying its credentials, trigger a sync on demand, reconnect one to rotate its credentials, and disconnect one. To see the integrations you’ve already connected (for example to reconcile state from Terraform), use the Apps API: GET /v1/apps?connection_source=API lists the integrations you connected through this API.Before you start
You need:- An API token. Create one in the Lumos UI under Settings → API Tokens. The token is shown once - copy it somewhere safe. Examples below read it from a
LUMOS_ACCESS_TOKENenvironment variable. - Permission to manage integrations. A token acts as the user who created it, so that user must be an admin with permission to connect and remove integrations. Without it, calls return
403. - The base URL
https://api.lumos.com. All paths below are relative to it.
Authentication
Send your token as a bearer token in theAuthorization header on every request:
401.
Concept-to-endpoint map
Use this table to jump from what you’re trying to do to the right endpoint.Core workflow
1. Discover what you can connect
Before connecting anything, find the integration’sapp_class_id and learn what it needs to connect.
Browse or search the catalog of connectable integrations:
app_class_id is the canonical identifier you’ll pass when connecting. The list is paginated (?page=, ?size=) and ?query= filters by identifier or name.
Check the connection schema to see exactly which credentials (auth) and configuration (settings) the integration takes — and where each value goes:
auth_schema in the request’s auth object (secret fields are marked writeOnly) and every key from settings_schema in settings. Here, Okta takes an api_key credential and its tenant domain as settings.app_instance_identifier. Other integrations use different keys — some name the tenant differently (e.g. sub), some derive it from the credentials and need no setting at all, and some nest auth per authentication method when the integration supports several. An empty auth_schema means no credentials are supplied up front: the connection is completed via browser consent in the Lumos UI.
2. Connect an integration
Precondition: theapp_class_id and connection schema from step 1, and valid credentials for the app.
Send the identifier in app_class_id, credentials in auth, and non-secret configuration in settings — shaped exactly as the connection schema describes:
201 Created response returns the connected integration in the same App shape as the rest of the API. When the credentials are complete, the first sync starts automatically:
App shape also carries catalog metadata such as category, description, and logo_url.)
Save the id - you’ll use it to look up, sync, reconnect, or disconnect the integration. instance_id is the tenant/instance Lumos resolved for the connection — either the value you configured or one derived from the credentials.
OAuth and Merge apps connect in two steps. For those, the API call starts the connection but doesn’t complete it — finish authorizing the connection in the Lumos UI. No sync runs until you do.
3. Configure its fields
You set an integration’s fields when you connect it: credentials inauth and non-secret configuration in settings (see the field reference).
Precondition: the integration id from step 2.
To change those fields later — for example to rotate an API key — send the new values to PUT /v1/apps/{id}. The app_class_id must match the existing integration:
200 OK response returns the integration in the same shape as connect. If a sync is already running for the integration, the reconnect is throttled with 429 and a Retry-After header (seconds) — wait that long and retry.
4. Trigger a sync
Lumos starts a sync automatically whenever a connect or reconnect completes successfully. To run a sync on demand afterwards — for example from a scheduled job, or right after Terraform connects the integration — callPOST /v1/apps/{id}/sync with the sync_type you want. Today the only supported value is full_sync (a full re-pull of accounts, groups, and entitlements):
202 Accepted confirms it was launched — it does not wait for the sync to finish:
409 Conflict— a sync is already in progress. Wait for the running sync to finish, then retry. A409is also returned when the integration isn’t connected yet, or when its first sync is deferred pending an admin review in the Lumos UI.422 Unprocessable Entity— manual/CSV apps can’t be synced this way.
5. List what you’ve connected
The Apps API is the read path. Fetch a single integration by theid you saved from connect, or list everything you connected through this API. Responses never return credentials.
App shape as connect (trimmed here):
disconnected: false means the integration is connected (its credentials are stored); after you disconnect it, it reads true.
To list every integration you connected through this API at once, use the connection_source filter:
6. Disconnect
Disconnecting removes the integration’s stored credentials. Precondition: the integrationid.
200 OK response confirms the disconnect — the app is no longer connected but remains available to reconnect later:
Field reference
These are the fields you provide when connecting or reconnecting an integration (POST / PUT). Discover the exact keys each integration accepts via GET /v1/integrations/{app_class_id}/connection-schema.
What you get back
Responses never include credentials. Connect/reconnect return the connected integration in the sameApp shape as the rest of the API — most relevantly id, app_class_id, instance_id (the resolved tenant/instance), and disconnected — plus catalog metadata. The Apps API (GET /v1/apps) returns the same shape.
Handling errors
Errors return the relevant HTTP status and a JSON body with a human-readabledetail, plus machine-readable type and code fields your automation can branch on:
Next steps
- Browse the integrations you can connect with
GET /v1/integrations, and check each one’sconnection-schemabefore connecting. - Audit what you’ve connected through this API with
GET /v1/apps?connection_source=API. - Rotate credentials on a schedule by reconnecting with
PUT /v1/apps/{id}. - See the full API reference at API reference.