API
API: Releases
Release trains, grouped releases, history, health, incidents, rollbacks, stacks, verification, the playground and release notes over the API.
Ship, watch and roll back releases.
Release trains
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it. Flag:release_trains.
A release train groups pull requests that ship together as one named release. See Release Trains.
| Endpoint | What it does |
|---|---|
GET /v1/trains |
Lists trains |
POST /v1/trains |
Creates a train: repository, name, and optional target_branch, label and milestone |
GET /v1/trains/{id} |
A train with its members and, once cut, its cut |
DELETE /v1/trains/{id} |
Abandons a train. Needs a key tied to a person. |
POST /v1/trains/{id}/members |
Adds a pull request: pull_request, and head_sha when the GitHub App isn't installed |
DELETE /v1/trains/{id}/members/{number} |
Removes a pull request |
POST /v1/trains/{id}/sync |
Refreshes the train's pull requests |
GET /v1/trains/{id}/readiness |
The verdict with its reasons, each pull request's gate outcome, counts, combined findings and approvals |
POST /v1/trains/{id}/approve |
Always 403 HUMAN_APPROVAL_REQUIRED for a key. A person approves in the dashboard. |
POST /v1/trains/{id}/cut |
Always 403 HUMAN_APPROVAL_REQUIRED for a key. A person cuts in the dashboard. |
Multi-repo trains
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it. Flag:multi_repo_trains. It also needsrelease_trainsandcross_repo_impact.
One release across repositories, in dependency order. See Release across repositories.
| Endpoint | What it does |
|---|---|
GET /v1/multi-trains |
Lists multi-repo trains, each with its repositories and how many have released |
POST /v1/multi-trains |
Starts one: name, repositories (2 to 20) and an optional milestone. Needs a key tied to a person. |
GET /v1/multi-trains/{id} |
The train's state, summary, needs_order, gaps, edges and steps, each with its position, state, why, verdict, counts, held_by, last_error and attempts |
PUT /v1/multi-trains/{id}/order |
Always 403 HUMAN_APPROVAL_REQUIRED for a key. A person sets the order in the dashboard. |
POST /v1/multi-trains/{id}/sync |
Refreshes every step. A repository that fails shows sync_error on its step. Needs a key tied to a person. |
DELETE /v1/multi-trains/{id} |
Abandons the train and every step that hasn't released. Needs an owner's or admin's key. |
GET /v1/service-map |
services, each with health and last_release, plus edges and cycles |
Approve and cut a step through its train_id on the routes above, which refuse a key the same way. A step out of turn answers 409 MULTI_TRAIN_HELD, and a train with no proven order answers 409 MULTI_TRAIN_ORDER_NEEDED.
Grouped releases
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it. Flag:grouped_releases.
A grouped release is everything merged to the default branch since the last release tag. See Grouped releases.
| Endpoint | What it does |
|---|---|
POST /v1/releases |
Prepares or refreshes the open draft for repository. Needs a key tied to a person. |
GET /v1/releases |
Lists releases, newest first. Optional repository, status and limit |
GET /v1/releases/{id} |
A release: range, version, pull_requests, commits, notes, verdict, risk, status and each publish targets entry. Optional audience (default customer) picks whose notes notes and audience_notes hold; publish_audiences maps each target to its audience. A draft or approved release without notes for that audience gets them written on this first read |
POST /v1/releases/{id}/notes |
Replaces one audience's notes: {"audience": "customer", "body": "..."}, or writes them again: {"audience": "customer", "regenerate": true}. Returns the audience_notes shape. Anyone with write can edit a draft; an approved release needs gate.review (owners, admins, policy admins and approvers). Published and denied releases answer 409; correct a published release's notes with POST /v1/releases/{id}/corrections. Every change is audited as release.notes.edit or release.notes.regenerate |
POST /v1/releases/{id}/corrections |
Corrects one audience's notes on a published release: {"audience": "customer", "body": "...", "reason": "..."}. Updates the stored notes and every target that got them: the changelog entry, the GitHub Release body, and Notion or Confluence pages. Slack messages aren't edited (not_edited). Returns changed, before_sha256, after_sha256, failed and one targets entry per target with status updated, failed or not_edited. Send it again to retry a failed target. Owners and admins only (403 otherwise); reason needs at least 10 characters (400); a release that isn't published answers 409. Audited as release.notes.correct |
POST /v1/changelog/corrections |
Corrects an older changelog entry by version: {"version": "v1.2.0", "repository": "acme/api", "body": "...", "reason": "..."}. repository defaults to the one the public changelog shows. Same response shape, roles and reason rule; 404 CHANGELOG_ENTRY_NOT_FOUND when there's no such entry. Audited as changelog.correct |
POST /v1/releases/{id}/approve |
Always 403 HUMAN_APPROVAL_REQUIRED. A person votes in the dashboard, in Slack or through the browser confirmation below. |
POST /v1/releases/{id}/deny |
Always 403 HUMAN_APPROVAL_REQUIRED, for the same reason |
POST /v1/releases/{id}/confirmations |
Starts a browser-confirmed vote: {"vote": "approve"} or deny. Returns a device_code, user_code and verification_url |
GET /v1/release-confirmations/{device_code} |
202 while pending, 200 with the release once recorded |
POST /v1/releases/{id}/publish |
Publishes an approved release, each target with its audience's notes (see publish_audiences in PATCH /v1/settings). Safe to retry: only failed targets run again. |
History & time machine
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it. Flags:release_time_machine,regression_predictor,history_queries.
GET /v1/when
Flag release_time_machine. Finds the first release where something appeared.
| Query | Description |
|---|---|
repository |
Required |
kind |
A finding kind, such as secret |
text |
Text to look for |
path |
Limit to a path |
Send kind or text. Symbols, files and dependencies between areas are answered from a checkout by bumpkit when.
Returns query, kind, found, first_release, introduced_by, later_changes, evidence and releases_scanned. Each change has release, sha, check_id, author, agents, date and summary.
POST /v1/predict
Flag regression_predictor. Ranks the existing functionality a change can break. bumpkit predict builds the request from the blast radius.
| Field | Type | Required | Description |
|---|---|---|---|
repository |
string | Yes | owner/name |
changed_files |
string[] | Yes | Files the change touches |
changed_symbols |
string[] | No | Functions the change touches |
areas |
array | Yes | [{area, files, symbols, path}] areas the change reaches |
Returns {"repository", "areas": [...], "note"}. Each area has area, score, likelihood and evidence.
GET /v1/history/changes
Flag history_queries. What changed in an area.
| Query | Description |
|---|---|
repository |
Required |
path |
The area |
since |
A date (2026-10-01), days (7d) or a checked release (v1.4.0) |
Returns repository, path, since, releases (checks), agents and summary.
GET /v1/history/regressions
Flag history_queries. Whether an area has regressed in production. Query repository and path. Returns repository, path, regressed, incidents (each an incident plus frames, release and why) and summary.
Health & incidents
See Release Health & Forensics.
POST /v1/deployments
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it. Flags:forensicsorrelease_health.
Records a deployment.
| Field | Type | Required | Description |
|---|---|---|---|
repository |
string | Yes | owner/name, as your checks record it |
sha |
string | Yes | The deployed commit, 7 to 40 hex characters |
environment |
string | No | Such as production |
version |
string | No | A release label such as v2.3.0, up to 64 characters |
status |
string | No | success, failure or in_progress |
deployed_at, started_at, finished_at |
string | No | RFC 3339 |
commits |
array | No | [{sha, subject, files: [{path, hunks: [{start, end, context}]}]}] for line-level attribution |
Returns 204. The body limit is 10 MB.
GET /v1/releases/{version}/health
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it. Flag:release_health.
Compares the error rate after a deploy with before. {version} is the deployed version or commit SHA.
| Query | Description |
|---|---|
repository |
owner/name |
environment |
Deployment environment |
window |
Minutes to compare, 15 to 1440. Defaults to the workspace setting. |
min_events |
Minimum errors before a verdict, 1 to 100000 |
Returns repository, environment, version, sha, deployed_at, verdict, reason, partial, min_events, before and after (from, to, minutes, errors, per_hour), rate_ratio, regressions, attribution, incident_id, resolved_version and evaluated_at.
Each regression has fingerprint, title, status, before, after, rate_ratio, frames and suspects ([{sha, subject, likelihood, score, evidence}]).
404 DEPLOYMENT_NOT_FOUND if no successful deployment of that version is recorded.
GET /v1/release-health/settings
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it. Flag:release_health.
Needs a key tied to a person. Returns window_minutes (default 60), min_events (default 20), posthog_repository, posthog_environment, last_polled_at and last_poll_error.
PUT /v1/release-health/settings
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it.
Owner only. Send window_minutes (15 to 1440), min_events (1 to 100000), and optionally posthog_repository (owner/name) and posthog_environment (one word, default production). Reading errors from PostHog needs the PostHog integration connected. Returns the settings.
POST /v1/incidents
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it. Flag:forensics.
Ranks the releases behind a production failure, each with a likelihood and its evidence.
| Field | Type | Required | Description |
|---|---|---|---|
repository |
string | Yes | owner/name |
error |
string | One of | The error with its stack trace |
files |
string[] | One of | Files involved in the failure |
started_at |
string | No | RFC 3339 |
lookback_days |
integer | No | How far back to look |
Returns repository, started_at, frames ([{file, line}]) and suspects ([{likelihood, score, evidence, check}]).
GET /v1/incidents
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it. Flag:forensics.
Needs a key tied to a person. Query limit: 1 to 500, default 100. Returns {"incidents": [...]} with id, repository, title, url, started_at, likelihood (the top suspect's), top_check_id, resolved_version, resolved_sha, resolved_at, resolved_by_email and, when known, likely_release.
POST /v1/incidents/{id}/resolve
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it. Flag:forensics.
Records the release that fixed an incident. Needs a key tied to a person (the incident.resolve permission with roles).
| Field | Type | Required | Description |
|---|---|---|---|
version |
string | Yes | Such as v2.3.1 |
sha |
string | No | The fixing commit, 7 to 40 hex characters |
Returns 204, or 404 NOT_FOUND.
GET /v1/incidents/{id}
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it. Flag:intelligent_rollback.
Returns an incident with its context: {"incident", "frames", "suspects"}.
Rollbacks
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it. Flag:intelligent_rollback.
bumpkit rollback plan builds a plan locally and stores it here; bumpkit rollback open opens it. See Rollback & Time Machine.
POST /v1/rollbacks
Stores a rollback plan.
| Field | Type | Required | Description |
|---|---|---|---|
repository |
string | Yes | owner/name |
base, head |
string | Yes | The release the plan reverts |
head_sha |
string | Yes | The full commit the plan was made on |
revert |
string[] | Yes | 1 to 20 full commit SHAs to revert |
incident_id |
string | No | The incident this answers |
frames, suspects, dependents, conflicts, files |
array | No | The plan's evidence and affected files, up to 300 files |
feasible |
boolean | No | Whether the revert applies cleanly |
command, summary |
string | No | The manual revert command and a summary |
Returns 201 with the plan, including id and status.
GET /v1/rollbacks/{id}
Returns a plan.
POST /v1/rollbacks/{id}/open
Opens the revert pull request through the GitHub App. Owner only.
| Field | Type | Required | Description |
|---|---|---|---|
branch |
string | Yes | The branch the revert merges into, such as main |
files |
array | Yes | Exactly the files the revert changes: [{path, mode, content, deleted}], with base64 content and mode 100644, 100755 or 120000 |
Returns 200 with the plan, pull_request set. 409 CONFLICT if it is already open, 409 GITHUB_APP_REQUIRED if the App isn't installed. The body limit is 8 MB.
Close the loop
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it. Flag:close_the_loop.
Bumpkit opens the rollback or back-port pull request, the gate re-verifies it, and each item records that it is proven done. Bumpkit never merges anything. Opening pull requests needs the Bumpkit GitHub App on the repository for your workspace, or 409 GITHUB_APP_REQUIRED. At most 30 Bumpkit-opened pull requests per workspace per hour, then 429 RATE_LIMIT_EXCEEDED. See Rollback & Time Machine.
Each item has id, repository, kind (rollback, backport or fix_task), title, finding_kind, fingerprint, check_id, incident_id, branch, pull_request, status (found, routed, fix_opened, verified or blocked), open, routed_to, fix_kind, fix_url, fix_branch, fix_number, conflicts, summary, onto, commits ([{sha, subject, author, evidence}]), task, verified_by, verified_sha, verified_at, created_by, created_at, updated_at and events ([{stage, actor, note, check_id, decision_id, sha, at}]). A fix task's task has change (rename, remove_param, signature or removed), symbol, name, old_signature, new_signature, new_name, removed_param, mechanical, reason, expected_edit and places ([{file, line, caller, before, after}]).
POST /v1/loop/rollbacks
Opens the revert of a release as a pull request. Needs a key created by an owner or admin.
| Field | Type | Required | Description |
|---|---|---|---|
incident_id |
string | One of | An incident traced to a release |
check_id |
string | One of | The release check to revert |
release |
string | One of | A release version such as v1.1.0, with repository |
target |
string | One of | Any of the three above |
to |
string | One of | Roll the branch back to this release, such as v1.0.0, with repository |
repository |
string | With release or to |
owner/name |
branch |
string | No | The branch to revert onto. Defaults to the default branch. |
dry_run |
boolean | No | Return what the rollback reverts (releases, commits, files) and open nothing |
Returns 201 with the item. One rollback pull request per incident, release or to version: when one is already open, 200 with it and "existing": true. 409 CONFLICT when the revert conflicts or there is nothing to revert, 403 FORBIDDEN for other roles.
With to, Bumpkit reverts every non-merge commit in the releases it checked after to, up to the newest checked release on branch, as one pull request on bumpkit/rollback/to-<version>. Commits on the branch after that release that no checked release shipped stay. The item adds to, releases ([{name, check_id}], newest first) and files. A dry run returns 200 with "dry_run": true. 404 NOT_FOUND when to is neither a release Bumpkit checked nor a tag, and 409 CONFLICT when to isn't on the branch, nothing was released after it, or the revert is over 100 commits or 300 files; the message gives the git revert command to run by hand.
POST /v1/loop/backports
Cherry-picks a shipped hotfix onto a branch and opens the pull request. Needs a key from a member or a role above it (the write permission).
| Field | Type | Required | Description |
|---|---|---|---|
repository |
string | Yes | owner/name |
commit |
string | Yes | The hotfix commit |
onto |
string | No | The target branch. Defaults to the default branch. |
check_id |
string | No | On a conflict, Bumpkit comments on this check's pull request |
Same statuses as rollbacks. A conflict returns 409 CONFLICT naming the conflicting files and the hotfix's author, and opens nothing. If the hotfix is already on the branch, the item is marked verified and nothing opens.
GET /v1/loop
Lists items, open ones only unless status=all. Query repository, branch, kind, check_id, status and limit (default 50, maximum 200). Returns {"items": [Item]}.
GET /v1/loop/{id}
Returns one item with its events, or 404 NOT_FOUND.
Stacked pull requests
Beta, early access. Flag:
stacked_prs.
A pull request is stacked when its base branch is another open pull request's head branch. Works with any key. Both routes need the query repository as owner/name. Use bumpkit stack list and show, or the list_stacks and get_stack MCP tools.
GET /v1/stacks
Returns {"repository", "stacks": [{repository, root, merge_next, chain, pull_requests}]}. Each pull request has number, title, author, branch, base, head_sha, base_sha, state, parent, depth, decision, outcome, check_id, gate_id, decided_at and details_url.
GET /v1/stacks/{number}
One pull request's stack. Returns repository, pull_request, stack, and position with number, position, size, parent, parent_open, merge_first (the open pull requests to merge before it, in order) and chain. 404 NOT_FOUND when it isn't part of a stack Bumpkit has seen.
Verification
Evidence the gate can use: how a change behaved, which tests it left behind, and whether it did what the ticket asked. Each route works with any key. The read routes take the query repository and sha, and answer 404 NOT_FOUND when nothing is stored for that commit.
POST /v1/behavior
Beta, early access. Flag:
behavioral_verification.
Stores a behavioral report from bumpkit verify, which runs the checks in your CI and signs the report with your key. Send repository, base, head, base_sha and head_sha (full commit hashes), runner, sandbox, checks, started_at, finished_at and signature. Add attestation with a GitHub Actions OIDC token to prove the run came from CI.
Returns 201 with id, repository, head_sha, outcome, summary, counts, verified, proof (api_key or github_oidc), attestation (with the token's workflow, workflow_ref, run_id and ref) and created_at. A signature that doesn't match answers 400 INVALID_SIGNATURE, a token that doesn't verify 400 INVALID_ATTESTATION, and a token used before 409 ATTESTATION_REUSED. The body limit is 4 MB.
GET /v1/behavior
Beta, early access. Flag:
behavioral_verification.
The stored report for a commit: the fields above plus report. The verify_report MCP tool reads it.
POST /v1/tests/evidence
Beta, early access. Flag:
regression_evidence.
Stores test results and the tests expected for a commit. bumpkit test attest sends this for you. Send repository, base_sha and head_sha (full commit hashes), expected, content (JUnit XML or go test -json output), and optionally format (junit or go-test-json). Add attestation with a GitHub Actions OIDC token; without it the upload is stored and doesn't count as evidence.
expected has base, head, tests (up to 5,000, each with name, file, line, because, symbol, path and ambiguous), changed (up to 20,000 paths), code_files, undetermined (up to 500, each with path and reason) and truncated.
Returns 201 with id, proof (api_key or github_oidc), counts, results, parse_error, evidence and created_at. A results file that can't be read is stored and returned in parse_error, so the gate can say so. A token that doesn't verify answers 400 INVALID_ATTESTATION, and a token used before 409 ATTESTATION_REUSED. The body limit is 32 MB.
GET /v1/tests/evidence
Beta, early access. Flag:
regression_evidence.
The regression evidence for a commit. Takes repository, sha (a full commit hash) and optionally pull_request, which counts merge-commit attestations only from that pull request. Unlike the other read routes, it answers 200 with state: "missing" when nothing is stored. Returns repository, head_sha, state, summary, next_step, expected, passed, failed, not_run, tests (each with name, file, line, verdict, because, symbol, path and note), omitted, undetermined, proof, attestation, uploads and reported_at. tests lists up to 500, failures first. See the states. The test_evidence MCP tool reads it.
POST /v1/tests/observations
Beta, early access. Flag:
test_evolution.
Records which tests each release ran, so Bumpkit can flag the ones that stopped mattering. Send repository, head (a full commit hash), tests (up to 5,000, each with name, file, touched and failed) and optionally releases (2 to 100, default 10). Returns {"recorded", "releases", "quiet": [{name, file, releases}]}. quiet lists tests that neither failed nor were touched over at least that many releases. bumpkit tests sends this for you.
POST /v1/tests/suggest
Beta, early access. Flag:
test_evolution.
Fills in a test skeleton for a changed function. Send language, symbol, file, source and template. language is go, js, python, ruby, php, java, kotlin, scala, csharp, dart, elixir, rust, c, cpp or swift, and template must be valid for it. Returns {"code", "generator"}. generator is template when Bumpkit returns your skeleton unchanged. bumpkit tests calls it.
POST /v1/tests/report
Beta, early access. Flag:
test_evolution.
Stores a test evolution report. Send repository, head (a full commit hash), coverage (boolean), untested and obsolete, up to 500 each. An untested entry has symbol, kind, lang, file, line, end, reason, branches and evidence. An obsolete entry has test, file, line and reason. Returns 201 with the report and created_at. bumpkit tests uploads it.
GET /v1/tests/report
Beta, early access. Flag:
test_evolution.
The stored report for a commit. The untested_behavior MCP tool reads it.
POST /v1/intent
Beta, early access. Flag:
intent_check.
Maps a ticket's acceptance criteria to the evidence in a change. Send the fields of POST /v1/checks, plus specs (up to 20, each with source, ref and text, at most 64 KB) and llm (boolean) to extract criteria from free-form text. Returns extractor, criteria, covered and not_evidenced. Each criterion has id, text, source, status, missing and evidence. With repository and a full head hash, the report is stored for that commit. bumpkit criteria builds the request from a checkout.
GET /v1/intent
Beta, early access. Flag:
intent_check.
The stored report for a commit. The intent_coverage MCP tool reads it.
Playground
Beta, early access. Flag:
try_release_check.
Previews a release check on a sample, without saving it or posting anywhere. A run counts toward your per-minute limit. Needs a key tied to a person. Use bumpkit playground, or the playground_examples and playground_run MCP tools.
GET /v1/playground/examples
Returns examples (each with id, title, summary, author, message and previous), default_policy, max_diff, max_policy, max_message and max_version.
POST /v1/playground/run
Read-only roles get 403 FORBIDDEN. Send example, or diff and message, not both. Optional: policy (a bumpkit.yml, default default_policy) and previous (the previous version). Limited per workspace: 429 RATE_LIMIT_EXCEEDED with Retry-After when you run them too fast.
Returns gate, comment, radar, blast, diff, example, and preview: true, saved: false and posted: false.
Notes & docs
See Release Notes & Digests and Changelog Pages.
GET /v1/checks/{id}/docs
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it. Flag:release_docs.
Release documentation for a checked release. Add regenerate=true to build it again. Returns check_id, version, engineering, customer, migration, created_at and publications ([{target, url, by, at}]).
POST /v1/checks/{id}/publish
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it. Flag:release_docs.
Publishes the release docs. Send targets: any of changelog, github_release, slack and discord, plus notion and confluence with the notion_confluence flag (without it they are refused with 400 VALIDATION_ERROR). Returns the docs with their publications. 400 if the release has no version, 502 PUBLISH_FAILED if a target failed. Needs a key created by an owner, admin, policy admin, approver or member; other roles and keys not tied to a person get 403 ROLE_REQUIRED, and the refusal is in the audit log as release.publish.denied.
POST /v1/checks/{id}/notes
Beta, early access. Requires the
audience_notesflag. Usebumpkit loginor an API key created by an active member with write access to this workspace. Ownerless keys and read-only roles cannot generate drafts.
Generate and save release notes from an existing check in the authenticated workspace. Existing drafts are reused unless regeneration is explicitly requested. This action does not publish notes or send messages.
| JSON field | Description |
|---|---|
audience |
customer (default), engineering, support, security, leadership, or a custom audience |
segment |
Optional defined customer segment |
regenerate |
Optional boolean, default false. Replace the saved draft with a newly generated draft |
Returns check_id, version, audience, audience_name, segment, body (Markdown) and created_at. A check belonging to another workspace is not accessible. If regeneration fails for an existing draft, the request returns an error and leaves the saved draft unchanged.
GET /v1/checks/{id}/notes
Beta, early access. Requires the
audience_notesflag and an API key tied to an active member of the authenticated workspace.
Use saved=true to read an existing draft without generating or replacing it. Active members with read-only access can use this mode. Returns 404 when no saved draft exists for the check, audience and segment.
| Query | Description |
|---|---|
saved |
Set to true for a read-only request that never generates notes |
audience |
customer (default), engineering, support, security, leadership, or a custom audience |
segment |
Optional defined customer segment |
regenerate |
Legacy generation mode only. Cannot be combined with saved=true |
The response has the same fields as the POST endpoint. For compatibility, a request without saved=true can generate and persist a draft, or regenerate it with regenerate=true. That legacy mode requires write access. Prefer POST for generation and GET ...?saved=true for viewing or downloading a saved draft.
GET /v1/checks/{id}/consumer-guide
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it. Flag:consumer_migration_guide.
A migration guide for people who consume the release. Returns check_id, version, breaking, steps ([{title, change, before, after, language, source, url}]) and markdown. Steps are filled only for breaking releases.
GET /v1/release-notes/config
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it. Flag:audience_notes.
Needs a key tied to a person. Returns audiences ([{key, name, tone, sections, exclude, hide_paths, custom}]), segments ([{key, name, plan, features}]) and features ([{feature, paths, keywords}]).
PUT /v1/release-notes/audiences/{key}
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it. Flag:audience_notes.
Creates or replaces an audience. Owner only. {key} is lowercase, starts with a letter, up to 32 characters; a built-in key overrides the built-in.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Up to 80 characters |
sections |
string[] | Yes | Any of breaking, new, improved, fixed, security, database, config, dependencies, risk, internal |
tone |
string | No | Up to 500 characters |
exclude |
string[] | No | Path globs to leave out, up to 50 |
hide_paths |
boolean | No | Leave file paths out of the notes |
Returns 200 with the full config.
DELETE /v1/release-notes/audiences/{key}
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it.
Owner only. Removes a custom audience or override. Returns 200 with the config, or 404 NOT_FOUND.
PUT /v1/release-notes/segments/{key}
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it.
Owner only. Send name (required, up to 80 characters), plan (up to 64) and features (up to 50 feature names). Returns 200 with the config.
DELETE /v1/release-notes/segments/{key}
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it.
Owner only. Returns 200 with the config, or 404 NOT_FOUND.
PUT /v1/release-notes/features/{name}
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it.
Owner only. Tags changes with a feature name, for segments. Send paths (globs) and/or keywords, up to 50 each. Returns 200 with the config.
DELETE /v1/release-notes/features/{name}
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it.
Owner only. Returns 200 with the config, or 404 NOT_FOUND.
GET /v1/digests
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it. Flag:weekly_digest.
Needs a key tied to a person. Returns {"digests": [...]}. Each has id, repository, timezone, weekday, hour, minute, targets, emails, enabled, next_run_at and last_sent_at.
PUT /v1/digests
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it. Flag:weekly_digest.
Creates or replaces the weekly digest for a repository. Owner only.
| Field | Type | Required | Description |
|---|---|---|---|
repository |
string | Yes | owner/name |
timezone |
string | No | IANA name, default UTC |
weekday |
integer | Yes | 0 (Sunday) to 6 |
hour, minute |
integer | Yes | 0 to 23, 0 to 59 |
targets |
string[] | Yes | Any of slack, discord, email |
emails |
string[] | With email |
Up to 20 addresses |
enabled |
boolean | No | Send on schedule |
Returns 200 with the digest, next_run_at computed.
DELETE /v1/digests/{id}
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it.
Owner only. Returns 204, or 404 NOT_FOUND.
GET /v1/digests/{id}/preview
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it.
The digest as it would go out now, covering the time since it was last sent (or 7 days). Returns repository, since, until, releases, risky, agents, blocked, gate_failed, needs_approval, overridden and markdown.
POST /v1/digests/{id}/send
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it.
Owner only. Sends the digest now. Returns 200 with the digest. 502 DIGEST_FAILED if a target failed.
GET /v1/doc-connections
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it. Flag:notion_confluence.
Needs a key tied to a person. Returns {"connections": [{provider, auth, base_url, email, parent, parent_page, created_by, created_at}]}. Tokens are never returned.
PUT /v1/doc-connections/{provider}
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it. Flag:notion_confluence.
Connects Notion or Confluence. Owner only. {provider} is notion or confluence.
| Field | Type | Required | Description |
|---|---|---|---|
token |
string | Yes | API token. Checked live, stored encrypted. |
parent |
string | Yes | Notion: the parent page link or ID. Confluence: the space key. |
base_url |
string | Confluence | Your Confluence https URL |
email |
string | Confluence | The account the token belongs to |
parent_page |
string | No | Confluence parent page ID |
Returns 200 with the connections.
DELETE /v1/doc-connections/{provider}
Beta, early access. A workspace without access gets
403 FEATURE_EARLY_ACCESSand a link to request it.
Owner only. Returns 204, or 404 NOT_FOUND.