Manage Changelog Posts via API

Create, update, and delete changelog posts using the ChangeCrab API.

All Articles

Manage Changelog Posts via API

Create, update, and delete changelog posts (entries) using the ChangeCrab API. Automate your changelog updates and integrate with CI/CD pipelines.

Create Post

POST /api/changelogs/{id}/posts
{
  "summary": "New Feature Release",
  "markdown": "# New Feature\n\nDescription here",
  "public": 1,
  "draft": 0,
  "team": 1,
  "categories": [1, 2]
}

Markdown images are converted to editable image blocks. The image URL must be publicly reachable:

![Dashboard screenshot](https://cdn.example.com/dashboard.png)

For a lossless Editor.js round trip, send editor_data instead of markdown. Do not send both fields in the same request.

{
  "summary": "New Feature Release",
  "editor_data": {
    "blocks": [
      {
        "type": "image",
        "data": {
          "file": { "url": "https://cdn.example.com/dashboard.png" },
          "caption": "Dashboard screenshot"
        }
      }
    ]
  },
  "public": 1,
  "team": 1
}

Upload an Image

POST /api/changelogs/{id}/images

Send a multipart/form-data request with an image file (JPEG, PNG, GIF, or WebP, up to 5 MB). Use the returned file.url in Markdown or an Editor.js image block.

Update Post

PUT /api/changelogs/{id}/posts/{postId}
{
  "summary": "Updated Title",
  "markdown": "# Updated Content",
  "public": 1
}

PUT retains its existing full-update contract. To change metadata without replacing post content, use PATCH and send only the fields that should change:

PATCH /api/changelogs/{id}/posts/{postId}
{
  "summary": "Updated Title"
}

Request ?include=editor_data when listing or updating posts to include parsed Editor.js data in the response. Without this opt-in, the legacy response shape and markdown field remain unchanged.

Delete Post

DELETE /api/changelogs/{id}/posts/{postId}

List Posts

GET /api/changelogs/{id}/posts

Code Examples

// Create post
fetch('https://changecrab.com/api/changelogs/{id}/posts', {
  method: 'POST',
  headers: {
    'X-API-Key': 'your-api-key',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    summary: 'New Feature',
    markdown: '# Feature\n\nDescription',
    public: 1,
    team: 1
  })
});

Next Steps