I’m building a Forge app (jira-issue-panel-ui-kit + scheduledTrigger template) that reads JSM
on-call schedules from a scheduled trigger to automate shift handoffs. The scheduled trigger
runs as asApp() (no user in session, per the documented behavior of scheduled triggers).
Calling the JSM ops API’s schedules endpoint fails consistently:
App installed on Jira product, scopes confirmed via forge install --confirm-scopes
The dev site has a real JSM project (Basic IT service management template) with
Operations enabled, a team, and an active on-call schedule with a rotation and overrides
— all confirmed working correctly through the Jira UI as a logged-in human user
The same schedule is fully visible/functional via the UI at /jira/ops/who-is-on-call
This looks like the same issue reported here with no resolution:
Is asApp() simply unsupported for the JSM Ops API surface regardless of scope, and if so, is
offline user impersonation via a Forge Remote genuinely the only supported path for a
scheduled trigger to read on-call schedule state? Or is there a setup step (site-level
Operations/Opsgenie connection, additional scope, product access grant) that isn’t obvious
from the current docs?
While it’s a different endpoint, it’s the same REST API, and I discovered the same limitation. Charitably, I think I can see the team was trying to explain that in the Permissions section for the API:
Permissions control the level of a user’s access to the Jira Service Management instance, while roles are how the permissions are assigned to individual users. For detailed information on roles and permissions, see Permissions overview and Setting up service desk users.
To use the Operations API, users must obtain either Global or Team roles depending on specific domain requirements.
Global Roles
Admin - They are responsible for overall administration, including managing global settings, user accounts, and security settings. Give users admin permissions
User - This standard role allows users to update their own information. Additionally, this role can be extended through the definition of custom roles. For more details, please refer to
Team Roles
Team Admin - Members of your team that take this role can manage any kind of settings, configuration (schedule configuration, integration setup, etc.), and other users in the team. Learn more about Team Roles
Team Member - Team members can only access the configurations that they’re part of, and they can only access the alerts that they have permission for.
I added some bolding to point out the permissions are user oriented and with tight binding to user permissions roles. The exclusion of “apps” in that is meant to express asApp() is not supported and only asUser(). Given we both hit the same problem, I’m sure it’s worthy of clarification.
Yes, I confirm.
Yes, I confirm.
No, I’m unaware of any way Forge Apps could configure or work-around. I recommend user impersonation.