/integrations), then the Jira connection
(/integrations/jira/:connectionId with Status (status), Projects (projects),
Webhooks (webhooks) and Settings (settings) tabs). Jira has no GraphQL surface; everything is REST under /api/jira.
What it does
- Connect by OAuth 2.0 (3LO).
GET /api/jira/connectstages a single-use state (10 minutes) and starts Atlassian consent;GET /api/jira/callbackredeems it, re-checks that the initiator is still a member, exchanges the code, picks the accessible site and stores aJiraConnection(cloud id, site URL and name, scopes, encrypted access and refresh tokens). Access tokens are refreshed proactively five minutes before expiry. Status isactive,token_expired,errorordisconnected; one connection per site per company (uq_jira_conn_company_cloud). - Register the webhook.
POST /api/jira/connections/{connection_id}/webhooksregisters a dynamic webhook forjira:issue_created,jira:issue_updatedandjira:issue_deletedscoped bymonitored_projects, with a per-connection callback token in the URL. Atlassian webhooks expire after 30 days; Olyros refreshes them (refresh_webhook) and can purge stale registrations. - Receive events safely.
POST /api/jira/webhooks/{token}: the token hash selects the connection and its company (onlyactiveconnections; an unknown or inactive token gets a plain 404); each connection is held to 120 requests per rolling minute (429 beyond); the body is capped at the platform’s maximum payload size; when the platform’s Jira app secret is configured thex-hub-signatureis verified; the body is deduplicated for seven days (JiraWebhookDelivery:claimed,processed,failed); events for projects outsidemonitored_projectsare dropped. Deliveries are listed atGET .../webhook-events. Only the per-connection URL with its token accepts deliveries; a webhook registered on a connection before the token was introduced must be registered again. - Start workflows. Each accepted event is offered to active workflows whose
jira_eventtrigger names this connection with the matching event type (status_change,issue_created,label_addedon added labels only, orissue_deleted);jira_filternodes then narrow onstatus_to, labels and other flattened fields. - Act on issues. Workflow nodes
create_jira_ticket(project, issue type, summary, description, priority, labels) andjira_update(transition,comment,add_label,remove_label); the adapter also supports transition-to-done and status lookups. Comments are written as Atlassian Document Format. - Metadata for forms. Projects, issue types and statuses per project
(
GET /api/jira/connections/{connection_id}/projects,.../issue-types,.../statuses) feed the node configuration UI;fetch-issuewraps a real issue as a synthetic webhook payload for the workflow canvas Test tab. - Scheduled issues carry front matter. When a schedule creates a Jira issue “for an
agent”, the description starts with a YAML front matter block (agent, schedule id,
repositories). There is no per-connection trigger setting: Jira events reach agents
only through workflows with a JIRA Event (
jira_event) trigger on the connection. - Platform side. The Atlassian OAuth app (client id and secret, webhook secret) is
configured once in the admin app (
/integrations/jira,/api/admin/jira/config).
Who can use it
- Connect (
GET /api/jira/connect), verify, disconnect and register webhooks (choosing monitored projects): editor or admin (abilityintegration.manage, listed under Settings -> Roles,/settings/roles). A viewer gets 403EDITOR_REQUIRED; the page shows “Only editors and admins can change this integration.” next to the action. - List connections, browse projects, issue types and statuses, fetch an issue for the Test tab, view deliveries: any company member.
- Platform Jira app configuration: platform admin.
- No plan or tier gate.
How to configure it
- A platform admin sets the Atlassian app credentials once (
PUT /api/admin/jira/config). - Settings -> Integrations (
/integrations) -> Jira -> Connect (/api/jira/connect), approve at Atlassian within ten minutes; you return to the connection’s Status tab. - Projects tab: choose the monitored projects and register the webhook
(
POST /api/jira/connections/{connection_id}/webhooks). - To have Jira events reach an agent, build a workflow with a JIRA Event
(
jira_event) trigger on this connection, for examplejira_event->create_task->dispatch_task; use the Test tab’s “fetch issue” to try it with real data. POST .../verifychecks the token and site;DELETE /api/jira/connections/{id}disconnects (and marks open issue links as errored).
Limits and defaults
What it emits
- Workflow runs for matched events; webhook delivery and dedup records.
- Issues, comments, labels and transitions in Jira created by workflow nodes or schedules.
last_webhook_at,last_errorand status on the connection.
Known gaps
- A Jira issue never becomes a task by itself: the webhook handler only starts
workflows. The GitHub integration turns labelled issues into tasks directly; Jira
needs a workflow with
jira_event->create_task->dispatch_task. Scheduled Jira issues “for an agent” therefore have no consumer unless such a workflow exists. - No issue search (JQL) in the adapter, so duplicates cannot be detected before
create_jira_ticket. - No Jira Data Center or Server support; Cloud only.
- Cloud tasks have no Jira access of their own; only server-side workflow nodes use the connection’s token.