Skip to main content
POST
Create an access request
Creating access requests does not start an onboarding. There is no endpoint to trigger an onboarding and no inbound webhook. Onboardings start from Slack, the web app, or an HRIS source only. If you automate employee lifecycle events outside AccessOwl, connect an HRIS integration as the trigger instead. AccessOwl schedules onboardings from the HRIS start dates automatically.

Authorizations

Authorization
string
header
required

Bearer token authentication. Pass your AccessOwl API token in the Authorization header as Bearer <token>.

Headers

Idempotency-Key
string

Optional key (1–255 chars) for safely retrying a request. Reusing the same key for the same request returns 409 Conflict and is not processed again — this confirms the request was already received. Keys are retained for 14 days.

Required string length: 1 - 255

Body

application/json

Access request parameters

Request body for creating an access request

permission_ids
string<uuid>[]
required

List of permission IDs to request

Minimum array length: 1
request_reason
string
required

Reason for requesting access

Maximum string length: 255
resource_id
string<uuid>
required

Resource ID to request access to

user_id
string<uuid>

User to request access for. Required when authenticating with an API token. With a user login, defaults to the authenticated user if omitted.

Response

Access request created

An access request

application_id
string<uuid>
required

Application ID

id
string<uuid>
required

Access request ID

permission_ids
string<uuid>[]
required

Requested permission IDs

request_reason
string
required

Request reason

resource_id
string<uuid>
required

Resource ID

status
enum<string>
required

Current status of the access request

Available options:
pending_approval,
pending_permissions_assignment,
access_granted,
denied,
rejected,
processing_access,
scheduled,
pending_dependency
duration
string | null

Duration of time-based access as an ISO 8601 duration (e.g. "PT1H", "P7D"); null for permanent access

expires_at
string<date-time> | null

When the time-based access expires; null for permanent access or a time-based request that has not been granted yet

grantee_user_id
string<uuid>

User ID of the grantee

inserted_at
string<date-time>

Creation timestamp

provisioning_type
enum<string> | null

Provisioning type

Available options:
application_admin,
automatic
requestor_user_id
string<uuid>

User ID of the requestor

Last modified on August 28, 2026