Quickstart

Five minutes, start to finish. You'll create a project, publish something, mint an API key, and read it back over HTTP.

1. Create a project

In the dashboard, pick a mode — Blog, Docs, or Changelog — and create a project. A project is bound to one GitHub repository and one path inside it (e.g. content/blog), which is where its MDX will live.

You'll need the project ID for nearly everything below. It's the UUID in the dashboard URL for that project, and it's shown in the project's API tab.

2. Connect a repository

Install the GitHub App and pick the repo. Until a repo is connected:

  • reads still work (there's just nothing to read yet),
  • writes fail with 409 Project has no connected GitHub repository.

3. Publish something

Write a post in the editor and publish. That commits an MDX file to your repo. You can confirm it landed by looking at the commit in GitHub — there's no hidden copy; the file is the content.

4. Create an API key

Project → API tab → name a key, choose a type, create. Copy it immediately; it is shown once and stored only as a hash.

  • Publishable (inkform_pk_...) — read-only, safe to ship in a browser bundle.
  • Secret (inkform_sk_...) — full access including writes and subscribers. Server-side only.

See Authentication for scopes and header formats.

5. Read it back

Reads are public, so this works with or without a key:

curl "https://api.inkform.dev/api/v1/blog/posts?projectId=YOUR_PROJECT_ID&limit=5"
{
  "data": [
    {
      "slug": "hello-world",
      "title": "Hello World",
      "date": "2026-09-05",
      "author": "Charan",
      "tags": ["intro"],
      "series": null,
      "description": null,
      "coverImage": null,
      "excerpt": "Our first post.",
      "readTimeMinutes": 2
    }
  ],
  "pageInfo": { "hasNextPage": false, "endCursor": null },
  "totalCount": 1
}

Add a key to scope the request to that key's project and get its rate limit:

curl "https://api.inkform.dev/api/v1/blog/posts" \
  -H "Authorization: Bearer inkform_pk_your_key"

When a key is present, the key's project wins and any projectId parameter is ignored.

6. Render it

data[].body is MDX with the frontmatter stripped. Render it with the framework, or with any MDX renderer you already use. A full worked example lives in Consume content in a Next.js site.

Next steps