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.
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
# 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.
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:
# 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.
# 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:
# 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
{
"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:
{
"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 ID | Description |
|---|---|
| summary | Ticket title/summary |
| status | Current workflow status |
| priority | Priority level (Critical/High/Medium/Low) |
| assignee | Assigned user |
| reporter | Ticket creator |
| resolution | Resolution reason (Fixed, Won't Fix, etc.) |
| customfield_10200 | Change risk level (typical Jira Service Management field) |
| customfield_10201 | Risk assessment notes |