status tracks the workflow
through approval and provisioning. For time-based access, it also tracks removal. Approvals and
manual provisioning steps appear as tasks on the request.
The Access Request object
Attributes
Who can see a request
You can see requests you filed and requests where you’re the target. Of the built-in roles, Admin, Read Only Admin, AppStore Read Only Admin, and App Admin can see every request in your organization. A custom role can also grant this access. Get Access Request, List Access Requests, and Cancel Access Request act only on requests you can see. List Access Requests applies this whatever filters you pass. The approver of a request’s current stage can also get the request with Get Access Request, until the request no longer waits on them. List Access Requests doesn’t return it for them.Statuses
status is one of the values below. The statuses marked cancellable are the ones a request holds
while it’s still in progress. Cancelling returns 409 for the others.
Filing a request
Create Access Request needs anapp_id
and a business_justification:
-
The justification is required. A call without
business_justificationreturns400. Create Access Request still accepts the deprecatednotefield in its place. -
The target is you unless you send
target_user_id. -
The requester is you. Only an Admin can send
requester_user_idto file on someone else’s behalf. If anyone else sends it, the call returns403. -
access_lengthmust be one of the time-based access options the app offers. When you name entitlements, it must be an option that all of them offer. Any other value returns400. Omit it for permanent access, which works only if the app offersUnlimited. The possible options are:2 hours,4 hours,8 hours,12 hours,1 day,2 days,3 days,7 days,14 days,30 days,90 days, andUnlimited. -
custom_fieldsanswers the app’s custom intake fields, keyed byreference_key, such as{"environment": "Production"}. Every required field needs an answer that isn’t blank. An answer can be up to 500 characters, and a dropdown answer must match one of its options exactly. A missing answer, an unknown key, or an answer that breaks these rules returns400withcodeset toaccess_request.custom_fields_invalid.errorslists each problem, withfieldset tocustom_fields.<reference_key>.
201 with an access_requests list. One call can create more than one
request, so read the list rather than assuming a single item.
An app_id, target_user_id, or requester_user_id that doesn’t exist in your organization
returns 404. If the requester isn’t allowed to file the request, the call returns 403 with
code set to access_request.forbidden. Lumos can refuse a request for other reasons, such as a
webhook that rejects it. These return 400 with code set to access_request. followed by the
reason: invalid, not_requestable, entitlement_invalid, access_length_invalid,
expiration_invalid, itsm_ticket_id_required, missing_fields, or rejected_by_webhook.
Entitlements on a request
entitlement_ids takes entitlement IDs, the IDs that
List Entitlements returns. To see what an app
offers a requester, call
Get App Entitlement AppStore Catalog.
Omit entitlement_ids to request the app itself.
Each entitlement must be one you can request on the app in app_id. Otherwise the call fails:
Get Access Request and
List Access Requests return
entitlements as {id, label} objects. Each entitlement appears once. If you’re moving from
requestable permissions, see
Migrate requestable permissions to entitlements.
Time-based access
Sendaccess_length to request access that ends. Lumos turns it into seconds when you file, and
two fields track it:
expiration_in_secondsis the length, for example2592000for30 days.expires_atisnulluntil the access is granted. After that, it’s the time the access ends, which is the time of the grant plusexpiration_in_seconds.
pending-deprovisioning or
pending-manual-deprovisioning to time-based-expired. An access_length of Unlimited, or none
at all, means permanent access, and both fields stay null.
Cancelling
Cancel Access Request takes an optional reason and returns204:
409.
The requester, the target, and an Admin can cancel a request. Anyone else who can see the request,
such as an App Admin or the approver of its current stage, gets 403.
Expanding a request
expand=tasksadds the request’s tasks that you can see. Each task has the same shape that Get Task returns when you send noexpand.expand=custom_fieldsadds the requester’s answers to the app’s custom intake fields.
Listing
statuses takes the labels in Statuses. Any other value, such as PENDING_APPROVAL,
returns 400.
A user ID that doesn’t exist in your organization returns 404. A page token works only with the
same filters and order_by as the call that returned it. Pagination
covers page tokens.