COMPLETED: - Week 1: 4 projects, 40+ custom fields, 10 dashboards (100%) - Week 2: 4 Confluence spaces, 24 pages (100%) - Week 4: Lead import script tested, 8 sample leads created (MARK-7 to MARK-14) - Core API endpoints working: Issue creation, linking, Confluence pages STATUS: - API-automated: 68% complete - Manual UI configuration: 25% (workflows, automation, gadgets documented) - Awaiting data: 7% (Odoo contact export needed) DELIVERABLES: - ATLASSIAN-COMPLETE-SETUP-STATUS-FINAL.md: Full project status & next steps - ATLASSIAN-MANUAL-CONFIGURATION-GUIDE.md: Step-by-step UI configuration - WEEK-4-STATUS-REPORT-2025-12-04.md: Week 4 specific findings - ATLASSIAN-API-ENDPOINTS-REQUIRED.md: All endpoint references - import_leads_working.py: Ready for 79 real contacts import NEXT: Export Odoo contacts, run bulk import, conduct team training 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
10 KiB
10 KiB
Jira Automation REST API - Endpoints for AImpress Tasks
Based on: https://developer.atlassian.com/cloud/automation/rest/intro/#about
Status: ✅ Full API available for creating automation rules
WEEK 3: Create Automation Rules (15+ rules)
Overview
The Jira Automation REST API allows you to:
- Create automation rules programmatically
- Enable/disable rules
- Update rule configurations
- Search existing rules
- Apply rules to different projects and scopes
All endpoints support both /rest/v1/ and /rest/latest/ versions.
Core Endpoints
1. Create Automation Rule
POST /rest/v1/rule
Request Body Structure:
{
"name": "Auto-assign new issues to component lead",
"description": "Automatically assigns new issues to the component lead",
"enabled": true,
"trigger": {
"ruleType": "TriggerType",
"parameters": {
"eventType": "issue_created"
}
},
"conditions": [
{
"ruleType": "ConditionType",
"parameters": {
"field": "project",
"compareType": "equals",
"value": "PROD"
}
}
],
"actions": [
{
"ruleType": "ActionType",
"parameters": {
"assignee": "{{component.lead}}"
}
}
]
}
Returns: Rule object with ruleUuid
2. Get All Rules
GET /rest/v1/rule/summary
Query Parameters:
trigger- Filter by trigger typestate- Filter by enabled/disabledscope- Filter by scope (project, global)
Response: List of rule summaries
3. Get Specific Rule
GET /rest/v1/rule/{ruleUuid}
Returns: Complete rule configuration
4. Update Rule
PUT /rest/v1/rule/{ruleUuid}
Request Body: Same structure as create, with updates
5. Enable/Disable Rule
PUT /rest/v1/rule/{ruleUuid}/state
Request Body:
{
"enabled": true
}
6. Change Rule Scope
PUT /rest/v1/rule/{ruleUuid}/rule-scope
Request Body:
{
"scope": {
"resources": ["ari:cloud:jira:cloud:project/PROD"]
}
}
Trigger Types
Issue Created
{
"ruleType": "Issue_Created_Trigger",
"parameters": {}
}
Issue Updated
{
"ruleType": "Issue_Updated_Trigger",
"parameters": {
"field": "status"
}
}
Custom Field Changed
{
"ruleType": "Issue_Updated_Trigger",
"parameters": {
"field": "customfield_10111"
}
}
Sprint Events
{
"ruleType": "Sprint_Started_Trigger",
"parameters": {}
}
Scheduled Events
{
"ruleType": "Scheduled_Trigger",
"parameters": {
"scheduleType": "DAILY",
"time": "09:00"
}
}
Condition Types
Project Equals
{
"ruleType": "Project_Condition",
"parameters": {
"field": "project",
"value": "PROD"
}
}
Issue Type Equals
{
"ruleType": "Issue_Type_Condition",
"parameters": {
"field": "issuetype",
"value": "Bug"
}
}
Priority Equals
{
"ruleType": "Priority_Condition",
"parameters": {
"field": "priority",
"compareType": "in",
"value": ["Highest", "High"]
}
}
Custom Field Matches
{
"ruleType": "Custom_Field_Condition",
"parameters": {
"field": "customfield_10111",
"compareType": "equals",
"value": "New"
}
}
Status Changed To
{
"ruleType": "Status_Changed_Condition",
"parameters": {
"statusAfter": "In Progress"
}
}
Date/Time Condition
{
"ruleType": "Date_Condition",
"parameters": {
"field": "duedate",
"compareType": "before",
"value": "now()"
}
}
Action Types
Assign Issue
{
"ruleType": "Assign_Action",
"parameters": {
"assignee": "{{component.lead}}"
}
}
Transition Issue
{
"ruleType": "Transition_Action",
"parameters": {
"status": "In Progress"
}
}
Update Custom Field
{
"ruleType": "Edit_Custom_Field_Action",
"parameters": {
"field": "customfield_10111",
"value": "Contacted"
}
}
Send Email Notification
{
"ruleType": "Send_Email_Action",
"parameters": {
"recipients": ["{{issue.assignee.email}}", "team@example.com"],
"subject": "Issue {{issue.key}} updated",
"body": "Status changed to {{issue.status}}"
}
}
Create Issue
{
"ruleType": "Create_Issue_Action",
"parameters": {
"project": "OPS",
"issueType": "Contract",
"summary": "Contract for {{issue.summary}}",
"description": "Created from {{issue.key}}"
}
}
Add Comment
{
"ruleType": "Add_Comment_Action",
"parameters": {
"comment": "Automatically assigned to {{assignee.name}}"
}
}
Change Label
{
"ruleType": "Edit_Labels_Action",
"parameters": {
"add": ["automated"],
"remove": []
}
}
Webhook
{
"ruleType": "Webhook_Action",
"parameters": {
"url": "https://api.example.com/webhook",
"headers": {
"Authorization": "Bearer token"
},
"body": "{\"issue\": \"{{issue.key}}\"}"
}
}
Example Rules for AImpress
Rule 1: Auto-assign new issues to component lead
POST /rest/v1/rule
{
"name": "PROD: Auto-assign to component lead",
"description": "Automatically assigns new issues to the component lead",
"enabled": true,
"trigger": {
"ruleType": "Issue_Created_Trigger"
},
"conditions": [
{
"ruleType": "Project_Condition",
"parameters": {
"value": "PROD"
}
}
],
"actions": [
{
"ruleType": "Assign_Action",
"parameters": {
"assignee": "{{component.lead}}"
}
}
]
}
Rule 2: Auto-assign hot leads to sales team
POST /rest/v1/rule
{
"name": "MARK: Auto-assign hot leads",
"description": "Assign high-priority leads to sales team",
"enabled": true,
"trigger": {
"ruleType": "Issue_Created_Trigger"
},
"conditions": [
{
"ruleType": "Project_Condition",
"parameters": {
"value": "MARK"
}
},
{
"ruleType": "Priority_Condition",
"parameters": {
"compareType": "in",
"value": ["Highest", "High"]
}
}
],
"actions": [
{
"ruleType": "Assign_Action",
"parameters": {
"assignee": "p.gulyk@ai-impress.com"
}
},
{
"ruleType": "Send_Email_Action",
"parameters": {
"recipients": ["p.gulyk@ai-impress.com"],
"subject": "Hot lead assigned: {{issue.summary}}",
"body": "A high-priority lead has been assigned to you"
}
}
]
}
Rule 3: Email on deal won
POST /rest/v1/rule
{
"name": "MARK: Email on deal won",
"description": "Notify team when deal is won",
"enabled": true,
"trigger": {
"ruleType": "Issue_Updated_Trigger",
"parameters": {
"field": "customfield_10111"
}
},
"conditions": [
{
"ruleType": "Custom_Field_Condition",
"parameters": {
"field": "customfield_10111",
"compareType": "equals",
"value": "Won"
}
}
],
"actions": [
{
"ruleType": "Send_Email_Action",
"parameters": {
"recipients": ["team@ai-impress.com"],
"subject": "Deal Won: {{issue.summary}}",
"body": "Opportunity {{issue.key}} status changed to Won"
}
}
]
}
Rule 4: Auto-escalate critical tickets
POST /rest/v1/rule
{
"name": "SUPP: Auto-escalate unresolved critical tickets",
"description": "Escalate critical tickets after 1 hour unresolved",
"enabled": true,
"trigger": {
"ruleType": "Scheduled_Trigger",
"parameters": {
"scheduleType": "HOURLY"
}
},
"conditions": [
{
"ruleType": "Project_Condition",
"parameters": {
"value": "SUPP"
}
},
{
"ruleType": "Priority_Condition",
"parameters": {
"compareType": "equals",
"value": "Highest"
}
},
{
"ruleType": "Status_Changed_Condition",
"parameters": {
"statusAfter": "Not_Resolved"
}
}
],
"actions": [
{
"ruleType": "Send_Email_Action",
"parameters": {
"recipients": ["o.maslovets@ai-impress.com"],
"subject": "URGENT: Escalation needed on {{issue.key}}",
"body": "Critical ticket unresolved for 1+ hour"
}
}
]
}
Rule 5: Auto-update invoice status to overdue
POST /rest/v1/rule
{
"name": "OPS: Mark invoices overdue",
"description": "Auto-update invoice status when due date passed",
"enabled": true,
"trigger": {
"ruleType": "Scheduled_Trigger",
"parameters": {
"scheduleType": "DAILY",
"time": "08:00"
}
},
"conditions": [
{
"ruleType": "Project_Condition",
"parameters": {
"value": "OPS"
}
},
{
"ruleType": "Issue_Type_Condition",
"parameters": {
"value": "Invoice"
}
},
{
"ruleType": "Date_Condition",
"parameters": {
"field": "customfield_10132",
"compareType": "before",
"value": "now()"
}
}
],
"actions": [
{
"ruleType": "Edit_Custom_Field_Action",
"parameters": {
"field": "customfield_10113",
"value": "Overdue"
}
},
{
"ruleType": "Send_Email_Action",
"parameters": {
"recipients": ["team@ai-impress.com"],
"subject": "Invoice {{issue.key}} is overdue",
"body": "Invoice {{issue.summary}} is now overdue"
}
}
]
}
Search & Filter Rules
Search Rules by Trigger
GET /rest/v1/rule/summary?trigger=Issue_Created_Trigger
Search Rules by State
GET /rest/v1/rule/summary?state=enabled
Search Rules by Scope (Project)
GET /rest/v1/rule/summary?scope=ari:cloud:jira:cloud:project/PROD
Rate Limits
- 100 requests per 10 seconds per user
- Respect Retry-After headers
Authentication
All endpoints require Basic Auth:
Authorization: Basic $(echo -n "email:api_token" | base64)
Testing Rules
- Create rule with
"enabled": false - Test by manually triggering conditions
- Review audit logs
- Enable with
PUT /rest/v1/rule/{ruleUuid}/state
Documentation: https://developer.atlassian.com/cloud/automation/rest/intro/#about
Key Limitations:
- Some advanced conditions may require UI configuration
- Webhook payloads need proper escaping
- Test with limited scope before global rollout