Overview
The AutoChangelog REST API provides programmatic access to your changelog data. Use it to integrate changelogs into your applications, build custom dashboards, or sync changelog data with other tools.
API Access Required
The REST API is available for Pro and Team plan users. You'll need to request API access from your Settings page and wait for approval.
Authentication
All API requests must include your API key in the Authorization header using the Bearer token format:
Authorization: Bearer acl_your_api_key_here
Your API key is shown once when it's created. If you lose it, you can regenerate a new one from your Settings page, but the old key will be immediately revoked.
Example Request
curl -X GET "https://autochangelog.com/api/v1/projects" \
-H "Authorization: Bearer acl_your_api_key_here"
Rate Limits
API requests are rate-limited to protect the service. The default limit is 100 requests per hour per user. Rate limit information is included in response headers:
| Header | Description |
|---|---|
X-RateLimit-Limit |
Maximum requests allowed per hour |
X-RateLimit-Remaining |
Requests remaining in the current window |
X-RateLimit-Reset |
Unix timestamp when the rate limit resets |
When you exceed the rate limit, you'll receive a 429 Too Many Requests response with a retry_after field indicating seconds until the limit resets.
Base URL
All API endpoints are relative to:
https://autochangelog.com/api/v1
Endpoints
List Projects
Returns all projects you have access to, including your own repositories and any you've been granted team access to.
GET /api/v1/projects
Response
{
"projects": [
{
"id": 123,
"owner": "acme-corp",
"repo": "web-app",
"full_name": "acme-corp/web-app",
"slug": "acme-corp-web-app",
"enabled": true,
"auto_publish": false,
"created_at": "2025-01-15T10:30:00Z",
"entry_count": 42
}
]
}
Get Project
Returns detailed information about a specific project, including statistics about changelog entries.
GET /api/v1/projects/:owner/:repo
Parameters
| Parameter | Type | Description |
|---|---|---|
owner |
string | Repository owner (username or organization) |
repo |
string | Repository name |
Response
{
"project": {
"id": 123,
"owner": "acme-corp",
"repo": "web-app",
"full_name": "acme-corp/web-app",
"slug": "acme-corp-web-app",
"enabled": true,
"auto_publish": false,
"current_version": "v1.5.2",
"created_at": "2025-01-15T10:30:00Z",
"stats": {
"total_entries": 42,
"published_entries": 38,
"draft_entries": 4
}
}
}
List Entries
Returns changelog entries for a project with pagination support. By default, only published entries are returned.
GET /api/v1/projects/:owner/:repo/entries
Query Parameters
| Parameter | Type | Description |
|---|---|---|
status |
string | Filter by status: published (default), draft, or needs_review |
page |
integer | Page number (default: 1) |
per_page |
integer | Results per page (default: 20, max: 100) |
Response
{
"entries": [
{
"id": 456,
"slug": "v1-5-2",
"title": "Release v1.5.2",
"version": "v1.5.2",
"status": "published",
"published_at": "2025-03-20T14:00:00Z",
"created_at": "2025-03-20T13:45:00Z",
"updated_at": "2025-03-20T14:00:00Z",
"url": "https://autochangelog.com/acme-corp/web-app/v1-5-2"
}
],
"pagination": {
"page": 1,
"per_page": 20,
"total": 42,
"total_pages": 3
}
}
Get Entry
Returns a specific changelog entry with full content. You can look up entries by ID or slug.
GET /api/v1/projects/:owner/:repo/entries/:id
Response
{
"entry": {
"id": 456,
"slug": "v1-5-2",
"title": "Release v1.5.2",
"version": "v1.5.2",
"status": "published",
"published_at": "2025-03-20T14:00:00Z",
"created_at": "2025-03-20T13:45:00Z",
"updated_at": "2025-03-20T14:00:00Z",
"url": "https://autochangelog.com/acme-corp/web-app/v1-5-2",
"summary": "Bug fixes and performance improvements",
"content_html": "<h3>Bug Fixes</h3><ul><li>Fixed login issue...</li></ul>",
"tags": ["bug-fix", "performance"]
}
}
Get Latest Entry
Returns the most recently published changelog entry. Useful for displaying the latest release in your application.
GET /api/v1/projects/:owner/:repo/latest
Response
Returns the same response format as "Get Entry" above.
Error Responses
The API uses standard HTTP status codes to indicate success or failure:
| Status | Description |
|---|---|
200 |
Success |
401 |
Unauthorized - Missing or invalid API key |
403 |
Forbidden - API access has been disabled for your account |
404 |
Not Found - Project or entry doesn't exist or you don't have access |
429 |
Too Many Requests - Rate limit exceeded |
Error responses include an error field with a brief description and a message field with more details:
{
"error": "Unauthorized",
"message": "Please include Authorization header with Bearer token"
}
Code Examples
JavaScript/Node.js
const API_KEY = process.env.AUTOCHANGELOG_API_KEY;
const BASE_URL = 'https://autochangelog.com/api/v1';
async function getLatestChangelog(owner, repo) {
const response = await fetch(
`${BASE_URL}/projects/${owner}/${repo}/latest`,
{
headers: {
'Authorization': `Bearer ${API_KEY}`
}
}
);
if (!response.ok) {
throw new Error(`API error: ${response.status}`);
}
return response.json();
}
// Usage
const latest = await getLatestChangelog('acme-corp', 'web-app');
console.log(`Latest: ${latest.entry.title}`);
Python
import os
import requests
API_KEY = os.environ['AUTOCHANGELOG_API_KEY']
BASE_URL = 'https://autochangelog.com/api/v1'
def get_all_entries(owner, repo, status='published'):
"""Fetch all changelog entries with pagination."""
entries = []
page = 1
while True:
response = requests.get(
f'{BASE_URL}/projects/{owner}/{repo}/entries',
headers={'Authorization': f'Bearer {API_KEY}'},
params={'status': status, 'page': page, 'per_page': 100}
)
response.raise_for_status()
data = response.json()
entries.extend(data['entries'])
if page >= data['pagination']['total_pages']:
break
page += 1
return entries
# Usage
entries = get_all_entries('acme-corp', 'web-app')
print(f'Found {len(entries)} published entries')
cURL
# List your projects
curl -X GET "https://autochangelog.com/api/v1/projects" \
-H "Authorization: Bearer $AUTOCHANGELOG_API_KEY"
# Get latest changelog entry
curl -X GET "https://autochangelog.com/api/v1/projects/acme-corp/web-app/latest" \
-H "Authorization: Bearer $AUTOCHANGELOG_API_KEY"
# List all entries with pagination
curl -X GET "https://autochangelog.com/api/v1/projects/acme-corp/web-app/entries?page=1&per_page=50" \
-H "Authorization: Bearer $AUTOCHANGELOG_API_KEY"
Getting Started
- Request API access - Go to your Settings > API Access page and submit a request
- Wait for approval - Our team will review your request and notify you via email
- Copy your API key - Once approved, your API key will be displayed (shown only once!)
- Start making requests - Use the examples above to integrate with your applications
Need Help?
If you have questions about the API or need help integrating, reach out to us.