Skip to main content

REST API

Access your changelog data programmatically with our REST API.

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:

BASH
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

BASH
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:

TEXT
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.

TEXT
GET /api/v1/projects

Response

JSON
{
  "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.

TEXT
GET /api/v1/projects/:owner/:repo

Parameters

Parameter Type Description
owner string Repository owner (username or organization)
repo string Repository name

Response

JSON
{
  "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.

TEXT
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

JSON
{
  "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.

TEXT
GET /api/v1/projects/:owner/:repo/entries/:id

Response

JSON
{
  "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.

TEXT
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:

JSON
{
  "error": "Unauthorized",
  "message": "Please include Authorization header with Bearer token"
}

Code Examples

JavaScript/Node.js

JAVASCRIPT
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

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

BASH
# 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

  1. Request API access - Go to your Settings > API Access page and submit a request
  2. Wait for approval - Our team will review your request and notify you via email
  3. Copy your API key - Once approved, your API key will be displayed (shown only once!)
  4. 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.

Still have questions?

Reach out to us