Capture screenshots and PDFs of URLs, HTML and Markdown, extract page content and monitor pages for changes with Rendex.
Rendex ships in the w6w first-party pack. It declares 18 actions, 2 health checks, and the host runs its code in a sandbox that never sees the credential.
io.w6w.rendexRendex is a rendering API: it loads a page in real Chrome and hands back a screenshot or PDF, renders HTML or Markdown (optionally filled from a Mustache template and a data object) to an image or PDF, and turns a page into clean reader-mode Markdown. It is a quick way to produce invoices, certificates, OG images, page archives and LLM-ready page text from a workflow without running a browser.
This app covers rendering a URL, HTML or Markdown to PNG, JPEG, WebP or PDF (returned as base64), minting signed hosted render links for og:image and img tags, extracting page content, building branded PDF/PNG artifacts with share links, queueing asynchronous screenshot batches and reading their jobs, reading plan and credit usage, and Rendex Watch: create, test, list, run, pause, update and delete page-change monitors and read their run history.
Every render spends credits and Rendex takes no idempotency key, so the rendering actions are not marked retry-safe. On the Free plan images carry a light rendex.dev watermark.
Three routes to the same 18 actions. The Workflow tab is generated from Rendex's own manifest and carries its real ids, so it is copy-pasteable; the Code and CLI examples are the same call for any action on any app, so every app-specific value in them is a blank you fill in.
artifact-create Turn Markdown or HTML into a branded PDF and/or PNG with hosted, shareable URLs.
render-html Render HTML to an image or PDF, optionally filling a Mustache template. Returns the image as base64.
render-link-create Mint a signed, CDN-cached URL for a render, ready for og:image or <img>.
render-markdown Render Markdown to an image or PDF, optionally filling a Mustache template. Returns the image as base64.
watch-create Monitor a URL for visual and text changes on a schedule (1 credit for the baseline).
watch-run Run a change check immediately (1 credit). A paused watch must be resumed first.
watch-runs-list Read a watch's check history with change flags, diff scores and signed image URLs.
watch-test Dry-run a watch config before creating it: render, reachability and a screenshot.
watch-update Change a watch's settings, or pause or resume it. Only the fields you set change.
A workflow step names the app and the action, and the editor fills in the
connection when you pick one. This is the Step shape from the
workflow spec, carrying Rendex's real ids.
{
"manifestVersion": "2",
"name": "rendex-example",
"steps": [
{
"id": "artifact-create",
"uses": {
"app": "io.w6w.rendex",
"action": "artifact-create",
"connection": "conn_YOUR_CONNECTION_ID"
},
"with": {
"content": "<content>"
}
}
]
}artifact-create account-get batch-create batch-get content-extract +13 more actions available
Every app-specific value here is a blank you have to fill in. An
app action is reached through the connection that authenticates it, so the
address is a connection id, not the app id — and connections belong to your account,
so a public page cannot know yours. Create one for Rendex, then fill in
the three blanks: conn_YOUR_CONNECTION_ID, the action key, and the
parameters that action declares. The call itself is real — the shape is transcribed
from the studio's own snippet builder, which prints the same kind of blanks — but
nothing in it is specific to Rendex. The Workflow tab is where this app's
real ids are.
npm install @w6w/sdkyarn add @w6w/sdkpnpm add @w6w/sdkdeno add npm:@w6w/sdkimport { W6wClient, isActionRun } from "@w6w/sdk";
// Reads W6W_BASE_URL and W6W_TOKEN from the environment when omitted.
const client = new W6wClient();
const envelope = await client.run({
urn: "conn_YOUR_CONNECTION_ID",
action: "artifact-create",
payload: {
content: "<value>",
// inputFormat: "<value>",
// formats: "<value>",
// branding: "<value>",
// pageSetup: "<value>",
// data: "<value>",
// expiresIn: "<value>",
},
});
if (isActionRun(envelope)) console.log(envelope.value); npm install -g @w6w/cli w6w run conn_YOUR_CONNECTION_ID --action artifact-create --payload '{"content":"<value>"}' Give an AI agent Rendex — without giving it Rendex's credentials. One MCP endpoint exposes every app, function and workflow the caller is entitled to, as tools it can discover and run. Access is granted per team while we onboard.
One tool call{
"name": "w6w_invoke",
"arguments": {
"ref": "app:io.w6w.rendex#artifact-create",
"input": {
"content": "<content>"
}
}
}
Every tool names its target with a single ref. The
app: form above doesn't name a connection at all — the
host resolves which of the caller's Rendex connections to sign
with, and refuses rather than guesses when the answer is ambiguous.
The token is attached host-side, at the moment of the call. It is never a tool argument, never in the model's context, and never in a transcript — so a prompt injection has nothing to exfiltrate.
Tools are derived per end user from what that person has actually connected and is entitled to — not one shared bot identity carrying the union of everyone's access.
Multi-step work runs on the workflow engine and returns a run handle the agent can poll — retries, branching and state survive the conversation that started them.
Rendex's declared health checks are on the surface too, so an agent can tell "the vendor is down" from "your credential expired" before it burns a retry on either.
The MCP surface is part of the hosted platform. Rendex itself is MIT, and the runtime that executes it is source-available (FSL).
Rendex declares its own checks, so its health is a property of the app rather than something the host guesses at.
Unauthenticated GET https://api.rendex.dev/health, the vendor's documented health route: `{"status":"ok","product":"rendex"}`.
Credits used against the plan's monthly limit, read from GET /v1/account.