import requests from requests.auth import HTTPBasicAuth # --- CONFIGURATION --- JIRA_DOMAIN = "flowbird.atlassian.net" EMAIL = "david.rice@arrive.com" API_TOKEN = "ATATT3xFfGF0qWIGGGsvwb0oBnekYh88S8jr8XKbwvRkaoFWwq7cPGS2S5gzZkG-o_JXoDuYR5hOSGiL4GIj5XfTfm05mq313yxmkr8DZqVXDdbgwt8HNcxjLPmcWi9cQDy9wJ-Rc17uXIToYZSvZBCHyWiNZQhh5WlTkTwl0yjgGd-x_F-tOn8=F97E27B2" BOARD_ID = 3417 # Replace with your board ID auth = HTTPBasicAuth(EMAIL, API_TOKEN) headers = {"Accept": "application/json"} # --- Get All Sprints for the Board --- sprints_url = f"https://{JIRA_DOMAIN}/rest/agile/1.0/board/{BOARD_ID}/sprint" sprints = [] start_at = 0 max_results = 50 while True: params = {"startAt": start_at, "maxResults": max_results} resp = requests.get(sprints_url, headers=headers, auth=auth, params=params) resp.raise_for_status() data = resp.json() sprints.extend(data.get("values", [])) if data["isLast"]: break start_at += max_results print(f"Found {len(sprints)} sprints.") # --- Loop Through Each Sprint and Get Issues --- for sprint in sprints: sprint_id = sprint["id"] sprint_name = sprint["name"] print(f"\nSprint: {sprint_name} (ID: {sprint_id})") issues_url = f"https://{JIRA_DOMAIN}/rest/agile/1.0/sprint/{sprint_id}/issue" start_at_issues = 0 while True: params = {"startAt": start_at_issues, "maxResults": max_results} issues_resp = requests.get(issues_url, headers=headers, auth=auth, params=params) issues_resp.raise_for_status() issues_data = issues_resp.json() issues = issues_data.get("issues", []) for issue in issues: key = issue["key"] summary = issue["fields"]["summary"] print(f" {key}: {summary}") if start_at_issues + max_results >= issues_data["total"]: break start_at_issues += max_results