Last updated: August 2026
The Manual Releases API lets you record releases in GitKraken Insights that aren’t captured automatically from your git provider — for example, releases cut by an external CI/CD system, deploys to a platform GitKraken doesn’t read, or historical releases you want to backfill.
Manual releases appear alongside automatically detected releases in Insights reporting, and contribute to release-based metrics such as Deployment Frequency.
Plan: GitKraken Insights
Role: An account that can create API keys for your organization
Base URL:https://api.gitkraken.dev
Generate an API key
- Go to your account on gitkraken.dev: https://gitkraken.dev/account.
- Open the Security settings tab.
- Under API keys, click Create API key.
- Give the key a name, choose the organization it applies to, and set an expiration.
- Click Create API key.
- Copy the key and store it somewhere secure — GitKraken shows it only once.
Your key looks like gk_tkn_….
Treat the key as a password. Never commit it to source control, paste it into a shared document, or send it over chat. If a key is exposed, delete it in the Security tab and create a replacement.
Authenticate
Send the key as a bearer token on every request:
Authorization: Bearer YOUR_API_KEY
In the examples below, set the key as an environment variable so it never appears in your shell history or scripts:
export GK_API_KEY="YOUR_API_KEY"
Create a manual release
POST /v1/insights/analytics/releases
Records a manual release. The id must be unique within the repository — reusing an existing id returns 400.
Request body
Content type: application/json
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | Yes | Release identifier, unique within the repository. |
repo |
string | Yes | Repository name in owner/name form. |
gitProvider |
string | Yes | Git provider, e.g. github. |
releasedAt |
string (date-time) | Yes | Release time in RFC 3339 format, e.g. 2026-07-09T14:30:00Z. |
tagName |
string | No | Release tag. |
headBranch |
string | No | Branch the release was cut from. |
Example request
curl -i -X POST https://api.gitkraken.dev/v1/insights/analytics/releases
-H "Authorization: Bearer $GK_API_KEY"
-H "Content-Type: application/json"
-d '{
"id": "release-2026-07-09-01",
"repo": "your-org/your-repo",
"gitProvider": "github",
"releasedAt": "2026-07-09T14:30:00Z",
"tagName": "v1.4.0",
"headBranch": "main"
}'
Responses
| Status | Meaning |
|---|---|
201 |
Release created. The response body is empty. |
400 |
Bad request — a required field is missing or malformed, or the id already exists in this repository. |
401 |
Unauthenticated — the API key is missing, malformed, or expired. |
403 |
Unauthorized — the key lacks Insights write permission for this organization. |
500 |
Internal server error. |
Delete a manual release
DELETE /v1/insights/analytics/releases/{id}
Deletes a manual release. Only manual releases can be deleted — releases detected automatically from your git provider are not removable through this endpoint.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string | Yes | The release identifier. |
Query parameters
Both are required to identify the release, since id is only unique within a repository.
| Parameter | Type | Required | Description |
|---|---|---|---|
repo |
string | Yes | Repository name in owner/name form. URL-encode the / as %2F. |
gitProvider |
string | Yes | Git provider, e.g. github. |
Example request
curl -i -X DELETE
"https://api.gitkraken.dev/v1/insights/analytics/releases/release-2026-07-09-01?gitProvider=github&repo=your-org%2Fyour-repo"
-H "Authorization: Bearer $GK_API_KEY"
Responses
| Status | Meaning |
|---|---|
204 |
Release deleted. The response body is empty. |
400 |
Bad request — repo or gitProvider is missing or malformed. |
401 |
Unauthenticated — the API key is missing, malformed, or expired. |
403 |
Unauthorized — the key lacks Insights write permission for this organization. |
404 |
Not found — no manual release with that id exists in the given repository. |
500 |
Internal server error. |
Error format
Error responses (400, 401, 403, 404, 500) return a JSON body:
{
"error": {
"message": "A description of what went wrong"
}
}
Related pages
- Connect Your Data — Setting Up AI Adoption — where release tracking is configured for repositories Insights reads directly.
- DORA & Quality Metrics — the metrics releases feed: Deployment Frequency, Lead Time for Changes, and Change Failure Rate.