$curl -X POST /api/v1/documents

Your markdown has an endpoint

Webhooks in, documents out, share links on the way back.

An n8n canvas with an “On form submission” trigger wired into an MDflow node running create: document, both nodes ticked green after a run, and the node details panel beside them listing the MDflow node's document and folder actions.
Two nodes: a form is submitted, and a markdown document lands in a folder.
$cat the-problem.txt
My workflow produces text and there's nowhere good to put it.

The automation works. It gathers the right things and formats them sensibly. Then it has to go somewhere — so it becomes a Slack message nobody can find in a fortnight, a row in a spreadsheet with a 400-word cell, or an email to yourself.

What that output actually wants to be is a document: readable, filed, searchable, linkable, and editable afterwards by a human who spots something wrong.

$ls ./workflows

Three that earn their keep

Each of these is a handful of nodes, or a handful of lines of curl.

$webhook → document

A submission becomes a document

A form post, a Typeform response, an alert from monitoring. The workflow shapes it into markdown and files it in a dated folder, so what arrives is readable a year later rather than a row in a table nobody opens.

Webhook → Set → MDflow: Document / Create
$cron → digest

A nightly job assembles a digest

Pull yesterday's merged pull requests, new CRM deals or a feed, render one markdown summary, and write it into the same document each night. Because Update Bodyreplaces the whole body, today's digest is the document — no appending forever.

Schedule → GitHub / HTTP / RSS → Code → MDflow: Document / Update Body
$publish → announce

Publish and announce in one run

Write the document, turn public sharing on, take the returned link and post it. The people who need to read it get a rendered page rather than an attachment.

MDflow: Document / Create → Document / Set Sharing → Slack / Email
$mdflow api --two-ways

Two ways in

A node if you live on the n8n canvas, an HTTP call if you do not. Both hit the same API and obey the same rules.

  • The n8n community node. n8n-nodes-mdflow, installable from n8n's Community Nodes screen or from npm on a self-hosted instance. Free and open source (MIT). Two nodes: an action node with 22 operations and a polling trigger.
  • Every object, on the canvas. Document (Create, Delete, Get, Get Many, Move, Rename, Set Sharing, Update Body) · Folder (Create, Delete, Get, Get Documents, Get Many, Update) · Workspace (Create, Delete, Get Many, Update) · Share (Add, Get Many, Remove, Remove All).
  • Or plain curl. A versioned JSON API under /api/v1 with a bearer Personal Access Token. No node, no platform, no dependency — anything that can make an HTTP request can write a document.
  • Both directions. Pull a document's body into a workflow, transform it, and write it straight back. The workspace is a source as well as a destination.

The whole thing, in curl

$bash
curl -X POST https://mdflow.cz/api/v1/documents \
  -H "Authorization: Bearer mdf_your_token_here" \
  -H "Content-Type: application/json" \
  -d '{
    "folderId": "8f1c…",
    "title": "2026-07-24 Support digest.md",
    "body": "# Support digest\n\n- 12 tickets closed\n- 2 escalations open\n"
  }'
$mdflow trigger

Reacting to change

Automation in the other direction: a new document in the workspace starts a workflow.

  • New document in a folder. Clip an article, drop a meeting note, let an agent file a draft — and a workflow picks it up to summarise, translate, notify or index it.
  • New folder. In a specific workspace or anywhere in the account. Useful when a folder is how a new project starts.
  • New workspace. For onboarding flows that create one per client.
  • It polls. The trigger checks on n8n's schedule. MDflow does not send outbound webhooks, so latency is your poll interval, not milliseconds.
$cat contract.txt

The contract

The rules are the same whichever way you call in — the node is a wrapper over the API, not a second implementation with its own behaviour.

  • OpenAPI 3.1. A machine-readable spec at /openapi.json, with human documentation at /docs/api. Generate a client, or hand the spec to an agent.
  • 60 requests per minute. Per token and per authenticated user. Comfortable for scheduled jobs; something to pace a bulk import around.
  • Update Body replaces everything. It is a PUT, not an append. To add to a document, read it, concatenate in the workflow, and write the whole thing back.
  • 500 KiB per document. And duplicate titles or folder names are disambiguated automatically with (2), (3)— a re-run never overwrites the previous run's output by accident.
  • Empty bodies are refused. Unless the request passes confirmEmpty: true, so a workflow that produced nothing this time cannot blank yesterday's document.
  • Every write is logged. Arrivals over the API show in the Document Log as automated · <token name>, so a misbehaving workflow is easy to spot and its token easy to revoke.
$cat limitations.txt

What it doesn't do

Design around these rather than discovering them in production:

  • Requires Pro. The API, tokens and the n8n node are all Pro (€4.99/mo). There is no free tier of programmatic access.
  • No outbound webhooks. The MDflow Trigger polls. If you need sub-second reaction to a document appearing, this is not that.
  • No append operation. Update Body replaces the whole body — read, concatenate in the workflow, write back.
  • Tokens reach the whole account. You cannot scope one to a single folder or workspace, so treat a workflow token like any other production credential.
$man mdflow-n8n --faq

Questions

How do I connect n8n to MDflow?
Install the n8n-nodes-mdflow community node from n8n's Community Nodes screen, then add an MDflow API credential holding a Personal Access Token from your MDflow settings. The package adds an action node with 22 operations and an MDflow Trigger node. Full setup is at /docs/n8n.
Can a workflow react when a document appears?
Yes, through the MDflow Trigger node. It starts a workflow when a new document appears in a folder, when a new folder appears in a workspace or anywhere in the account, or when a new workspace is created. It polls on n8n's schedule — MDflow does not send outbound webhooks.
Can an AI agent inside n8n use this?
Yes. The MDflow node works as a tool for n8n AI Agents, so an agent in a workflow manages the same markdown people edit in the browser. For free-form access instead of fixed operations, point n8n's MCP Client Tool node at the remote MCP server.
Do I need n8n at all?
No. The node is a convenience. Everything it does is the documented /api/v1 REST API with a bearer token, so a cron job with curl, a Lambda, a GitHub Action or a Python script works just as well.
Does automation require Pro?
Yes. The HTTP API, Personal Access Tokens and the MCP server all require Pro (€4.99/mo), and the n8n node talks to MDflow through the API, so it does too.
What happens if my workflow runs twice?
Create makes a second document with a disambiguated title — (2) appended — rather than overwriting the first, so a duplicate run is visible instead of silently destructive. If you want one document updated in place, use Update Body against a known document ID.
$mdflow token --new

Stop dumping output into Slack. Give it a document.

Issue a Personal Access Token, point one workflow at a folder, and see what it looks like a month later when the output is searchable, linkable and editable.

The API, tokens and the n8n node require Pro, from €4.99/mo.