Skip to content

Jira Integration

GuideMode integrates with Jira Cloud to provide visibility into your project management workflow. This integration enables team sync, issue tracking via webhooks, and links Jira work items to your development analytics.

  • Team Sync: Sync Jira teams or groups to GuideMode for team-based analytics
  • Issue Tracking: Real-time updates on issue creation and changes via webhooks
  • User Linking: Automatically link Jira users to GuideMode accounts by email
  • Work Analytics: Connect Jira issues to your development metrics

Before setting up the Jira integration, you’ll need:

  • A Jira Cloud account (Jira Server/Data Center not currently supported)
  • Admin access to create an Atlassian OAuth app
  • For team sync: Either Jira admin permissions or an API token

The Jira integration uses:

  1. Atlassian OAuth App - For user authentication and API access
  2. Webhooks - For real-time issue updates
  3. API Token (optional) - For enhanced team sync capabilities
  1. Go to Atlassian Developer Console
  2. Click Create > OAuth 2.0 integration
  3. Fill in the details:
    • Name: GuideMode (or your preferred name)
    • Description: Integration with GuideMode analytics
  1. In your app settings, go to Authorization > Add
  2. Select OAuth 2.0 (3LO)
  3. Add callback URL: https://guidemode.dev/auth/jira/callback
  4. Save changes
  1. Go to Permissions > Add
  2. Add the Jira API product
  3. Configure these scopes:

Required scopes:

  • read:me - Access user identity
  • offline_access - Refresh token support

Admin scopes (for webhooks and team sync):

  • read:jira-work - Read Jira issues
  • read:jira-user - Read user profiles
  • read:email-address:jira - Fetch user emails
  • read:group:jira - Read user groups
  • manage:jira-configuration - Admin access
  • manage:jira-webhook - Create/manage webhooks
  1. Go to Settings
  2. Copy the Client ID and Secret

Add these environment variables to your GuideMode deployment:

Terminal window
JIRA_CLIENT_ID=your_oauth_client_id
JIRA_SECRET=your_oauth_secret
JIRA_REDIRECT_URI=https://guidemode.dev/auth/jira/callback

For local development, add these to your .dev.vars file in the server app.

  1. Navigate to Settings > Jira in GuideMode
  2. Click Connect with Jira
  3. Authorize the application
  4. Select which Jira sites to grant access to

To use webhooks and team sync, you need admin-level permissions:

  1. Go to Settings > Jira
  2. Click Re-authenticate with Admin Permissions
  3. Approve the additional scopes
  4. Your account now has admin capabilities

GuideMode can sync your Jira teams to enable team-based analytics.

GuideMode supports two methods for team sync:

MethodRequiresWhat’s SyncedBest For
Team APIAPI TokenActual Jira teamsOrganizations with formal teams
Groups APIOAuth onlyJira groupsQuick setup without API token

The Team API syncs actual Jira teams with full membership data.

Setup:

  1. Create an API token at Atlassian Account Settings
  2. Go to Settings > Jira in GuideMode
  3. Enter your:
    • Email address: The email associated with your Atlassian account
    • API Token: The token you generated
    • Organization ID: Found in your Jira admin settings
  4. Click Save API Token

Triggering a Sync:

  1. Click Sync Teams
  2. Wait for the sync to complete
  3. Review synced teams in Team settings

If you don’t want to set up an API token, GuideMode can sync Jira groups instead.

Note: Jira groups are not the same as teams. Groups are typically used for permissions, while teams are project-based. For best results, use the Team API.

How it works:

  • Uses your OAuth token (no API token needed)
  • Syncs all groups you have access to
  • Creates teams in GuideMode for each group
  • Links members by email
DataDescription
Teams/GroupsName, description, membership
MembersUser profiles, email addresses
RolesMember roles within teams

When syncing, GuideMode links Jira users to existing accounts:

  1. By Jira Account ID: If user was previously synced
  2. By Email: If emails match between systems
  3. New User: Created if no match found (requires email access)

Users with private email settings may not be linkable.

