Build with the Makrly API

Automate your social media content and changelog programmatically. Generate posts, manage entries, and integrate Makrly into your workflow.

Quick Start

1

Get your API key

Go to Settings → API in your dashboard and create a new API key.

2

Make your first request

curl
curl -H "Authorization: Bearer mk_live_your_key_here" \
  https://makrly.com/api/v1/repos
3

Get your repos back

Response
{
  "data": [
    {
      "id": 1,
      "fullName": "you/your-repo",
      "notableCommitCount": 42,
      "changelogEntryCount": 15
    }
  ]
}

Authentication

All API requests require a Bearer token in the Authorization header:

Authorization: Bearer mk_live_your_key_here

API keys start with mk_live_ and are shown once on creation.

You can create up to 10 active keys. Keys can be scoped to specific repos and permissions.

Available Scopes

changelog:readRead changelog entrieschangelog:writeCreate, update, delete entriessettings:readRead widget settingssettings:writeUpdate widget settings

Server-side only: API keys are designed for server-to-server requests. Do not expose your key in client-side code (browsers, mobile apps). CORS headers are not set on API endpoints.

Base URL

https://makrly.com/api/v1

Endpoints

Repositories

GET/api/v1/repos

List your tracked repositories

Response
{
  "data": [
    {
      "id": 1,
      "name": "my-app",
      "fullName": "username/my-app",
      "isPrivate": false,
      "isActive": true,
      "notableCommitCount": 42,
      "changelogEntryCount": 15,
      "lastSyncedAt": "2025-01-15T10:00:00Z"
    }
  ]
}
GET/api/v1/repos/:repoId

Get a single repository

Posts

GET/api/v1/repos/:repoId/posts?platform=x&page=1&limit=20

List generated posts for a repo

Response
{
  "data": [
    {
      "id": 1,
      "platform": "x",
      "content": "Just shipped dark mode...",
      "createdAt": "2025-01-15T10:00:00Z",
      "commit": {
        "id": 42,
        "sha": "abc123",
        "message": "feat: add dark mode toggle"
      }
    }
  ],
  "meta": { "page": 1, "limit": 20, "total": 5, "totalPages": 1 }
}
POST/api/v1/posts/generate

Generate posts from custom text

Request body
{
  "content": "Just shipped a new feature...",
  "repoId": 1,
  "provider": "openai",
  "model": "gpt-4o"
}
Response
{
  "data": {
    "short": "Just shipped dark mode! 🌙",
    "thread": ["Post 1...", "Post 2..."],
    "linkedin": "Excited to announce...",
    "facebookProfile": "New feature alert!...",
    "facebookPage": "We're thrilled..."
  }
}
GET/api/v1/posts/:id

Get a single post

PATCH/api/v1/posts/:id

Update a post's content

Request body
{ "content": "Updated post text..." }

Changelog Entries

GET/api/v1/changelog/entries?repoId=1&status=published&cursor=abc&limit=20

List changelog entries (scope: changelog:read)

Response
{
  "entries": [{ "id": "abc", "title": "Dark Mode", "categories": ["new"], ... }],
  "nextCursor": "def",
  "hasMore": true
}
POST/api/v1/changelog/entries

Create a changelog entry (scope: changelog:write)

Request body
{
  "repoId": 1,
  "title": "Dark Mode Support",
  "content": "You can now toggle dark mode...",
  "summary": "Added dark mode to the app",
  "categories": ["new"],
  "publish": true,
  "publishedAt": "2025-01-15T10:00:00Z"
}
GET/api/v1/changelog/entries/:id

Get a single entry (scope: changelog:read)

PATCH/api/v1/changelog/entries/:id

Update an entry (scope: changelog:write)

Request body
{
  "title": "Updated Title",
  "categories": ["improved"],
  "publish": true,
  "pin": true
}
DELETE/api/v1/changelog/entries/:id

Delete an entry (scope: changelog:write)

Changelog Settings

GET/api/v1/changelog/settings?repoId=1

Get widget settings (scope: settings:read)

POST/api/v1/changelog/settings

Update widget settings (scope: settings:write)

Request body
{
  "repoId": 1,
  "theme": "dark",
  "position": "bottom-right",
  "primaryColor": "#6366f1",
  "isPublic": true
}

Commits

GET/api/v1/repos/:repoId/commits?notable=true&page=1&limit=20

List commits for a repo

Rate Limits

Free Tier
100 requests/hour
Paid Tiers
1,000 requests/hour

Rate limit info is included in every response via headers:

X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1705312800

X-RateLimit-Reset is a Unix timestamp (seconds) for when the window resets.

Errors

All errors return a consistent format:

{
  "error": {
    "code": "not_found",
    "message": "Repository not found"
  }
}
CodeStatusDescription
unauthenticated401Missing authentication (no API key or session)
invalid_format401Invalid API key format
invalid_key401API key not found in database
key_revoked401API key has been revoked
key_expired401API key has expired
key_in_query401API key sent as query param (use header instead)
insufficient_scope403API key lacks required scope
repo_scope_mismatch403Repo-scoped key accessing wrong repo
not_found404Resource not found or not owned by you
validation_error400Invalid request parameters
rate_limited429Too many requests (Retry-After header included)
server_error500Internal server error

Code Examples

JavaScript (fetch)

const response = await fetch("https://makrly.com/api/v1/repos", {
  headers: {
    "Authorization": "Bearer mk_live_your_key_here"
  }
});

const { data } = await response.json();
console.log(data); // Your repos

Python (requests)

import requests

response = requests.get(
    "https://makrly.com/api/v1/repos",
    headers={"Authorization": "Bearer mk_live_your_key_here"}
)

data = response.json()["data"]
print(data)  # Your repos

Generate posts from text

curl -X POST https://makrly.com/api/v1/posts/generate \
  -H "Authorization: Bearer mk_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Just shipped dark mode for my SaaS app!",
    "repoId": 1
  }'

Create a changelog entry

curl -X POST https://makrly.com/api/v1/repos/1/changelog/entries \
  -H "Authorization: Bearer mk_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Dark Mode Support",
    "content": "You can now toggle between light and dark themes.",
    "categories": ["new"],
    "publishedAt": "2025-01-15T10:00:00Z"
  }'

AI Integration

Feed our docs to your AI assistant to build integrations faster:

llms.txtConcise product overview for AIView
llms-full.txtComplete docs for AI coding assistantsView
openapi.yamlOpenAPI 3.0 specificationView

Tip: Paste llms-full.txt into Claude, Cursor, or Copilot and ask it to build your integration.