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
- Add a newsletter signup form to your site.
- Blog endpoints — filtering, pagination, and creating posts.
- Rate limits — what your plan allows.