SHIP LIVING WORKFLOW DIAGRAMS.
Render any n8n workflow as a pixel-perfect image with one POST — or host it at a permanent URL that re-renders when your workflow changes. Built for CI, docs, and READMEs. Free keys, no signup.
Create your key
We email you a confirmation link — your key is minted when you open it, shown once, and we store only its hash. Up to 3 active keys per email. No newsletter, ever.
Render an image
POST /v1/render takes your workflow JSON in the body (never in a URL) and returns the finished image — png, jpeg, webp, svg or pdf. Omit any option and it falls back to the editor's defaults.
# workflow.json — any workflow exported from n8n
jq '{workflow: .}' workflow.json > request.json
curl -X POST https://api.pixtex.dev/v1/render \
-H "Authorization: Bearer $PIXTEX_KEY" \
-H "Content-Type: application/json" \
--data @request.json -o workflow.png
# same options the editor has — mix and match:
jq '{workflow: ., options: {background: "midnight", frame: "og", format: "webp"}}' \
workflow.json > request.jsonOr host a living diagram
POST /v1/images renders once and gives you a permanent image URL. Paste the markdown into a README, Notion page or forum post — then PUT the same id whenever the workflow changes and every embed updates in place. Your workflow JSON is used for the render and discarded — only the PNG is stored.
jq '{workflow: ., name: "Order sync"}' workflow.json |
curl -X POST https://api.pixtex.dev/v1/images \
-H "Authorization: Bearer $PIXTEX_KEY" \
-H "Content-Type: application/json" \
--data @-{
"image": { "id": "aB3xK9_qLw4", "name": "Order sync", … },
"imageUrl": "https://api.pixtex.dev/i/aB3xK9_qLw4.png",
"markdown": ""
}# workflow changed? re-render in place — the URL never changes
jq '{workflow: .}' workflow.json |
curl -X PUT https://api.pixtex.dev/v1/images/aB3xK9_qLw4 \
-H "Authorization: Bearer $PIXTEX_KEY" \
-H "Content-Type: application/json" \
--data @-Embeds refresh as caches revalidate (≤ 1 hour). Free-tier hosted images carry a small Pixtex watermark.
| POST /v1/keys | Request an API key — emails a confirmation link | free |
| POST /v1/keys/claim | Open the emailed link → the key is minted | free |
| GET /v1/keys/me | Key info, usage and limits | free |
| DELETE /v1/keys/me | Revoke the key + delete its hosted images | free |
| POST /v1/render | Render a workflow → image bytes | 1 render |
| POST /v1/images | Host a PNG at a permanent URL | 1 render |
| PUT /v1/images/:id | Re-render a hosted image in place | 1 render |
| GET /v1/images | List your hosted images | free |
| DELETE /v1/images/:id | Delete a hosted image | free |
| GET /i/:id.png | The public image itself (embed this anywhere) | free |
Auth is Authorization: Bearer pxt_… on every /v1 call. Render responses include X-Renders-Remaining so your CI can budget.
The API takes the editor's full option set — same names, same values. Dial in the look in the editor, then send the same options from code. (format and scale apply to /v1/render only — hosted images are always PNG at 2×.)
| option | values | default |
|---|---|---|
| format | png · jpeg · webp · svg · pdf | png |
| scale | 1 · 2 · 3 · 4 | 2 |
| frame | auto · og · youtube · square | auto |
| background | dark · midnight · gradient · white · paper · transparent | dark |
| iconPack | custom · n8n | custom |
| nodePalette | punch · candy · sunset · mono | punch |
| layout | original · auto | original |
| layoutDirection | LR · TB · auto | auto |
| spacing | compact · normal · spacious | normal |
| nodeDetail | minimal · standard · detailed | standard |
| edgeStyle | curved · straight · step | curved |
| gridStyle | dots · lines · cross · none | dots |
| showTitle / showLegend / showWatermark / … | true · false | — |
Beta defaults — they will grow, not shrink. Keys are free and self-serve; your workflow JSON never appears in a URL or a log, render requests are processed in memory, and hosted images store only the final PNG. Revoking a key immediately deletes its hosted images.