API Reference
Use the Changelogy API to publish changelog posts programmatically
API Reference
The Changelogy API allows you to publish changelog posts programmatically from your CI/CD pipeline, application, or any automated workflow.
Requirements
- PRO Subscription Required: API access is only available for organizations with an active PRO subscription
- API Key: You'll need to create an API key from your organization's API settings page
Authentication
All API requests must include your API key in the Authorization header:
Authorization: Bearer YOUR_API_KEY
Creating an API Key
- Navigate to your organization dashboard
- Click "API" in the sidebar
- Click "Create API Key"
- Give your key a descriptive name (e.g., "Production CI/CD")
- Copy the key immediately - you won't be able to see it again!
Security Best Practices:
- Store API keys securely (use environment variables or secrets management)
- Never commit API keys to version control
- Rotate keys regularly
- Use separate keys for different environments (dev, staging, prod)
- Delete unused keys
Base URL
https://www.changelogy.com/api/v1
Endpoints
POST /changelogs
Create a new changelog post.
Endpoint:
POST https://www.changelogy.com/api/v1/changelogs
Headers:
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY
Request Body:
{
"page_id": "uuid-of-your-page",
"title": "Version 2.0 Released",
"content": "# What's New\n\nWe're excited to announce...\n\n## Features\n- Feature 1\n- Feature 2",
"status": "published",
"tag_ids": ["tag-uuid-1", "tag-uuid-2"],
"published_at": "2024-12-02T10:00:00Z"
}
Parameters:
page_id(required): UUID of the changelog page to publish totitle(required): Title of the changelog postcontent(required): Content in Markdown formatstatus(optional): Post status - "draft", "published", or "scheduled" (default: "draft")tag_ids(optional): Array of tag UUIDs to associate with the postpublished_at(optional): Publication timestamp (required for "scheduled" status)
Response (201 Created):
{
"success": true,
"message": "Changelog post created successfully",
"post": {
"id": "post-uuid",
"slug": "version-2-0-released",
"title": "Version 2.0 Released",
"status": "published",
"published_at": "2024-12-02T10:00:00Z",
"created_at": "2024-12-02T09:55:00Z"
}
}
Finding Your Page ID
To publish to a specific changelog page, you need its UUID:
- Go to your organization settings
- Click "Pages" in the sidebar
- View the page details - the ID is in the URL or page settings
Alternatively, you can use the browser developer tools:
- Visit your changelog page
- Open Developer Tools (F12)
- Check the network tab for API calls - the page_id is in the responses
Content Formatting
The content field supports full Markdown syntax:
Headings:
# H1 Heading
## H2 Heading
### H3 Heading
Lists:
- Bullet point 1
- Bullet point 2
1. Numbered item 1
2. Numbered item 2
Emphasis:
**Bold text**
*Italic text*
`Code inline`
Code Blocks:
```javascript
const example = "code";
console.log(example);
```
Links:
[Link text](https://example.com)
Images:

Example: Curl
curl -X POST https://www.changelogy.com/api/v1/changelogs \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk_live_your_api_key_here" \
-d '{
"page_id": "123e4567-e89b-12d3-a456-426614174000",
"title": "Bug Fixes and Improvements",
"content": "## Bug Fixes\n\n- Fixed login issue\n- Improved performance\n\n## Improvements\n\n- Updated UI",
"status": "published"
}'
Example: JavaScript/Node.js
const fetch = require('node-fetch');
async function publishChangelog() {
const response = await fetch('https://www.changelogy.com/api/v1/changelogs', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer sk_live_your_api_key_here'
},
body: JSON.stringify({
page_id: '123e4567-e89b-12d3-a456-426614174000',
title: 'Version 1.5 Released',
content: '## What\'s New\n\n- New dashboard\n- Performance improvements',
status: 'published'
})
});
const data = await response.json();
console.log('Post created:', data.post);
}
publishChangelog();
Example: Python
import requests
import json
url = 'https://www.changelogy.com/api/v1/changelogs'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer sk_live_your_api_key_here'
}
payload = {
'page_id': '123e4567-e89b-12d3-a456-426614174000',
'title': 'Version 1.5 Released',
'content': '## What\'s New\n\n- New dashboard\n- Performance improvements',
'status': 'published'
}
response = requests.post(url, headers=headers, data=json.dumps(payload))
result = response.json()
print('Post created:', result['post'])
Example: GitHub Actions CI/CD
Create a workflow file .github/workflows/publish-changelog.yml:
name: Publish Changelog
on:
release:
types: [published]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Publish to Changelogy
env:
CHANGELOGY_API_KEY: CHANGELOGY_API_KEY
CHANGELOGY_PAGE_ID: CHANGELOGY_PAGE_ID
run: |
curl -X POST https://www.changelogy.com/api/v1/changelogs \
-H "Content-Type: application/json" \
-H "Authorization: Bearer CHANGELOGY_API_KEY" \
-d "{
\"page_id\": \"CHANGELOGY_PAGE_ID\",
\"title\": \"Release VERSION_TAG\",
\"content\": \"RELEASE_NOTES\",
\"status\": \"published\"
}"
Setup:
- Go to your repository Settings > Secrets
- Add
CHANGELOGY_API_KEYwith your API key - Add
CHANGELOGY_PAGE_IDwith your page UUID
Error Handling
The API returns standard HTTP status codes:
200-299: Success
- 201 Created - Post created successfully
400-499: Client Errors
- 400 Bad Request - Invalid request body or missing required fields
- 401 Unauthorized - Missing or invalid API key
- 403 Forbidden - API key disabled, expired, or subscription not active
- 404 Not Found - Page not found or doesn't belong to organization
500-599: Server Errors
- 500 Internal Server Error - Something went wrong on our end
Error Response Format:
{
"error": "Error message describing what went wrong",
"details": "Additional error details if available"
}
Common Errors
Missing API Key:
{
"error": "Missing or invalid Authorization header. Use: Authorization: Bearer YOUR_API_KEY"
}
Invalid API Key:
{
"error": "Invalid API key"
}
Subscription Required:
{
"error": "API access requires an active PRO subscription"
}
Missing Required Fields:
{
"error": "Missing required fields: title and content are required"
}
Invalid Page ID:
{
"error": "Page not found or does not belong to this organization"
}
Rate Limiting
- Currently no rate limits are enforced
- We monitor for abuse and may implement rate limiting in the future
- Best practice: Don't exceed 100 requests per minute
CORS Support
The API supports Cross-Origin Resource Sharing (CORS) and can be called from any domain. This allows you to publish changelogs directly from your web applications.
Monitoring and Logs
View your API usage in your organization's API settings page:
- Navigate to your organization dashboard
- Click "API" in the sidebar
- Scroll to "Recent API Requests"
The logs show:
- Endpoint and method
- Request timestamp
- Response status
- IP address
- API key used
- Error messages (if any)
Logs are retained for 30 days.
Support
Need help with the API?
- Check this documentation for examples and common issues
- View your API logs for debugging
- Contact support: contact@changelogy.com
Include in your support request:
- Organization name
- API key prefix (first 16 characters)
- Error message
- Request example (without sensitive data)