REST API
API Documentation
Integrate WhatShipped into your CI/CD pipelines. Generate, list, and retrieve release notes programmatically — no reverse-engineering required.
Introduction
The WhatShipped API lets you generate and retrieve release notes from any connected GitHub, GitLab, or Bitbucket repository. All endpoints live under:
https://api.whatshipped.dev/api/v1 API versioning is path-based (/api/v1). Breaking changes will be introduced under a new version path.
Authentication
Every request must include an API key as a Bearer token in the Authorization header. Create an API key →
| Header | Required | Description |
|---|---|---|
| Authorization | Yes | Bearer sl_<key> |
Authorization: Bearer sl_abcdef1234567890/api/v1/release-notesList release notes for the authenticated user. No credits consumed.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| provider | "github" | "gitlab" | "bitbucket" | Filter by git platform. Optional. |
| repoFullName | string | Filter by repo, e.g. "owner/repo". Requires provider. Optional. |
Response — 200
Array of release note summary objects.
| Field | Type | Notes |
|---|---|---|
| id | string (UUID) | Release note ID |
| repoId | string (UUID) | Repository ID |
| fullName | string | e.g. "owner/repo" |
| provider | string | Git platform |
| fromRef / toRef | string | Commit range boundaries |
| versionTag | string | null | |
| content | string | Full markdown release notes |
| createdAt | ISO 8601 string |
/api/v1/release-notes/:idFetch a single release note by ID. No credits consumed.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| id | string (UUID) | Release note ID |
Response — 200
| Field | Type | Notes |
|---|---|---|
| id | string (UUID) | |
| repoId | string (UUID) | |
| fullName | string | e.g. "owner/repo" |
| provider | string | Git platform |
| fromRef / toRef | string | Commit range boundaries |
| versionTag | string | null | |
| content | string | Full markdown release notes |
| rawCommits | array | Commits used to generate this note |
| createdAt | ISO 8601 string |
Error Shapes
| Status | error field | Meaning |
|---|---|---|
| 401 | "Invalid or revoked API key" | Key missing, wrong, or revoked |
| 404 | "Release note not found" | ID doesn't exist or belongs to another user |
/api/v1/release-notes/generate Generate release notes for a commit range. Consumes 1 credit (2 if includeDiffs is true).
Request Headers
| Header | Required | Description |
|---|---|---|
| Authorization | Yes | Bearer sl_<key> |
| Content-Type | Yes | application/json |
Request Body
| Field | Type | Required | Notes |
|---|---|---|---|
| provider | "github" | "gitlab" | "bitbucket" | Yes | Git platform |
| repoFullName | string | Yes | e.g. "owner/repo" |
| fromRef | string | Yes | Tag, branch, or commit SHA |
| toRef | string | Yes | Tag, branch, or commit SHA |
| versionTag | string | No | Included in generated heading |
| productName | string | No | Product name override |
| tone | string | No | "end-user" (default), "developer", "mixed" |
| internalVisibility | string | No | "exclude" (default), "include", "summarise" |
| llmProvider | "anthropic" | "openai" | No | Defaults to account setting |
| includeDiffs | boolean | No | Costs 2 credits if true |
Response — 200
| Field | Type | Notes |
|---|---|---|
| id | string (UUID) | Release note ID |
| content | string | Markdown release notes |
| creditsRemaining | number | Balance after this call |
| provider | string | |
| repoFullName | string | |
| fromRef / toRef | string | |
| versionTag | string | null | |
| createdAt | ISO 8601 string |
Error Shapes
| Status | error field | Meaning |
|---|---|---|
| 401 | "Invalid or revoked API key" | Key missing, wrong, or revoked |
| 402 | "Insufficient credits" | Balance is 0 |
| 404 | "Repository not found or not connected" | Repo not linked in dashboard |
| 422 | Validation message | Missing or invalid body fields |
| 500 | "Internal server error" | Unexpected failure |
Credits
Each API call to the generate endpoint deducts credits from your balance. View your balance →
| Operation | Cost |
|---|---|
| Generate release notes (standard) | 1 credit |
Generate with includeDiffs: true | 2 credits |
| List or fetch release notes | Free |
Error Reference
All errors return JSON with an error field.
{
"error": "Insufficient credits"
}| Status | Meaning |
|---|---|
| 400 | Bad request — malformed JSON or missing headers |
| 401 | Authentication failed — key missing, invalid, or revoked |
| 402 | Insufficient credits — purchase more at the credits page |
| 404 | Not found — resource doesn't exist or belongs to another user |
| 422 | Validation error — check the error message for details |
| 500 | Internal server error — unexpected failure on our end |
Code Examples
Generate release notes for a commit range.
#!/usr/bin/env bash
curl -X POST https://api.whatshipped.dev/api/v1/release-notes/generate \
-H "Authorization: Bearer sl_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"provider": "github",
"repoFullName": "acme/backend",
"fromRef": "v2.2.0",
"toRef": "v2.3.0",
"versionTag": "v2.3.0",
"tone": "professional"
}'const response = await fetch(
'https://api.whatshipped.dev/api/v1/release-notes/generate',
{
method: 'POST',
headers: {
'Authorization': 'Bearer sl_your_api_key',
'Content-Type': 'application/json',
},
body: JSON.stringify({
provider: 'github',
repoFullName: 'acme/backend',
fromRef: 'v2.2.0',
toRef: 'v2.3.0',
versionTag: 'v2.3.0',
tone: 'professional',
}),
}
);
const data = await response.json();
console.log(data.content); // Markdown release notesimport requests
response = requests.post(
"https://api.whatshipped.dev/api/v1/release-notes/generate",
headers={
"Authorization": "Bearer sl_your_api_key",
"Content-Type": "application/json",
},
json={
"provider": "github",
"repoFullName": "acme/backend",
"fromRef": "v2.2.0",
"toRef": "v2.3.0",
"versionTag": "v2.3.0",
"tone": "professional",
},
)
data = response.json()
print(data["content"]) # Markdown release notesReady to integrate?
Create an API key from your dashboard and start generating in minutes.
Create an API key