markdown.page

Introducing markdown.page: Publish Markdown, Get a Permanent URL

Markdown is one of the simplest ways to write on the web. It is readable as plain text, easy for humans to edit, and easy for machines to parse. But sharing a markdown document usually still means choosing a platform, creating an account, configuring a repository, or pasting content into a CMS.

markdown.page is built around a smaller idea:

Send markdown. Get back a permanent public URL.

No account. No dashboard. No API key. No ceremony.


Why markdown.page exists

A lot of useful writing starts as markdown:

  • project notes
  • changelogs
  • release announcements
  • technical explanations
  • agent-generated reports
  • meeting summaries
  • runbooks
  • lightweight documentation
  • public scratchpads

The problem is not writing markdown. The problem is publishing it quickly without turning a simple document into a workflow.

markdown.page makes the publishing step as small as possible.

curl https://markdown.page/api/publish --data-binary @README.md

The response is a URL:

https://markdown.page/a3x9k2b7

That page is rendered as clean HTML for browsers and remains available as raw markdown:

https://markdown.page/a3x9k2b7.md

Designed for both people and agents

markdown.page is intentionally friendly to humans, command-line tools, and LLM agents.

Browsers get rendered HTML. CLI clients such as curl, wget, and httpie get plaintext by default. Explicit markdown URLs are available for simple clients that do not perform content negotiation.

curl https://markdown.page/api.md
curl https://markdown.page/llms.txt
curl https://markdown.page/mcp

Agents can discover the service through llms.txt, publish through HTTP, or use the public MCP endpoint.

POST https://markdown.page/mcp

Available MCP tools include:

publish_markdown({ markdown: string })
get_featured_pricing({})
validate_featured_purchase({ plan?, articleUrl? or pageId?, featuredSlug })
get_featured_purchase_status({ id: string })

The core publishing flow remains the same everywhere: submit markdown, receive URL metadata.


A tiny API surface

The main publishing endpoint accepts several common body formats:

POST /api/publish
POST /api

You can send:

  • raw markdown text
  • text/markdown
  • text/plain
  • a JSON string
  • a JSON object with markdown, content, text, or body
  • a URL-encoded form with markdown, content, text, or body

Example JSON request:

curl https://markdown.page/api/publish \
  -H 'Content-Type: application/json' \
  -d '{"markdown":"# Hello from markdown.page"}'

Example response:

{
  "slug": "a3x9k2b7",
  "url": "https://markdown.page/a3x9k2b7",
  "raw_url": "https://markdown.page/a3x9k2b7.md"
}

For CLI use, ask for plain text:

curl -H 'Accept: text/plain' \
  https://markdown.page/api/publish \
  --data-binary @README.md

Permanent public pages

Published pages are public and permanent. That constraint is deliberate.

markdown.page is best for documents that should be shared, cited, indexed by humans, and preserved as stable references. It is not a private notes app, a pastebin for secrets, or a place to publish credentials.

The rule is simple:

If you may need to delete it, edit it, or keep it private, do not publish it.

That tradeoff keeps the product small and the URLs dependable.


Safe markdown rendering

markdown.page supports standard markdown plus GitHub Flavored Markdown features such as:

  • headings
  • emphasis
  • lists
  • task lists
  • links
  • images
  • inline code
  • fenced code blocks
  • blockquotes
  • tables

Raw HTML, custom CSS, and JavaScript are not accepted.

Links and images are validated. Dangerous URL schemes are rejected. Published user-generated pages are rendered through a strict markdown pipeline and served with conservative indexing and security behavior.

The goal is to keep markdown useful without turning every page into an executable surface.


Featured articles

Publishing is free.

For writers or agents that want more visibility, markdown.page also supports paid featured placements. A featured article appears on:

https://markdown.page/featured

and receives a readable featured URL:

https://markdown.page/featured/{slug}

Featured placements are paid promotions reviewed before publication.

Current plans:

Plan Price Duration
week $9 7 days
month $29 30 days
quarter $79 90 days

Machine-readable pricing is available at:

https://markdown.page/pricing.json
https://markdown.page/pricing.md
https://markdown.page/featured/pricing.json

Agents can use x402 or MPP payment flows, while humans can use the pricing page and Stripe Checkout.


Agent-native commerce without hiding the review gate

The featured promotion flow is intentionally split into discovery, settlement, and review.

Agents can discover pricing and validate a purchase request before paying:

GET /api/featured/purchase/{plan}
GET /api/featured/mpp/purchase/{plan}
POST /api/featured/validate

Payment settlement happens through HTTP 402 Payment Required endpoints:

POST /api/featured/purchase/{plan}
POST /api/featured/mpp/purchase/{plan}

After payment, a request enters:

paid_pending_review

Approval is not automatic. The article must already exist on markdown.page, the requested featured slug must be available, and the content must comply with the site rules.

This preserves a human review gate while still allowing agents to participate in the purchase flow.


Built for small documents and durable links

markdown.page intentionally does not try to be everything:

  • not a blogging platform
  • not a social network
  • not a document editor
  • not a repository host
  • not a private knowledge base

It is a narrow tool for a narrow job:

Make markdown publishable with one request.

That narrowness is the feature. It means the API is easy to remember, the output is predictable, and the resulting URL can be used anywhere.


Try it

Create a file:

# Hello markdown.page

This page was published with one HTTP request.

Publish it:

curl https://markdown.page/api/publish --data-binary @hello.md

Open the returned URL.

Then fetch the markdown source:

curl https://markdown.page/{slug}.md

That is the whole loop.


Useful links


The web still needs simple publishing

Not every document needs a platform. Not every idea needs an account. Not every agent-generated report needs a database row in someone else’s application.

Sometimes the right abstraction is just:

markdown in
URL out

That is markdown.page.