Integrations

Jira Integration

Link Jira change management tickets to Audital audit events, establishing a complete bidirectional trail from governance approval to model deployment. Critical for demonstrating human oversight under FCA SS1/23.

Last updated: 2 March 2026

Ticket metadata

Summary, status, priority, assignee, and custom fields are embedded in linked audit events.

Approval decisions

When a ticket transitions to "Approved" or is commented with an approval, Audital captures it as a HUMAN_REVIEW event.

Auto-link via commits

Commit messages containing Jira ticket keys (e.g. [AI-GOV-142]) are automatically linked.

Change risk

Jira change risk fields (LOW/MEDIUM/HIGH) are propagated to the audit event severity.

Setup

Step 1: Create a Jira API token

bash
# Step 1: Create a Jira API token
# Go to: https://id.atlassian.com/manage-profile/security/api-tokens
# Click "Create API token", give it a descriptive name.

# Step 2: Base64-encode your credentials
echo -n "jane.smith@example.com:your_api_token_here" | base64
# -> amFuZS5zbWl0aEBleGFtcGxlLmNvbTp5b3VyX2FwaV90b2tlbl9oZXJl

# Step 3: Test the connection
curl https://your-org.atlassian.net/rest/api/3/myself \
  -H "Authorization: Basic amFuZS5zbWl0aEBleGFtcGxlLmNvbTp5b3VyX2FwaV90b2tlbl9oZXJl" \
  -H "Accept: application/json"

Step 2: Connect to Audital

Register the integration via the API or from Settings → Integrations → Jira. The linkPattern is a regex applied to commit messages to detect Jira ticket keys automatically.

bash
curl -X POST https://api.audital.ai/v1/integrations/jira \
  -H "Authorization: Bearer ak_live_xxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "jiraBaseUrl": "https://your-org.atlassian.net",
    "userEmail": "jane.smith@example.com",
    "apiToken": "your_api_token_here",
    "projects": ["AI-GOV", "ML-OPS", "CREDIT-RISK"],
    "linkPattern": "AI-[0-9]+",
    "captureFields": ["summary", "status", "priority", "assignee", "resolution", "customfield_10200"]
  }'

Step 3: Configure Jira Webhook (optional)

For real-time capture of approval events directly from Jira (rather than waiting for the next sync), configure a Jira webhook:

bash
# Configure Jira to push events to Audital
# In Jira: Settings → System → WebHooks → Create a WebHook
#
# URL: https://api.audital.ai/v1/integrations/jira/webhook
# Events to capture:
#   ✓ Issue: created, updated, resolved, deleted
#   ✓ Worklog: created, updated
#   ✓ Comment: created (for approval comments)
#
# Include the Audital webhook secret as a header:
# X-Jira-Webhook-Secret: <your-secret-from-dashboard>

Linking Tickets to Events

Automatic linking

The most common approach. Ticket references in commit messages or PR descriptions are detected automatically when the GitHub integration is also active.

bash
# Automatic linking via commit message convention
# If a commit message contains a Jira ticket key matching linkPattern,
# Audital automatically links the ticket to the resulting audit event.

# Example commit message:
git commit -m "feat: update decision threshold to 0.72 [AI-GOV-142]"

# Audital will:
# 1. Capture the push event as CONFIG_CHANGE
# 2. Detect "AI-GOV-142" in the commit message
# 3. Fetch the Jira ticket details via the Atlassian API
# 4. Embed the ticket data in the audit event payload
# 5. Add a bidirectional link on the Jira ticket (if write permissions granted)

Manual linking via API

Link any ticket to any existing audit event:

bash
# Manually link a Jira ticket to an audit event
curl -X POST https://api.audital.ai/v1/audit/evt_01HZABCDEF1234567890ABCD/links \
  -H "Authorization: Bearer ak_live_xxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "JIRA_TICKET",
    "externalId": "AI-GOV-142",
    "url": "https://your-org.atlassian.net/browse/AI-GOV-142",
    "summary": "Change: Update credit score threshold from 0.68 to 0.72",
    "status": "Done",
    "approver": "compliance-officer@example.com"
  }'

Event Examples

Audit event with Jira link

json
{
  "id": "evt_01HZABCDEF1234567890ABCD",
  "chainPosition": 4892,
  "eventType": "CONFIG_CHANGE",
  "source": "GITHUB",
  "timestamp": "2026-03-02T14:22:11.003Z",
  "payload": {
    "commit": {
      "sha": "a1b2c3d4",
      "message": "feat: update decision threshold to 0.72 [AI-GOV-142]"
    }
  },
  "links": [
    {
      "type": "JIRA_TICKET",
      "externalId": "AI-GOV-142",
      "url": "https://your-org.atlassian.net/browse/AI-GOV-142",
      "fetchedAt": "2026-03-02T14:22:12.100Z",
      "data": {
        "summary": "Change: Update credit score threshold from 0.68 to 0.72",
        "status": "Done",
        "resolution": "Fixed",
        "priority": "Medium",
        "assignee": "Jane Smith",
        "reporter": "Tech Lead",
        "created": "2026-03-01T09:00:00.000Z",
        "resolved": "2026-03-02T14:20:00.000Z",
        "approvals": [
          { "approver": "compliance-officer@example.com", "approvedAt": "2026-03-02T13:45:00.000Z" }
        ],
        "changeRisk": "LOW",
        "riskAssessment": "Threshold change within approved governance boundary"
      }
    }
  ],
  "verified": true
}

Change approval event

When a Jira ticket is approved (via status transition or approval comment), Audital creates a HUMAN_REVIEW event:

json
{
  "eventType": "HUMAN_REVIEW",
  "source": "JIRA",
  "payload": {
    "ticketKey": "AI-GOV-142",
    "reviewType": "CHANGE_APPROVAL",
    "decision": "APPROVED",
    "reviewer": {
      "displayName": "Compliance Officer",
      "email": "compliance-officer@example.com",
      "role": "Compliance Lead"
    },
    "comment": "Change is within approved governance boundary. Threshold adjustment peer-reviewed and back-tested on 6 months of data.",
    "reviewedAt": "2026-03-02T13:45:00.000Z",
    "linkedAuditEvents": ["evt_01HZABCDEF1234567890ABCD"]
  }
}

Custom Field Mapping

Use the captureFields array in the connection config to include Jira custom fields. Standard field IDs:

Field IDDescription
summaryTicket title/summary
statusCurrent workflow status
priorityPriority level (Critical/High/Medium/Low)
assigneeAssigned user
reporterTicket creator
resolutionResolution reason (Fixed, Won't Fix, etc.)
customfield_10200Change risk level (typical Jira Service Management field)
customfield_10201Risk assessment notes