# Versions and components

A project's release versions and components: create, release, archive and swap versions; add, rename and remove components.

A version is a release a project's issues are fixed in, and a component is a part of the product that issues belong to. On the default scenario, add a version, release it, swap an issue onto it and add a component:

```bash
curl -s "$RYSTIC_URL/rest/api/3/project/PLAT/versions" -u me@example.com:token | jq -c '[.[] | {name, released}]'
# -> [{"name":"2026.1","released":true},{"name":"2026.2","released":false}]
curl -s "$RYSTIC_URL/rest/api/3/version" -u me@example.com:token -H 'Content-Type: application/json' -d '{"name":"2026.3","projectId":10100,"releaseDate":"2026-04-01"}' | jq -c '{id, name, released}'
# -> {"id":"10202","name":"2026.3","released":false}
curl -s -X PUT "$RYSTIC_URL/rest/api/3/version/10202" -u me@example.com:token -H 'Content-Type: application/json' -d '{"released":true,"releaseDate":"2026-03-30"}' | jq -c '{id, released, releaseDate}'
# -> {"id":"10202","released":true,"releaseDate":"2026-03-30"}
curl -s "$RYSTIC_URL/rest/api/3/issue" -u me@example.com:token -H 'Content-Type: application/json' -d '{"fields":{"project":{"key":"PLAT"},"issuetype":{"name":"Task"},"summary":"Retry failed webhooks","fixVersions":[{"id":"10201"}]}}' | jq -c '{key}'
# -> {"key":"PLAT-7"}
curl -s -o /dev/null -w '%{http_code}\n' "$RYSTIC_URL/rest/api/3/version/10201/removeAndSwap" -u me@example.com:token -H 'Content-Type: application/json' -d '{"moveFixIssuesTo":"10202"}'
# -> 204
curl -s "$RYSTIC_URL/rest/api/3/issue/PLAT-7?fields=fixVersions" -u me@example.com:token | jq -c '[.fields.fixVersions[].name]'
# -> ["2026.3"]
curl -s "$RYSTIC_URL/rest/api/3/component" -u me@example.com:token -H 'Content-Type: application/json' -d '{"name":"Webhooks","project":"PLAT","description":"Delivery and retries"}' | jq -c '{id, name, project}'
# -> {"id":"10302","name":"Webhooks","project":"PLAT"}
```

### Versions

`POST /rest/api/3/version` creates a version in the project named by `projectId` and answers 400 when `projectId` is missing or the name is already used in the project, and 404 when `projectId` names no project. `PUT /rest/api/3/version/{id}` releases it (`released` with a `releaseDate`) or archives it (`archived`). `GET /rest/api/3/project/{projectIdOrKey}/versions` lists a project's versions and `GET /rest/api/3/project/{projectIdOrKey}/version` pages through them. `POST /rest/api/3/version/{id}/removeAndSwap` deletes a version and moves the issues fixed in it to the version named by `moveFixIssuesTo`.

### Components

`POST /rest/api/3/component` adds a component to the project named by `project`, and `PUT` and `DELETE` on `/rest/api/3/component/{id}` rename and remove it. Two components of one project cannot share a name: the second answers 400. A removed component reads 404 afterwards. `GET /rest/api/3/project/{projectIdOrKey}/components` lists a project's components.

---

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