Every API here is available over the APIs.io API and to AI agents over MCP.
{"openapi":"3.1.0","info":{"title":"Lumos","description":"\n The Lumos API gives you the building blocks to administer and extend Lumos programmatically.\n Our REST API provides a management interface for the AppStore and a read interface\n for the Lumos Core.\n Go to https://developers.lumos.com to see our complete documentation.\n","version":"0.1.0"},"servers":[{"url":"https://api.lumos.com"}],"paths":{"/apps":{"get":{"tags":["Core"],"summary":"Get Apps","description":"List all of your company's apps.","operationId":"listApps","security":[{"HTTPBearer":[]}],"parameters":[{"name":"name_search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search against name, app instance identifier, and app class ID.","title":"Name Search"},"description":"Search against name, app instance identifier, and app class ID."},{"name":"exact_match","in":"query","required":false,"schema":{"type":"boolean","description":"Search filter should be an exact match.","default":false,"title":"Exact Match"},"description":"Search filter should be an exact match."},{"name":"connection_source","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ConnectionSource"},{"type":"null"}],"description":"Filter to integration apps connected via this source (`API` or `UI`).","title":"Connection Source"},"description":"Filter to integration apps connected via this source (`API` or `UI`)."},{"name":"disconnected","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter on whether the app has been disconnected. `false` excludes disconnected apps, `true` returns only disconnected apps whose record Lumos still holds, and omitting it lists every app. Pair `false` with `connection_source=API` to reconcile the integrations you manage from automation such as Terraform.","title":"Disconnected"},"description":"Filter on whether the app has been disconnected. `false` excludes disconnected apps, `true` returns only disconnected apps whose record Lumos still holds, and omitting it lists every app. Pair `false` with `connection_source=API` to reconcile the integrations you manage from automation such as Terraform."},{"name":"expand","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Fields to expand. Supported fields: custom_attributes.","title":"Expand"},"description":"Fields to expand. Supported fields: custom_attributes."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Page size","default":50,"title":"Size"},"description":"Page size"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_AppWithCustomAttributes_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Core"],"summary":"Create App","description":"Create a new custom app, or connect an integration app.\n\nWith a `name`/`category`/`description` body this creates a custom app. With an `app_class_id` body it connects the integration identified by `app_class_id` using the credentials in `auth` — integrations that validate in-band connect immediately and trigger an initial sync, while integrations that require browser consent are finished in the Lumos UI. Custom apps and integrations created here are both marked `connection_source=API`; list your API-managed apps with `GET /apps?connection_source=API&disconnected=false`.","operationId":"createApp","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppInputCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/App"}}}},"400":{"description":"Bad request — the request could not be processed. Common causes: missing or malformed credentials, an unknown `app_class_id`, or an invalid configuration value. See the `detail` field for the specific reason."},"403":{"description":"Forbidden — the caller lacks permission to manage apps on this domain."},"501":{"description":"Not implemented — this app does not support the requested operation."},"404":{"description":"Not found — no integration with this `app_class_id` is available to your domain."},"409":{"description":"Conflict — an instance for this app already exists in the domain."},"502":{"description":"Bad gateway — the third-party service rejected the credentials, or the post-connect sync failed."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/apps/categories":{"get":{"tags":["Core"],"summary":"Get App Categories","description":"Get app categories.","operationId":"getAppCategories","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Response Getappcategories"}}}}},"security":[{"HTTPBearer":[]}]}},"/apps/{app_id}":{"get":{"tags":["Core"],"summary":"Get App","description":"Get an app by id.","operationId":"getApp","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"expand","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Fields to expand. Supported fields: custom_attributes.","title":"Expand"},"description":"Fields to expand. Supported fields: custom_attributes."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppWithCustomAttributes"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Core"],"summary":"Update App","description":"Update domain-specific app metadata overrides. This updates the app instance in your domain, not the shared Lumos app catalog.","operationId":"updateApp","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppInputUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/App"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Core"],"summary":"Reconnect App","description":"Update an app in place: apply domain-specific metadata overrides (the same fields as `PATCH /apps/{app_id}`) and/or rotate an integration's credentials. Providing `auth`/`settings`/`version` (with the matching `app_class_id`) reconnects the app: credentials are always overwritten and re-validated, and a sync is triggered — like connect, the app either connects in-band or awaits browser consent in the Lumos UI, and while a sync is in flight the request is throttled with `429` and a `Retry-After` header. Metadata-only bodies (custom apps, or integrations without credential changes) never touch credentials.","operationId":"reconnectApp","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppInputPut"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/App"}}}},"400":{"description":"Bad request — the request could not be processed. Common causes: missing or malformed credentials, an unknown `app_class_id`, or an invalid configuration value. See the `detail` field for the specific reason."},"403":{"description":"Forbidden — the caller lacks permission to manage apps on this domain."},"501":{"description":"Not implemented — this app does not support the requested operation."},"404":{"description":"Not found — no app with this id in your domain."},"409":{"description":"Conflict — credentials were provided for an app that is not managed via the API (`connection_source` is not `API`), so it cannot be reconnected here."},"429":{"description":"Too many requests — a sync is already in flight for this app. Includes a `Retry-After` header (seconds)."},"502":{"description":"Bad gateway — the third-party service rejected the credentials, or the post-reconnect sync failed."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Core"],"summary":"Disconnect App","description":"Disconnect an API-managed app. For integrations this removes the stored credentials and returns the app to a connectable state; for custom apps it removes the app. In both cases, when no users remain the underlying record is also deleted where possible (a record still referenced by other Lumos data is kept, disconnected). Reconnect an integration later with `PUT /apps/{app_id}`. Returns 404 if `app_id` is unknown in the caller's organization.","operationId":"disconnectApp","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisconnectIntegrationOutput"}}}},"400":{"description":"Bad request — the request could not be processed. Common causes: missing or malformed credentials, an unknown `app_class_id`, or an invalid configuration value. See the `detail` field for the specific reason."},"403":{"description":"Forbidden — the caller lacks permission to manage apps on this domain."},"501":{"description":"Not implemented — this app does not support the requested operation."},"404":{"description":"Not found — no app with this id in your domain."},"409":{"description":"Conflict — the app is not managed via the API (`connection_source` is not `API`), so it cannot be disconnected here."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/apps/{app_id}/settings":{"get":{"tags":["Core"],"summary":"Get Appstore App Settings","description":"Get App settings.","operationId":"getAppSettings","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppSettingOutput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Core"],"summary":"Update Domain App Appstore Settings","description":"Update app settings.","operationId":"updateAppSettings","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppSettingInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppSettingOutput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/current":{"get":{"tags":["Core"],"summary":"Get Current User","description":"Get current user","operationId":"currentUser","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}}},"security":[{"HTTPBearer":[]}]}},"/users":{"get":{"tags":["Core"],"summary":"Get Users","description":"List all of your company's users.","operationId":"listUsers","security":[{"HTTPBearer":[]}],"parameters":[{"name":"search_term","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search for users by name or email.","title":"Search Term"},"description":"Search for users by name or email."},{"name":"exact_match","in":"query","required":false,"schema":{"type":"boolean","description":"If a search_term is provided, only accept exact matches.","default":false,"title":"Exact Match"},"description":"If a search_term is provided, only accept exact matches."},{"name":"expand","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Fields to expand. Supported fields: custom_attributes.","title":"Expand"},"description":"Fields to expand. Supported fields: custom_attributes."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Page size","default":50,"title":"Size"},"description":"Page size"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_UserWithCustomAttributes_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/{user_id}":{"get":{"tags":["Core"],"summary":"Get User","description":"Get user by id.","operationId":"getUser","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"expand","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Fields to expand. Supported fields: custom_attributes.","title":"Expand"},"description":"Fields to expand. Supported fields: custom_attributes."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserWithCustomAttributes"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/{user_id}/accounts":{"get":{"tags":["Core"],"summary":"Get User Accounts","description":"Get a list of Accounts for this user","operationId":"getUserAccounts","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"expand","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Fields to expand. Supported fields: app.","title":"Expand"},"description":"Fields to expand. Supported fields: app."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Page size","default":50,"title":"Size"},"description":"Page size"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_Account_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/inline_webhooks":{"get":{"tags":["Core"],"summary":"Get Inline Webhooks","description":"Get available webhooks","operationId":"get_inline_webhooks_inline_webhooks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/InlineWebhook"},"type":"array","title":"Response Get Inline Webhooks Inline Webhooks Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/accounts":{"get":{"tags":["Core"],"summary":"Get Accounts","description":"Get all accounts associated with apps at your company.","operationId":"getAccounts","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Id"}},{"name":"discovered_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Discovered Before"}},{"name":"discovered_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Discovered After"}},{"name":"sources","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/DiscoverySource"}},{"type":"null"}],"title":"Sources"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/AccountLifecycleStatus"}},{"type":"null"}],"title":"Status"}},{"name":"expand","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Fields to expand. Supported fields: app.","title":"Expand"},"description":"Fields to expand. Supported fields: app."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/groups/{group_id}/users":{"get":{"tags":["Core"],"summary":"Get Group Membership","description":"Get user members by group ID.","operationId":"getGroupMembership","security":[{"HTTPBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Page size","default":50,"title":"Size"},"description":"Page size"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_User_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/groups/{group_id}":{"get":{"tags":["Core"],"summary":"Get Group","description":"Get group by ID.","operationId":"getGroup","security":[{"HTTPBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Group"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/groups":{"get":{"tags":["Core"],"summary":"Get Groups","description":"Get groups synced from connected integrations","operationId":"getGroups","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_specific_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filters groups by integration specific ID, e.g. the group's Okta ID.","title":"Integration Specific Id"},"description":"Filters groups by integration specific ID, e.g. the group's Okta ID."},{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filters groups by name.","title":"Name"},"description":"Filters groups by name."},{"name":"exact_match","in":"query","required":false,"schema":{"type":"boolean","description":"Search filter should be an exact match.","default":false,"title":"Exact Match"},"description":"Search filter should be an exact match."},{"name":"app_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filters groups by the ID of the app to which they belong.","title":"App Id"},"description":"Filters groups by the ID of the app to which they belong."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Page size","default":50,"title":"Size"},"description":"Page size"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_Group_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/accounts/upload/{job_id}":{"get":{"tags":["Core"],"summary":"Get Upload Job State","description":"Get state of an account upload job.","operationId":"getUploadJobState","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobStateOutput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/activity_logs":{"get":{"tags":["Core"],"summary":"Get Activity Logs","description":"Get activity logs.","operationId":"getActivityLogs","security":[{"HTTPBearer":[]}],"parameters":[{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since"}},{"name":"until","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Until"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Page size limit","default":50,"title":"Limit"},"description":"Page size limit"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Page offset","default":0,"title":"Offset"},"description":"Page offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LimitOffsetPage_ActivityLog_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/identity_events":{"get":{"tags":["Core"],"summary":"Get Identity Events","description":"Get user identity events.","operationId":"getIdentityEvents","security":[{"HTTPBearer":[]}],"parameters":[{"name":"identity_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter events tied to specific user UUIDs.","title":"Identity Ids"},"description":"Filter events tied to specific user UUIDs."},{"name":"changed_fields","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter events by changed field names, eg - 'title' or 'team'","title":"Changed Fields"},"description":"Filter events by changed field names, eg - 'title' or 'team'"},{"name":"start_time","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Time"}},{"name":"end_time","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Time"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentityEventsResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/apps/{app_id}/sync":{"post":{"tags":["Core"],"summary":"Trigger App Sync","description":"Trigger a sync for a connected app on demand (e.g. from automation, after Terraform has connected it). The sync runs asynchronously — the call returns `202 Accepted` once the sync is launched; poll `GET /apps/{app_id}` to follow status.\n\nRequires `sync_type` (only `full_sync` is supported today). The app must be connected or in an error state from a prior sync (so callers can retry after failure). Manual/CSV apps are not supported. Only one sync may run at a time: while a sync is in flight the request is rejected with `409` — wait for the running sync to finish, then retry.","operationId":"triggerAppSync","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncInput"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncOutput"}}}},"400":{"description":"Bad request — the request could not be processed. Common causes: missing or malformed credentials, an unknown `app_class_id`, or an invalid configuration value. See the `detail` field for the specific reason."},"403":{"description":"Forbidden — the caller lacks permission to manage apps on this domain."},"501":{"description":"Not implemented — this app does not support the requested operation."},"404":{"description":"Not found — no app with this id in your domain."},"409":{"description":"Conflict — a sync is already running for this app, the app is not in a syncable state, or its first sync is deferred pending admin review (match rules, or a flatfile column mapping) in the Lumos UI."},"422":{"description":"Unprocessable — `sync_type` is missing or not a supported value, or the app is a manual/CSV app, which cannot be synced via this endpoint."},"502":{"description":"Bad gateway — the downstream sync launch failed."}}}},"/integrations":{"get":{"tags":["Core"],"summary":"List Integrations","description":"List the integrations (apps) available to connect in your domain (paginated). Only connectable integrations are returned — catalog-only apps (e.g. discovered SaaS without a Lumos integration) are excluded. Returns catalog metadata only — name, category, and logo. Integrations you have connected are read via the Apps API (`GET /apps`).","operationId":"listIntegrations","security":[{"HTTPBearer":[]}],"parameters":[{"name":"query","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Case-insensitive substring filter over the integration's `app_class_id` and name. `google` matches both `workspace.google.com` and `cloud.google.com`.","title":"Query"},"description":"Case-insensitive substring filter over the integration's `app_class_id` and name. `google` matches both `workspace.google.com` and `cloud.google.com`."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Page size","default":50,"title":"Size"},"description":"Page size"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_IntegrationCatalogOutput_"}}}},"403":{"description":"Forbidden — the caller lacks permission to view integrations in this domain."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/{app_class_id}":{"get":{"tags":["Core"],"summary":"Get Integration","description":"Get a connectable integration (app) by its `app_class_id` (e.g. `okta.com`). Returns catalog metadata only; integrations you have connected are read via the Apps API (`GET /apps`).","operationId":"getIntegration","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_class_id","in":"path","required":true,"schema":{"type":"string","title":"App Class Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationCatalogOutput"}}}},"403":{"description":"Forbidden — the caller lacks permission to view integrations in this domain."},"404":{"description":"Not found — no integration with this `app_class_id` in your domain."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/{app_class_id}/connection-schema":{"get":{"tags":["Core"],"summary":"Get Integration Connection Schema","description":"Get the connection schema for an integration — the JSON schema of the `auth` and `settings` fields needed to connect it via `POST /apps`. Use it to discover how to connect an integration *before* connecting it (e.g. to populate a Terraform resource). `app_class_id` is the canonical identifier (e.g. `okta.com`, `slack_ics`) — the same value the connect body uses. Integrations whose connection schema Lumos cannot describe yet return 404.","operationId":"getIntegrationConnectionSchema","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_class_id","in":"path","required":true,"schema":{"type":"string","title":"App Class Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationConnectionSchemaOutput"}}}},"403":{"description":"Forbidden — the caller lacks permission to view integrations in this domain."},"404":{"description":"Not found — no integration with this `app_class_id` is accessible to your domain, or no connection schema is available for it yet."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/accounts/upload":{"post":{"tags":["Core"],"summary":"Create Accounts","description":"Upload accounts to an app.","operationId":"postAccounts","requestBody":{"content":{"application/json":{"schema":{"properties":{"accounts":{"items":{"$ref":"#/components/schemas/AccountInput"},"type":"array","title":"Accounts","description":"Accounts to upload.","default":[]},"app_id":{"type":"string","title":"App Id","description":"The ID of the app to upload accounts to."}},"type":"object","required":["app_id"],"title":"AccountsUploadInput"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobStateOutput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/activity_records":{"post":{"tags":["Core"],"summary":"Update Activity Records","description":"Update the last_login or last_activity for a given account.","operationId":"activityRecords","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityRecordInput"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityRecordOutput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/activity_records/job/{job_id}":{"get":{"tags":["Core"],"summary":"Get Activity Records Job State","description":"Get the state of an activity records post-processing job.","operationId":"getActivityRecordsJobState","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"ap
# --- truncated at 32 KB (275 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/lumos/refs/heads/main/openapi/lumos-openapi.json