Public API is available. Convert Markdown to images with 50 watermarked requests/month.

Automation

Generate images from Markdown in n8n

Add one HTTP Request node to any workflow and turn Markdown into PNG, JPG, or PDF. There is no custom node to install and no self-hosting requirement.

Why

What people build with it

01

Turn RSS items or database rows into social cards on a schedule, then post them to Slack, X, or LinkedIn from the same workflow.

02

Render the output of an AI node as an image before it leaves the workflow — Markdown goes in, a shareable PNG comes out.

03

Attach a rendered PDF to outbound email when a form is submitted or a record changes.

Setup

Connecting n8n

  1. 01

    Create an API token under Profile → API tokens. It starts with mti_ and is shown only once, so copy it before closing the dialog.

  2. 02

    In your workflow, add an HTTP Request node. Set the method to POST and the URL to https://markdowntoimage.com/api/v1/images/generate.

  3. 03

    Under Headers, add the authorization header. n8n's Header Auth credential works too — the header name and value are the same either way.

    Authorization: Bearer mti_your_token_here
  4. 04

    Set Body Content Type to JSON and paste this. The ={{ }} expression pulls Markdown from whichever node ran before it.

    {
      "markdown": "={{ $json.content }}",
      "format": "png",
      "width": 800,
      "theme": "sunset",
      "mode": "url"
    }
  5. 05

    The image URL comes back on this path. Feed it into an upload, email, or storage node downstream.

    {{ $json.data.imageUrl }}

Every parameter — themes, fonts, code styles, page size for PDF — is listed in the API reference.

Troubleshooting

Support
Q1

Do I need to install a custom n8n node?

No. The HTTP Request node that ships with n8n is enough — it is a plain REST call. That also means it works on n8n Cloud and self-hosted alike, with no community node approval needed.
Q2

How do I pass Markdown from a previous node?

Use an n8n expression in the JSON body, for example ={{ $json.content }} where content is the field holding your Markdown. Any expression n8n accepts will work, including ones that concatenate several fields.
Q3

Can I get the raw image instead of a URL?

Yes. Set "mode" to "binary" in the request body and the endpoint returns the raw image bytes instead of a JSON payload with a URL. Use that when the next step needs a file rather than a link.
Q4

What happens when I hit the monthly quota?

The endpoint returns an error response rather than silently producing a broken image, so you can branch on it in the workflow. Check remaining quota any time with GET /api/v1/account/usage.
Markdown to Image in n8n | HTTP Request Node Setup | MarkdownToImage