# Boards, sprints and epics

Jira Software's Agile API: boards with a backlog, sprints you run from create to complete and epics that group issues.

A board shows a project's issues as a backlog and a series of sprints, and an epic groups issues under one theme. Create a sprint on the default scenario's board, move issues into it, start it, read the backlog, complete it and move another issue under an epic:

```bash
curl -s "$RYSTIC_URL/rest/agile/1.0/board" -u me@example.com:token | jq -c '.values[] | {id, name, type}'
# -> {"id":1,"name":"PLAT board","type":"scrum"}
curl -s "$RYSTIC_URL/rest/agile/1.0/sprint" -u me@example.com:token -H 'Content-Type: application/json' -d '{"name":"PLAT Sprint 4","originBoardId":1,"goal":"Retry failed webhooks"}' | jq -c '{id, name, state}'
# -> {"id":104,"name":"PLAT Sprint 4","state":"future"}
curl -s -o /dev/null -w '%{http_code}\n' "$RYSTIC_URL/rest/agile/1.0/sprint/104/issue" -u me@example.com:token -H 'Content-Type: application/json' -d '{"issues":["PLAT-5","PLAT-6"]}'
# -> 204
curl -s "$RYSTIC_URL/rest/agile/1.0/sprint/104" -u me@example.com:token -H 'Content-Type: application/json' -d '{"state":"active","startDate":"2026-02-02T09:00:00.000Z","endDate":"2026-02-16T09:00:00.000Z"}' | jq -c '{id, state}'
# -> {"id":104,"state":"active"}
curl -s "$RYSTIC_URL/rest/agile/1.0/board/1/backlog?fields=summary" -u me@example.com:token | jq -c '[.issues[].key]'
# -> ["PLAT-1","PLAT-2","PLAT-3"]
curl -s "$RYSTIC_URL/rest/agile/1.0/sprint/104" -u me@example.com:token -H 'Content-Type: application/json' -d '{"state":"closed"}' | jq -c '{id, state}'
# -> {"id":104,"state":"closed"}
curl -s -o /dev/null -w '%{http_code}\n' "$RYSTIC_URL/rest/agile/1.0/epic/PLAT-1/issue" -u me@example.com:token -H 'Content-Type: application/json' -d '{"issues":["PLAT-3"]}'
# -> 204
curl -s "$RYSTIC_URL/rest/agile/1.0/epic/PLAT-1/issue?fields=summary" -u me@example.com:token | jq -c '[.issues[].key]'
# -> ["PLAT-2","PLAT-3"]
```

### Boards

`GET /rest/agile/1.0/board` lists the scenario's boards, each `scrum` or `kanban`, with the project it belongs to. `POST /rest/agile/1.0/board` and `DELETE /rest/agile/1.0/board/{boardId}` create and remove one. A board's backlog is every issue that is not done and sits in no sprint, so moving an issue into a sprint takes it off the backlog. A board's columns and estimation are empty: `GET /rest/agile/1.0/board/{boardId}/configuration` reports no columns, and an estimation read for an issue answers 400.

### Sprints

A sprint is created `future` on a board named by `originBoardId`. `POST /rest/agile/1.0/sprint/{sprintId}` with `state` set to `active` starts it and needs both `startDate` and `endDate`: without them the simulator answers 400 `Sprint is not in 'future' state or has no start and end date.` Setting `state` to `closed` completes it and stamps `completeDate` from the simulator's clock. The issues of a closed sprint stay listed under it.

The seeded sprints list no issues until you move some in. `GET /rest/agile/1.0/board/{boardId}/sprint` takes `state` to list only the future, active or closed ones.

### Epics

An epic is an issue of type Epic. `GET /rest/agile/1.0/epic/{epicIdOrKey}` reads it with its `name` and `done` flag, `GET /rest/agile/1.0/epic/{epicIdOrKey}/issue` lists the issues under it and `POST` to the same path moves more under it. `GET /rest/agile/1.0/board/{boardId}/epic` lists a board's epics.

---

Source: https://www.rystic.ai/docs/simulators/jira/features/agile · Markdown: https://www.rystic.ai/docs/simulators/jira/features/agile.md
