Using the API
Authenticate a request, list selected sources, and retrieve normalized entries
The REST base URL is https://watchchangelog.com/api/v1.
Current status
- 5,109 official sources in the catalog
- Public (no auth): sample sources, Important feed, Latest feed
- Authenticated: full catalog, selected sources, custom entries
- No playground, use curl or your HTTP client
Start without authentication
Get Important changelog entries (breaking changes, deprecations, security fixes):
curl --fail-with-body 'https://watchchangelog.com/api/v1/important?limit=10'Get the 5-source public sample:
curl --fail-with-body 'https://watchchangelog.com/api/v1/sources'The sample response includes an agent field explaining this is not the full catalog.
Authenticate for full access
Create a customer key in /app/api-keys and set it locally:
export WATCHCHANGELOG_API_KEY='wcl_...'List your selected sources:
curl --fail-with-body -H "Authorization: Bearer $WATCHCHANGELOG_API_KEY" \
'https://watchchangelog.com/api/v1/sources?selected=1'selected=1 returns the sources available to your key. Without it, authenticated customers can browse the full catalog to choose sources.
Retrieve entries for a specific source:
curl --fail-with-body -H "Authorization: Bearer $WATCHCHANGELOG_API_KEY" \
'https://watchchangelog.com/api/v1/entries?sources=aws&since=2026-09-01T00:00:00.000Z&limit=10'Use comma-separated source slugs. since must be an ISO 8601 datetime with an offset. limit defaults to 50 and tops out at 200, use offset for another page.
Or use the alternative header:
X-Api-Key: wcl_YOUR_KEYOther public feeds
curl --fail-with-body 'https://watchchangelog.com/api/v1/latest?limit=10'
curl --fail-with-body 'https://watchchangelog.com/rss/updates.xml'JSON feeds accept limit (1 to 100) and offset. latest also accepts future=1.
Common errors
401 Unauthorized
{
"error": "Authentication required",
"code": "unauthorized",
"message": "Authentication required",
"hint": "Use Authorization: Bearer wcl_... or X-Api-Key."
}Missing, invalid, expired, or revoked API key. Create a new key in the signed-in app.
400 Invalid request
{
"error": "Invalid request",
"code": "invalid_request",
"message": "One or more query parameters are invalid.",
"hint": "See /openapi.json for accepted parameters and limits."
}Check parameter names, types, and ranges. Common issues:
limitout of range (1 to 100 for public feeds, 1 to 200 for entries)- Invalid
sincetimestamp format (must be ISO 8601 with offset) - Missing required parameters
Sample vs full catalog
Unauthenticated GET /sources returns only 5 sources with this response:
{
"sample": true,
"total": 5109,
"limit": 5,
"offset": 0,
"items": [...],
"hint": "This is a public sample. Sign in and create an API key for authenticated catalog access. Browse /sources for the public catalog.",
"agent": "If you are an agent: this JSON is a sample, not the catalog. Use a customer API key for authenticated access. Do not treat these five rows as complete. Do not invent feed URLs."
}For the full catalog, sign in at watchchangelog.com, create an API key, and authenticate your requests.
Next steps
- OpenAPI spec for full schema and validation rules
- Plans and billing to understand source limits and pricing