AI Data Prep
Tier 1 Ready
POST /v1/html-to-markdown
Convert noisy web pages or raw HTML into clean, token-efficient Markdown for RAG. Convert raw HTML or public URLs into clean, token-efficient Markdown for LLM RAG pipelines. Strips navs, ads, scripts, and cookie banners.
POST /v1/html-to-markdown){
"ok": true,
"data": {
"title": null,
"description": null,
"source_url": null,
"markdown": "# Release Notes\n\nLatency dropped by **40%**.",
"estimated_tokens": 11,
"html_chars": 147,
"markdown_chars": 44,
"cached": false
},
"meta": {
"request_id": "req_h2m_01",
"ms": 2
}
}
curl -X POST "https://api.tinplate.dev/v1/html-to-markdown" \
-H "Content-Type: application/json" \
-H "X-RapidAPI-Key: YOUR_RAPIDAPI_KEY" \
-d '{"html":"<html><body><nav>Menu</nav><main><h1>Release Notes</h1><p>Latency dropped by <strong>40%</strong>.</p></main><footer>Cookies</footer></body></html>"}'import { TinplateClient } from "@tinplate/sdk"; // npm install @tinplate/sdk
const tinplate = new TinplateClient({
rapidApiKey: process.env.RAPIDAPI_KEY!,
});
const { data, meta } = await tinplate.call("/v1/html-to-markdown", {
"html": "<html><body><nav>Menu</nav><main><h1>Release Notes</h1><p>Latency dropped by <strong>40%</strong>.</p></main><footer>Cookies</footer></body></html>"
});
console.log(`[${meta.ms} ms]`, data);import requests
response = requests.post(
"https://api.tinplate.dev/v1/html-to-markdown",
headers={
"Content-Type": "application/json",
"X-RapidAPI-Key": "YOUR_RAPIDAPI_KEY",
},
json={
"html": "<html><body><nav>Menu</nav><main><h1>Release Notes</h1><p>Latency dropped by <strong>40%</strong>.</p></main><footer>Cookies</footer></body></html>"
}
)
print(response.json())const response = await fetch("https://api.tinplate.dev/v1/html-to-markdown", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-RapidAPI-Key": "YOUR_RAPIDAPI_KEY",
},
body: JSON.stringify({
"html": "<html><body><nav>Menu</nav><main><h1>Release Notes</h1><p>Latency dropped by <strong>40%</strong>.</p></main><footer>Cookies</footer></body></html>"
}),
});
const result = await response.json();
console.log(result);{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tinplate_html_to_markdown",
"arguments": {
"html": "<html><body><nav>Menu</nav><main><h1>Release Notes</h1><p>Latency dropped by <strong>40%</strong>.</p></main><footer>Cookies</footer></body></html>"
}
}
}POST /v1/html-to-markdown)| Parameter | Type & Constraints | Description |
|---|---|---|
urloptional |
stringmaxLen: 2048 |
Public URL to fetch via private fetcher and convert to Markdown. |
htmloptional |
stringminLen: 1, maxLen: 262144 |
Raw HTML string to convert directly without fetching. |
base_urloptional |
stringmaxLen: 2048 |
Optional base URL for resolving relative links when passing raw html. |
include_linksoptional |
boolean |
Preserve hyperlinks as [text](url) (default true). |
data Object Fields (200 OK)| Field | Type | Description |
|---|---|---|
title |
string | null |
Field 'title' |
description |
string | null |
Field 'description' |
source_url |
string | null |
Field 'source_url' |
markdown |
string |
Field 'markdown' |
estimated_tokens |
integer |
Field 'estimated_tokens' |
html_chars |
integer |
Field 'html_chars' |
markdown_chars |
integer |
Field 'markdown_chars' |
cached |
boolean |
Field 'cached' |
Release Version: v1.0.7 ·
Last Verified / Benchmarked: 14 November 2026 ·
Latency Note: Sub-millisecond figures measure in-Worker V8 compute time (typical client HTTPS network RTT to the nearest Cloudflare PoP is 15–65 ms) ·
See Full Portfolio Benchmarks & Corpora →
| Plan | Monthly Price | Included Requests | Rate Limit | Max Request Payload | Best For |
|---|---|---|---|---|---|
| BASIC | $0.00 / month | 500 / month (hard limit) | 10 req / min | 64 KB | Evaluation, local development & CI smoke tests |
| PRO | $9.99 / month | 15,000 / month | 60 req / min | 128 KB | Solo developers & production apps |
| ULTRA | $29.99 / month | 100,000 / month | 300 req / min | 256 KB | Growing SaaS & multi-agent pipelines |
| MEGA | $79.99 / month | 500,000 / month | 1,000 req / min | 256 KB | High-volume enterprise workloads |
Typical web pages see a 65% to 90% reduction in tokens after stripping scripts, inline styles, SVGs, and navigation chrome.
Yes. URL requests run through our isolated edgeguard-fetcher Worker, which blocks RFC1918, loopback, link-local, and cloud metadata IPs at every redirect hop.
Yes, pass the html field directly for in-memory conversion (typically under 5 ms in deterministic mode) with zero network calls.
Raw HTML inputs are never cached or logged. Public URL conversions may be cached briefly by URL hash in Cloudflare KV.
Worker Zero-Logging Guarantee: Cloudflare Workers Observability and invocation logging are disabled in configuration
(observability.enabled = false, head_sampling_rate = 0, invocation_logs = false). Payloads are processed strictly in volatile V8 memory and never logged or stored by Tinplate.
Marketplace Proxies vs. Direct Bearer Key: Requests sent via RapidAPI or Zyla API Hub pass through those marketplaces' proxy infrastructure (subject to their respective privacy policies). Security-sensitive workloads requiring end-to-end zero-intermediary processing can connect directly to https://api.tinplate.dev using a Direct Bearer Key (Authorization: Bearer <API_KEY>).
Read our full Privacy Notice and OpenAPI 3.0.3 JSON Schema.
POST /v1/json-heal
Live on Hub
Repair malformed or truncated LLM JSON outputs into valid, schema-checked JSON in 1 ms.
POST /v1/prompt-cache-budgeter
AI Safety & Agents
Estimate tokens, optimize message order for prompt caching, and calculate LLM API costs.
POST /v1/robots-llms-analyzer
Developer Utilities
Audit which AI crawlers your robots.txt allows and generate a valid llms.txt file.