Link
GitHub Get Started

Jira Integration

Connect Jira to ButterStack for seamless task tracking and project management.

Table of contents

  1. Overview
  2. Prerequisites
  3. Setup Instructions
    1. Step 1: Create Jira API Token
    2. Step 2: Configure ButterStack Integration
    3. Step 3: Field Mapping
    4. Step 4: Webhook Configuration
      1. Option A: Auto-create (one click)
      2. Option B: Manual registration
    5. Step 5: Custom Fields Setup
  4. Advanced Configuration
    1. JQL Filters
    2. Workflow Automation
    3. Status Mapping
  5. Integration Features
    1. Asset Linking
    2. Bulk Operations
    3. Reporting
  6. Troubleshooting
    1. Common Issues
  7. Best Practices
  8. API Examples
    1. Create Issue with Asset
  9. 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.

🔄 Two-way Sync

Keep tasks synchronized between ButterStack and Jira

📋 Auto-assignment

Automatically assign assets to Jira issues

📊 Progress Tracking

Track asset completion within Jira tickets

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

  1. Log in to your Jira account
  2. Navigate to Account Settings → Security → API tokens
  3. Click Create API token
  4. Name it “ButterStack Integration”
  5. 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

  1. In ButterStack, go to Settings → Integrations
  2. Click Add Integration → Jira
  3. 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 FieldJira FieldSync Direction
Task TitleSummary↔️ Two-way
DescriptionDescription↔️ Two-way
Asset StatusCustom Field: Asset Status→ ButterStack to Jira
AssigneeAssignee↔️ 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:

  1. Go to Settings → System → WebHooks
  2. Click Create a WebHook
  3. 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: a localhost URL 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

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:

  1. Go to Settings → Issues → Custom fields
  2. 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:

  1. In ButterStack asset view, click Link to Jira
  2. Search for issue by key or summary
  3. Select issue to create link
  4. 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:

  1. Verify API token is correct
  2. Check email matches token owner
  3. Ensure user has project access
  4. 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:

  1. Check webhook URL is accessible
  2. Verify webhook is enabled
  3. Review webhook logs in Jira
  4. Ensure events are selected
  5. Check ButterStack webhook logs
Field Mapping Issues

Symptoms: Custom fields not syncing

Solutions:

  1. Verify field IDs match configuration
  2. Check field permissions
  3. Ensure fields are on screens
  4. Validate field types are compatible
  5. Clear field cache in ButterStack

Best Practices

🏷️ Naming Conventions

  • Use consistent issue keys
  • Prefix asset-related issues
  • Tag with asset types

🔄 Sync Strategy

  • Define clear sync rules
  • Limit two-way fields
  • Use webhooks for real-time

📊 Workflow Design

  • Align statuses between systems
  • Automate transitions
  • Set up notifications

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


Copyright © 2026 ButterStack. All rights reserved.

Esc
Type to search the documentation