{"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 (soft-deleted): `false` excludes disconnected apps — combine with `connection_source=API` to reconcile the integrations you manage via the API (e.g. from Terraform); `true` returns only disconnected apps whose record remains. Omit to list all apps (default).","title":"Disconnected"},"description":"Filter on whether the app has been disconnected (soft-deleted): `false` excludes disconnected apps — combine with `connection_source=API` to reconcile the integrations you manage via the API (e.g. from Terraform); `true` returns only disconnected apps whose record remains. Omit to list all apps (default)."},{"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. The connected app is returned; 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."},"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":"Reconnect an integration app with new credentials (the credential-rotation path); the request `app_class_id` must match the existing app. Like connect, the app either connects in-band or awaits browser consent in the Lumos UI. If a sync is already in flight, the request is throttled with `429` and a `Retry-After` header.","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/ConnectIntegrationInput"}}}},"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 — the app 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 integration app: removes its stored credentials and returns it to a connectable state. When no users remain the underlying record is also deleted where possible (a record still referenced by other Lumos data is kept, disconnected). Reconnect 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"}}}}}}},"/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":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncTaskOutput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/{user_id}/roles":{"get":{"tags":["Core"],"summary":"Get User Roles","description":"Get the roles assigned to a specific user,\nensuring the user belongs to the specified domain.","operationId":"get_user_roles_users__user_id__roles_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/{user_id}/roles/{role_name}":{"post":{"tags":["Core"],"summary":"Add Role To User","description":"Add a role to a specific user, ensuring the user belongs to the specified domain.","operationId":"add_role_to_user_users__user_id__roles__role_name__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"role_name","in":"path","required":true,"schema":{"type":"string","title":"Role Name"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Core"],"summary":"Remove Role From User","description":"Remove a specific role from a user, ensuring the user belongs to the specified domain.","operationId":"remove_role_from_user_users__user_id__roles__role_name__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"role_name","in":"path","required":true,"schema":{"type":"string","title":"Role Name"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/appstore/apps/{app_id}/requestable_permissions":{"get":{"tags":["AppStore"],"summary":"Get Appstore Permissions For App","description":"Get AppStore permissions for an application.","operationId":"get_appstore_permissions_for_app_appstore_apps__app_id__requestable_permissions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","description":"Filters requestable permissions by the ID of the app to which they belong.","title":"App Id"},"description":"Filters requestable permissions by the ID of the app to which they belong."},{"name":"search_term","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"\n    Searches permissions by the permission's group name,\n    request configuration name, or specific integration ID.\n","title":"Search Term"},"description":"\n    Searches permissions by the permission's group name,\n    request configuration name, or specific integration ID.\n"},{"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":"in_app_store","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"\n    Filters permissions by visibility in the AppStore.\n","title":"In App Store"},"description":"\n    Filters permissions by visibility in the AppStore.\n"},{"name":"include_inherited_configs","in":"query","required":false,"schema":{"type":"boolean","description":"Include inherited configurations from parent app.","default":true,"title":"Include Inherited Configs"},"description":"Include inherited configurations from parent 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_RequestablePermissionOutput_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/appstore/requestable_permissions":{"get":{"tags":["AppStore"],"summary":"Get Appstore Permissions","description":"Get AppStore permissions for an application.","operationId":"get_appstore_permissions_appstore_requestable_permissions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"query","required":false,"schema":{"type":"string","description":"Filters requestable permissions by the ID of the app to which they belong.","title":"App Id"},"description":"Filters requestable permissions by the ID of the app to which they belong."},{"name":"search_term","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"\n    Searches permissions by the permission's group name,\n    request configuration name, or specific integration ID.\n","title":"Search Term"},"description":"\n    Searches permissions by the permission's group name,\n    request configuration name, or specific integration ID.\n"},{"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":"in_app_store","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"\n    Filters permissions by visibility in the AppStore.\n","title":"In App Store"},"description":"\n    Filters permissions by visibility in the AppStore.\n"},{"name":"include_inherited_configs","in":"query","required":false,"schema":{"type":"boolean","description":"Include inherited configurations from parent app.","default":true,"title":"Include Inherited Configs"},"description":"Include inherited configurations from parent 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_RequestablePermissionOutput_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["AppStore"],"summary":"Create Appstore Requestable Permission","description":"**Create a permission attached to an App in the AppStore.**\n\n\n*Required fields:*\n- app-identifier. The App should be identified either by app_id or app_class_id + app_instance_id.\n- label\n\n*Defaults:*\n- request_config:\n    - appstore_visibility: HIDDEN\n    - allowed_groups:\n        - type: ALL_GROUPS\n        - groups: []\n    - request_approval_config\n        - manager_approval: NONE\n        - request_approval_stages: []\n    - request_fulfillment_config\n        - manual_steps_needed: false\n- All other fields will have null values by default.","operationId":"create_appstore_requestable_permission_appstore_requestable_permissions_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"include_inherited_configs","in":"query","required":false,"schema":{"type":"boolean","description":"Include inherited configurations from parent app.","default":true,"title":"Include Inherited Configs"},"description":"Include inherited configurations from parent app."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestablePermissionInput"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestablePermissionOutput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/appstore/requestable_permissions/{permission_id}":{"get":{"tags":["AppStore"],"summary":"Get Appstore Permission","description":"Get an AppStore permission.","operationId":"get_appstore_permission_appstore_requestable_permissions__permission_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"permission_id","in":"path","required":true,"schema":{"type":"string","title":"Permission Id"}},{"name":"include_inherited_configs","in":"query","required":false,"schema":{"type":"boolean","description":"Include inherited configurations from parent app.","default":true,"title":"Include Inherited Configs"},"description":"Include inherited configurations from parent app."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestablePermissionOutput"}}}},"404":{"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["AppStore"],"summary":"Update Appstore Permission","description":"**Update an AppStore permission.**\n\n\nAll fields present in the payload will override the permission's data.\nAny missing fields will be disregarded.\n\n    Non-updatable fields for now:\n        request_config -> request_fulfillment_config -> provisioning_group","operationId":"update_appstore_permission_appstore_requestable_permissions__permission_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"permission_id","in":"path","required":true,"schema":{"type":"string","title":"Permission Id"}},{"name":"include_inherited_configs","in":"query","required":false,"schema":{"type":"boolean","description":"Include inherited configurations from parent app.","default":true,"title":"Include Inherited Configs"},"description":"Include inherited configurations from parent app."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestablePermissionInputUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestablePermissionOutput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["AppStore"],"summary":"Delete Appstore Permission","description":"Delete a requestable permission by ID.\n\n    Only permissions of type 'NATIVE' can be deleted.","operationId":"delete_appstore_permission_appstore_requestable_permissions__permission_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"permission_id","in":"path","required":true,"schema":{"type":"string","title":"Permission Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/appstore/pre_approval_rules":{"get":{"tags":["AppStore"],"summary":"Get Appstore Pre Approval Rules For App","description":"Get AppStore pre-approval rules for an app.","operationId":"get_appstore_pre_approval_rules_for_app_appstore_pre_approval_rules_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"query","required":false,"schema":{"type":"string","description":"Filters preapproval rules by the ID of the app to which they belong.","title":"App Id"},"description":"Filters preapproval rules 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_PreApprovalRuleOutput_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["AppStore"],"summary":"Create Pre Approval Rule","description":"Create a pre-approval rule attached to an App in the AppStore.","operationId":"create_pre_approval_rule_appstore_pre_approval_rules_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreApprovalRuleInput"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreApprovalRuleOutput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/appstore/pre_approval_rules/{pre_approval_rule_id}":{"get":{"tags":["AppStore"],"summary":"Get Appstore Pre Approval Rule","description":"Get an AppStore pre-approval rule.","operationId":"get_appstore_pre_approval_rule_appstore_pre_approval_rules__pre_approval_rule_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pre_approval_rule_id","in":"path","required":true,"schema":{"type":"string","title":"Pre Approval Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreApprovalRuleOutput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["AppStore"],"summary":"Update Pre Approval Rule","description":"**Update a pre-approval rule attached to an App in the AppStore.**\n\nAll fields present in the payload will override the pre-approval rule's data.\nAny missing fields will be disregarded.","operationId":"update_pre_approval_rule_appstore_pre_approval_rules__pre_approval_rule_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pre_approval_rule_id","in":"path","required":true,"schema":{"type":"string","title":"Pre Approval Rule Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreApprovalRuleUpdateInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreApprovalRuleOutput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["AppStore"],"summary":"Delete Pre Approval Rule","description":"Delete a pre-approval rule by ID.","operationId":"delete_pre_approval_rule_appstore_pre_approval_rules__pre_approval_rule_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pre_approval_rule_id","in":"path","required":true,"schema":{"type":"string","title":"Pre Approval Rule Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/appstore/apps/{app_id}/settings":{"get":{"tags":["AppStore"],"summary":"Get Appstore App Settings","description":"Get AppStore app settings.","operationId":"getAppStoreAppSettings","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/AppStoreAppSettingsOutput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["AppStore"],"summary":"Update Appstore App Settings","description":"Update AppStore app settings.","operationId":"updateAppStoreAppSettings","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/AppStoreAppSettingsInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppStoreAppSettingsOutput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/appstore/apps":{"post":{"tags":["AppStore"],"summary":"Add App To Appstore","description":"Add app to AppStore with given settings.","operationId":"addAppToAppStore","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddAppToAppStoreInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppStoreAppSettingsOutput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["AppStore"],"summary":"Get Appstore Apps","description":"List all AppStore apps.","operationId":"getAppStoreApps","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filters apps by the ID of the app.","title":"App Id"},"description":"Filters apps by the ID of the app."},{"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":"all_visibilities","in":"query","required":false,"schema":{"type":"boolean","description":"Get all apps in the AppStore regardless of visibility. Only available to admins.","default":false,"title":"All Visibilities"},"description":"Get all apps in the AppStore regardless of visibility. Only available to admins."},{"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_AppStoreApp_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/appstore/apps/{app_id}":{"delete":{"tags":["AppStore"],"summary":"Remove App From Appstore","description":"Remove app from AppStore.","operationId":"removeAppFromAppStore","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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["AppStore"],"summary":"Get Appstore App","description":"Get AppStore app.","operationId":"getAppStoreApp","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/AppStoreApp"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/appstore/access_requests/{id}":{"delete":{"tags":["AppStore"],"summary":"Cancel Access Request","description":"Cancel an access request.","operationId":"cancelAccessRequest","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}},{"name":"reason","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Reason for cancellation.","title":"Reason"},"description":"Reason for cancellation."}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["AppStore"],"summary":"Get Access Request","description":"Get access request by ID.","operationId":"getAccessRequest","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}},{"name":"expand","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Fields to expand. Supported values: tasks, custom_fields.","title":"Expand"},"description":"Fields to expand. Supported values: tasks, custom_fields."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessRequest"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/appstore/access_request":{"post":{"tags":["AppStore"],"summary":"Create Access Request","description":"Create a request to access a specific permission in the appstore.","operationId":"createAccessRequest","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAccessRequestInput"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AccessRequest"},"type":"array","title":"Response Createaccessrequest"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/appstore/access_requests":{"get":{"tags":["AppStore"],"summary":"Get Access Requests","description":"Get all access requests for the current organization.","operationId":"getAccessRequests","security":[{"HTTPBearer":[]}],"parameters":[{"name":"target_user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filters requests by the ID of the target user.","title":"Target User Id"},"description":"Filters requests by the ID of the target user."},{"name":"requester_user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filters requests by the ID of the requesting user.","title":"Requester User Id"},"description":"Filters requests by the ID of the requesting user."},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filters requests by the ID of the user.","title":"User Id"},"description":"Filters requests by the ID of the user."},{"name":"statuses","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/SupportRequestStatus"}},{"type":"null"}],"description":"Filters requests by their status. Possible values: 'PENDING', 'PENDING_MANAGER_APPROVAL', 'MANAGER_APPROVED', 'MANAGER_DENIED', 'PENDING_APPROVAL', 'APPROVED', 'DENIED', 'EXPIRED', 'CANCELLED', 'PENDING_PROVISIONING', 'PENDING_MANUAL_PROVISIONING', 'DENIED_PROVISIONING', 'PROVISIONED', 'PENDING_DEPROVISIONING', 'PENDING_MANUAL_DEPROVISIONING', 'TIME_BASED_EXPIRED', 'COMPLETED', 'REVERTING', 'REVERTED', 'TIME_BASED_EXPIRED_FAILED', 'TIME_BASED_EXPIRED_CANCELLED'","title":"Statuses"},"description":"Filters requests by their status. Possible values: 'PENDING', 'PENDING_MANAGER_APPROVAL', 'MANAGER_APPROVED', 'MANAGER_DENIED', 'PENDING_APPROVAL', 'APPROVED', 'DENIED', 'EXPIRED', 'CANCELLED', 'PENDING_PROVISIONING', 'PENDING_MANUAL_PROVISIONING', 'DENIED_PROVISIONING', 'PROVISIONED', 'PENDING_DEPROVISIONING', 'PENDING_MANUAL_DEPROVISIONING', 'TIME_BASED_EXPIRED', 'COMPLETED', 'REVERTING', 'REVERTED', 'TIME_BASED_EXPIRED_FAILED', 'TIME_BASED_EXPIRED_CANCELLED'"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"Sort access requests ascending (ASC) or descending (DESC) by created date.","default":"ASC","title":"Sort"},"description":"Sort access requests ascending (ASC) or descending (DESC) by created date."},{"name":"expand","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Fields to expand. Supported values: tasks, custom_fields.","title":"Expand"},"description":"Fields to expand. Supported values: tasks, custom_fields."},{"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_AccessRequest_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/access_policies":{"get":{"tags":["Core"],"summary":"Get Access Policies","description":"Get all access policies. Results are sorted by created time descending by default.","operationId":"getAccessPolicies","security":[{"HTTPBearer":[]}],"parameters":[{"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"},{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by policy name (case insensitive)","title":"Name"},"description":"Filter by policy name (case insensitive)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_AccessPolicyOutput_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Core"],"summary":"Create Access Policy","description":"Create a new access policy.","operationId":"createAccessPolicy","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessPolicyInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessPolicyOutput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/access_policies/{access_policy_id}":{"get":{"tags":["Core"],"summary":"Get Access Policy","description":"Get an access policy by ID.","operationId":"getAccessPolicy","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_policy_id","in":"path","required":true,"schema":{"type":"string","title":"Access Policy Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessPolicyOutput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Core"],"summary":"Delete Access Policy","description":"Delete an access policy by ID.","operationId":"deleteAccessPolicy","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_policy_id","in":"path","required":true,"schema":{"type":"string","title":"Access Policy Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Core"],"summary":"Update Access Policy","description":"Update an access policy by ID.","operationId":"updateAccessPolicy","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_policy_id","in":"path","required":true,"schema":{"type":"string","title":"Access Policy Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessPolicyInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessPolicyOutput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/access_reviews":{"post":{"tags":["Access Reviews"],"summary":"Create Access Review","description":"Create a new access review campaign.\n\nThe review's initial status depends on whether apps are provided:\n\n- **With apps**: the review starts in `IN_PREPARATION` while account and entitlement snapshots are taken. Status automatically transitions to `IN_PROGRESS` once snapshotting completes.\n- **Without apps**: the review is created directly in `IN_PROGRESS`.\n\nPoll `GET /access_reviews/{id}` to observe the status transition. To add apps after creation, use `POST /access_reviews/{id}/apps` (allowed on any status except `COMPLETED`).","operationId":"createAccessReview","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAccessReviewInput"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAccessReviewOutput"}}}},"400":{"description":"Validation error — the request violated a business rule (e.g. duplicate review name, deadline in the past, review not in the required status for this operation)."},"403":{"description":"Forbidden — the caller lacks permission to create or manage access reviews. Requires the Access Review Administrator or App Admin role on the domain."},"404":{"description":"Not found — the referenced review / app does not exist."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Access Reviews"],"summary":"List Access Reviews","description":"List access reviews for your organization. Paginated via standard `page` + `size` query params — `size` is capped at 100; requests over the cap return 422.","operationId":"listAccessReviews","security":[{"HTTPBearer":[]}],"parameters":[{"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_AccessReviewOutput_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/access_reviews/{access_review_id}/apps":{"post":{"tags":["Access Reviews"],"summary":"Add Apps To Access Review","description":"Add apps to an existing access review. Allowed on any review that is not yet `COMPLETED`. Soft-errors on invalid or duplicate domain app UUIDs — per-app failures are returned in the `errors` array rather than raising.","operationId":"addAppsToAccessReview","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_review_id","in":"path","required":true,"schema":{"type":"string","title":"Access Review Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddAppsInput"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddAppsOutput"}}}},"400":{"description":"Validation error — the request violated a business rule (e.g. duplicate review name, deadline in the past, review not in the required status for this operation)."},"403":{"description":"Forbidden — the caller lacks permission to create or manage access reviews. Requires the Access Review Administrator or App Admin role on the domain."},"404":{"description":"Not found — the referenced review / app does not exist."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/access_reviews/{access_review_id}":{"delete":{"tags":["Access Reviews"],"summary":"Delete Access Review","description":"Soft-delete an access review campaign. Fails with 400 if a review duplication is currently in progress.","operationId":"deleteAccessReview","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_review_id","in":"path","required":true,"schema":{"type":"string","title":"Access Review Id"}}],"responses":{"204":{"description":"Successful Response"},"400":{"description":"Validation error — the request violated a business rule (e.g. duplicate review name, deadline in the past, review not in the required status for this operation)."},"403":{"description":"Forbidden — the caller lacks permission to create or manage access reviews. Requires the Access Review Administrator or App Admin role on the domain."},"404":{"description":"Not found — the referenced review / app does not exist."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Access Reviews"],"summary":"Get Access Review","description":"Get an access review by ID.","operationId":"getAccessReview","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_review_id","in":"path","required":true,"schema":{"type":"string","title":"Access Review Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessReviewOutput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Access Reviews"],"summary":"Update Access Review","description":"Update an existing access review campaign. Top-level fields are editable on any review that is not yet `COMPLETED`. Per-app (`apps[].scope_filters`) edits are only accepted while the ARDA is still in `IN_PREPARATION` or `ASSIGNING_REVIEWERS` status.","operationId":"updateAccessReview","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_review_id","in":"path","required":true,"schema":{"type":"string","title":"Access Review Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAccessReviewInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessReviewOutput"}}}},"400":{"description":"Validation error — the request violated a business rule (e.g. duplicate review name, deadline in the past, review not in the required status for this operation)."},"403":{"description":"Forbidden — the caller lacks permission to create or manage access reviews. Requires the Access Review Administrator or App Admin role on the domain."},"404":{"description":"Not found — the referenced review / app does not exist."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/access_reviews/{access_review_id}/apps/{arda_id}":{"delete":{"tags":["Access Reviews"],"summary":"Delete Access Review App","description":"Soft-delete an app from an access review campaign. Fails with 400 if the review is already `COMPLETED`.","operationId":"deleteAccessReviewApp","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_review_id","in":"path","required":true,"schema":{"type":"string","title":"Access Review Id"}},{"name":"arda_id","in":"path","required":true,"schema":{"type":"string","title":"Arda Id"}}],"responses":{"204":{"description":"Successful Response"},"400":{"description":"Validation error — the request violated a business rule (e.g. duplicate review name, deadline in the past, review not in the required status for this operation)."},"403":{"description":"Forbidden — the caller lacks permission to create or manage access reviews. Requires the Access Review Administrator or App Admin role on the domain."},"404":{"description":"Not found — the referenced review / app does not exist."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/access_reviews/scope_options":{"get":{"tags":["Access Reviews"],"summary":"Get Scope Options Endpoint","description":"Get available scope filter options for a domain app or ARDA.\n\nTo use these in `scope_filters` on a create/edit request, copy an item's `value` (and `name`) verbatim — `value` is the machine-matchable identifier, while `label` is display-only. Posting a `label` as a `value` (or any value not present here) is rejected.\n\nACCOUNT_ENTITLEMENT groups are split per `entitlement_type_label` (e.g. 'Roles', 'Groups'), with each group's `items` capped at 1000 entitlement labels. Groups whose underlying bucket exceeds the cap set `truncated: true` so callers know some valid labels are not present in the response.","operationId":"getScopeOptions","security":[{"HTTPBearer":[]}],"parameters":[{"name":"domain_app_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain App Id"}},{"name":"arda_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Arda Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScopeOptionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/knowledge/context":{"get":{"tags":["Knowledge"],"summary":"List Knowledge Context","description":"List knowledge entries for the caller's domain with optional filters and cursor pagination.\n\nPass the `next_cursor` from a previous response back as `cursor` to retrieve the next page.","operationId":"listKnowledgeContext","security":[{"HTTPBearer":[]}],"parameters":[{"name":"title_search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Case-insensitive substring match against knowledge entry titles.","title":"Title Search"},"description":"Case-insensitive substring match against knowledge entry titles."},{"name":"product_scopes","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/KnowledgeProductScope"}},{"type":"null"}],"description":"Filter to entries tagged with any of these product scopes.","title":"Product Scopes"},"description":"Filter to entries tagged with any of these product scopes."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Maximum number of entries to return. Capped at 25.","default":10,"title":"Limit"},"description":"Maximum number of entries to return. Capped at 25."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque pagination cursor from a previous listKnowledgeContext response.","title":"Cursor"},"description":"Opaque pagination cursor from a previous listKnowledgeContext response."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListKnowledgeContextOutput"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Conflict"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Too Many Requests"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Knowledge"],"summary":"Create Knowledge Context","description":"Create a new knowledge entry in the caller's domain.\n\nSend as `multipart/form-data`. The `file` field is optional — omit it to create an entry without an attachment.","operationId":"createKnowledgeContext","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_createKnowledgeContext"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeContextOutput"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"description":"Forbidden — caller lacks the Knowledge Hub manage permission."},"404":{"description":"Not found — the referenced knowledge entry does not exist."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Conflict"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Too Many Requests"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/knowledge/context/{knowledge_context_id}":{"get":{"tags":["Knowledge"],"summary":"Get Knowledge Context","description":"Get a single knowledge entry by ID.","operationId":"getKnowledgeContext","security":[{"HTTPBearer":[]}],"parameters":[{"name":"knowledge_context_id","in":"path","required":true,"schema":{"type":"string","title":"Knowledge Context Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeContextOutput"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Conflict"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Too Many Requests"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Knowledge"],"summary":"Update Knowledge Context","description":"Patch an existing knowledge entry. Only supplied (non-empty) fields are updated.\n\nTag and scope lists replace existing values entirely — they do not append.\n\nSend as `multipart/form-data`. To replace the attached file, include a `file` field. To remove the existing file without uploading a new one, set `clear_attachment=true`.","operationId":"updateKnowledgeContext","security":[{"HTTPBearer":[]}],"parameters":[{"name":"knowledge_context_id","in":"path","required":true,"schema":{"type":"string","title":"Knowledge Context Id"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_updateKnowledgeContext"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeContextOutput"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"description":"Forbidden — caller lacks the Knowledge Hub manage permission."},"404":{"description":"Not found — the referenced knowledge entry does not exist."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Conflict"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Too Many Requests"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Knowledge"],"summary":"Delete Knowledge Context","description":"Archive (soft-delete) a knowledge entry. The entry is marked ARCHIVED and will no longer appear in list results. This action is reversible at the database level.","operationId":"deleteKnowledgeContext","security":[{"HTTPBearer":[]}],"parameters":[{"name":"knowledge_context_id","in":"path","required":true,"schema":{"type":"string","title":"Knowledge Context Id"}}],"responses":{"204":{"description":"Successful Response"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"description":"Forbidden — caller lacks the Knowledge Hub manage permission."},"404":{"description":"Not found — the referenced knowledge entry does not exist."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Conflict"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Too Many Requests"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/vendor_agreements":{"get":{"tags":["Vendor Management"],"summary":"Get Vendor Agreements","description":"List all of your company's vendor agreements.","operationId":"listVendorAgreements","security":[{"HTTPBearer":[]}],"parameters":[{"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_VendorAgreement_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/vendor_agreements/{vendor_agreement_id}/custom_attributes/{label}":{"put":{"tags":["Vendor Management"],"summary":"Update Vendor Agreement Custom Attribute","description":"Update a custom attribute attached to a vendor agreement.","operationId":"updateVendorAgreementCustomAttribute","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vendor_agreement_id","in":"path","required":true,"schema":{"type":"string","title":"Vendor Agreement Id"}},{"name":"label","in":"path","required":true,"schema":{"type":"string","title":"Label"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VendorAgreementCustomAttributeUpdateInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VendorAgreementCustomAttribute-Output"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/found_documents":{"post":{"tags":["Vendor Management"],"summary":"Upload Found Documents","description":"Upload a newly discovered document (e.g. Order Form, Quote) to Lumos for review","operationId":"createFoundDocument","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FoundDocumentsUpload","properties":{"unique_identifier":{"type":"string","title":"Unique Identifier","description":"A unique identifier for the contract being uploaded. This can be an ID from an external system like Coupa, an internal ID such as a PO number, or simply the name of the file."},"files":{"items":{"properties":{"type":{"type":"string"},"value":{"type":"string"}},"type":"object"},"type":"array","title":"Files","description":"A list of publicly accessible URLs that direct to files related to a Vendor Agreement. For example, the Order Form, Quote, MSA, or Terms and Conditions."},"vendor_name":{"type":"string","title":"Vendor Name","description":"The name of the vendor associated with this document"},"start_date":{"type":"string","format":"date","title":"Start Date","description":"The start date of the attached contract"},"end_date":{"type":"string","format":"date","title":"End Date","description":"The end date of the attached contract"},"source_app_id":{"type":"string","title":"Source App ID","description":"The ID of the app that sourced this document. For example, if you are using this API to create a custom Google Drive integration, you might include the ID for the Google Workspaceapp in Lumos. This determines which app's logo is displayed in Lumos."},"total_cost":{"allOf":[{"$ref":"#/components/schemas/Cost"}],"title":"Total Cost","description":"The total cost of the contract. If this is a multi-year contract, this should include the cost for future years."}},"type":"object","required":["unique_identifier","files"]}},"multipart/form-data":{"schema":{"properties":{"unique_identifier":{"type":"string","title":"Unique Identifier","description":"A unique identifier for the contract being uploaded. This can be an ID from an external system like Coupa, an internal ID such as a PO number, or simply the name of the file."},"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files","description":"A list of files related to a vendor agreement. For example, the Order Form, Quote, MSA, or Terms and Conditions."},"vendor_name":{"type":"string","title":"Vendor Name","description":"The name of the vendor associated with this document"},"start_date":{"type":"string","format":"date","title":"Start Date","description":"The start date of the attached contract"},"end_date":{"type":"string","format":"date","title":"End Date","description":"The end date of the attached contract"},"source_app_id":{"type":"string","title":"Source App ID","description":"The ID of the app that sourced this document. For example, if you are using this API to create a custom Google Drive integration, you might include the ID for the Google Workspaceapp in Lumos. This determines which app's logo is displayed in Lumos."}},"type":"object","required":["unique_identifier","files"]}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/orders":{"post":{"tags":["Vendor Management"],"summary":"Upload Order","description":"Upload a newly discovered document (e.g. Order Form, Quote) to Lumos","operationId":"createOrder","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderInput"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/tasks":{"get":{"tags":["Tasks"],"summary":"List Tasks","description":"List tasks visible to the current user.\n\nCombine `task_category`, `product_area`, and `status` to find the tasks you care about:\n\n- **Pending access-request approvals**:\n  `GET /tasks?task_category=APPROVAL&product_area=APPSTORE&status=PENDING`\n\nPass `expand=actions` or `expand=assignees` to hydrate those fields on each result.\nAdmins may pass `show_all_tasks=true` to list tasks across the whole domain rather than\njust the caller's assigned set.","operationId":"list_tasks_tasks_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"show_all_tasks","in":"query","required":false,"schema":{"type":"boolean","description":"Show all tasks in the domain (admin only).","default":false,"title":"Show All Tasks"},"description":"Show all tasks in the domain (admin only)."},{"name":"task_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by task type.","title":"Task Type"},"description":"Filter by task type."},{"name":"task_category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by task category.","title":"Task Category"},"description":"Filter by task category."},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by task status.","title":"Status"},"description":"Filter by task status."},{"name":"product_area","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by product area.","title":"Product Area"},"description":"Filter by product area."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search string.","title":"Search"},"description":"Search string."},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort field (createdAt, taskType, app, targetUser).","title":"Sort By"},"description":"Sort field (createdAt, taskType, app, targetUser)."},{"name":"sort_direction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort direction (asc, desc).","title":"Sort Direction"},"description":"Sort direction (asc, desc)."},{"name":"expand","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Fields to expand: actions, assignees.","title":"Expand"},"description":"Fields to expand: actions, assignees."},{"name":"assigned_identity_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter by assigned user IDs","title":"Assigned Identity Ids"},"description":"Filter by assigned user IDs"},{"name":"assigned_group_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter by assigned group IDs","title":"Assigned Group Ids"},"description":"Filter by assigned group IDs"},{"name":"access_request_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by access request ID.","title":"Access Request Id"},"description":"Filter by access request 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_Task_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tasks/{task_id}":{"get":{"tags":["Tasks"],"summary":"Get Task","description":"Get a task by ID.","operationId":"get_task_tasks__task_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","description":"The ID of the task.","title":"Task Id"},"description":"The ID of the task."},{"name":"expand","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Fields to expand: actions, assignees, comments.","title":"Expand"},"description":"Fields to expand: actions, assignees, comments."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tasks/{task_id}/actions":{"get":{"tags":["Tasks"],"summary":"Get Task Actions","description":"Get available actions for a task.","operationId":"get_task_actions_tasks__task_id__actions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","description":"The ID of the task.","title":"Task Id"},"description":"The ID of the task."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TaskAction"},"title":"Response Get Task Actions Tasks  Task Id  Actions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tasks/{task_id}/perform-action":{"post":{"tags":["Tasks"],"summary":"Perform Task Action","description":"**Perform a custom action on a task** — the generic escape hatch for tasks that expose\nworkflow-specific actions beyond approve/deny.\n\nFor approval tasks, prefer `POST /tasks/{task_id}/complete` or\n`POST /tasks/{task_id}/dismiss` — those endpoints are simpler and do not require\ndiscovering the action type.\n\nUse this endpoint only when the task exposes custom actions. Discover the available\nactions for a task with `GET /tasks/{task_id}/actions`; each returned action includes an\n`action_type` (the value to pass in this request body) and the status transitions it can\nproduce.\n\n`transition_to` is optional — if the action has exactly one possible target status, it\nis inferred. Pass it explicitly when an action can transition to more than one status.\n\nResponses:\n\n- `204 No Content` — action performed.\n- `400 Bad Request` — unknown action type or invalid transition.\n- `403 Forbidden` — caller is not authorized to act on the task.\n- `409 Conflict` — task is already in the requested status.","operationId":"perform_task_action_tasks__task_id__perform_action_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","description":"The ID of the task.","title":"Task Id"},"description":"The ID of the task."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformTaskActionInput"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tasks/{task_id}/reassign":{"post":{"tags":["Tasks"],"summary":"Reassign Task","description":"Reassign a task.","operationId":"reassign_task_tasks__task_id__reassign_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","description":"The ID of the task.","title":"Task Id"},"description":"The ID of the task."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReassignTaskInput"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tasks/{task_id}/comments":{"post":{"tags":["Tasks"],"summary":"Add Task Comment","description":"Add a comment to a task.","operationId":"add_task_comment_tasks__task_id__comments_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","description":"The ID of the task.","title":"Task Id"},"description":"The ID of the task."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddCommentInput"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tasks/{task_id}/complete":{"post":{"tags":["Tasks"],"summary":"Complete Task","description":"**Complete a task** — transition any task to `COMPLETED` by applying its unique\ncompletion action. For approval tasks this is the \"approve\" primitive.\n\nCommon uses:\n\n- **Approve an access request** (task with `task_category=APPROVAL` and `product_area=APPSTORE`).\n- **Mark a non-approval task done** when it exposes exactly one action that transitions\n  to `COMPLETED` (e.g. acknowledging a manual provisioning step). Tasks with multiple\n  possible completion actions should use `POST /tasks/{task_id}/perform-action` instead.\n\nThis endpoint resolves the unique action on the task that transitions it to `COMPLETED`\nand applies it on behalf of the caller. The caller must be an assignee of the task (or a\ndomain admin). There is no request body.\n\nResponses:\n\n- `204 No Content` — task completed.\n- `403 Forbidden` — caller is not authorized to act on the task.\n- `409 Conflict` — task is already in the requested status (safe to treat as idempotent).\n- `404 Not Found` — task does not exist in this domain, or the Tasks API is not enabled.\n\nTo deny instead of approve, use [`POST /tasks/{task_id}/dismiss`](#dismiss-task). For\ntasks that expose custom workflow actions (not approvals), use\n[`POST /tasks/{task_id}/perform-action`](#perform-task-action).","operationId":"complete_task_tasks__task_id__complete_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","description":"The ID of the task.","title":"Task Id"},"description":"The ID of the task."}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tasks/{task_id}/dismiss":{"post":{"tags":["Tasks"],"summary":"Dismiss Task","description":"**Dismiss a task** — transition any task to `DISMISSED` by applying its unique\ndismissal action. For approval tasks this is the \"deny / reject\" primitive; for\nnon-approval tasks it cancels the task without performing its work.\n\nCommon uses:\n\n- **Deny an access request**.\n- **Cancel a non-approval task** (e.g. dismiss an error task once the underlying issue is\n  handled out-of-band). Tasks with multiple possible dismissal actions should use\n  `POST /tasks/{task_id}/perform-action` instead.\n\nResolves the unique action on the task that transitions it to `DISMISSED` and applies it\non behalf of the caller. The caller must be an assignee of the task (or a domain admin).\nThere is no request body.\n\nResponses:\n\n- `204 No Content` — task dismissed.\n- `403 Forbidden` — caller is not authorized to act on the task.\n- `409 Conflict` — task is already in the requested status.\n- `404 Not Found` — task does not exist in this domain, or the Tasks API is not enabled.\n\nTo approve instead of deny, use [`POST /tasks/{task_id}/complete`](#complete-task).","operationId":"dismiss_task_tasks__task_id__dismiss_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","description":"The ID of the task.","title":"Task Id"},"description":"The ID of the task."}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/art":{"get":{"tags":["Meta"],"summary":"Get Art","description":"Return Lumos ASCII art. Can be used to verify the API is working.","operationId":"Lumos Art.","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/info":{"get":{"tags":["Meta"],"summary":"Get Info","description":"Returns current git revision.","operationId":"Lumos liveness check","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Lumos Liveness Check"}}}}}}},"/webhooks/airbase/purchase_request_approved/{domain_app_uuid}":{"post":{"tags":["Integration Webhooks"],"summary":"Process Airbase Purchase Request Approved","description":"Webhook for Airbase to send events as a workflow transitions through milestones","operationId":"processAirbaseMilestoneEvent","parameters":[{"name":"domain_app_uuid","in":"path","required":true,"schema":{"type":"string","title":"Domain App Uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AirbasePurchaseRequestEvent"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/webhooks/vendr/request_completed/{domain_app_uuid}":{"post":{"tags":["Integration Webhooks"],"summary":"Process Vendr Request Completed","description":"Webhook for Vendr to send request completed events to Lumos","operationId":"process_vendr_request_completed_webhooks_vendr_request_completed__domain_app_uuid__post","parameters":[{"name":"domain_app_uuid","in":"path","required":true,"schema":{"type":"string","title":"Domain App Uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AccessPolicyAppInput":{"properties":{"id":{"type":"string","title":"Id","description":"The ID of this app."},"is_preapproved":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Preapproved","description":"Whether approval is required for this app grant."},"permissions":{"anyOf":[{"items":{"$ref":"#/components/schemas/AccessPolicyPermissionInput"},"type":"array"},{"type":"null"}],"title":"Permissions","description":"List of permissions granted for this app. Empty list means app-level grant."}},"type":"object","required":["id"],"title":"AccessPolicyAppInput","description":"An app granted by this access policy.\nExtends BaseApp with access-policy-specific fields."},"AccessPolicyAppOutput":{"properties":{"id":{"type":"string","title":"Id","description":"The ID of this app."},"is_preapproved":{"type":"boolean","title":"Is Preapproved","description":"Whether requests created via this access policy are pre-approved."},"permissions":{"items":{"$ref":"#/components/schemas/AccessPolicyPermissionOutput"},"type":"array","title":"Permissions","description":"List of permissions granted for this app. Empty list means app-level grant."}},"type":"object","required":["id","is_preapproved","permissions"],"title":"AccessPolicyAppOutput","description":"An app granted by this access policy.\nExtends BaseApp with access-policy-specific fields."},"AccessPolicyInput":{"properties":{"name":{"type":"string","title":"Name","description":"The name of the access policy."},"business_justification":{"type":"string","title":"Business Justification","description":"Explanation for why this policy exists."},"status":{"anyOf":[{"type":"string","enum":["DRAFT","PUBLISHED"]},{"type":"null"}],"title":"Status","description":"The status of the access policy. Defaults to DRAFT when supported."},"is_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Enabled","description":"Whether the access policy is enabled. Defaults to false when supported."},"apps":{"items":{"$ref":"#/components/schemas/AccessPolicyAppInput"},"type":"array","minItems":1,"title":"Apps","description":"List of apps granted by this access policy."},"access_condition":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"description":"The Lumos Condition object determining which identities qualify for this policy. Required unless `is_everyone_condition` is `true`. This is a recursive JSON structure that allows you to define complex rules for filtering and matching identities using operators like `equals`, `in`, `and`, `or`, and `not`. For more information, see the [Lumos Conditions documentation](https://support.lumos.com/articles/8646284496-building-conditions-in-lumos)."},"is_everyone_condition":{"type":"boolean","title":"Is Everyone Condition","description":"Whether the access policy applies to everyone. If true, `access_condition` is ignored. Otherwise, `access_condition` must be provided.","default":false}},"type":"object","required":["name","business_justification","apps"],"title":"AccessPolicyInput"},"AccessPolicyOutput":{"properties":{"name":{"type":"string","title":"Name","description":"The name of the access policy."},"business_justification":{"type":"string","title":"Business Justification","description":"Explanation for why this policy exists."},"id":{"type":"string","title":"Id","description":"The unique ID of the access policy."},"status":{"type":"string","enum":["DRAFT","PUBLISHED"],"title":"Status","description":"The status of the access policy."},"is_enabled":{"type":"boolean","title":"Is Enabled","description":"Whether the access policy is enabled."},"apps":{"items":{"$ref":"#/components/schemas/AccessPolicyAppOutput"},"type":"array","title":"Apps","description":"The list of apps and permissions granted by this access policy."},"access_condition":{"type":"object","description":"The Lumos Condition object determining which identities qualify for this policy. For more information, see the [Lumos Conditions documentation](https://support.lumos.com/articles/8646284496-building-conditions-in-lumos)."},"is_everyone_condition":{"type":"boolean","title":"Is Everyone Condition","readOnly":true}},"type":"object","required":["name","business_justification","id","status","is_enabled","apps","access_condition","is_everyone_condition"],"title":"AccessPolicyOutput","description":"The full representation of an access policy returned by the API."},"AccessPolicyPermissionInput":{"properties":{"id":{"type":"string","title":"Id","description":"The ID of this requestable permission."}},"type":"object","title":"AccessPolicyPermissionInput","description":"A permission for a given app granted by this access policy.\nInherits RequestablePermissionBase fields (i.e. id)"},"AccessPolicyPermissionOutput":{"properties":{"id":{"type":"string","title":"Id","description":"The ID of this requestable permission."}},"type":"object","title":"AccessPolicyPermissionOutput","description":"A permission for a given app granted by this access policy.\nInherits RequestablePermissionBase fields (i.e. id)"},"AccessRequest":{"properties":{"id":{"type":"string","title":"Id","description":"The ID of the access request."},"app_id":{"type":"string","title":"App Id","description":"The ID of the app the request is for."},"app_name":{"type":"string","title":"App Name","description":"The name of the app the request is for."},"requester_user":{"$ref":"#/components/schemas/User","description":"The user who requested access. It's possible for one user to request access on another's behalf."},"target_user":{"$ref":"#/components/schemas/User","description":"The user the request is for."},"supporter_user":{"anyOf":[{"$ref":"#/components/schemas/User"},{"type":"null"}]},"status":{"$ref":"#/components/schemas/SupportRequestStatus","description":"The current status of the request."},"notes":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"object","title":"Notes","description":"The reason the user wrote for putting the access request into the given state.","default":{}},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"expiration_in_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expiration In Seconds","description":"For time-based access requests, the number of seconds after provisioning at which access should be removed. None for permanent requests."},"requestable_permissions":{"anyOf":[{"items":{"$ref":"#/components/schemas/RequestablePermissionOutput"},"type":"array"},{"type":"null"}],"title":"Requestable Permissions"},"requested_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Requested At"},"tasks":{"anyOf":[{"items":{"$ref":"#/components/schemas/Task"},"type":"array"},{"type":"null"}],"title":"Tasks"},"custom_fields":{"anyOf":[{"items":{"$ref":"#/components/schemas/CustomIntakeFieldResponseOutput"},"type":"array"},{"type":"null"}],"title":"Custom Fields"}},"type":"object","required":["id","app_id","app_name","requester_user","target_user","status"],"title":"AccessRequest","description":"API version of DomainAppSupportRequest."},"AccessReviewDomainAppConfigurableEvidenceUpload":{"type":"string","enum":["ALWAYS","DEFAULT"],"title":"AccessReviewDomainAppConfigurableEvidenceUpload","description":"Every operation requires evidence upload for failures and manual actions."},"AccessReviewDomainAppErrorOutput":{"properties":{"app_id":{"type":"string","title":"App Id","description":"UUID of the domain app that could not be added."},"error":{"type":"string","title":"Error","description":"Description of why the app could not be added."}},"type":"object","required":["app_id","error"],"title":"AccessReviewDomainAppErrorOutput"},"AccessReviewDomainAppInput":{"properties":{"id":{"type":"string","title":"Id","description":"UUID of the domain app to include in this review."},"review_type":{"$ref":"#/components/schemas/ReviewType","description":"What to review for this app.","default":"ENTITLEMENTS"},"scope_filters":{"anyOf":[{"items":{"oneOf":[{"$ref":"#/components/schemas/ScalarScopeFilterInput"},{"$ref":"#/components/schemas/CustomAttributeScopeFilterInput"},{"$ref":"#/components/schemas/DatetimeScopeFilterInput"}],"discriminator":{"propertyName":"group","mapping":{"ACCESS_APPROVED_AT":"#/components/schemas/ScalarScopeFilterInput","ACCESS_GRANTED_AT":"#/components/schemas/ScalarScopeFilterInput","ACCESS_LENGTH":"#/components/schemas/ScalarScopeFilterInput","ACCESS_PROVISIONED_AT":"#/components/schemas/ScalarScopeFilterInput","ACCESS_REQUESTED_AT":"#/components/schemas/ScalarScopeFilterInput","ACCOUNT_DELTA":"#/components/schemas/ScalarScopeFilterInput","ACCOUNT_ENTITLEMENT":"#/components/schemas/ScalarScopeFilterInput","ACCOUNT_SOURCE":"#/components/schemas/ScalarScopeFilterInput","ACCOUNT_STATUS":"#/components/schemas/ScalarScopeFilterInput","CATEGORIES":"#/components/schemas/ScalarScopeFilterInput","CUSTOM_ATTRIBUTE":"#/components/schemas/CustomAttributeScopeFilterInput","EMAIL_DOMAIN":"#/components/schemas/ScalarScopeFilterInput","EMPLOYMENT_STATUS":"#/components/schemas/ScalarScopeFilterInput","ENTITLEMENT_TAG":"#/components/schemas/ScalarScopeFilterInput","LAST_ACTIVITY":"#/components/schemas/DatetimeScopeFilterInput","LAST_LOGIN":"#/components/schemas/DatetimeScopeFilterInput","SOD_POLICY":"#/components/schemas/ScalarScopeFilterInput","TEAM":"#/components/schemas/ScalarScopeFilterInput","UNMATCHED_ACCOUNTS":"#/components/schemas/ScalarScopeFilterInput","USER_OR_GROUP":"#/components/schemas/ScalarScopeFilterInput"}}},"type":"array","maxItems":50},{"type":"null"}],"title":"Scope Filters","description":"Scope filters to limit which accounts/entitlements are included in this review. Filters within the same group are OR'd; filters across groups are AND'd. Capped at 50 filters per app."}},"additionalProperties":false,"type":"object","required":["id"],"title":"AccessReviewDomainAppInput"},"AccessReviewDomainAppOutput":{"properties":{"id":{"type":"string","title":"Id","description":"UUID of this access review domain app record."},"domain_app_id":{"type":"string","title":"Domain App Id","description":"UUID of the domain app being reviewed."},"domain_app_name":{"type":"string","title":"Domain App Name","description":"Display name of the domain app."},"domain_app_sources":{"items":{"type":"string"},"type":"array","title":"Domain App Sources","description":"List of sources for the domain app."},"status":{"type":"string","enum":["IN_PREPARATION","ASSIGNING_REVIEWERS","IN_PROGRESS","COMPLETED","WAITING_FOR_MANUAL_ACTION","DELETED"],"title":"Status","description":"Status of this app within the review."},"review_type":{"anyOf":[{"$ref":"#/components/schemas/ReviewType"},{"type":"null"}],"description":"What is being reviewed: ENTITLEMENTS or ACCOUNTS."},"app_last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"App Last Synced At","description":"When the app data was last synced."},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Synced At","description":"When this review's data was last synced."},"account_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Account Count","description":"Number of accounts in scope for this app."},"launched_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Launched At","description":"When this app's review was launched."},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At","description":"When this app's review was completed."},"scope_filters":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Scope Filters","description":"Scope filters applied to this app's review."}},"type":"object","required":["id","domain_app_id","domain_app_name","domain_app_sources","status"],"title":"AccessReviewDomainAppOutput"},"AccessReviewOutput":{"properties":{"id":{"type":"string","title":"Id","description":"UUID of the access review."},"name":{"type":"string","title":"Name","description":"Name of the access review campaign."},"status":{"type":"string","enum":["IN_PREPARATION","IN_PROGRESS","COMPLETED","DUPLICATING","DUPLICATING_WAITING_FOR_CONFIRMATION","SCHEDULED","SCHEDULED_IN_PREPARATION","DELETED"],"title":"Status","description":"Current status of the access review."},"creation_path":{"type":"string","enum":["UI","RECURRENCE","API","CLI","MCP"],"title":"Creation Path","description":"How this review was created."},"owner_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Id","description":"UUID of the review owner."},"created_by_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By Id","description":"UUID of the user who created this review."},"deadline_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deadline At","description":"Deadline for completing reviews."},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At","description":"When the review was started."},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At","description":"When the review was completed."},"target_launch_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Target Launch Date","description":"Scheduled launch date, if this is a scheduled review."},"recurrence_config":{"anyOf":[{"$ref":"#/components/schemas/RecurrenceConfig"},{"type":"null"}],"description":"Recurrence configuration, if this is a recurring review."},"recurrence_days_frequency":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Recurrence Days Frequency","description":"Recurrence frequency in days, if this is a recurring review."},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At","description":"When this record was created."},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At","description":"When this record was last updated."},"apps":{"items":{"$ref":"#/components/schemas/AccessReviewDomainAppOutput"},"type":"array","title":"Apps","description":"Apps included in this review."}},"type":"object","required":["id","name","status","creation_path"],"title":"AccessReviewOutput"},"AccessReviewRemovalAction":{"type":"string","enum":["DEPROVISION","SUSPEND","DEACTIVATE","MANUAL","WEBHOOK"],"title":"AccessReviewRemovalAction"},"Account":{"properties":{"id":{"type":"string","title":"Id","description":"The ID of this account."},"app_id":{"type":"string","title":"App Id","description":"The ID of the app that owns this account."},"account_type":{"$ref":"#/components/schemas/AccountType","description":"The type of this account, one of 'USER', 'ROLE' (e.g. AWS), 'SERVICE' (e.g. GCP)."},"status":{"anyOf":[{"$ref":"#/components/schemas/AccountLifecycleStatus"},{"type":"null"}],"description":"The status of the account."},"app":{"anyOf":[{"$ref":"#/components/schemas/App"},{"type":"null"}],"description":"The app this account is for"},"unique_identifier":{"type":"string","title":"Unique Identifier","description":"The stable identifier of this account from the associated service."},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"The email of this account."},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id","description":"The ID of the user associated with this account."},"discovered_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Discovered At","description":"The time that Lumos first discovered this account, in ISO 8601 format"},"last_login":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login","description":"The last time a user logged into this app, in ISO 8601 format"},"last_activity":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Activity","description":"The last time a user completed an action tracked by Lumos, in ISO 8601 format"},"sources":{"items":{"$ref":"#/components/schemas/DiscoverySource"},"type":"array","title":"Sources","description":"The discovery methods through which Lumos identified this account"}},"type":"object","required":["id","app_id","account_type","unique_identifier"],"title":"Account"},"AccountLifecycleStatus":{"type":"string","enum":["DISCOVERED","STAGED","ACCESS_CREATED","ACTIVE","ARCHIVED","SUSPENDED","DEPROVISIONED","MANUALLY_REMOVED","ACCESS_REMOVED","NON_CORPORATE_ACCOUNT","WAITING_MANUAL_REMOVAL"],"title":"AccountLifecycleStatus","description":"NOTE: If you update this, also update UserDomainAppLifecycleStatus\n\nDISCOVERED             - Account discovered through accountfinding. Could be noisy.\n\nSTAGED                 - An account that has been queued for provisioning, but is not\n                         provisioned yet. Relevant for Apps where provisioning is async\n                         (eg. Okta, OneLogin).\n\nACCESS_CREATED         - When an account has been provisioned but not accessed.\n\nACTIVE                 - A live, active, accessible account.\n\nSUSPENDED              - The user can no longer access the account, the license may or may not\n                         be removed. The account can be recovered.\n\nDEPROVISIONED          - The user can no longer access the account, the license was removed,\n                         and the account cannot be recovered.\n\nARCHIVED               - The user can no longer access the account, the license may or may not\n                         be removed. The account can be recovered.\n\nMANUALLY_REMOVED       - The user can no longer access the account, the license is presumably\n                         removed, but all of this was done manually\n\nACCESS_REMOVED         - The user can no longer access the account, but a license may still\n                         exist. This is the case when we remove access through Okta but not a\n                         direct integration\n\nNON_CORPORATE_ACCOUNT  - The account doesn't exist, or is a personal employee account.\n\nWAITING_MANUAL_REMOVAL - Waiting manual removal, someone was requested to remove the user access\n                         from the App, and we are waiting for an answer about it."},"AccountType":{"type":"string","enum":["USER","ROLE","SERVICE"],"title":"AccountType"},"ActivityLog":{"properties":{"event_hash":{"type":"string","title":"Event Hash"},"event_type":{"type":"string","title":"Event Type"},"event_type_user_friendly":{"type":"string","title":"Event Type User Friendly"},"outcome":{"type":"string","title":"Outcome"},"targets":{"items":{"type":"object"},"type":"array","title":"Targets"},"actor":{"type":"object","title":"Actor"},"event_began_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Event Began At"},"event_metadata":{"type":"object","title":"Event Metadata"}},"type":"object","required":["event_hash","event_type","event_type_user_friendly","outcome","targets","actor","event_metadata"],"title":"ActivityLog","description":"API version of SIEMEvent"},"ActivityRecord":{"properties":{"account":{"$ref":"#/components/schemas/ActivityRecordAccountInput","description":"Metadata that Lumos can use to match the activity record to a software account within Lumos."},"event":{"$ref":"#/components/schemas/ActivityRecordEventInput","description":"Metadata about the event being uploaded."},"timestamp":{"type":"string","format":"date-time","title":"Timestamp","description":"The timestamp of this event, in ISO 8601 format."},"source_app_id":{"type":"string","title":"Source App Id","description":"UUID of the application in Lumos where this activity record was sourced (e.g. the ID of Okta within Lumos found by going to Apps > Find your app in the list > Click '...' > Copy Stable Identifier)"},"app":{"anyOf":[{"$ref":"#/components/schemas/ActivityRecordAppInput"},{"type":"null"}],"description":"Metadata that Lumos can use to match the activity record to an application within Lumos."}},"type":"object","required":["account","event","timestamp","source_app_id"],"title":"ActivityRecord"},"ActivityRecordAccountInput":{"properties":{"external_id":{"type":"string","title":"External Id","description":"The external app's user ID for the account."},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"The email associated with the account"}},"type":"object","title":"ActivityRecordAccountInput"},"ActivityRecordAppInput":{"properties":{"instance_identifier":{"type":"string","title":"Instance Identifier","description":"The ID of the app as it is identified in the source E.g. the ID that Okta uses to identify the app"}},"type":"object","required":["instance_identifier"],"title":"ActivityRecordAppInput"},"ActivityRecordEventInput":{"properties":{"type":{"$ref":"#/components/schemas/ActivityRecordEventType","description":"The type of event being uploaded."}},"type":"object","required":["type"],"title":"ActivityRecordEventInput"},"ActivityRecordEventType":{"type":"string","enum":["LOGIN","ACTIVITY"],"title":"ActivityRecordEventType"},"ActivityRecordInput":{"properties":{"records":{"items":{"$ref":"#/components/schemas/ActivityRecord"},"type":"array","title":"Records","description":"The activity records to upload."}},"type":"object","required":["records"],"title":"ActivityRecordInput"},"ActivityRecordOutput":{"properties":{"job":{"$ref":"#/components/schemas/SyncTaskOutput","description":"State of the job to post-process the records."}},"type":"object","required":["job"],"title":"ActivityRecordOutput"},"AddAppToAppStoreInput":{"properties":{"custom_request_instructions":{"type":"string","title":"Custom Request Instructions","description":"AppStore App instructions that are shown to the requester."},"redirect_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Redirect Url","description":"If set, requesting this app redirects the user to this URL instead of going through the normal access-request flow. Send null to clear an existing redirect; omit the field to leave it unchanged. Max 2048 characters."},"request_flow":{"$ref":"#/components/schemas/AppStoreAppSettingsRequestFlowInput","description":"Request flow configuration to request access to app."},"provisioning":{"$ref":"#/components/schemas/AppStoreAppSettingsProvisioningInput","description":"Provisioning flow configuration to request access to app."},"app_id":{"type":"string","title":"App Id","description":"The ID of the app to add to the app store."}},"type":"object","required":["app_id"],"title":"AddAppToAppStoreInput"},"AddAppsInput":{"properties":{"apps":{"items":{"$ref":"#/components/schemas/AccessReviewDomainAppInput"},"type":"array","maxItems":200,"title":"Apps","description":"List of domain apps to add to the access review. Capped at 200 entries per the Access Review scale limits (technically-supported tier)."}},"additionalProperties":false,"type":"object","required":["apps"],"title":"AddAppsInput","examples":[{"apps":[{"id":"00000000-0000-0000-0000-000000000002","review_type":"ENTITLEMENTS"}]}]},"AddAppsOutput":{"properties":{"added_apps":{"items":{"$ref":"#/components/schemas/AccessReviewDomainAppOutput"},"type":"array","title":"Added Apps","description":"Apps that were successfully added to the access review."},"errors":{"anyOf":[{"items":{"$ref":"#/components/schemas/AccessReviewDomainAppErrorOutput"},"type":"array"},{"type":"null"}],"title":"Errors","description":"Per-app errors for any domain apps that could not be added (invalid, not connected, or already present)."}},"type":"object","required":["added_apps"],"title":"AddAppsOutput"},"AddCommentInput":{"properties":{"comment":{"type":"string","maxLength":4000,"minLength":1,"title":"Comment","description":"The comment text to add."}},"type":"object","required":["comment"],"title":"AddCommentInput"},"AirbasePurchaseRequestEvent":{"properties":{"id":{"type":"string","title":"Id"},"object":{"type":"string","title":"Object"},"type":{"type":"string","title":"Type"},"created_date":{"type":"string","title":"Created Date"},"data":{"type":"object","title":"Data"}},"type":"object","required":["id","object","type","created_date","data"],"title":"AirbasePurchaseRequestEvent","description":"Model of the input we'll get from Airbase's webhook call.\nAll events seem to follow this same base structure, it is just `data` that is different\nfor each. We are using `dict` here to be permissive to other webhook events (so we can warn if\nthe customer misconfigures for a different webhook), and we actually only use 2 fields from it."},"AllowedGroupsConfigInput":{"properties":{"type":{"$ref":"#/components/schemas/AllowedGroupsConfigType","description":"The type of this allowed groups config, can be all groups or specific.","default":"ALL_GROUPS"},"groups":{"items":{"$ref":"#/components/schemas/BaseGroup"},"type":"array","title":"Groups","description":"The groups allowed to request this permission."}},"type":"object","title":"AllowedGroupsConfigInput"},"AllowedGroupsConfigOutput":{"properties":{"type":{"$ref":"#/components/schemas/AllowedGroupsConfigType","description":"The type of this allowed groups config, can be all groups or specific.","default":"ALL_GROUPS"},"groups":{"items":{"$ref":"#/components/schemas/Group"},"type":"array","title":"Groups","description":"The groups allowed to request this permission.","default":[]}},"type":"object","title":"AllowedGroupsConfigOutput"},"AllowedGroupsConfigType":{"type":"string","enum":["ALL_GROUPS","SPECIFIED_GROUPS"],"title":"AllowedGroupsConfigType"},"ApiError":{"properties":{"detail":{"type":"string","title":"Detail","description":"Human-readable summary of the error."},"type":{"$ref":"#/components/schemas/ErrorType","description":"Category: validation|authentication|permission|not_found|conflict|rate_limited|runtime."},"code":{"type":"string","title":"Code","description":"Stable machine-readable error code; branch on this, not 'detail'."},"errors":{"items":{"$ref":"#/components/schemas/ApiErrorField"},"type":"array","title":"Errors","description":"Field-level errors; empty for non-validation errors."}},"type":"object","required":["detail","type","code"],"title":"ApiError","description":"The V1 error envelope."},"ApiErrorField":{"properties":{"field":{"type":"string","title":"Field","description":"Input field this error refers to, e.g. 'steps[2].inputs.group_id'."},"code":{"type":"string","title":"Code","description":"Stable machine-readable code for this field error."},"message":{"type":"string","title":"Message","description":"Human-readable description of the field error."}},"type":"object","required":["field","code","message"],"title":"ApiErrorField","description":"A single field-level error (used for validation failures)."},"App":{"properties":{"id":{"type":"string","title":"Id","description":"The ID of this app."},"app_class_id":{"type":"string","title":"App Class Id","description":"The non-unique ID of the service associated with this requestable permission. Depending on how it is sourced in Lumos, this may be the app's name, website, or other identifier."},"instance_id":{"type":"string","title":"Instance Id","description":"The non-unique ID of the instance associated with this app. This will be the Okta app id if it’s an Okta app, or will be marked as custom_app_import if manually uploaded into Lumos."},"user_friendly_label":{"type":"string","title":"User Friendly Label","description":"The user-friendly label of this app."},"status":{"$ref":"#/components/schemas/DomainAppStatus","description":"The status of this app. Possible values: 'DISCOVERED', 'IN_REVIEW', 'NEEDS_REVIEW', 'APPROVED', 'BLOCKLISTED', 'DEPRECATED'"},"sources":{"items":{"$ref":"#/components/schemas/DiscoverySource"},"type":"array","title":"Sources","description":"The sources of this app."},"allow_multiple_permission_selection":{"type":"boolean","title":"Allow Multiple Permission Selection","description":"Determines whether users can request multiple permissions at once.This field will be removed in subsequent API versions."},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url","description":"The URL of the logo of this app."},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url","description":"The URL of the website of this app."},"request_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Instructions","description":"The request instructions."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"The user-facing description of the app"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","description":"The category of the app, as shown in the AppStore"},"disconnected":{"type":"boolean","title":"Disconnected","description":"Whether this app has been disconnected (its stored credentials removed via `DELETE /apps/{app_id}`). A disconnected app is excluded from `GET /apps?disconnected=false`; reconnect it with `PUT /apps/{app_id}`."},"links":{"$ref":"#/components/schemas/AppLinks","description":"A collection of URLs related to this application"}},"type":"object","required":["id","app_class_id","instance_id","user_friendly_label","status","sources","allow_multiple_permission_selection","disconnected","links"],"title":"App"},"AppAdminsInput":{"properties":{"groups":{"items":{"$ref":"#/components/schemas/BaseGroup"},"type":"array","title":"Groups","description":"Groups assigned as app admins."},"users":{"items":{"$ref":"#/components/schemas/BaseUser"},"type":"array","title":"Users","description":"Users assigned as app admins."}},"type":"object","title":"AppAdminsInput"},"AppAdminsOutput":{"properties":{"groups":{"items":{"$ref":"#/components/schemas/Group"},"type":"array","title":"Groups","description":"Groups assigned as app admins.","default":[]},"users":{"items":{"$ref":"#/components/schemas/User"},"type":"array","title":"Users","description":"Users assigned as app admins.","default":[]}},"type":"object","title":"AppAdminsOutput"},"AppApproversInput":{"properties":{"groups":{"items":{"$ref":"#/components/schemas/BaseGroup"},"type":"array","title":"Groups","description":"Groups assigned as support request approvers.","default":[]},"users":{"items":{"$ref":"#/components/schemas/BaseUser"},"type":"array","title":"Users","description":"Users assigned as support request approvers.","default":[]}},"type":"object","title":"AppApproversInput"},"AppApproversOutput":{"properties":{"groups":{"items":{"$ref":"#/components/schemas/Group"},"type":"array","title":"Groups","description":"Groups assigned as support request approvers.","default":[]},"users":{"items":{"$ref":"#/components/schemas/User"},"type":"array","title":"Users","description":"Users assigned as support request approvers.","default":[]}},"type":"object","title":"AppApproversOutput"},"AppInputCreate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"The name of the app you're creating. Required when creating a custom app."},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","description":"The category of the app you're creating; required when creating a custom app. Possible values: 'Accounting & Finance', 'Marketing & Analytics', 'Content & Social Media', 'Sales & Support', 'Design & Creativity', 'IT & Security', 'Developers', 'HR & Learning', 'Office & Legal', 'Communication', 'Collaboration', 'Commerce & Marketplaces', 'Other', 'Internal'"},"description":{"anyOf":[{"type":"string","maxLength":8192},{"type":"null"}],"title":"Description","description":"The description of the app you're creating. Required when creating a custom app."},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url","description":"The URL of the logo of the app you're creating."},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url","description":"The URL of the website of the app you're creating."},"request_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Instructions","description":"The request instructions."},"app_class_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Class Id","description":"Canonical identifier of an integration to connect, e.g. `okta.com`. Providing it switches this request from creating a custom app to connecting that integration using `auth`/`settings`. Must be an integration Lumos supports for your domain; an unknown value is rejected with 400."},"auth":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Auth","description":"Credentials for the integration being connected, as a JSON object — **all secrets go here**. The accepted keys depend on the integration and are validated server-side. Some integrations connect in-band from these credentials (e.g. an `api_key`, or an OAuth `client_id`/`client_secret`); others require browser consent and are finished in the Lumos UI — for those, send `{}`. Missing or wrong-shaped credentials are rejected with 400; credentials the third party rejects return 502. Only used with `app_class_id`."},"settings":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Settings","description":"Non-secret configuration for the integration being connected, as a JSON object — e.g. host, port, region, or tenant / instance URL. The accepted keys vary by integration and some integrations need none. Only used with `app_class_id`."},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version","description":"Optional integration version override. Pins the connection to a specific integration implementation/version instead of the current default; leave unset (`null`) unless directed otherwise. Only used with `app_class_id`."}},"type":"object","title":"AppInputCreate","description":"Body of `POST /apps`: create a custom app, or connect an integration.\n\nOne flat model serves both operations (a request-body union would generate\npoorly into SDK/Terraform clients). Providing `app_class_id` switches the\nrequest from \"create a custom app\" to \"connect an integration\"; the model\nvalidator enforces the fields each mode requires.","examples":[{"category":"Engineering","description":"Hand-rolled deploy dashboard.","name":"My internal tool"},{"app_class_id":"okta.com","auth":{"api_key":"0123456789abcdef0123456789abcdef"},"settings":{"app_instance_identifier":"myorg.okta.com"}}]},"AppInputUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"The updated domain-specific display name of the app. Set to null to reset to the app's default name."},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","description":"The updated domain-specific category of the app. Set to null to reset to the app's default category. Possible values: 'Accounting & Finance', 'Marketing & Analytics', 'Content & Social Media', 'Sales & Support', 'Design & Creativity', 'IT & Security', 'Developers', 'HR & Learning', 'Office & Legal', 'Communication', 'Collaboration', 'Commerce & Marketplaces', 'Other', 'Internal'"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"maxLength":1000,"title":"Description","description":"The updated domain-specific description of the app. Set to null to reset to the app's default description."},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url","description":"The updated domain-specific URL of the logo of the app. Set to null to reset to the app's default logo."},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url","description":"The updated URL of the website of the app. Set to null to clear it."},"request_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"maxLength":511,"title":"Request Instructions","description":"The updated request instructions."}},"additionalProperties":false,"type":"object","title":"AppInputUpdate"},"AppLinks":{"properties":{"self":{"type":"string","title":"Self","description":"The canonical API URL for retrieving this specific application"},"admin_url":{"type":"string","title":"Admin Url","description":"A URL to access this application within the Lumos web UI"}},"type":"object","required":["self","admin_url"],"title":"AppLinks"},"AppSettingInput":{"properties":{"custom_request_instructions":{"type":"string","title":"Custom Request Instructions","description":"AppStore App instructions that are shown to the requester."},"redirect_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Redirect Url","description":"If set, requesting this app redirects the user to this URL instead of going through the normal access-request flow. Send null to clear an existing redirect; omit the field to leave it unchanged. Max 2048 characters."},"request_flow":{"$ref":"#/components/schemas/AppStoreAppSettingsRequestFlowInput","description":"Request flow configuration to request access to app."},"provisioning":{"$ref":"#/components/schemas/AppStoreAppSettingsProvisioningInput","description":"Provisioning flow configuration to request access to app."},"in_app_store":{"type":"boolean","title":"In App Store","description":"Whether the app is in the app store.","default":false}},"type":"object","title":"AppSettingInput"},"AppSettingOutput":{"properties":{"custom_request_instructions":{"type":"string","title":"Custom Request Instructions","description":"AppStore App instructions that are shown to the requester."},"redirect_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Redirect Url","description":"If set, requesting this app redirects the user to this URL instead of going through the normal access-request flow. Send null to clear an existing redirect; omit the field to leave it unchanged. Max 2048 characters."},"request_flow":{"$ref":"#/components/schemas/AppStoreAppSettingsRequestFlowOutput","description":"Request flow configuration to request access to app."},"provisioning":{"$ref":"#/components/schemas/AppStoreAppSettingsProvisioningOutput","description":"Provisioning flow configuration to request access to app."},"in_app_store":{"type":"boolean","title":"In App Store","description":"Whether the app is in the app store.","default":false}},"type":"object","title":"AppSettingOutput"},"AppStoreApp":{"properties":{"id":{"type":"string","title":"Id","description":"The ID of this app."},"app_class_id":{"type":"string","title":"App Class Id","description":"The non-unique ID of the service associated with this requestable permission. Depending on how it is sourced in Lumos, this may be the app's name, website, or other identifier."},"instance_id":{"type":"string","title":"Instance Id","description":"The non-unique ID of the instance associated with this app. This will be the Okta app id if it’s an Okta app, or will be marked as custom_app_import if manually uploaded into Lumos."},"user_friendly_label":{"type":"string","title":"User Friendly Label","description":"The user-friendly label of this app."},"status":{"$ref":"#/components/schemas/DomainAppStatus","description":"The status of this app. Possible values: 'DISCOVERED', 'IN_REVIEW', 'NEEDS_REVIEW', 'APPROVED', 'BLOCKLISTED', 'DEPRECATED'"},"sources":{"items":{"$ref":"#/components/schemas/DiscoverySource"},"type":"array","title":"Sources","description":"The sources of this app."},"allow_multiple_permission_selection":{"type":"boolean","title":"Allow Multiple Permission Selection","description":"Determines whether users can request multiple permissions at once.This field will be removed in subsequent API versions."},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url","description":"The URL of the logo of this app."},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url","description":"The URL of the website of this app."},"request_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Instructions","description":"The request instructions."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"The user-facing description of the app"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","description":"The category of the app, as shown in the AppStore"},"disconnected":{"type":"boolean","title":"Disconnected","description":"Whether this app has been disconnected (its stored credentials removed via `DELETE /apps/{app_id}`). A disconnected app is excluded from `GET /apps?disconnected=false`; reconnect it with `PUT /apps/{app_id}`."},"links":{"$ref":"#/components/schemas/AppLinks","description":"A collection of URLs related to this application"},"custom_attributes":{"anyOf":[{"additionalProperties":{"$ref":"#/components/schemas/CustomAttribute"},"type":"object"},{"type":"null"}],"title":"Custom Attributes","description":"Custom attributes configured on the app"}},"type":"object","required":["id","app_class_id","instance_id","user_friendly_label","status","sources","allow_multiple_permission_selection","disconnected","links"],"title":"AppStoreApp"},"AppStoreAppSettingsInput":{"properties":{"custom_request_instructions":{"type":"string","title":"Custom Request Instructions","description":"AppStore App instructions that are shown to the requester."},"redirect_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Redirect Url","description":"If set, requesting this app redirects the user to this URL instead of going through the normal access-request flow. Send null to clear an existing redirect; omit the field to leave it unchanged. Max 2048 characters."},"request_flow":{"$ref":"#/components/schemas/AppStoreAppSettingsRequestFlowInput","description":"Request flow configuration to request access to app."},"provisioning":{"$ref":"#/components/schemas/AppStoreAppSettingsProvisioningInput","description":"Provisioning flow configuration to request access to app."}},"type":"object","title":"AppStoreAppSettingsInput"},"AppStoreAppSettingsOutput":{"properties":{"custom_request_instructions":{"type":"string","title":"Custom Request Instructions","description":"AppStore App instructions that are shown to the requester."},"redirect_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Redirect Url","description":"If set, requesting this app redirects the user to this URL instead of going through the normal access-request flow. Send null to clear an existing redirect; omit the field to leave it unchanged. Max 2048 characters."},"request_flow":{"$ref":"#/components/schemas/AppStoreAppSettingsRequestFlowOutput","description":"Request flow configuration to request access to app."},"provisioning":{"$ref":"#/components/schemas/AppStoreAppSettingsProvisioningOutput","description":"Provisioning flow configuration to request access to app."}},"type":"object","title":"AppStoreAppSettingsOutput"},"AppStoreAppSettingsProvisioningInput":{"properties":{"groups_provisioning":{"$ref":"#/components/schemas/GroupProvisioningOption","description":"Controls how access is provisioned when a request is fulfilled. DIRECT_TO_USER provisions access at the app level and marks all permissions as not visible in the App Store. GROUPS_AND_HIDDEN provisions access at the permission level, but users cannot select which permission they want (requires at least one visible permission). GROUPS_AND_VISIBLE provisions access at the permission level and allows users to select the permission when requesting (requires at least one visible permission)."},"time_based_access":{"items":{"type":"string"},"type":"array","title":"Time Based Access","description":"If enabled, users can request an app for a selected duration. After expiry, Lumos will automatically remove user's access."},"allow_multiple_permission_selection":{"type":"boolean","title":"Allow Multiple Permission Selection","description":"Whether the app is configured to allow users to request multiple permissions in a single request"},"manual_steps_needed":{"type":"boolean","title":"Manual Steps Needed","description":"If enabled, Lumos will notify the App Admin after initial access is granted to perform additional manual steps. Note that if this option is enabled, this action must be confirmed by the App Admin in order to resolve the request."},"custom_provisioning_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Provisioning Instructions","description":"Only Available if manual steps is active. During the provisioning step, Lumos will send a custom message to app admins explaining how to provision a user to the app. Markdown for links and text formatting is supported."},"default_time_based_access_option":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Time Based Access Option","description":"The label of the default time-based access duration pre-selected when a user requests access. Must be one of the values in time_based_access. Null when there is no default."},"default_permission":{"anyOf":[{"$ref":"#/components/schemas/RequestablePermissionBase"},{"type":"null"}],"description":"The default permission pre-selected when a user requests access to this app. Provide the permission's id (UUID). Null when there is no default. The permission must belong to this app."},"provisioning_webhook":{"anyOf":[{"$ref":"#/components/schemas/BaseInlineWebhook"},{"type":"null"}],"description":"The provisioning webhook optionally associated with this app."},"access_removal_inline_webhook":{"anyOf":[{"$ref":"#/components/schemas/BaseInlineWebhook"},{"type":"null"}],"description":"A deprovisioning webhook can be optionally associated with this app."}},"type":"object","title":"AppStoreAppSettingsProvisioningInput"},"AppStoreAppSettingsProvisioningOutput":{"properties":{"groups_provisioning":{"$ref":"#/components/schemas/GroupProvisioningOption","description":"Controls how access is provisioned when a request is fulfilled. DIRECT_TO_USER provisions access at the app level and marks all permissions as not visible in the App Store. GROUPS_AND_HIDDEN provisions access at the permission level, but users cannot select which permission they want (requires at least one visible permission). GROUPS_AND_VISIBLE provisions access at the permission level and allows users to select the permission when requesting (requires at least one visible permission)."},"time_based_access":{"items":{"type":"string"},"type":"array","title":"Time Based Access","description":"If enabled, users can request an app for a selected duration. After expiry, Lumos will automatically remove user's access."},"allow_multiple_permission_selection":{"type":"boolean","title":"Allow Multiple Permission Selection","description":"Whether the app is configured to allow users to request multiple permissions in a single request"},"manual_steps_needed":{"type":"boolean","title":"Manual Steps Needed","description":"If enabled, Lumos will notify the App Admin after initial access is granted to perform additional manual steps. Note that if this option is enabled, this action must be confirmed by the App Admin in order to resolve the request."},"custom_provisioning_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Provisioning Instructions","description":"Only Available if manual steps is active. During the provisioning step, Lumos will send a custom message to app admins explaining how to provision a user to the app. Markdown for links and text formatting is supported."},"default_time_based_access_option":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Time Based Access Option","description":"The label of the default time-based access duration pre-selected when a user requests access. Must be one of the values in time_based_access. Null when there is no default."},"default_permission":{"anyOf":[{"$ref":"#/components/schemas/RequestablePermissionOutput"},{"type":"null"}],"description":"The default permission pre-selected when a user requests access to this app. Null if no default is configured."},"provisioning_webhook":{"anyOf":[{"$ref":"#/components/schemas/InlineWebhook"},{"type":"null"}],"description":"The provisioning webhook optionally associated with this config."},"access_removal_inline_webhook":{"anyOf":[{"$ref":"#/components/schemas/InlineWebhook"},{"type":"null"}],"description":"A deprovisioning webhook can be optionally associated with this config."}},"type":"object","title":"AppStoreAppSettingsProvisioningOutput"},"AppStoreAppSettingsRequestFlowInput":{"properties":{"discoverability":{"$ref":"#/components/schemas/AppStoreVisibility","description":"AppStore App visibility."},"custom_approval_message":{"type":"string","title":"Custom Approval Message","description":"After the approval step, send a custom message to requesters. Markdown for links and text formatting is supported."},"require_manager_approval":{"type":"boolean","title":"Require Manager Approval","description":"When a user makes an access request, require that their manager approves the request before moving on to additional approvals."},"require_additional_approval":{"type":"boolean","title":"Require Additional Approval","description":"When true, enables a second approval stage so requests require approval from both stage 1 and stage 2 approvers. When false, disables the second approval stage and merges any existing stage 2 approvers into stage 1. When omitted, the current multi-stage approval setting is left unchanged."},"allowed_groups":{"anyOf":[{"$ref":"#/components/schemas/AllowedGroupsConfigInput"},{"type":"null"}],"description":"The allowed groups associated with this config."},"approvers":{"$ref":"#/components/schemas/AppApproversInput","description":"AppStore App approvers assigned."},"approvers_stage_2":{"$ref":"#/components/schemas/AppApproversInput","description":"AppStore App stage 2 approvers assigned."},"admins":{"$ref":"#/components/schemas/AppAdminsInput","description":"AppStore App admins assigned."},"request_validation_inline_webhook":{"anyOf":[{"$ref":"#/components/schemas/BaseInlineWebhook"},{"type":"null"}],"description":"A request validation webhook can be optionally associated with this app."}},"type":"object","title":"AppStoreAppSettingsRequestFlowInput"},"AppStoreAppSettingsRequestFlowOutput":{"properties":{"discoverability":{"$ref":"#/components/schemas/AppStoreVisibility","description":"AppStore App visibility."},"custom_approval_message":{"type":"string","title":"Custom Approval Message","description":"After the approval step, send a custom message to requesters. Markdown for links and text formatting is supported."},"require_manager_approval":{"type":"boolean","title":"Require Manager Approval","description":"When a user makes an access request, require that their manager approves the request before moving on to additional approvals."},"require_additional_approval":{"type":"boolean","title":"Require Additional Approval","description":"When true, enables a second approval stage so requests require approval from both stage 1 and stage 2 approvers. When false, disables the second approval stage and merges any existing stage 2 approvers into stage 1. When omitted, the current multi-stage approval setting is left unchanged."},"allowed_groups":{"anyOf":[{"$ref":"#/components/schemas/AllowedGroupsConfigOutput"},{"type":"null"}],"description":"The allowed groups config associated with this config.","default":{"type":"ALL_GROUPS","groups":[]}},"approvers":{"$ref":"#/components/schemas/AppApproversOutput","description":"AppStore App approvers assigned.","default":{"groups":[],"users":[]}},"approvers_stage_2":{"$ref":"#/components/schemas/AppApproversOutput","description":"AppStore App stage 2 approvers assigned.","default":{"groups":[],"users":[]}},"response_describes_entire_approval_workflow":{"type":"boolean","title":"Response Describes Entire Approval Workflow","description":"Indicates whether the approval configuration is fully represented by the existing API. If False, the approval configuration may contain additional stages or conditional approval chains not reflected in the v1 API.","default":false},"admins":{"$ref":"#/components/schemas/AppAdminsOutput","description":"AppStore App admins assigned.","default":[]},"request_validation_inline_webhook":{"anyOf":[{"$ref":"#/components/schemas/InlineWebhook"},{"type":"null"}],"description":"A request validation webhook can be optionally associated with this config."}},"type":"object","title":"AppStoreAppSettingsRequestFlowOutput"},"AppStoreVisibility":{"type":"string","enum":["FULL","LIMITED","NONE"],"title":"AppStoreVisibility"},"AppStoreVisibilityOption":{"type":"string","enum":["HIDDEN","VISIBLE"],"title":"AppStoreVisibilityOption"},"AppWithCustomAttributes":{"properties":{"id":{"type":"string","title":"Id","description":"The ID of this app."},"app_class_id":{"type":"string","title":"App Class Id","description":"The non-unique ID of the service associated with this requestable permission. Depending on how it is sourced in Lumos, this may be the app's name, website, or other identifier."},"instance_id":{"type":"string","title":"Instance Id","description":"The non-unique ID of the instance associated with this app. This will be the Okta app id if it’s an Okta app, or will be marked as custom_app_import if manually uploaded into Lumos."},"user_friendly_label":{"type":"string","title":"User Friendly Label","description":"The user-friendly label of this app."},"status":{"$ref":"#/components/schemas/DomainAppStatus","description":"The status of this app. Possible values: 'DISCOVERED', 'IN_REVIEW', 'NEEDS_REVIEW', 'APPROVED', 'BLOCKLISTED', 'DEPRECATED'"},"sources":{"items":{"$ref":"#/components/schemas/DiscoverySource"},"type":"array","title":"Sources","description":"The sources of this app."},"allow_multiple_permission_selection":{"type":"boolean","title":"Allow Multiple Permission Selection","description":"Determines whether users can request multiple permissions at once.This field will be removed in subsequent API versions."},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url","description":"The URL of the logo of this app."},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url","description":"The URL of the website of this app."},"request_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Instructions","description":"The request instructions."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"The user-facing description of the app"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","description":"The category of the app, as shown in the AppStore"},"disconnected":{"type":"boolean","title":"Disconnected","description":"Whether this app has been disconnected (its stored credentials removed via `DELETE /apps/{app_id}`). A disconnected app is excluded from `GET /apps?disconnected=false`; reconnect it with `PUT /apps/{app_id}`."},"links":{"$ref":"#/components/schemas/AppLinks","description":"A collection of URLs related to this application"},"custom_attributes":{"anyOf":[{"additionalProperties":{"$ref":"#/components/schemas/CustomAttribute"},"type":"object"},{"type":"null"}],"title":"Custom Attributes","description":"Custom attributes configured on the app"}},"type":"object","required":["id","app_class_id","instance_id","user_friendly_label","status","sources","allow_multiple_permission_selection","disconnected","links"],"title":"AppWithCustomAttributes"},"ApplicationTagOutput":{"properties":{"id":{"type":"string","title":"Id","description":"UUID of the application tag."},"name":{"type":"string","title":"Name","description":"Display name of the application tag."}},"type":"object","required":["id","name"],"title":"ApplicationTagOutput"},"ApproverInput":{"properties":{"type":{"$ref":"#/components/schemas/ApproverType","description":"The type of this approver."},"user":{"anyOf":[{"$ref":"#/components/schemas/BaseUser"},{"type":"null"}],"description":"Optionally, the approver can be a user."},"group":{"anyOf":[{"$ref":"#/components/schemas/BaseGroup"},{"type":"null"}],"description":"Optionally, the approver can be a group."}},"type":"object","title":"ApproverInput"},"ApproverOutput":{"properties":{"type":{"$ref":"#/components/schemas/ApproverType","description":"The type of this approver."},"user":{"anyOf":[{"$ref":"#/components/schemas/User"},{"type":"null"}],"description":"Optionally, the approver can be a user."},"group":{"anyOf":[{"$ref":"#/components/schemas/Group"},{"type":"null"}],"description":"Optionally, the approver can be a group."}},"type":"object","required":["type"],"title":"ApproverOutput"},"ApproverType":{"type":"string","enum":["USER","GROUP"],"title":"ApproverType"},"AttributeEqualityRule":{"properties":{"attribute":{"type":"string","title":"Attribute","description":"The label for the attribute that will be matched against"},"value":{"type":"string","title":"Value","description":"A value to check for strict equality against"}},"type":"object","required":["attribute","value"],"title":"AttributeEqualityRule"},"AttributeOperand":{"properties":{"label":{"type":"string","title":"Label"},"value":{"type":"string","title":"Value"}},"type":"object","required":["label","value"],"title":"AttributeOperand"},"BaseApp":{"properties":{"id":{"type":"string","title":"Id","description":"The ID of this app."}},"type":"object","required":["id"],"title":"BaseApp"},"BaseGroup":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"The ID of this group."},"app_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Id","description":"The ID of the app that sources this group."},"integration_specific_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Integration Specific Id","description":"The ID of this group, specific to the integration."}},"type":"object","title":"BaseGroup"},"BaseInlineWebhook":{"properties":{"id":{"type":"string","title":"Id","description":"The ID of this inline webhook."}},"type":"object","required":["id"],"title":"BaseInlineWebhook"},"BaseUser":{"properties":{"id":{"type":"string","title":"Id","description":"The ID of this user."}},"type":"object","required":["id"],"title":"BaseUser"},"Body_createKnowledgeContext":{"properties":{"title":{"type":"string","title":"Title","description":"Title of the knowledge entry. Must be unique within the domain."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Body text (markdown supported). Omit when providing a file attachment instead."},"generic_tags":{"items":{"type":"string"},"type":"array","title":"Generic Tags","description":"Freeform tag strings to attach.","default":[]},"product_scopes":{"items":{"$ref":"#/components/schemas/KnowledgeProductScope"},"type":"array","title":"Product Scopes","description":"Products that can consume this entry.","default":[]},"file":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"File","description":"Optional file attachment."}},"type":"object","required":["title"],"title":"Body_createKnowledgeContext"},"Body_updateKnowledgeContext":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"New title. Omit to leave unchanged."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"New description body. Omit to leave unchanged."},"generic_tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Generic Tags","description":"Replacement tag list — replaces all existing tags. Omit to leave unchanged."},"product_scopes":{"anyOf":[{"items":{"$ref":"#/components/schemas/KnowledgeProductScope"},"type":"array"},{"type":"null"}],"title":"Product Scopes","description":"Replacement product scope list — replaces all existing scopes. Omit to leave unchanged."},"clear_attachment":{"type":"boolean","title":"Clear Attachment","description":"When true, removes the existing file attachment without uploading a new one.","default":false},"file":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"File","description":"Replacement file attachment. Omit to leave existing file unchanged."}},"type":"object","title":"Body_updateKnowledgeContext"},"Condition-Input":{"properties":{"attribute":{"anyOf":[{"type":"string"},{"$ref":"#/components/schemas/AttributeOperand"},{"type":"null"}],"title":"Attribute","description":"Attribute operator. This operator specifies an attribute of one of the target entities in our evaluation context that we'd like to use in this condition. "},"equals":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"},{"$ref":"#/components/schemas/ValueOption"},{"type":"null"}],"title":"Equals","description":"Equality operator."},"!=":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"},{"$ref":"#/components/schemas/ValueOption"},{"type":"null"}],"title":"!=","description":"Not equal to operator."},"and":{"anyOf":[{"items":{"$ref":"#/components/schemas/Condition-Input"},"type":"array"},{"type":"null"}],"title":"And","description":"AND operator - composes multiple conditions."},"or":{"anyOf":[{"items":{"$ref":"#/components/schemas/Condition-Input"},"type":"array"},{"type":"null"}],"title":"Or","description":"OR operator - composes multiple conditions."},"not":{"anyOf":[{"$ref":"#/components/schemas/Condition-Input"},{"type":"null"}],"description":"NOT operator - negates a condition."},"in":{"anyOf":[{"items":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"}]},"type":"array"},{"items":{"$ref":"#/components/schemas/ValueOption"},"type":"array"},{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"},{"$ref":"#/components/schemas/ValueOption"},{"type":"null"}],"title":"In","description":"IN operator - checks if the attribute is in the list. When applied to a string, checks if the value on the left-hand-side of the condition is a substring of this value."},"exists":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Exists","description":"Exists operator - checks if the attribute exists."},">":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"},{"$ref":"#/components/schemas/ValueOption"},{"type":"null"}],"title":">","description":"Greater than operator."},">=":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"},{"$ref":"#/components/schemas/ValueOption"},{"type":"null"}],"title":">=","description":"Greater than or equal to operator."},"<":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"},{"$ref":"#/components/schemas/ValueOption"},{"type":"null"}],"title":"<","description":"Less than operator."},"<=":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"},{"$ref":"#/components/schemas/ValueOption"},{"type":"null"}],"title":"<=","description":"Less than or equal to operator."},"contains":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"},{"$ref":"#/components/schemas/ValueOption"},{"type":"null"}],"title":"Contains","description":"Contains operator - checks if the attribute contains the value."},"contains_any":{"anyOf":[{"items":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"}]},"type":"array"},{"items":{"$ref":"#/components/schemas/ValueOption"},"type":"array"},{"type":"null"}],"title":"Contains Any","description":"CONTAINS ANY operator - checks if the attribute contains any of the values. In general, this operator is expected to operate against 2 different collections"},"starts_with":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"},{"$ref":"#/components/schemas/ValueOption"},{"type":"null"}],"title":"Starts With","description":"Starts with operator - checks if the attribute starts with the value."},"ends_with":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"},{"$ref":"#/components/schemas/ValueOption"},{"type":"null"}],"title":"Ends With","description":"Ends with operator - checks if the attribute ends with the value."},"lumos_expression":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lumos Expression","description":"Lumos expression operator - evaluates a Lumos expression."}},"additionalProperties":false,"type":"object","title":"Condition","description":"Pydantic model describing a Lumos Condition shape.\n\nThis model may be used to validate any input Condition JSON across services that expose\n interacting with LumosConditions in some manner."},"Condition-Output":{"properties":{"attribute":{"anyOf":[{"type":"string"},{"$ref":"#/components/schemas/AttributeOperand"},{"type":"null"}],"title":"Attribute","description":"Attribute operator. This operator specifies an attribute of one of the target entities in our evaluation context that we'd like to use in this condition. "},"equals":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"},{"$ref":"#/components/schemas/ValueOption"},{"type":"null"}],"title":"Equals","description":"Equality operator."},"!=":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"},{"$ref":"#/components/schemas/ValueOption"},{"type":"null"}],"title":"!=","description":"Not equal to operator."},"and":{"anyOf":[{"items":{"$ref":"#/components/schemas/Condition-Output"},"type":"array"},{"type":"null"}],"title":"And","description":"AND operator - composes multiple conditions."},"or":{"anyOf":[{"items":{"$ref":"#/components/schemas/Condition-Output"},"type":"array"},{"type":"null"}],"title":"Or","description":"OR operator - composes multiple conditions."},"not":{"anyOf":[{"$ref":"#/components/schemas/Condition-Output"},{"type":"null"}],"description":"NOT operator - negates a condition."},"in":{"anyOf":[{"items":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"}]},"type":"array"},{"items":{"$ref":"#/components/schemas/ValueOption"},"type":"array"},{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"},{"$ref":"#/components/schemas/ValueOption"},{"type":"null"}],"title":"In","description":"IN operator - checks if the attribute is in the list. When applied to a string, checks if the value on the left-hand-side of the condition is a substring of this value."},"exists":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Exists","description":"Exists operator - checks if the attribute exists."},">":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"},{"$ref":"#/components/schemas/ValueOption"},{"type":"null"}],"title":">","description":"Greater than operator."},">=":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"},{"$ref":"#/components/schemas/ValueOption"},{"type":"null"}],"title":">=","description":"Greater than or equal to operator."},"<":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"},{"$ref":"#/components/schemas/ValueOption"},{"type":"null"}],"title":"<","description":"Less than operator."},"<=":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"},{"$ref":"#/components/schemas/ValueOption"},{"type":"null"}],"title":"<=","description":"Less than or equal to operator."},"contains":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"},{"$ref":"#/components/schemas/ValueOption"},{"type":"null"}],"title":"Contains","description":"Contains operator - checks if the attribute contains the value."},"contains_any":{"anyOf":[{"items":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"}]},"type":"array"},{"items":{"$ref":"#/components/schemas/ValueOption"},"type":"array"},{"type":"null"}],"title":"Contains Any","description":"CONTAINS ANY operator - checks if the attribute contains any of the values. In general, this operator is expected to operate against 2 different collections"},"starts_with":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"},{"$ref":"#/components/schemas/ValueOption"},{"type":"null"}],"title":"Starts With","description":"Starts with operator - checks if the attribute starts with the value."},"ends_with":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"},{"$ref":"#/components/schemas/ValueOption"},{"type":"null"}],"title":"Ends With","description":"Ends with operator - checks if the attribute ends with the value."},"lumos_expression":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lumos Expression","description":"Lumos expression operator - evaluates a Lumos expression."}},"additionalProperties":false,"type":"object","title":"Condition","description":"Pydantic model describing a Lumos Condition shape.\n\nThis model may be used to validate any input Condition JSON across services that expose\n interacting with LumosConditions in some manner."},"ConnectIntegrationInput":{"properties":{"app_class_id":{"type":"string","title":"App Class Id","description":"Canonical identifier of the integration to connect, e.g. `okta.com`. Determines the credentials and settings the integration expects. Must be an integration Lumos supports for your domain; an unknown value is rejected with 400. Required — omitting it fails request validation with 422."},"settings":{"type":"object","title":"Settings","description":"Non-secret configuration as a JSON object — e.g. host, port, region, or tenant / instance URL. Carries the per-deployment tuning an integration needs that isn't a credential; the accepted keys vary by integration and some integrations need none. Integrations whose tenant is set manually take it here as `app_instance_identifier` (e.g. an Okta domain); others derive it from the credentials during connect. Discover the accepted keys via `GET /v1/integrations/{app_class_id}/connection-schema`. Optional — defaults to an empty object."},"auth":{"type":"object","title":"Auth","description":"Credentials as a JSON object. **All secrets go here** — there are no top-level credential fields. The accepted keys depend on the integration and are validated server-side; see the per-integration request examples. Discover the accepted keys for a given app via `GET /v1/integrations/{app_class_id}/connection-schema`. Some integrations connect in-band from these credentials (e.g. an `api_key`, or an OAuth `client_id`/`client_secret`). Others require browser consent and are finished in the Lumos UI — for those, `auth` may be empty (`{}`). Missing or wrong-shaped credentials are rejected with 400; credentials the third party rejects return 502."},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version","description":"Optional integration version override. Pins the connection to a specific integration implementation/version instead of the current default — used for staged rollouts and back-compat. Leave unset (`null`) to use the default version, which is correct for nearly all callers; an unregistered version is rejected with 400."}},"type":"object","required":["app_class_id"],"title":"ConnectIntegrationInput","examples":[{"app_class_id":"okta.com","auth":{"api_key":"0123456789abcdef0123456789abcdef"},"settings":{"app_instance_identifier":"myorg.okta.com"}},{"app_class_id":"datadog.com","auth":{"api_key":"0123456789abcdef0123456789abcdef","app_key":"app_key_0123456789abcdef0123456789abcdef","region":"us1"},"settings":{"site":"us1.datadoghq.com"}},{"app_class_id":"example_oauth_app","auth":{"client_id":"client-abc","client_secret":"secret-xyz"}},{"app_class_id":"bamboohr.com","auth":{}},{"app_class_id":"example_ics_app","auth":{"api_key":"tkn-0123456789"},"settings":{"sub":"https://tenant.example.com"}},{"app_class_id":"example_ics_multiauth_app","auth":{"example_oauth":{"client_id":"client-abc","client_secret":"secret-xyz"}},"settings":{"sub":"https://tenant.example.com"}},{"app_class_id":"example_on_prem_app","auth":{"api_key":"tkn-0123456789"},"settings":{"on_prem_agent_cluster_id":"cluster-abc-123","sub":"https://tenant.example.com"}},{"app_class_id":"aws-iam_ics","auth":{},"settings":{"region":"us-east-1","service_role_arn":"arn:aws:iam::123456789012:role/LumosServiceRole","service_role_external_id":"my-external-id"}},{"app_class_id":"aws.amazon.com","auth":{"service_role_external_id":"my-external-id"},"settings":{"app_instance_identifier":"arn:aws:iam::123456789012:role/LumosServiceRole"},"version":"iam"},{"app_class_id":"aws.amazon.com","auth":{"api_key":"scim-token-abc","region":"us-west-2","service_role_arn":"arn:aws:iam::123456789012:role/LumosServiceRole","service_role_external_id":"my-external-id","tenant_id":"d-1234567890"},"version":"sso_scim"}]},"ConnectionSource":{"type":"string","enum":["API","UI"],"title":"ConnectionSource","description":"Tracks how a domain app integration was initiated."},"Cost":{"properties":{"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency","description":"The currency in which this cost is stored"},"value":{"type":"number","title":"Value","description":"The quantity of the cost in terms of the specified currency"}},"type":"object","required":["value"],"title":"Cost"},"CreateAccessRequestInput":{"properties":{"app_id":{"type":"string","title":"App Id"},"requester_user_id":{"type":"string","title":"Requester User Id","description":"Override the user who made the request. If omitted, use the current user. Only available to organization admins."},"target_user_id":{"type":"string","title":"Target User Id","description":"User to request access for. If omitted, request for the current user."},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note","description":"[Deprecated - use business_justification] Why the user needs access."},"business_justification":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Justification","description":"Why the user needs access."},"expiration_in_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expiration In Seconds","description":"Once granted, how long the access should last. Omit for permanent access."},"access_length":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Length","description":"Once granted, how long the access should last. Omit for permanent access. All possible values are '2 hours', '4 hours', '8 hours', '12 hours', '1 day', '2 days', '3 days', '7 days', '14 days', '30 days', '90 days', 'Unlimited', but the exact options depend on the settings of the app and permissions."},"requestable_permission_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Requestable Permission Ids","description":"The IDs of the requestable permissions the user is requesting access to. Omit this to just request access to the app."}},"type":"object","required":["app_id"],"title":"CreateAccessRequestInput"},"CreateAccessReviewInput":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Name of the access review campaign."},"deadline_at":{"type":"string","format":"date-time","title":"Deadline At","description":"Deadline by which reviewers must complete their reviews. ISO 8601 datetime (e.g. '2026-05-01T00:00:00Z')."},"owner_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Id","description":"UUID of the user to set as the review owner. Defaults to the authenticated user if not provided."},"target_launch_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Target Launch Date","description":"Scheduled launch date for the review. ISO 8601 datetime."},"recurrence_config":{"anyOf":[{"$ref":"#/components/schemas/RecurrenceConfigInput"},{"type":"null"}],"description":"Recurrence configuration. Mutually exclusive with recurrence_days_frequency."},"recurrence_days_frequency":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Recurrence Days Frequency","description":"Recurrence frequency in days. Mutually exclusive with recurrence_config."},"apps":{"items":{"$ref":"#/components/schemas/AccessReviewDomainAppInput"},"type":"array","maxItems":200,"title":"Apps","description":"List of domain apps to include in this review. Capped at 200 entries per the Access Review scale limits (technically-supported tier)."}},"additionalProperties":false,"type":"object","required":["name","deadline_at"],"title":"CreateAccessReviewInput","examples":[{"apps":[{"id":"00000000-0000-0000-0000-000000000001","review_type":"ENTITLEMENTS"}],"deadline_at":"2026-06-30T23:59:59Z","name":"Q2 2026 Quarterly Access Review"},{"apps":[{"id":"00000000-0000-0000-0000-000000000001","review_type":"ACCOUNTS","scope_filters":[{"group":"EMPLOYMENT_STATUS","label":"Terminated","name":"employment_status","value":"TERMINATED"}]}],"deadline_at":"2026-06-30T23:59:59Z","name":"Finance apps — terminated users only","owner_id":"00000000-0000-0000-0000-0000000000aa"}]},"CreateAccessReviewOutput":{"properties":{"access_review":{"$ref":"#/components/schemas/AccessReviewOutput","description":"The newly created access review."},"errors":{"anyOf":[{"items":{"$ref":"#/components/schemas/AccessReviewDomainAppErrorOutput"},"type":"array"},{"type":"null"}],"title":"Errors","description":"Per-app errors for any domain apps that could not be added. The review is still created with the valid apps."}},"type":"object","required":["access_review"],"title":"CreateAccessReviewOutput"},"CustomAttribute":{"properties":{"type":{"$ref":"#/components/schemas/CustomAttributeType","description":"The type of custom attribute. Only text and user options are available today"},"value":{"anyOf":[{"type":"string"},{"items":{"$ref":"#/components/schemas/User"},"type":"array"},{"type":"string","format":"date-time"},{"type":"integer"},{"type":"null"}],"title":"Value","description":"The value of the attribute for an individual Order"}},"type":"object","required":["type"],"title":"CustomAttribute"},"CustomAttributeScopeFilterInput":{"properties":{"group":{"type":"string","enum":["CUSTOM_ATTRIBUTE"],"const":"CUSTOM_ATTRIBUTE","title":"Group","description":"Always CUSTOM_ATTRIBUTE."},"name":{"type":"string","maxLength":255,"title":"Name","description":"Custom attribute label (e.g. 'Department'). Matches the label from scope_options."},"label":{"type":"string","maxLength":255,"title":"Label","description":"Human-readable display label."},"value":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Value","description":"Value to filter by for this custom attribute."},"type":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Type","description":"Attribute type (STRING, INTEGER, DATETIME, USER, GROUP, SINGLESELECT, MULTISELECT)."}},"additionalProperties":false,"type":"object","required":["group","name","label"],"title":"CustomAttributeScopeFilterInput","description":"Scope filter for ``CUSTOM_ATTRIBUTE`` groups.\n\nCustom attributes are keyed by ``name`` (the attribute label, e.g.\n\"Department\"). ``type`` declares the attribute's type (STRING, INTEGER,\nDATETIME, USER, GROUP, SINGLESELECT, MULTISELECT)."},"CustomAttributeType":{"type":"string","enum":["TEXT","USER","SINGLE_SELECT"],"title":"CustomAttributeType"},"CustomIntakeFieldResponseOutput":{"properties":{"prompt":{"type":"string","title":"Prompt","description":"The custom intake field prompt shown to the requester."},"response":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response","description":"The requester's response to the custom intake field."}},"type":"object","required":["prompt"],"title":"CustomIntakeFieldResponseOutput","description":"API version of a CustomIntakeFieldResponse on an access request."},"DatetimeScopeFilterInput":{"properties":{"group":{"type":"string","enum":["LAST_LOGIN","LAST_ACTIVITY"],"title":"Group","description":"Datetime scope filter group. Must be LAST_LOGIN or LAST_ACTIVITY."},"after":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"After","description":"Inclusive lower bound. Records where the datetime field is >= this value match."},"before":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Before","description":"Inclusive upper bound. Records where the datetime field is <= this value match."}},"additionalProperties":false,"type":"object","required":["group"],"title":"DatetimeScopeFilterInput","description":"Scope filter for datetime-valued groups (``LAST_LOGIN``, ``LAST_ACTIVITY``).\n\nProvide ``after``, ``before``, or both. Bounds are inclusive. At least one\nmust be set.\n\n- ``after`` alone: matches records where the field is on or after that timestamp.\n- ``before`` alone: matches records where the field is on or before that timestamp.\n- Both: matches records in the closed interval ``[after, before]``. If the\n  two bounds are equal, this matches records at exactly that timestamp."},"DisconnectIntegrationOutput":{"properties":{"id":{"type":"string","title":"Id","description":"The domain app UUID of the disconnected integration."},"app_class_id":{"type":"string","title":"App Class Id","description":"The canonical integration identifier."},"disconnected":{"type":"boolean","title":"Disconnected","description":"Confirms the app was disconnected. Always `true` on a successful response — the app's stored credentials were removed and it was returned to a connectable state (or its record deleted when no users remained)."}},"type":"object","required":["id","app_class_id","disconnected"],"title":"DisconnectIntegrationOutput"},"DiscoverySource":{"type":"string","enum":["GSUITE_QUICK_INBOX","GSUITE_DEEP_INBOX","MICROSOFT_DEEP_INBOX","MICROSOFT_OAUTH","MICROSOFT_GCC","GSUITE_OAUTH","OKTA","MANUAL","ONELOGIN","ATLASSIAN","GOOGLE_CLOUD","LUMOS_INTEGRATION","JUMPCLOUD","CUSTOM"],"title":"DiscoverySource"},"DomainAppStatus":{"type":"string","enum":["DISCOVERED","IN_REVIEW","NEEDS_REVIEW","APPROVED","BLOCKLISTED","DEPRECATED"],"title":"DomainAppStatus"},"ErrorType":{"type":"string","enum":["validation","authentication","permission","not_found","conflict","rate_limited","runtime"],"title":"ErrorType"},"FileUpload":{"properties":{"type":{"$ref":"#/components/schemas/FileUploadType","description":"The type of content being uploaded. The only supported type today is 'url'"},"value":{"type":"string","title":"Value","description":"The data to upload. This should be a publicly accessible URL that resolves to a file"}},"type":"object","required":["type","value"],"title":"FileUpload"},"FileUploadType":{"type":"string","enum":["url","base64"],"title":"FileUploadType"},"FlowState":{"type":"string","enum":["SUCCESS","FAILURE","RUNNING","NOT_STARTED"],"title":"FlowState"},"FoundDocumentsUpload":{"properties":{"unique_identifier":{"type":"string","title":"Unique Identifier","description":"A value that can be used to uniquely identify this contract (e.g. PO number, file name, etc)"},"files":{"items":{"$ref":"#/components/schemas/FileUpload"},"type":"array","title":"Files","description":"A list of URLs that resolve to files that should be attached to the Found Document"},"vendor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Name","description":"The name of the vendor that this document is for"},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date","description":"The start of the vendor agreement"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date","description":"The end of the vendor agreement"},"source_app_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source App Id","description":"By passing the ID of an application within Lumos, it will appear as if this Found Document was sourced from that app"},"total_cost":{"anyOf":[{"$ref":"#/components/schemas/Cost"},{"type":"null"}],"description":"The total cost of the contract. If this is a multi-year contract, this should include the cost for future years"},"line_items":{"anyOf":[{"items":{"$ref":"#/components/schemas/LineItemUpload"},"type":"array"},{"type":"null"}],"title":"Line Items","description":"The line items on the contract"}},"type":"object","required":["unique_identifier","files"],"title":"FoundDocumentsUpload"},"Group":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"The ID of this group."},"app_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Id","description":"The ID of the app that sources this group."},"integration_specific_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Integration Specific Id","description":"The ID of this group, specific to the integration."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"The name of this group."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"The description of this group."},"group_lifecycle":{"anyOf":[{"$ref":"#/components/schemas/Lifecycle"},{"type":"null"}],"description":"The lifecycle of this group.","default":"SYNCED"},"source_app_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source App Id","description":"The ID of the app that sources this group."}},"type":"object","title":"Group"},"GroupProvisioningOption":{"type":"string","enum":["DIRECT_TO_USER","GROUPS_AND_HIDDEN","GROUPS_AND_VISIBLE"],"title":"GroupProvisioningOption"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IdentityEvent":{"properties":{"id":{"type":"string","title":"Id","description":"Unique identifier for this identity event."},"user_id":{"type":"string","title":"User Id","description":"UUID of the user whose attribute changed."},"detected_time":{"type":"string","format":"date-time","title":"Detected Time","description":"Timestamp (ISO-8601) when the change was detected."},"changed_field":{"type":"string","title":"Changed Field","description":"The field that changed."},"old_field_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Old Field Value","description":"Previous value of the changed field."},"new_field_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"New Field Value","description":"New value of the changed field."}},"type":"object","required":["id","user_id","detected_time","changed_field"],"title":"IdentityEvent","description":"API representation of a identity event."},"IdentityEventsResult":{"properties":{"identity_events":{"items":{"$ref":"#/components/schemas/IdentityEvent"},"type":"array","title":"Identity Events","description":"Identity events returned by the query."},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Cursor for fetching the next page of results."},"total_count":{"type":"integer","title":"Total Count","description":"Total number of events matching the query."}},"type":"object","required":["identity_events","total_count"],"title":"IdentityEventsResult","description":"Paginated list of identity events."},"InlineWebhook":{"properties":{"id":{"type":"string","title":"Id","description":"The ID of this inline webhook."},"hook_type":{"$ref":"#/components/schemas/InlineWebhookType","description":"The type of this inline webhook."},"name":{"type":"string","title":"Name","description":"The name of this inline webhook."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"The description of this inline webhook."}},"type":"object","required":["id","hook_type","name"],"title":"InlineWebhook"},"InlineWebhookType":{"type":"string","enum":["PRE_APPROVAL","PROVISION","DEPROVISION","REQUEST_VALIDATION","SIEM"],"title":"InlineWebhookType"},"JobStateOutput":{"properties":{"job_id":{"type":"string","title":"Job Id","description":"The ID of the job."},"state":{"$ref":"#/components/schemas/FlowState","description":"The state of the job."}},"type":"object","required":["job_id"],"title":"JobStateOutput"},"KnowledgeContextOutput":{"properties":{"id":{"type":"string","title":"Id","description":"UUID of the knowledge entry."},"title":{"type":"string","title":"Title","description":"Title of the knowledge entry."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Body text of the knowledge entry (markdown supported)."},"file_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Url","description":"URL of the attached file, if any."},"generic_tags":{"items":{"type":"string"},"type":"array","title":"Generic Tags","description":"Freeform tag strings attached to the entry."},"application_tags":{"items":{"$ref":"#/components/schemas/ApplicationTagOutput"},"type":"array","title":"Application Tags","description":"Application tags attached to the entry."},"product_scopes":{"items":{"$ref":"#/components/schemas/KnowledgeProductScope"},"type":"array","title":"Product Scopes","description":"Products that can consume this knowledge entry."},"visibility":{"type":"string","title":"Visibility","description":"Visibility level of the entry."},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At","description":"ISO 8601 creation timestamp."},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At","description":"ISO 8601 last-updated timestamp."}},"type":"object","required":["id","title","generic_tags","application_tags","product_scopes","visibility"],"title":"KnowledgeContextOutput"},"KnowledgeProductScope":{"type":"string","enum":["APPSTORE","ACCESS_REVIEWS","ALBUS","GLOBAL","ALBUS_DEEP_RESEARCH","IDENTITY_INTELLIGENCE"],"title":"KnowledgeProductScope"},"Lifecycle":{"type":"string","enum":["SYNCED","NATIVE"],"title":"Lifecycle"},"LimitOffsetPage_ActivityLog_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ActivityLog"},"type":"array","title":"Items"},"total":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Total"},"limit":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Limit"},"offset":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Offset"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object","required":["items","total","limit","offset","links"],"title":"LimitOffsetPage[ActivityLog]"},"LineItem":{"properties":{"name":{"type":"string","title":"Name","description":"The name of the line item as stored in Lumos"},"type":{"type":"string","title":"Type","description":"The type of purchase that this line item refers to"},"quantity":{"type":"integer","title":"Quantity","description":"The number of units purchased for this line item"},"unit_cost":{"$ref":"#/components/schemas/LineItemUnitCost","description":"The unit cost of this line item"},"start_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date","description":"The start of the line item"},"end_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date","description":"The end of the line item. Null for monthly line items."}},"type":"object","required":["name","type","quantity","unit_cost","start_date","end_date"],"title":"LineItem"},"LineItemInput":{"properties":{"name":{"type":"string","title":"Name","description":"The name of the line item as stored in Lumos"},"type":{"type":"string","title":"Type","description":"The type of purchase that this line item refers to"},"quantity":{"type":"integer","title":"Quantity","description":"The number of units purchased for this line item"},"unit_cost":{"$ref":"#/components/schemas/LineItemUnitCostInput","description":"The per-unit cost of the line item"},"start_date":{"type":"string","format":"date","title":"Start Date","description":"The start date of the line item"},"end_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date","description":"The end date of the line item."}},"type":"object","required":["name","type","quantity","unit_cost","start_date","end_date"],"title":"LineItemInput"},"LineItemUnitCost":{"properties":{"per_month":{"$ref":"#/components/schemas/Cost","description":"The per unit cost associated with this line item, amortized to the cost per month"}},"type":"object","required":["per_month"],"title":"LineItemUnitCost"},"LineItemUnitCostInput":{"properties":{"period":{"type":"string","title":"Period","description":"The period which this cost covers. Available options are per_month or per_year"},"value":{"anyOf":[{"type":"number"},{"type":"string"}],"title":"Value","description":"The cost in terms of the specified currency (4 decimal places supported)"}},"type":"object","required":["period","value"],"title":"LineItemUnitCostInput"},"LineItemUpload":{"properties":{"name":{"type":"string","title":"Name","description":"The name of the line item as stored in Lumos"},"quantity":{"type":"integer","title":"Quantity","description":"The number of units purchased for this line item"},"unit_cost":{"$ref":"#/components/schemas/Cost","description":"The unit cost of this line item"}},"type":"object","required":["name","quantity","unit_cost"],"title":"LineItemUpload"},"Links":{"properties":{"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First","examples":["/api/v1/users?limit=1&offset1"]},"last":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last","examples":["/api/v1/users?limit=1&offset1"]},"self":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Self","examples":["/api/v1/users?limit=1&offset1"]},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next","examples":["/api/v1/users?limit=1&offset1"]},"prev":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prev","examples":["/api/v1/users?limit=1&offset1"]}},"type":"object","required":["first","last","self","next","prev"],"title":"Links"},"ListKnowledgeContextOutput":{"properties":{"items":{"items":{"$ref":"#/components/schemas/KnowledgeContextOutput"},"type":"array","title":"Items","description":"Knowledge entries on this page."},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Opaque cursor to pass as `cursor` in the next request to retrieve the following page. Absent when there are no more results."}},"type":"object","required":["items"],"title":"ListKnowledgeContextOutput"},"ManagerApprovalOption":{"type":"string","enum":["NONE","INITIAL_APPROVAL"],"title":"ManagerApprovalOption"},"OrderInput":{"properties":{"unique_identifier":{"type":"string","title":"Unique Identifier","description":"A unique ID for the contract being uploaded. This can be an ID from an external system like Ironclad, an internal ID such as a PO number, or simply the name of the vendor + date of the contract."},"vendor":{"$ref":"#/components/schemas/Vendor","description":"Information about the vendor associated with this contract. Currently, we will only support a name field."},"start_date":{"type":"string","format":"date","title":"Start Date","description":"The start date of the attached contract"},"end_date":{"type":"string","format":"date","title":"End Date","description":"The end date of the attached contract"},"opt_out_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Opt Out Date","description":"The date by which a vendor must be notified before terminating the order"},"auto_renewal":{"type":"boolean","title":"Auto Renewal","description":"Whether or not the contract auto-renews"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency","description":"The currency in which the contract is being paid in ISO 4217 format"},"line_items":{"items":{"$ref":"#/components/schemas/LineItemInput"},"type":"array","title":"Line Items","description":"The list of currently active line items for this Vendor Agreement. If there are no currently active line items, the most recent set of line items is returned."},"custom_attributes":{"additionalProperties":{"$ref":"#/components/schemas/VendorAgreementCustomAttribute-Input"},"type":"object","title":"Custom Attributes","description":"Any additional attributes that you would like to save on the Order. The set of available options must be configured in advance in Lumos."},"source_app_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source App Id","description":"UUID of the application in Lumos where this order was sourced (e.g. the ID of Ironclad within Lumos)"}},"type":"object","required":["unique_identifier","vendor","start_date","end_date","auto_renewal","line_items"],"title":"OrderInput"},"Page_AccessPolicyOutput_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AccessPolicyOutput"},"type":"array","title":"Items"},"total":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Total"},"page":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Page"},"size":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Size"},"pages":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Pages"}},"type":"object","required":["items","total","page","size"],"title":"Page[AccessPolicyOutput]"},"Page_AccessRequest_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AccessRequest"},"type":"array","title":"Items"},"total":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Total"},"page":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Page"},"size":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Size"},"pages":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Pages"}},"type":"object","required":["items","total","page","size"],"title":"Page[AccessRequest]"},"Page_AccessReviewOutput_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AccessReviewOutput"},"type":"array","title":"Items"},"total":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Total"},"page":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Page"},"size":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Size"},"pages":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Pages"}},"type":"object","required":["items","total","page","size"],"title":"Page[AccessReviewOutput]"},"Page_Account_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/Account"},"type":"array","title":"Items"},"total":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Total"},"page":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Page"},"size":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Size"},"pages":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Pages"}},"type":"object","required":["items","total","page","size"],"title":"Page[Account]"},"Page_AppStoreApp_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AppStoreApp"},"type":"array","title":"Items"},"total":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Total"},"page":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Page"},"size":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Size"},"pages":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Pages"}},"type":"object","required":["items","total","page","size"],"title":"Page[AppStoreApp]"},"Page_AppWithCustomAttributes_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AppWithCustomAttributes"},"type":"array","title":"Items"},"total":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Total"},"page":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Page"},"size":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Size"},"pages":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Pages"}},"type":"object","required":["items","total","page","size"],"title":"Page[AppWithCustomAttributes]"},"Page_Group_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/Group"},"type":"array","title":"Items"},"total":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Total"},"page":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Page"},"size":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Size"},"pages":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Pages"}},"type":"object","required":["items","total","page","size"],"title":"Page[Group]"},"Page_PreApprovalRuleOutput_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PreApprovalRuleOutput"},"type":"array","title":"Items"},"total":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Total"},"page":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Page"},"size":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Size"},"pages":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Pages"}},"type":"object","required":["items","total","page","size"],"title":"Page[PreApprovalRuleOutput]"},"Page_RequestablePermissionOutput_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RequestablePermissionOutput"},"type":"array","title":"Items"},"total":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Total"},"page":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Page"},"size":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Size"},"pages":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Pages"}},"type":"object","required":["items","total","page","size"],"title":"Page[RequestablePermissionOutput]"},"Page_Task_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/Task"},"type":"array","title":"Items"},"total":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Total"},"page":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Page"},"size":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Size"},"pages":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Pages"}},"type":"object","required":["items","total","page","size"],"title":"Page[Task]"},"Page_UserWithCustomAttributes_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/UserWithCustomAttributes"},"type":"array","title":"Items"},"total":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Total"},"page":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Page"},"size":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Size"},"pages":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Pages"}},"type":"object","required":["items","total","page","size"],"title":"Page[UserWithCustomAttributes]"},"Page_User_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/User"},"type":"array","title":"Items"},"total":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Total"},"page":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Page"},"size":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Size"},"pages":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Pages"}},"type":"object","required":["items","total","page","size"],"title":"Page[User]"},"Page_VendorAgreement_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/VendorAgreement"},"type":"array","title":"Items"},"total":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Total"},"page":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Page"},"size":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Size"},"pages":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Pages"}},"type":"object","required":["items","total","page","size"],"title":"Page[VendorAgreement]"},"PerformTaskActionInput":{"properties":{"action_type":{"type":"string","title":"Action Type","description":"The action type to perform."},"transition_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transition To","description":"The status to transition to. If omitted and the action has exactly one transition target, it will be inferred."}},"type":"object","required":["action_type"],"title":"PerformTaskActionInput"},"PermissionType":{"type":"string","enum":["SYNCED","NATIVE"],"title":"PermissionType"},"PositionalWeekday":{"properties":{"weekday":{"type":"integer","maximum":6.0,"minimum":0.0,"title":"Weekday","description":"0=Monday, 1=Tuesday, ..., 6=Sunday."},"n":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"N","description":"Which occurrence of the weekday within the period (e.g. 1 = first, -1 = last). None means every matching weekday."}},"type":"object","required":["weekday"],"title":"PositionalWeekday","description":"A positional weekday for monthly/yearly recurrences — e.g. \"the first Monday of the\nmonth\" is ``{\"weekday\": 0, \"n\": 1}``. Mirrors ``dateutil.rrule.weekday``.\n\nA plain integer weekday (0–6) covers the common case; this richer form is only needed\nwhen an Nth-occurrence qualifier is present, which a bare int cannot express."},"PreApprovalRuleInput":{"properties":{"justification":{"type":"string","title":"Justification","description":"The justification of this preapproval rule."},"time_based_access":{"items":{"type":"string"},"type":"array","title":"Time Based Access","description":"Preapproval rule time access length,"},"app_id":{"type":"string","title":"App Id","description":"The ID of the app associated with this pre-approval rule."},"preapproved_groups":{"items":{"$ref":"#/components/schemas/BaseGroup"},"type":"array","title":"Preapproved Groups","description":"The preapproved groups of this preapproval rule.","default":[]},"preapproved_permissions":{"items":{"$ref":"#/components/schemas/RequestablePermissionBase"},"type":"array","title":"Preapproved Permissions","description":"The preapproved permissions of this preapproval rule.","default":[]},"preapproved_users_by_attribute":{"items":{"$ref":"#/components/schemas/AttributeEqualityRule"},"type":"array","title":"Preapproved Users By Attribute","description":"The set of users this pre-approval rule applies to, defined by attributes that must be true about the user","default":[]},"preapproval_webhooks":{"items":{"$ref":"#/components/schemas/BaseInlineWebhook"},"type":"array","title":"Preapproval Webhooks","description":"The preapproval webhooks of this preapproval rule.","default":[]}},"type":"object","required":["justification","app_id"],"title":"PreApprovalRuleInput"},"PreApprovalRuleOutput":{"properties":{"justification":{"type":"string","title":"Justification","description":"The justification of this preapproval rule."},"time_based_access":{"items":{"type":"string"},"type":"array","title":"Time Based Access","description":"Preapproval rule time access length,"},"id":{"type":"string","title":"Id","description":"The ID of this preapproval rule."},"app_id":{"type":"string","title":"App Id","description":"The ID of the app associated with this pre-approval rule."},"app_class_id":{"type":"string","title":"App Class Id","description":"The ID of the service associated with this pre-approval rule."},"app_instance_id":{"type":"string","title":"App Instance Id","description":"Optionally, an app has an identifer associated with it's particular instance."},"preapproved_groups":{"items":{"$ref":"#/components/schemas/Group"},"type":"array","title":"Preapproved Groups","description":"The preapproved groups of this preapproval rule.","default":[]},"preapproved_users_by_attribute":{"items":{"$ref":"#/components/schemas/AttributeEqualityRule"},"type":"array","title":"Preapproved Users By Attribute","description":"The set of users this pre-approval rule applies to, defined by attributes that must be true about the user","default":[]},"preapproved_permissions":{"items":{"$ref":"#/components/schemas/RequestablePermissionBaseOutput"},"type":"array","title":"Preapproved Permissions","description":"The preapproved permissions of this preapproval rule.","default":[]},"preapproval_webhooks":{"items":{"$ref":"#/components/schemas/InlineWebhook"},"type":"array","title":"Preapproval Webhooks","description":"The preapproval webhooks of this preapproval rule.","default":[]}},"type":"object","required":["justification","app_id","app_class_id","app_instance_id"],"title":"PreApprovalRuleOutput"},"PreApprovalRuleUpdateInput":{"properties":{"justification":{"type":"string","title":"Justification","description":"The justification of this preapproval rule."},"time_based_access":{"items":{"type":"string"},"type":"array","title":"Time Based Access","description":"Preapproval rule time access length,"},"preapproved_groups":{"items":{"$ref":"#/components/schemas/BaseGroup"},"type":"array","title":"Preapproved Groups","description":"The preapproved groups of this preapproval rule.","default":[]},"preapproved_permissions":{"items":{"$ref":"#/components/schemas/RequestablePermissionBase"},"type":"array","title":"Preapproved Permissions","description":"The preapproved permissions of this preapproval rule.","default":[]},"preapproved_users_by_attribute":{"items":{"$ref":"#/components/schemas/AttributeEqualityRule"},"type":"array","title":"Preapproved Users By Attribute","description":"The set of users this pre-approval rule applies to, defined by attributes that must be true about the user","default":[]},"preapproval_webhooks":{"items":{"$ref":"#/components/schemas/BaseInlineWebhook"},"type":"array","title":"Preapproval Webhooks","description":"The preapproval webhooks of this preapproval rule.","default":[]}},"type":"object","required":["justification"],"title":"PreApprovalRuleUpdateInput"},"ProductArea":{"type":"string","enum":["ACCESS_REVIEWS","APPSTORE","MOVER","ATTRIBUTE_SYNC","OFFBOARDING","ONBOARDING","PLATFORM","SAVINGS","ACCESS_POLICIES"],"title":"ProductArea"},"ReassignTaskInput":{"properties":{"user_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"User Ids","description":"IDs of users to assign."},"group_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Group Ids","description":"IDs of groups to assign."},"replace":{"type":"boolean","title":"Replace","description":"Whether to replace existing assignees or add to them.","default":true}},"type":"object","title":"ReassignTaskInput"},"RecurrenceConfig":{"properties":{"freq":{"type":"integer","title":"Freq","description":"Recurrence frequency. Use dateutil.rrule constants: YEARLY=0, MONTHLY=1, WEEKLY=2, DAILY=3, HOURLY=4, MINUTELY=5, SECONDLY=6."},"interval":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Interval","description":"Interval between each recurrence. Defaults to 1 (every freq period)."},"count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Count","description":"Total number of occurrences. Mutually exclusive with until."},"until":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Until","description":"End date/time for the recurrence. ISO 8601 datetime string. Mutually exclusive with count."},"byweekday":{"anyOf":[{"items":{"anyOf":[{"type":"integer"},{"$ref":"#/components/schemas/PositionalWeekday"}]},"type":"array"},{"type":"null"}],"title":"Byweekday","description":"Days of the week to recur on. 0=Monday, 1=Tuesday, ..., 6=Sunday. For positional weekdays (e.g. the first Monday of the month) use the {\"weekday\": N, \"n\": K} form, e.g. {\"weekday\": 0, \"n\": 1}."},"bymonth":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Bymonth","description":"Months to recur on (1–12)."},"bymonthday":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Bymonthday","description":"Days of the month to recur on (1–31, negative values count from end)."},"byyearday":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Byyearday","description":"Days of the year to recur on."},"byweekno":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Byweekno","description":"Week numbers of the year to recur on."},"bysetpos":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Bysetpos","description":"Positions within the recurrence set to include (e.g. -1 for last occurrence, 1 for first)."},"byhour":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Byhour","description":"Hours of the day to recur on (0–23)."},"byminute":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Byminute","description":"Minutes of the hour to recur on (0–59)."},"bysecond":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Bysecond","description":"Seconds of the minute to recur on (0–59)."},"wkst":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Wkst","description":"Week start day. 0=Monday, 6=Sunday. Defaults to Monday."}},"type":"object","required":["freq"],"title":"RecurrenceConfig","description":"Shape of a recurrence configuration. Fields map directly to dateutil.rrule kwargs.\nSee https://dateutil.readthedocs.io/en/stable/rrule.html for full documentation.\nThe minimum required field is freq."},"RecurrenceConfigInput":{"properties":{"freq":{"type":"integer","title":"Freq","description":"Recurrence frequency. Use dateutil.rrule constants: YEARLY=0, MONTHLY=1, WEEKLY=2, DAILY=3, HOURLY=4, MINUTELY=5, SECONDLY=6."},"interval":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Interval","description":"Interval between each recurrence. Defaults to 1 (every freq period)."},"count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Count","description":"Total number of occurrences. Mutually exclusive with until."},"until":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Until","description":"End date/time for the recurrence. ISO 8601 datetime string. Mutually exclusive with count."},"byweekday":{"anyOf":[{"items":{"anyOf":[{"type":"integer"},{"$ref":"#/components/schemas/PositionalWeekday"}]},"type":"array"},{"type":"null"}],"title":"Byweekday","description":"Days of the week to recur on. 0=Monday, 1=Tuesday, ..., 6=Sunday. For positional weekdays (e.g. the first Monday of the month) use the {\"weekday\": N, \"n\": K} form, e.g. {\"weekday\": 0, \"n\": 1}."},"bymonth":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Bymonth","description":"Months to recur on (1–12)."},"bymonthday":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Bymonthday","description":"Days of the month to recur on (1–31, negative values count from end)."},"byyearday":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Byyearday","description":"Days of the year to recur on."},"byweekno":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Byweekno","description":"Week numbers of the year to recur on."},"bysetpos":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Bysetpos","description":"Positions within the recurrence set to include (e.g. -1 for last occurrence, 1 for first)."},"byhour":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Byhour","description":"Hours of the day to recur on (0–23)."},"byminute":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Byminute","description":"Minutes of the hour to recur on (0–59)."},"bysecond":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Bysecond","description":"Seconds of the minute to recur on (0–59)."},"wkst":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Wkst","description":"Week start day. 0=Monday, 6=Sunday. Defaults to Monday."}},"type":"object","required":["freq"],"title":"RecurrenceConfigInput","description":"Extends RecurrenceConfig with rrule semantic validation for use on write paths."},"RequestApprovalConfigInput":{"properties":{"request_approval_config_override":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Request Approval Config Override","description":"Indicates if approval flow is overridden."},"manager_approval":{"anyOf":[{"$ref":"#/components/schemas/ManagerApprovalOption"},{"type":"null"}],"description":"Manager approval can be configured as necessary to continue","default":"NONE"},"require_additional_approval":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Require Additional Approval","description":"When true, enables a second approval stage so requests require approval from both stage 1 and stage 2 approvers. When false, disables the second approval stage and merges any existing stage 2 approvers into stage 1. When omitted, the current multi-stage approval setting is left unchanged."},"custom_approval_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Approval Message","description":"After the approval step, send a custom message to requesters. Note that the permission level approval message will override the App level approval message if custom_approval_message_override is set. Markdown for links and text formatting is supported."},"custom_approval_message_override":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Custom Approval Message Override","description":"Indicates if custom_approval_message is overridden."},"approvers":{"$ref":"#/components/schemas/AppApproversInput","description":"AppStore App approvers assigned."},"approvers_stage_2":{"$ref":"#/components/schemas/AppApproversInput","description":"AppStore App stage 2 approvers assigned."},"request_approval_stages":{"anyOf":[{"items":{"$ref":"#/components/schemas/RequestApprovalStageInput"},"type":"array"},{"type":"null"}],"title":"Request Approval Stages","description":"The stages of this request approval."}},"type":"object","title":"RequestApprovalConfigInput"},"RequestApprovalConfigOutput":{"properties":{"request_approval_config_override":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Request Approval Config Override","description":"Indicates if approval flow is overridden."},"manager_approval":{"anyOf":[{"$ref":"#/components/schemas/ManagerApprovalOption"},{"type":"null"}],"description":"Manager approval can be configured as necessary to continue","default":"NONE"},"require_additional_approval":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Require Additional Approval","description":"When true, enables a second approval stage so requests require approval from both stage 1 and stage 2 approvers. When false, disables the second approval stage and merges any existing stage 2 approvers into stage 1. When omitted, the current multi-stage approval setting is left unchanged."},"custom_approval_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Approval Message","description":"After the approval step, send a custom message to requesters. Note that the permission level approval message will override the App level approval message if custom_approval_message_override is set. Markdown for links and text formatting is supported."},"custom_approval_message_override":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Custom Approval Message Override","description":"Indicates if custom_approval_message is overridden."},"approvers":{"anyOf":[{"$ref":"#/components/schemas/AppApproversOutput"},{"type":"null"}],"description":"AppStore App approvers assigned."},"approvers_stage_2":{"anyOf":[{"$ref":"#/components/schemas/AppApproversOutput"},{"type":"null"}],"description":"AppStore App stage 2 approvers assigned."},"request_approval_stages":{"anyOf":[{"items":{"$ref":"#/components/schemas/RequestApprovalStageOutput"},"type":"array"},{"type":"null"}],"title":"Request Approval Stages","description":"The stages of this request approval.","default":[{}]},"response_describes_entire_approval_workflow":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Response Describes Entire Approval Workflow","description":"Indicates whether the approval configuration is fully represented by the existing API. If False, the approval configuration may contain additional stages or conditional approval chains not reflected in the v1 API."}},"type":"object","title":"RequestApprovalConfigOutput"},"RequestApprovalStageInput":{"properties":{"approvers":{"anyOf":[{"items":{"$ref":"#/components/schemas/ApproverInput"},"type":"array"},{"type":"null"}],"title":"Approvers","description":"The approvers of this stage."}},"type":"object","title":"RequestApprovalStageInput"},"RequestApprovalStageOutput":{"properties":{"approvers":{"anyOf":[{"items":{"$ref":"#/components/schemas/ApproverOutput"},"type":"array"},{"type":"null"}],"title":"Approvers","description":"The approvers of this stage."}},"type":"object","title":"RequestApprovalStageOutput"},"RequestConfigInputCreate":{"properties":{"appstore_visibility":{"anyOf":[{"$ref":"#/components/schemas/AppStoreVisibilityOption"},{"type":"null"}],"description":"The appstore visibility of this request config.","default":"HIDDEN"},"allowed_groups_override":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Allowed Groups Override","description":"Indicates if allowed groups is overriden from the app-level settings."},"allowed_groups":{"anyOf":[{"$ref":"#/components/schemas/AllowedGroupsConfigInput"},{"type":"null"}],"description":"Refers to which group(s) can make requests to this permission."},"request_approval_config":{"anyOf":[{"$ref":"#/components/schemas/RequestApprovalConfigInput"},{"type":"null"}],"description":"A request approval config can be optionally associated with this config"},"access_removal_inline_webhook":{"anyOf":[{"$ref":"#/components/schemas/BaseInlineWebhook"},{"type":"null"}],"description":"A deprovisioning webhook can be optionally associated with this config."},"request_validation_inline_webhook":{"anyOf":[{"$ref":"#/components/schemas/BaseInlineWebhook"},{"type":"null"}],"description":"A request validation webhook can be optionally associated with this config."},"request_fulfillment_config":{"anyOf":[{"$ref":"#/components/schemas/RequestFulfillmentConfigInput"},{"type":"null"}],"description":"A request fulfillment config can be optionally associated with this config"}},"type":"object","title":"RequestConfigInputCreate"},"RequestConfigInputUpdate":{"properties":{"appstore_visibility":{"anyOf":[{"$ref":"#/components/schemas/AppStoreVisibilityOption"},{"type":"null"}],"description":"The appstore visibility of this request config.","default":"HIDDEN"},"allowed_groups_override":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Allowed Groups Override","description":"Indicates if allowed groups is overriden from the app-level settings."},"allowed_groups":{"anyOf":[{"$ref":"#/components/schemas/AllowedGroupsConfigInput"},{"type":"null"}],"description":"Refers to which group(s) can make requests to this permission."},"request_approval_config":{"anyOf":[{"$ref":"#/components/schemas/RequestApprovalConfigInput"},{"type":"null"}],"description":"A request approval config can be optionally associated with this config"},"access_removal_inline_webhook":{"anyOf":[{"$ref":"#/components/schemas/BaseInlineWebhook"},{"type":"null"}],"description":"A deprovisioning webhook can be optionally associated with this config."},"request_validation_inline_webhook":{"anyOf":[{"$ref":"#/components/schemas/BaseInlineWebhook"},{"type":"null"}],"description":"A request validation webhook can be optionally associated with this config."},"request_fulfillment_config":{"anyOf":[{"$ref":"#/components/schemas/RequestFulfillmentConfigInputUpdate"},{"type":"null"}],"description":"A request fulfillment config can be optionally associated with this config"}},"type":"object","title":"RequestConfigInputUpdate"},"RequestConfigOutput":{"properties":{"appstore_visibility":{"anyOf":[{"$ref":"#/components/schemas/AppStoreVisibilityOption"},{"type":"null"}],"description":"The appstore visibility of this request config.","default":"HIDDEN"},"allowed_groups_override":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Allowed Groups Override","description":"Indicates if allowed groups is overriden from the app-level settings."},"allowed_groups":{"anyOf":[{"$ref":"#/components/schemas/AllowedGroupsConfigOutput"},{"type":"null"}],"description":"The allowed groups config associated with this config.","default":{"type":"ALL_GROUPS","groups":[]}},"request_approval_config":{"anyOf":[{"$ref":"#/components/schemas/RequestApprovalConfigOutput"},{"type":"null"}],"description":"A request approval config can be optionally associated with this config","default":{"manager_approval":"NONE","request_approval_stages":[{}]}},"request_fulfillment_config":{"anyOf":[{"$ref":"#/components/schemas/RequestFulfillmentConfigOutput"},{"type":"null"}],"description":"A request fulfillment config can be optionally associated with this config","default":{}},"access_removal_inline_webhook":{"anyOf":[{"$ref":"#/components/schemas/InlineWebhook"},{"type":"null"}],"description":"A deprovisioning webhook can be optionally associated with this config."},"request_validation_inline_webhook":{"anyOf":[{"$ref":"#/components/schemas/InlineWebhook"},{"type":"null"}],"description":"A request validation webhook can be optionally associated with this config."}},"type":"object","title":"RequestConfigOutput"},"RequestFulfillmentConfigInput":{"properties":{"manual_steps_needed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Manual Steps Needed","description":"Whether manual steps are needed."},"manual_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manual Instructions","description":"The manual instructions that go along."},"time_based_access":{"items":{"type":"string"},"type":"array","title":"Time Based Access","description":"If enabled, users can request an app for a selected duration. After expiry, Lumos will automatically remove user's access."},"time_based_access_override":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Time Based Access Override","description":"Indicates if time based access is overriden."},"provisioning_group":{"anyOf":[{"$ref":"#/components/schemas/BaseGroup"},{"type":"null"}],"description":"The provisioning group optionally associated with this config."},"provisioning_webhook":{"anyOf":[{"$ref":"#/components/schemas/BaseInlineWebhook"},{"type":"null"}],"description":"The provisioning webhook optionally associated with this config."}},"type":"object","title":"RequestFulfillmentConfigInput"},"RequestFulfillmentConfigInputUpdate":{"properties":{"manual_steps_needed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Manual Steps Needed","description":"Whether manual steps are needed."},"manual_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manual Instructions","description":"The manual instructions that go along."},"time_based_access":{"items":{"type":"string"},"type":"array","title":"Time Based Access","description":"If enabled, users can request an app for a selected duration. After expiry, Lumos will automatically remove user's access."},"time_based_access_override":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Time Based Access Override","description":"Indicates if time based access is overriden."},"provisioning_webhook":{"anyOf":[{"$ref":"#/components/schemas/BaseInlineWebhook"},{"type":"null"}],"description":"The provisioning webhook optionally associated with this config."}},"type":"object","title":"RequestFulfillmentConfigInputUpdate"},"RequestFulfillmentConfigOutput":{"properties":{"manual_steps_needed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Manual Steps Needed","description":"Whether manual steps are needed."},"manual_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manual Instructions","description":"The manual instructions that go along."},"time_based_access":{"items":{"type":"string"},"type":"array","title":"Time Based Access","description":"If enabled, users can request an app for a selected duration. After expiry, Lumos will automatically remove user's access."},"time_based_access_override":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Time Based Access Override","description":"Indicates if time based access is overriden."},"provisioning_group":{"anyOf":[{"$ref":"#/components/schemas/Group"},{"type":"null"}],"description":"The provisioning group optionally assocated with this config."},"provisioning_webhook":{"anyOf":[{"$ref":"#/components/schemas/InlineWebhook"},{"type":"null"}],"description":"The provisioning webhook optionally associated with this config."}},"type":"object","title":"RequestFulfillmentConfigOutput"},"RequestablePermissionBase":{"properties":{"id":{"type":"string","title":"Id","description":"The ID of this requestable permission."}},"type":"object","title":"RequestablePermissionBase"},"RequestablePermissionBaseOutput":{"properties":{"id":{"type":"string","title":"Id","description":"The ID of this requestable permission."},"type":{"anyOf":[{"$ref":"#/components/schemas/PermissionType"},{"type":"null"}],"description":"The type of this requestable permission."},"label":{"type":"string","title":"Label","description":"The label of this requestable permission."},"app_id":{"type":"string","title":"App Id","description":"The ID of the app associated with this requestable permission."},"app_class_id":{"type":"string","title":"App Class Id","description":"The non-unique ID of the service associated with this requestable permission. Depending on how it is sourced in Lumos, this may be the app's name, website,  or other identifier."},"app_instance_id":{"type":"string","title":"App Instance Id","description":"The ID of the instance associated with this requestable permission. This may be an empty string."}},"type":"object","required":["label","app_id","app_class_id","app_instance_id"],"title":"RequestablePermissionBaseOutput"},"RequestablePermissionInput":{"properties":{"app_id":{"type":"string","title":"App Id","description":"The ID of the app associated with this requestable permission."},"app_class_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Class Id","description":"The ID of the service associated with this requestable permission."},"app_instance_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Instance Id","description":"Optionally, an app has an identifer associated with it's particular instance."},"label":{"type":"string","title":"Label","description":"The label of this requestable permission."},"request_config":{"anyOf":[{"$ref":"#/components/schemas/RequestConfigInputCreate"},{"type":"null"}],"description":"The request config associated with this requestable permission."}},"type":"object","required":["app_id","label"],"title":"RequestablePermissionInput"},"RequestablePermissionInputUpdate":{"properties":{"app_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Id","description":"The ID of the app associated with this requestable permission."},"app_class_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Class Id","description":"The ID of the service associated with this requestable permission."},"app_instance_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Instance Id","description":"Optionally, an app has an identifer associated with it's particular instance."},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label","description":"The label of this requestable permission."},"request_config":{"anyOf":[{"$ref":"#/components/schemas/RequestConfigInputUpdate"},{"type":"null"}],"description":"The request config associated with this requestable permission."}},"type":"object","title":"RequestablePermissionInputUpdate"},"RequestablePermissionOutput":{"properties":{"id":{"type":"string","title":"Id","description":"The ID of this requestable permission."},"type":{"anyOf":[{"$ref":"#/components/schemas/PermissionType"},{"type":"null"}],"description":"The type of this requestable permission."},"label":{"type":"string","title":"Label","description":"The label of this requestable permission."},"app_id":{"type":"string","title":"App Id","description":"The ID of the app associated with this requestable permission."},"app_class_id":{"type":"string","title":"App Class Id","description":"The non-unique ID of the service associated with this requestable permission. Depending on how it is sourced in Lumos, this may be the app's name, website,  or other identifier."},"app_instance_id":{"type":"string","title":"App Instance Id","description":"The ID of the instance associated with this requestable permission. This may be an empty string."},"request_config":{"$ref":"#/components/schemas/RequestConfigOutput","description":"The request config associated with this requestable permission."}},"type":"object","required":["label","app_id","app_class_id","app_instance_id"],"title":"RequestablePermissionOutput"},"ReviewType":{"type":"string","enum":["ACCOUNTS","ENTITLEMENTS"],"title":"ReviewType"},"RunInfoStatus":{"type":"string","enum":["RUNNING","DONE"],"title":"RunInfoStatus"},"ScalarScopeFilterInput":{"properties":{"group":{"type":"string","enum":["ACCOUNT_ENTITLEMENT","TEAM","EMPLOYMENT_STATUS","EMAIL_DOMAIN","CATEGORIES","ACCOUNT_DELTA","ACCOUNT_STATUS","ACCOUNT_SOURCE","SOD_POLICY","ACCESS_GRANTED_AT","ACCESS_REQUESTED_AT","ACCESS_APPROVED_AT","ACCESS_PROVISIONED_AT","ACCESS_LENGTH","USER_OR_GROUP","UNMATCHED_ACCOUNTS","ENTITLEMENT_TAG"],"title":"Group","description":"Scope filter group. Use DatetimeScopeFilterInput for LAST_LOGIN / LAST_ACTIVITY and CustomAttributeScopeFilterInput for CUSTOM_ATTRIBUTE."},"name":{"type":"string","maxLength":255,"title":"Name","description":"Internal identifier for this filter item. For ACCOUNT_ENTITLEMENT this is the entitlement **type label** (e.g. 'Team', 'Role', 'Repo Access') — copy it from the matching item's `name` in GET /access_reviews/scope_options."},"label":{"type":"string","maxLength":255,"title":"Label","description":"Human-readable display label."},"value":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Value","description":"The value to filter by. This must be the exact `value` of an item returned by GET /access_reviews/scope_options for this app — the machine-matchable identifier, **not** the human-readable `label`. For ACCOUNT_ENTITLEMENT the value is the entitlement's integration_specific_entitlement_id, which may be an opaque id (e.g. a numeric team id) rather than its display name. Posting a `label`, or any value not present in scope_options, is rejected."},"type":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Type","description":"Attribute type. Required for USER_OR_GROUP (must be 'USER' or 'GROUP'). Ignored for all other groups."}},"additionalProperties":false,"type":"object","required":["group","name","label"],"title":"ScalarScopeFilterInput","description":"Scope filter for groups whose value is a simple string/UUID/enum.\n\nDatetime-valued groups (``LAST_LOGIN``, ``LAST_ACTIVITY``) use\n:class:`DatetimeScopeFilterInput`; ``CUSTOM_ATTRIBUTE`` uses\n:class:`CustomAttributeScopeFilterInput`."},"ScopablePropertyGroup":{"type":"string","enum":["ACCOUNT_ENTITLEMENT","TEAM","EMPLOYMENT_STATUS","EMAIL_DOMAIN","CATEGORIES","ACCOUNT_DELTA","ACCOUNT_STATUS","ACCOUNT_SOURCE","LAST_LOGIN","LAST_ACTIVITY","CUSTOM_ATTRIBUTE","SOD_POLICY","ACCESS_GRANTED_AT","ACCESS_REQUESTED_AT","ACCESS_APPROVED_AT","ACCESS_PROVISIONED_AT","ACCESS_LENGTH","USER_OR_GROUP","UNMATCHED_ACCOUNTS","ENTITLEMENT_TAG"],"title":"ScopablePropertyGroup"},"ScopeFilterGroupOutput":{"properties":{"name":{"type":"string","title":"Name","description":"Display name of this filter group."},"group":{"$ref":"#/components/schemas/ScopablePropertyGroup","description":"ScopablePropertyGroup enum value."},"type":{"type":"string","enum":["STRING","INTEGER","DATETIME","SINGLESELECT","MULTISELECT","USER","GROUP"],"title":"Type","description":"Attribute type for values in this group."},"items":{"items":{"oneOf":[{"$ref":"#/components/schemas/ScalarScopeFilterInput"},{"$ref":"#/components/schemas/CustomAttributeScopeFilterInput"},{"$ref":"#/components/schemas/DatetimeScopeFilterInput"}],"discriminator":{"propertyName":"group","mapping":{"ACCESS_APPROVED_AT":"#/components/schemas/ScalarScopeFilterInput","ACCESS_GRANTED_AT":"#/components/schemas/ScalarScopeFilterInput","ACCESS_LENGTH":"#/components/schemas/ScalarScopeFilterInput","ACCESS_PROVISIONED_AT":"#/components/schemas/ScalarScopeFilterInput","ACCESS_REQUESTED_AT":"#/components/schemas/ScalarScopeFilterInput","ACCOUNT_DELTA":"#/components/schemas/ScalarScopeFilterInput","ACCOUNT_ENTITLEMENT":"#/components/schemas/ScalarScopeFilterInput","ACCOUNT_SOURCE":"#/components/schemas/ScalarScopeFilterInput","ACCOUNT_STATUS":"#/components/schemas/ScalarScopeFilterInput","CATEGORIES":"#/components/schemas/ScalarScopeFilterInput","CUSTOM_ATTRIBUTE":"#/components/schemas/CustomAttributeScopeFilterInput","EMAIL_DOMAIN":"#/components/schemas/ScalarScopeFilterInput","EMPLOYMENT_STATUS":"#/components/schemas/ScalarScopeFilterInput","ENTITLEMENT_TAG":"#/components/schemas/ScalarScopeFilterInput","LAST_ACTIVITY":"#/components/schemas/DatetimeScopeFilterInput","LAST_LOGIN":"#/components/schemas/DatetimeScopeFilterInput","SOD_POLICY":"#/components/schemas/ScalarScopeFilterInput","TEAM":"#/components/schemas/ScalarScopeFilterInput","UNMATCHED_ACCOUNTS":"#/components/schemas/ScalarScopeFilterInput","USER_OR_GROUP":"#/components/schemas/ScalarScopeFilterInput"}}},"type":"array","title":"Items","description":"Available items for this group, each already shaped as a valid scope filter input. Callers can POST an item directly in `scope_filters`."},"filter_input_template":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Filter Input Template","description":"Template shape for filter input on this group. Present for datetime groups and CUSTOM_ATTRIBUTE — where values vary per request so no pre-computed items list exists."},"default_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Label","description":"Default display label (e.g. 'No' for delta filter)."},"truncated":{"type":"boolean","title":"Truncated","description":"True when `items` was capped below the underlying source's actual cardinality. Today this only applies to ACCOUNT_ENTITLEMENT groups, which are capped at 1000 entitlement labels per type bucket. When set, callers should expect that some valid entitlement labels for this bucket are not present in `items`.","default":false}},"type":"object","required":["name","group","type"],"title":"ScopeFilterGroupOutput","description":"Self-describing discovery group.\n\nEach entry in ``items`` is a valid :type:`ScopeFilterInput` payload — the\ncaller can POST it back unmodified in a create/edit request. For groups\nwhose values vary per-user (CUSTOM_ATTRIBUTE) or are datetime ranges\n(LAST_LOGIN, LAST_ACTIVITY), ``items`` is empty and\n``filter_input_template`` shows the expected shape instead."},"ScopeOptionsResponse":{"properties":{"scope_options":{"items":{"$ref":"#/components/schemas/ScopeFilterGroupOutput"},"type":"array","title":"Scope Options","description":"Available scope filter groups."}},"type":"object","required":["scope_options"],"title":"ScopeOptionsResponse"},"SupportRequestStatus":{"type":"string","enum":["PENDING","PENDING_MANAGER_APPROVAL","MANAGER_APPROVED","MANAGER_DENIED","PENDING_APPROVAL","APPROVED","DENIED","EXPIRED","CANCELLED","PENDING_PROVISIONING","PENDING_MANUAL_PROVISIONING","DENIED_PROVISIONING","PROVISIONED","PENDING_DEPROVISIONING","PENDING_MANUAL_DEPROVISIONING","TIME_BASED_EXPIRED","COMPLETED","REVERTING","REVERTED","TIME_BASED_EXPIRED_FAILED","TIME_BASED_EXPIRED_CANCELLED"],"title":"SupportRequestStatus"},"SyncTaskOutput":{"properties":{"job_id":{"type":"string","title":"Job Id","description":"The ID of the job."},"state":{"anyOf":[{"$ref":"#/components/schemas/RunInfoStatus"},{"type":"null"}],"description":"The state of the job."}},"type":"object","required":["job_id"],"title":"SyncTaskOutput"},"Task":{"properties":{"id":{"type":"string","title":"Id","description":"The ID of this task."},"task_type":{"type":"string","title":"Task Type","description":"The type of this task."},"task_category":{"$ref":"#/components/schemas/TaskCategory","description":"The category of this task."},"status":{"$ref":"#/components/schemas/TaskStatus","description":"The current status of this task."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"A description of this task."},"instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instructions","description":"Instructions for completing this task."},"product_area":{"anyOf":[{"$ref":"#/components/schemas/TaskProductArea"},{"type":"null"}],"description":"The product area this task is related to."},"app":{"anyOf":[{"$ref":"#/components/schemas/BaseApp"},{"type":"null"}],"description":"The app this task is related to."},"target_user":{"anyOf":[{"$ref":"#/components/schemas/User"},{"type":"null"}],"description":"The user this task is about."},"resolved_by":{"anyOf":[{"$ref":"#/components/schemas/User"},{"type":"null"}],"description":"The user who resolved this task."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When this task was created."},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"When this task was last updated."},"assignees":{"anyOf":[{"items":{"$ref":"#/components/schemas/TaskAssignee"},"type":"array"},{"type":"null"}],"title":"Assignees","description":"The assignees of this task. Requires expand=assignees."},"actions":{"anyOf":[{"items":{"$ref":"#/components/schemas/TaskAction"},"type":"array"},{"type":"null"}],"title":"Actions","description":"Available actions for this task. Requires expand=actions."},"comments":{"anyOf":[{"items":{"$ref":"#/components/schemas/TaskComment"},"type":"array"},{"type":"null"}],"title":"Comments","description":"Comments on this task. Requires expand=comments."},"access_request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Request Id","description":"The access request this task is associated with, if applicable."},"requestable_permission_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requestable Permission Id","description":"The requestable permission this task is associated with, if applicable."}},"type":"object","required":["id","task_type","task_category","status","created_at","updated_at"],"title":"Task"},"TaskAction":{"properties":{"action_type":{"type":"string","title":"Action Type","description":"The external identifier for this action type."},"transitions":{"items":{"$ref":"#/components/schemas/TaskActionTransition"},"type":"array","title":"Transitions","description":"The possible status transitions for this action."}},"type":"object","required":["action_type","transitions"],"title":"TaskAction"},"TaskActionTransition":{"properties":{"transition_to":{"anyOf":[{"$ref":"#/components/schemas/TaskStatus"},{"type":"null"}],"description":"The status the task will transition to when this action is taken."}},"type":"object","title":"TaskActionTransition"},"TaskAssignee":{"properties":{"id":{"type":"string","title":"Id","description":"The ID of the assignee."},"type":{"$ref":"#/components/schemas/TaskAssigneeType","description":"Whether this assignee is a user or group."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"The display name of the assignee."},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"The email of the assignee. Only set for users."}},"type":"object","required":["id","type"],"title":"TaskAssignee"},"TaskAssigneeType":{"type":"string","enum":["USER","GROUP"],"title":"TaskAssigneeType"},"TaskCategory":{"type":"string","enum":["MANAGER_APPROVAL","APPROVAL","PROVISIONING","DEPROVISIONING","ERROR","GENERIC"],"title":"TaskCategory"},"TaskComment":{"properties":{"body":{"type":"string","title":"Body","description":"The text content of the comment."},"created_by":{"anyOf":[{"$ref":"#/components/schemas/User"},{"type":"null"}],"description":"The user who created the comment."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When the comment was created."}},"type":"object","required":["body","created_at"],"title":"TaskComment"},"TaskProductArea":{"type":"string","enum":["ACCESS_REVIEWS","APPSTORE","MOVER","ATTRIBUTE_SYNC","OFFBOARDING","ONBOARDING","PLATFORM","SAVINGS"],"title":"TaskProductArea"},"TaskStatus":{"type":"string","enum":["PENDING","ACCEPTED","COMPLETED","DISMISSED","BLOCKED","STAGED","RETRIED","EXPIRED"],"title":"TaskStatus"},"UpdateAccessReviewArdaInput":{"properties":{"id":{"type":"string","title":"Id","description":"UUID of the ARDA to update."},"scope_filters":{"anyOf":[{"items":{"oneOf":[{"$ref":"#/components/schemas/ScalarScopeFilterInput"},{"$ref":"#/components/schemas/CustomAttributeScopeFilterInput"},{"$ref":"#/components/schemas/DatetimeScopeFilterInput"}],"discriminator":{"propertyName":"group","mapping":{"ACCESS_APPROVED_AT":"#/components/schemas/ScalarScopeFilterInput","ACCESS_GRANTED_AT":"#/components/schemas/ScalarScopeFilterInput","ACCESS_LENGTH":"#/components/schemas/ScalarScopeFilterInput","ACCESS_PROVISIONED_AT":"#/components/schemas/ScalarScopeFilterInput","ACCESS_REQUESTED_AT":"#/components/schemas/ScalarScopeFilterInput","ACCOUNT_DELTA":"#/components/schemas/ScalarScopeFilterInput","ACCOUNT_ENTITLEMENT":"#/components/schemas/ScalarScopeFilterInput","ACCOUNT_SOURCE":"#/components/schemas/ScalarScopeFilterInput","ACCOUNT_STATUS":"#/components/schemas/ScalarScopeFilterInput","CATEGORIES":"#/components/schemas/ScalarScopeFilterInput","CUSTOM_ATTRIBUTE":"#/components/schemas/CustomAttributeScopeFilterInput","EMAIL_DOMAIN":"#/components/schemas/ScalarScopeFilterInput","EMPLOYMENT_STATUS":"#/components/schemas/ScalarScopeFilterInput","ENTITLEMENT_TAG":"#/components/schemas/ScalarScopeFilterInput","LAST_ACTIVITY":"#/components/schemas/DatetimeScopeFilterInput","LAST_LOGIN":"#/components/schemas/DatetimeScopeFilterInput","SOD_POLICY":"#/components/schemas/ScalarScopeFilterInput","TEAM":"#/components/schemas/ScalarScopeFilterInput","UNMATCHED_ACCOUNTS":"#/components/schemas/ScalarScopeFilterInput","USER_OR_GROUP":"#/components/schemas/ScalarScopeFilterInput"}}},"type":"array"},{"type":"null"}],"title":"Scope Filters","description":"Scoping filters for this app's review. Replaces existing filters."},"removal_action":{"anyOf":[{"$ref":"#/components/schemas/AccessReviewRemovalAction"},{"type":"null"}],"description":"Action taken when removing access for accounts in this review."},"configurable_evidence_upload":{"anyOf":[{"$ref":"#/components/schemas/AccessReviewDomainAppConfigurableEvidenceUpload"},{"type":"null"}],"description":"When reviewers must upload evidence during account removal. ALWAYS = required for every operation; DEFAULT = required only for non-restrictive sign-on modes."}},"additionalProperties":false,"type":"object","required":["id"],"title":"UpdateAccessReviewArdaInput"},"UpdateAccessReviewInput":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Name of the access review campaign."},"deadline_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deadline At","description":"Deadline by which reviewers must complete their reviews. ISO 8601 datetime (e.g. '2026-05-01T00:00:00Z')."},"owner_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Id","description":"UUID of the user to set as the review owner."},"target_launch_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Target Launch Date","description":"Scheduled launch date override. ISO 8601 datetime."},"recurrence_config":{"anyOf":[{"$ref":"#/components/schemas/RecurrenceConfigInput"},{"type":"null"}],"description":"Recurrence configuration. Mutually exclusive with recurrence_days_frequency."},"recurrence_days_frequency":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Recurrence Days Frequency","description":"Recurrence frequency in days. Mutually exclusive with recurrence_config."},"apps":{"items":{"$ref":"#/components/schemas/UpdateAccessReviewArdaInput"},"type":"array","title":"Apps","description":"Per-app (ARDA) fields to update."}},"additionalProperties":false,"type":"object","title":"UpdateAccessReviewInput","examples":[{"deadline_at":"2026-07-15T23:59:59Z","name":"Q2 2026 Quarterly Access Review — extended"},{"apps":[{"id":"00000000-0000-0000-0000-0000000000ab","removal_action":"DEPROVISION","scope_filters":[{"after":"2026-01-01T00:00:00Z","group":"LAST_LOGIN"}]}]}]},"User":{"properties":{"id":{"type":"string","title":"Id","description":"The ID of this user."},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"The email of this user."},"given_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Given Name","description":"The given name of this user."},"family_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Family Name","description":"The family name of this user."},"status":{"anyOf":[{"$ref":"#/components/schemas/UserLifecycleStatus"},{"type":"null"}],"description":"The status of this user."}},"type":"object","required":["id"],"title":"User"},"UserLifecycleStatus":{"type":"string","enum":["STAGED","ACTIVE","SUSPENDED","INACTIVE"],"title":"UserLifecycleStatus"},"UserWithCustomAttributes":{"properties":{"id":{"type":"string","title":"Id","description":"The ID of this user."},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"The email of this user."},"given_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Given Name","description":"The given name of this user."},"family_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Family Name","description":"The family name of this user."},"status":{"anyOf":[{"$ref":"#/components/schemas/UserLifecycleStatus"},{"type":"null"}],"description":"The status of this user."},"custom_attributes":{"anyOf":[{"additionalProperties":{"$ref":"#/components/schemas/CustomAttribute"},"type":"object"},{"type":"null"}],"title":"Custom Attributes","description":"Custom attributes configured on the user"}},"type":"object","required":["id"],"title":"UserWithCustomAttributes"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"ValueOption":{"properties":{"label":{"type":"string","title":"Label"},"value":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"string","format":"date-time"},{"type":"boolean"},{"type":"string"}],"title":"Value"}},"type":"object","required":["label","value"],"title":"ValueOption","description":"Pydantic model describing a Value Option shape.\n\nConditions may allow specifying a ValueOption in place of a ConditionValue when\n a human-readable label is desired. If the `value` is otherwise pretty human-readable,\n then it is fine to define the values directly."},"Vendor":{"properties":{"name":{"type":"string","title":"Name","description":"A user friendly name for the vendor"}},"type":"object","required":["name"],"title":"Vendor"},"VendorAgreement":{"properties":{"id":{"type":"string","title":"Id","description":"A unique identifier for this Vendor Agreement"},"vendor":{"$ref":"#/components/schemas/Vendor","description":"The vendor in which the agreement is created for"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label","description":"The user-defined label for this agreement"},"start_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date","description":"The start of the current term"},"end_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date","description":"The end of the current term"},"opt_out_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Opt Out Date","description":"The date by which the vendor must be notified if you want to terminate the agreement"},"renewal_stage":{"type":"string","title":"Renewal Stage","description":"The stage of the renewal process for this agreement"},"pricing_model":{"type":"string","title":"Pricing Model","description":"The pricing model for this agreement"},"contract_length_months":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Contract Length Months","description":"The length of the contract in months"},"projected_annualized_cost":{"anyOf":[{"$ref":"#/components/schemas/Cost"},{"type":"null"}],"description":"The projected annualized cost of the currently active order on the agreement"},"renewal_owners":{"items":{"$ref":"#/components/schemas/User"},"type":"array","title":"Renewal Owners","description":"The individuals responsible for managing renewals and true-ups for this agreement. They will receive all notifications configured in Lumos."},"total_contract_cost":{"$ref":"#/components/schemas/Cost","description":"The total cost of the current service term, including all line items and true ups, and including future years for multi-year agreements."},"line_items":{"items":{"$ref":"#/components/schemas/LineItem"},"type":"array","title":"Line Items","description":"The list of currently active line items for this Vendor Agreement. If there are no currently active line items, the most recent set of line items is returned."},"custom_attributes":{"additionalProperties":{"$ref":"#/components/schemas/VendorAgreementCustomAttribute-Output"},"type":"object","title":"Custom Attributes","description":"Custom metadata tracked about each of your Vendor Agreements. The set of available options must be configured within the Lumos admin panel."}},"type":"object","required":["id","vendor","start_date","end_date","opt_out_date","renewal_stage","pricing_model","contract_length_months","projected_annualized_cost","total_contract_cost","line_items"],"title":"VendorAgreement"},"VendorAgreementCustomAttribute-Input":{"properties":{"type":{"$ref":"#/components/schemas/VendorAgreementCustomAttributeType","description":"The type of custom attribute. Only text and user options are available today"},"value":{"anyOf":[{"type":"string"},{"items":{"$ref":"#/components/schemas/User"},"type":"array"},{"type":"null"}],"title":"Value","description":"The value of the attribute for an individual Order"}},"type":"object","required":["type"],"title":"VendorAgreementCustomAttribute"},"VendorAgreementCustomAttribute-Output":{"properties":{"type":{"$ref":"#/components/schemas/VendorAgreementCustomAttributeType","description":"The type of custom attribute. Only text and user options are available today"},"value":{"anyOf":[{"type":"string"},{"items":{"$ref":"#/components/schemas/User"},"type":"array"},{"type":"null"}],"title":"Value","description":"The value of the attribute for an individual Order"}},"type":"object","required":["type"],"title":"VendorAgreementCustomAttribute"},"VendorAgreementCustomAttributeType":{"type":"string","enum":["TEXT","USER","SINGLE_SELECT"],"title":"VendorAgreementCustomAttributeType"},"VendorAgreementCustomAttributeUpdateInput":{"properties":{"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value","description":"The value to store for this custom attribute. Set to null to remove the value."}},"type":"object","title":"VendorAgreementCustomAttributeUpdateInput"},"AccountInput":{"properties":{"unique_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unique Identifier","description":"A unique identifier for this account, such as an account ID or email."},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"The email of this account."},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name","description":"The first name of the user."},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name","description":"The last name of the user."},"last_activity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Activity","description":"The datetime of last activity of the user."},"last_login":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Login","description":"The datetime of last login of the user."},"status":{"anyOf":[{"$ref":"#/components/schemas/AccountLifecycleStatus"},{"type":"null"}],"description":"The status of the account."},"permissions":{"items":{"$ref":"#/components/schemas/PermissionInput"},"type":"array","title":"Permissions","description":"The permissions of the account.","default":[]},"attributes":{"items":{"$ref":"#/components/schemas/AttributeInput"},"type":"array","title":"Attributes","description":"The attributes of the account.","default":[]}},"type":"object","required":["unique_identifier"],"title":"AccountInput"},"AttributeInput":{"properties":{"unique_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unique Identifier","description":"The unique identifier of the custom attribute"},"type":{"type":"string","title":"Type","description":"The type of the attribute."},"name":{"type":"string","title":"Name","description":"The name of the attribute."}},"type":"object","title":"AttributeInput"},"PermissionInput":{"properties":{"unique_identifier":{"type":"string","title":"Unique Identifier","description":"The unique identifier of the permission."},"type":{"type":"string","title":"Type","description":"The type of the permission."},"name":{"type":"string","title":"Name","description":"The name of the permission."}},"type":"object","title":"PermissionInput"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}},"tags":[{"name":"Access Reviews","description":"\nCreate and manage access review campaigns — scheduled reviews of who has access to what\nacross your connected apps.\n\n**Typical workflow for creating a review:**\n\n1. `GET /apps` — find the domain app UUIDs you want to review.\n2. `GET /access_reviews/scope_options?domain_app_id={id}` — discover available scope\n   filters (employment status, team, last login, etc.). Each returned `items` entry is a\n   ready-to-POST `scope_filters` payload; datetime and custom-attribute groups instead\n   expose a `filter_input_template`.\n3. `POST /access_reviews` with `apps` (optionally with `scope_filters` per app) —\n   creates the campaign.\n4. `GET /access_reviews/{id}` — poll until `status` transitions from `IN_PREPARATION`\n   to `IN_PROGRESS`.\n\n**After creation:**\n\n- `POST /access_reviews/{id}/apps` — add more apps while `status != COMPLETED`.\n- `PATCH /access_reviews/{id}` — update name / deadline / owner, or per-ARDA\n  `scope_filters` and removal action.\n- `DELETE /access_reviews/{id}` — soft-delete the whole campaign.\n- `DELETE /access_reviews/{id}/apps/{arda_id}` — soft-delete a single app from the\n  campaign.\n\nAll endpoints require an API token with the `access_reviews.create` or\n`access_reviews.view` permission (Access Review Administrator or App Admin role).\n"},{"name":"Tasks","description":"\n**Tasks** are work items emitted by Lumos workflows — things that need a human (or an\nautomated caller) to make a decision or perform a step before the workflow can proceed.\nTypical examples:\n\n- An access request is waiting on an approver's decision.\n- A provisioning or deprovisioning step needs manual fulfillment.\n- An error needs acknowledgement.\n\nEach task carries two classification fields you can filter on:\n\n- **`task_category`** — what kind of decision or step the task represents. Values:\n  `APPROVAL`, `PROVISIONING`, `DEPROVISIONING`, `ERROR`.\n- **`product_area`** — which Lumos product surface emitted the task. Values:\n  `APPSTORE`, `ACCESS_REVIEWS`, `MOVER`, `ATTRIBUTE_SYNC`, `OFFBOARDING`, `ONBOARDING`,\n  `PLATFORM`, `SAVINGS`.\n\n### Which endpoint should I call?\n\n- **To approve or deny an access request**, use `POST /tasks/{task_id}/complete`\n  (approve) or `POST /tasks/{task_id}/dismiss` (deny).\n- **To find pending approval tasks**, call\n  `GET /tasks?task_category=APPROVAL&product_area=APPSTORE&status=PENDING` (access\n  requests).\n- **Only use `POST /tasks/{task_id}/perform-action`** for tasks that expose custom workflow\n  actions. Discover those actions via `GET /tasks/{task_id}/actions`. Approval tasks do not\n  require this endpoint — `complete` and `dismiss` are the right primitives.\n\nFor a full walkthrough with `curl` and Python examples, see the\n[Tasks API How-To](https://developers.lumos.com/docs/tasks-api-how-to) guide.\n"}]}