A release is a version of your app, such as 2.5, as it moves across environments. See Releases.
Reading works with any valid API key. Saving a release needs platform:manage.
List releases
GET
/api/projects/{projectId}/releasesBearer or any API keyReturns an array. Each release has id, name, notes, targetDate, source, createdAt, shippedAt, and environments.
Declare a release
POST
/api/projects/{projectId}/releasesBearer or API key · platform:manage{ "name": "2.5", "notes": "New checkout", "targetDate": "2026-11-10", "environmentKey": "staging" }
Creates the release, or finds it by name if it exists. With environmentKey, it also records that the release is on that environment now, so you can call it on every deploy. An invalid release returns 400.
From CI, you can send release on POST /api/ci/runs instead.
Update a release
PUT
/api/projects/{projectId}/releases/{releaseId}Bearer or API key · platform:manageSame body as declare.
Release summary
GET
/api/projects/{projectId}/releases/{releaseId}/summaryBearer or any API keyOptional query: environmentKey. Returns:
| Field | Notes |
|---|---|
release | The release |
issues | Findings found in this release |
olderOpenIssues | Open findings from earlier releases |
runs | Runs on this release |
checks | Agenda items for this release |
verdict, reasons | A summary of the known signals: not_tested, not_ready, ready_with_risks, ready, or agenda when the release has agenda items. It is not a sign-off. Your team decides when to ship. |
Example
curl -sS -X POST "https://api.certyn.io/api/projects/$PROJECT_ID/releases" \
-H "Content-Type: application/json" \
-H "X-API-Key: $CERTYN_API_KEY" \
-d '{ "name": "2.5", "environmentKey": "staging" }'