Jira
Use Cheqpoint to gate AI-driven Jira actions — ticket creation, status transitions, sprint assignments, and workflow changes — behind human approval before they execute.
Use case
AI Assistants connected to Jira via the REST API can create tickets in bulk, transition issues across workflows, move work into sprints, or close tickets automatically. Without oversight, these actions can corrupt your project state. Cheqpoint adds a human approval checkpoint before any write operation via the Jira REST API is dispatched.
Common actions to gate
- Bulk ticket creation from AI log or error analysis
- Status transitions (e.g. auto-closing resolved tickets)
- Sprint assignments and story point updates
- Reassigning tickets to team members
- Creating or modifying epics and releases
- Deleting or archiving issues
Prerequisites
- Jira Cloud or Jira Data Center with REST API access.
- A Jira API token for your service account.
- Cheqpoint Connection Key.
Sample request payload — bulk ticket creation
{
"action": "jira_create_tickets",
"summary": "AI requesting creation of 12 tickets from overnight error log scan",
"details": {
"projectKey": "ENG",
"issueCount": 12,
"issueType": "Bug",
"priority": "High",
"labels": ["ai-generated", "error-log-triage"],
"sprintId": "sprint_42"
}
}Sample Cheqpoint response
{
"status": "approved",
"modifiedDetails": {
"issueCount": 4,
"priority": "Medium"
},
"decisionNote": "Approving 4 tickets as Medium priority. Review full list before adding more."
}import os
import requests
from cheqpoint import CheqpointClient
cheq = CheqpointClient(api_key=os.environ["CQ_API_KEY"])
JIRA_BASE = "https://your-org.atlassian.net"
JIRA_AUTH = (os.environ["JIRA_EMAIL"], os.environ["JIRA_API_TOKEN"])
def create_jira_ticket_with_approval(project_key: str, summary: str, issue_type: str = "Bug"):
"""Create a Jira ticket only after human approval via Cheqpoint."""
approval = cheq.request_sync(
action="jira_create_ticket",
summary=f"AI requesting creation of Jira ticket: {summary}",
details={
"projectKey": project_key,
"summary": summary,
"issueType": issue_type,
},
timeout_ms=30_000,
)
if approval["status"] != "approved":
raise ValueError(f"Ticket creation blocked: {approval.get('decisionNote', 'rejected')}")
# Reviewer may have modified the payload
effective = approval.get("modifiedDetails") or {
"projectKey": project_key, "summary": summary, "issueType": issue_type
}
# Call Jira REST API
response = requests.post(
f"{JIRA_BASE}/rest/api/3/issue",
auth=JIRA_AUTH,
json={
"fields": {
"project": {"key": effective["projectKey"]},
"summary": effective["summary"],
"issuetype": {"name": effective["issueType"]},
}
},
)
response.raise_for_status()
return response.json()Routing tip
Create separate Review Groups for your engineering leads and project managers. Route high-priority ticket creation and sprint changes to engineering leads, and epic or release modifications to project managers.
Get your Connection Key at cheqpoint.co/signup.