| accesslib | check_access(principal, entity, [level]) | Check whether a principal has access to an entity |
| notificationslib | notify_user(user_id, title, body) | Notify a specific user via email and Slack (if configured) |
| notificationslib | notify_admins(title, body) | Notify all Opal admins |
| notificationslib | notify_owner(owner_id, title, body) | Notify an owner via Slack channel (if configured) or all owner members |
| assetlib | get_resource_risk_sensitivity(resource_id) | Get the risk sensitivity level of a resource |
| assetlib | get_group_risk_sensitivity(group_id) | Get the risk sensitivity level of a group |
| assetlib | get_requests_for_resource(resource_id, [user_id], [status], [cursor], [per_page]) | Get historical requests for a resource (paginated) |
| assetlib | get_requests_for_group(group_id, [user_id], [status], [cursor], [per_page]) | Get historical requests for a group (paginated) |
| userlib | get_requests(user_id, [status], [cursor], [per_page]) | Get requests a user submitted or was the target of (paginated) |
| timelib | now() | Get the current Unix timestamp |
| timelib | from_unix(timestamp) | Convert a Unix timestamp to an RFC3339 string |
| timelib | is_before(timestamp1, timestamp2) | Check if the first timestamp is before the second |
| timelib | is_after(timestamp1, timestamp2) | Check if the first timestamp is after the second |
| timelib | seconds_since(timestamp1, timestamp2) | Get the number of seconds between two timestamps |
| timelib | minutes(n) / hours(n) / days(n) | Convert time intervals to seconds |
| entitylib | get_user(user_id) | Look up a user by ID |
| entitylib | get_group(group_id) | Look up a group by ID |
| entitylib | get_resource(resource_id) | Look up a resource by ID |
| ticketslib | providers.<PROVIDER> | Access an installed ticket provider (e.g. ticketslib.providers.JIRA) |
| ticketslib | list_projects(provider) | List projects on a provider; returns a dict keyed by project key |
| ticketslib | create_ticket(project, title, description) | Create a ticket on the provider; returns a ticket object |
| ticketslib | get_ticket(provider, remote_ticket_id) | Fetch an existing ticket by its remote identifier |
| ticketslib | comment_ticket(provider, remote_ticket_id, comment) | Add a comment to an existing ticket |
| ticketslib | close_ticket(provider, remote_ticket_id, [comment]) | Close a ticket, with an optional closing comment |