Markdown in, shareable page out. One endpoint, no config.
md.page turns Markdown into shareable web pages. Two modes:
username.md.page/doc-name.https://md.page
Authenticated endpoints need a Bearer token:
Authorization: Bearer mdp_your_api_key_here
Create keys in Settings. Keys start with mdp_ and are shown once.
Anonymous endpoints (POST /api/publish) need no auth.
Temporary page, expires in 24h. No auth required.
| Field | Type | Required | Description |
|---|---|---|---|
markdown | string | Yes | Markdown content (max 500KB) |
curl -X POST https://md.page/api/publish \
-H "Content-Type: application/json" \
-d '{"markdown": "# Hello World\n\nThis is my page."}'
201{
"url": "https://md.page/a8Xk2m",
"expires_at": "2026-04-20T12:00:00.000Z"
}
Permanent page on your subdomain. Requires auth.
| Field | Type | Required | Description |
|---|---|---|---|
markdown | string | Yes | Markdown content (max 500KB) |
title | string | No | Page title. Auto-extracted from # heading if omitted. |
slug | string | No | URL name, e.g. my-doc. Auto-generated from title if omitted. |
visibility | string | No | "public" (default) or "private" |
curl -X POST https://md.page/api/pages \
-H "Authorization: Bearer mdp_your_key" \
-H "Content-Type: application/json" \
-d '{"markdown": "# My Doc", "slug": "my-doc"}'
201{
"id": "kR4x9p",
"url": "https://alice.md.page/my-doc",
"slug": "my-doc",
"visibility": "public"
}
200{
"pages": [
{
"id": "kR4x9p",
"slug": "my-doc",
"title": "My Doc",
"visibility": "public",
"view_count": 42,
"revision_count": 3,
"created_via": "api:claude-code",
"created_at": "2026-04-19T10:00:00.000Z",
"updated_at": "2026-04-19T12:00:00.000Z"
}
]
}
All fields optional — send only what changed.
| Field | Type | Description |
|---|---|---|
markdown | string | New content |
title | string | New title |
slug | string | New URL name (must be unique) |
visibility | string | "public" or "private" |
curl -X PUT https://md.page/api/pages/kR4x9p \
-H "Authorization: Bearer mdp_your_key" \
-H "Content-Type: application/json" \
-d '{"markdown": "# Updated content"}'
200{"ok": true}
curl -X DELETE https://md.page/api/pages/kR4x9p \
-H "Authorization: Bearer mdp_your_key"
200{"ok": true}
200{
"id": "abc123",
"username": "alice",
"display_name": "Alice Chen",
"avatar_url": "https://..."
}
| Field | Type | Required | Description |
|---|---|---|---|
label | string | No | Name for this key, e.g. "claude-code" |
201{
"id": "uuid",
"key": "mdp_aBcDeFgHiJkLmNoPqRsTuVwXyZ012345",
"label": "claude-code"
}
The key is shown once. Store it securely.
200{
"keys": [
{
"id": "uuid",
"label": "claude-code",
"last_used_at": "2026-04-19T12:00:00.000Z",
"created_at": "2026-04-18T10:00:00.000Z"
}
]
}
{"label": "new-name"}
200{"ok": true}
200{"ok": true}
| Resource | Limit |
|---|---|
| Pages per account | 10 |
| API keys per account | 5 |
| Content size | 500 KB |
| Anonymous TTL | 24 hours |
All errors return JSON with an error field:
{"error": "Missing 'markdown' field"}
| Status | Meaning |
|---|---|
400 | Bad request — missing or invalid fields |
401 | Unauthorized — missing or invalid key |
404 | Not found |
409 | Conflict — name already taken |
413 | Content too large (>500KB) |