Jira Integration
Table of contents
- Overview
- Prerequisites
- Setup Instructions
- Advanced Configuration
- Integration Features
- Troubleshooting
- Best Practices
- API Examples
- Next Steps
Overview
ButterStack integrates with Jira to synchronize tasks, track asset assignments, and provide visibility into your development pipeline. This integration enables automatic task updates and two-way synchronization.
Prerequisites
- Jira Cloud or Server instance
- API token or OAuth credentials for an account that can browse and read the project
- ButterStack project with admin rights
Real-time updates need a Jira admin
Reading issues and creating/updating them only needs project access. But enabling real-time updates (the webhook) requires the Administer Jira global permission on the account that owns the API token. The classic Jira webhook API ButterStack uses to auto-create the webhook (POST /rest/webhooks/1.0/webhook) rejects tokens without it: an org-level “User access admin” is not enough.
If your token’s account isn’t a Jira admin, you can’t use the one-click Configure Webhook button. Have a Jira administrator either (a) grant the permission, or (b) register the webhook by hand - see Step 4.
Setup Instructions
Step 1: Create Jira API Token
- Log in to your Jira account
- Navigate to Account Settings → Security → API tokens
- Click Create API token
- Name it “ButterStack Integration”
- Copy the generated token
Jira Server Users
For Jira Server, use your regular password or configure OAuth instead of API tokens.
Step 2: Configure ButterStack Integration
- In ButterStack, go to Settings → Integrations
- Click Add Integration → Jira
- Enter your Jira details:
Jira URL: https://your-domain.atlassian.net
Email: your-email@company.com
API Token: [paste your token]
Default Project: PROJ
Step 3: Field Mapping
Configure how ButterStack fields map to Jira:
| ButterStack Field | Jira Field | Sync Direction |
|---|---|---|
| Task Title | Summary | ↔️ Two-way |
| Description | Description | ↔️ Two-way |
| Asset Status | Custom Field: Asset Status | → ButterStack to Jira |
| Assignee | Assignee | ↔️ Two-way |
Step 4: Webhook Configuration
Real-time updates require a webhook in Jira that POSTs to ButterStack. There are two ways to set it up.
This step needs a Jira admin
Both paths below register a webhook, which requires the Administer Jira global permission in Jira. A token with only project/browse access cannot create webhooks: the auto-create button will report a permission error. This is a Jira-side requirement, not a ButterStack one.
Option A: Auto-create (one click)
If the API token’s account has the Administer Jira permission, open the integration in ButterStack and click Configure Webhook under Real-Time Updates. ButterStack registers the webhook, scopes it to your project, and (when a webhook secret is set) signs the deliveries automatically.
Option B: Manual registration
If you can’t grant the token that permission, register the webhook by hand. The ButterStack integration page shows the exact Webhook URL, recommended events, and JQL under Real-Time Updates → Manual Setup - copy them from there so the URL points at your own instance. Then in Jira:
- Go to Settings → System → WebHooks
- Click Create a WebHook
- Configure:
- Name:
ButterStack Integration - URL: the URL shown on the integration page, of the form
https://YOUR_BUTTERSTACK_HOST/webhooks/jira?token=YOUR_WEBHOOK_TOKEN(Jira Cloud must be able to reach it over public HTTPS: alocalhostURL will not deliver) - Issue related events (JQL):
project = YOUR_PROJECT_KEY(keeps other projects out) - Events: select
- ✅ Issue created
- ✅ Issue updated
- ✅ Issue deleted
- ✅ Comment created / updated
- Name:
Signed deliveries
If you set a Webhook Secret on the ButterStack integration, provide the same value in Jira’s Secret field when creating the webhook. Jira then signs each delivery with an X-Hub-Signature header (sha256=<hmac>) that ButterStack verifies. Auto-create (Option A) fills the secret in for you.
Step 5: Custom Fields Setup
Create custom fields in Jira for ButterStack data:
- Go to Settings → Issues → Custom fields
- Create these fields:
- ButterStack Asset ID (Text field)
- Asset Status (Select list)
- Build Version (Text field)
- Asset Type (Select list)
Important
Make sure these custom fields are added to your project screens and have proper permissions.
Advanced Configuration
JQL Filters
Configure which Jira issues sync with ButterStack:
project = "GAME" AND type in (Task, Bug) AND status != Done
Workflow Automation
Set up Jira automation rules:
Trigger: Issue transitioned to "In Progress"
Action: Create ButterStack task
Condition: Issue has component "Assets"
Status Mapping
Map Jira statuses to ButterStack asset states:
Jira Status → ButterStack Status
To Do → Pending
In Progress → Active
In Review → Under Review
Done → Completed
Integration Features
Asset Linking
Link assets directly to Jira issues:
- In ButterStack asset view, click Link to Jira
- Search for issue by key or summary
- Select issue to create link
- Asset status syncs automatically
Bulk Operations
Perform bulk actions on linked issues:
- Update multiple asset statuses
- Bulk assign to Jira users
- Mass comment on issues
- Batch transition workflows
Reporting
Access integrated reports:
- Asset completion by sprint
- Time tracking across assets
- Issue-to-asset mapping
- Team velocity metrics
Troubleshooting
Common Issues
Authentication Failed
Error: “401 Unauthorized”
Solutions:
- Verify API token is correct
- Check email matches token owner
- Ensure user has project access
- For Jira Server, verify base URL includes
/rest/api/2
Test with cURL:
curl -u email@example.com:api_token \
https://your-domain.atlassian.net/rest/api/2/myself
Webhooks Not Firing
Symptoms: Changes in Jira don’t reflect in ButterStack
Solutions:
- Check webhook URL is accessible
- Verify webhook is enabled
- Review webhook logs in Jira
- Ensure events are selected
- Check ButterStack webhook logs
Field Mapping Issues
Symptoms: Custom fields not syncing
Solutions:
- Verify field IDs match configuration
- Check field permissions
- Ensure fields are on screens
- Validate field types are compatible
- Clear field cache in ButterStack
Best Practices
API Examples
Create Issue with Asset
const createIssueWithAsset = async (assetId, assetName) => {
const issue = {
fields: {
project: { key: 'PROJ' },
summary: `Asset Review: ${assetName}`,
description: 'Please review the attached asset',
issuetype: { name: 'Task' },
customfield_10100: assetId // ButterStack Asset ID
}
};
const response = await fetch('https://your-domain.atlassian.net/rest/api/2/issue', {
method: 'POST',
headers: {
'Authorization': `Basic ${btoa('email@example.com:api_token')}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(issue)
});
return response.json();
};
Next Steps
- Set up Linear integration for alternative task tracking
- Configure Slack notifications for updates
- Enable Jenkins CI/CD for automated builds
Need help? Contact our support team