Webhooks provide real-time updates when issues change in Jira.

  • Admin-level OAuth permissions
  • Webhook URL must be accessible from Jira
  1. Go to Settings > Jira
  2. Select the Jira site to configure
  3. Click Create Webhook
  4. Configure options:
    • Events: Issue created, Issue updated, Issue deleted
    • JQL Filter (optional): Filter which issues trigger webhooks
EventWhen Triggered
jira:issue_createdNew issue is created
jira:issue_updatedIssue fields are modified
jira:issue_deletedIssue is deleted

Jira webhooks expire after 30 days. GuideMode will:

  • Notify you before expiration
  • Allow you to extend the webhook
  • Automatically prompt for refresh

To extend a webhook:

  1. Go to Settings > Jira
  2. Find the webhook in the list
  3. Click Refresh to extend by 30 days

You can filter which issues trigger webhooks using JQL:

project = "MYPROJECT" AND issuetype != "Sub-task"

This reduces webhook volume and focuses on relevant issues.

GuideMode maps Jira issue types to internal categories for consistent analytics across projects.

TypeTypical Jira TypesDescription
featureStory, New Feature, EpicNew functionality
bugBug, DefectIssues and fixes
choreTask, Technical TaskMaintenance work
discoverySpike, ResearchInvestigation work
incidentIncident, Production IssueUrgent fixes
otherUnmatched typesDefault category

GuideMode uses heuristics based on issue type names (case-insensitive, partial matching):

Bug: Types containing bug, defect, fix

Feature: Types containing story, feature, epic, enhancement

Chore: Types containing task, chore, maintenance, technical

Discovery: Types containing spike, research, investigation, discovery

Incident: Types containing incident, outage, emergency

You can configure custom type mappings per project. Custom mappings take priority over defaults.

Jira provides richer state information than GitHub:

Jira Status CategoryGuideMode StateDescription
To DoopenNot started
In Progressin_progressActively being worked on
DoneclosedCompleted

This enables more accurate cycle time and flow metrics compared to GitHub’s simple open/closed states.

VariableRequiredDescription
JIRA_CLIENT_IDYesOAuth app Client ID
JIRA_SECRETYesOAuth app Secret
JIRA_REDIRECT_URIYesCallback URL for OAuth
SettingDescription
EmailAtlassian account email
API TokenGenerated token from Atlassian
Organization IDYour Jira organization identifier
SettingDescription
SiteWhich Jira site to receive events from
EventsWhich events trigger the webhook
JQL FilterOptional filter for issue scope
Expiration30 days from creation/refresh
  • Verify JIRA_CLIENT_ID and JIRA_SECRET are correct
  • Check the callback URL matches exactly: {APP_URL}/auth/jira/callback
  • Ensure all required scopes are configured in the app
  • Ensure you have admin-level OAuth permissions
  • Re-authenticate with admin scopes if needed
  • Verify the webhook URL is publicly accessible
  • With API Token: Verify token is valid and not expired
  • Without API Token: Check you have read:group:jira scope
  • Confirm organization ID is correct
  • Check that you have access to the teams/groups
  • Users must have public email addresses
  • Verify emails match between Jira and GuideMode
  • Check that read:email-address:jira scope is granted
  • Verify webhook URL is accessible
  • Check webhook hasn’t expired (30-day limit)
  • Review JQL filter isn’t too restrictive
  • Check Jira webhook logs for delivery errors
  • Webhooks only capture changes after creation
  • Historical data requires manual import or API sync
  • Ensure webhook hasn’t lapsed (30-day expiration)

This integration supports Jira Cloud only. Jira Server and Data Center are not currently supported due to different authentication mechanisms.

Unlike GitHub, Jira webhooks don’t include HMAC signatures for payload verification. GuideMode validates webhooks by:

  • Tenant ID in the URL path
  • Cloud ID matching the registered configuration

Atlassian enforces API rate limits. Heavy sync operations may be throttled. Team sync is designed to minimize API calls through batching.

Users with private email settings cannot be automatically linked. They’ll need to manually connect their accounts or make their email visible.