entitlement_type_label names the kind of
entitlement, such as Role, License, or Group. The app sets this label, so the values vary by
app. Lumos has no fixed list of values.
The Entitlement object
Attributes
Overrides and inheritance
An entitlement belongs to an app, and several of its fields override the app’s settings. For the fields that inherit,null means the entitlement uses the app’s value, and a value overrides
it. AppStore settings names two fields that don’t inherit.
custom_approval_message_override is the clearest case. Null means requesters see the app’s
post_approval_message. If you set it, this entitlement’s message replaces the app’s message for
this entitlement only.
The three workflow fields follow the same rule, but their names differ:
approval_workflow_overrideis explicitly an override of the app’sapproval_workflow.provisioning_workflowanddeprovisioning_workfloware the entitlement’s own bindings. They take precedence over the app’sdefault_provisioning_workflowanddefault_deprovisioning_workflow. The word “default” in the app’s field names marks the app’s workflows as the fallback.
{ "id": … } by default. Name it in expand to get the full
workflow inline:
204 whether or not an override was bound, and it doesn’t delete the workflow.
AppStore settings
appstore_settings appears only when you expand it. Even then, the response omits it when the
parent app isn’t in the AppStore or the entitlement has no AppStore settings. Every entitlement
made with Create Entitlement has AppStore
settings. A synced entitlement has them only if Lumos can grant and remove it through the app’s
integration.
Expanded, it has four fields, and two of them inherit:
request_validation_webhook_uuid looks like the two override fields, but it doesn’t inherit. When
it’s null, no webhook validates requests for this entitlement. The app’s webhook doesn’t apply.
These settings also have their own endpoints.
Get Entitlement AppStore Settings
returns the full object, so you don’t need to expand the entitlement.
Update Entitlement AppStore Settings
is the only way to change the settings. It takes the fields that a read returns, and a field you
omit keeps its value:
Creating, updating, and deleting
Create Entitlement takesapp_id and label,
and creates a requestable entitlement on that app, which people can request from the AppStore. It
also takes description_override and custom_approval_message_override, which set the
entitlement’s description and post-approval message in the same call:
POST has visible_in_appstore set to true. If its app is in the
AppStore, everyone allowed to request that app sees the entitlement in the catalog and can request
it immediately. POST doesn’t accept visible_in_appstore, so you can’t create an entitlement
hidden. To keep it out of the catalog, set visible_in_appstore to false with
Update Entitlement AppStore Settings
right after you create it. While the app isn’t in the AppStore, that endpoint returns 404, so
hide the entitlement after you add the app to the AppStore.
Entitlements that a sync imports can start hidden or visible, so check visible_in_appstore rather
than assuming either.
Update Entitlement changes label,
description_override, and custom_approval_message_override. A field you omit keeps its value,
and any other field, including the read-only description, returns 400.
labelchanges only for entitlements created in Lumos (sourceismanual). For any other entitlement, a differentlabelreturns400. Its currentlabelis accepted and changes nothing.description_overrideis shown to requesters asdescription, up to 2,000 characters. Lumos stores it as sent and keeps it through syncs.nullremoves it, and the integration’s description returns on the next sync.custom_approval_message_overridetakes up to 511 characters.nullmakes the entitlement use the app’spost_approval_message. A message for an entitlement that can’t be requested returns422withcodeset toentitlement.not_requestable.nullfor that entitlement is accepted and changes nothing.
409 with code set to entitlement_in_use, and errors has
one entry for active_accounts, whose message is the number of accounts that still hold it.
Revoke that access first, then retry.
Only entitlements from a manual source can be deleted. Any other entitlement returns 422 with
code set to entitlement.not_manual.
DELETE returns 409 with code set to entitlement.delete_blocked, and detail naming the
reason, while any of these block the delete:
- It has pending access requests.
- It has time-based access scheduled for removal.
- A draft or published Access Policy references it.
Finding entitlements
List Entitlements returns every entitlement in your organization, across all apps. When you already have the app or the account, start from it instead:- List App Entitlements: everything grantable on one app.
- List Account Entitlements: everything one account currently holds.
search is a
case-insensitive substring match on label. visible_in_appstore=true returns the entitlements
visible in the AppStore catalog, and visible_in_appstore=false returns the hidden ones. Either
value excludes entitlements with no AppStore settings. An entitlement on an app that isn’t in the
AppStore counts as hidden. AppStore settings covers which entitlements have
them.
All three lists return results in pages, so read Pagination before you
assume that a single call returned everything.