Jira REST "429 Too Many Requests" rate limit in CI
Jira Cloud enforces per-site rate limits. When a pipeline bursts too many API calls, Jira returns 429 with a Retry-After header telling you how long to wait before trying again.
What this error means
A batch of Jira calls starts returning HTTP 429 "Too Many Requests," sometimes only under parallel matrix jobs hitting the same site.
HTTP/1.1 429 Too Many Requests
Retry-After: 12
{"message":"Rate limit exceeded"}Common causes
Too many calls in a short window
A loop over many issues, or parallel matrix jobs sharing one token, exceeds the site rate limit and trips 429.
No backoff on the client
The pipeline retries immediately instead of honoring Retry-After, which keeps it over the limit.
How to fix it
Honor Retry-After and back off
- Read the Retry-After header on a 429 and sleep that many seconds.
- Retry with exponential backoff for a bounded number of attempts.
- Serialize or throttle bulk operations to stay under the limit.
for i in 1 2 3 4 5; do
code=$(curl -s -o /tmp/r -w '%{http_code}' -u "$JIRA_EMAIL:$JIRA_API_TOKEN" "$URL")
[ "$code" != "429" ] && break
sleep $(( i * 5 ))
doneReduce request volume
Batch reads with JQL/search instead of per-issue GETs, and avoid many matrix jobs hammering the same site simultaneously.
How to prevent it
- Back off on 429 using the Retry-After header, not fixed sleeps.
- Batch reads with search/JQL instead of one call per issue.
- Throttle parallel jobs that share a single Jira token.