Fetch URL as Markdown
TypeScriptToolsPOST api.upapi.io/fetch-markdown.postConvert any web page into clean, LLM-ready Markdown. Fetches over plain HTTP with browser headers (retrying once through a residential or datacenter proxy when the origin serves a bot wall), removes boilerplate with Mozilla Readability, and converts with GitHub-flavored Markdown tables, lists and code blocks. Article mode is verified against a whole-page conversion and downgrades itself when Readability strips too much, so you are never handed a gutted page. Returns the markdown plus title, byline, language, excerpt, the extracted link list, the final URL after redirects, and which transport served the body. No browser is used, so a client-rendered page is reported as an error rather than as empty content.
Request schema
| Field | Type | Description |
|---|---|---|
urlreq | string | Absolute http(s) URL of the page to convert (e.g. https://en.wikipedia.org/wiki/Markdown). Private, loopback and link-local destinations are refused. |
mode | string | article = Mozilla Readability main-content extraction, verified against the whole page and auto-downgraded when it strips too much; full = the whole body with nav/footer/aside/form removed (e.g. article).· default: "article" |
maxChars | integer | Maximum characters of markdown to return (e.g. 100000). Output is cut at the nearest paragraph/line boundary and truncated is set.· default: 100000 |
timeoutMs | integer | Total network budget in milliseconds across the direct attempt and the one proxied retry (e.g. 20000). Capped below the 28s API-gateway edge timeout.· default: 20000 |
includeLinks | boolean | Keep inline [text](url) links in the markdown and return the extracted link list (e.g. true). false unwraps every anchor to plain text.· default: true |
includeImages | boolean | Keep  image references in the markdown (e.g. false). Images are dropped by default because they cost tokens and rarely help an LLM.· default: false |
Response schema
| Field | Type | Description |
|---|---|---|
langreq | stringnull | Language tag from <html lang> (e.g. "en"); null if absent. |
links | array | Absolute http(s) links found in the extracted content, capped at 500. Present only when includeLinks is true; reflects the extracted document, which may be longer than a truncated markdown body. |
titlereq | string | Page/article title, or an empty string if none was found. |
bylinereq | stringnull | Author line, when Readability or a meta tag exposes one; null otherwise. |
excerptreq | stringnull | Short summary from Readability or the meta description; null if absent. |
finalUrlreq | string | URL actually fetched, after following redirects. |
markdownreq | string | The converted document. Prefixed with the page title as an H1 when the extracted content does not already start with a heading. |
charCountreq | integer | Length of the returned markdown. |
extractorreq | string | Which stage produced the markdown. In article mode this reads "full-dom" when Readability failed the content-density check. |
fetchedAtreq | string | ISO-8601 timestamp of the fetch. |
truncatedreq | boolean | True when the markdown was cut to fit maxChars. |
httpStatusreq | integer | HTTP status of the response that produced the markdown. |
fetchedWithreq | string | Transport that produced the returned body: direct = straight from the worker; datacenter/residential = the proxy-pool tier used for the retry. |
Try it
Try it
Absolute http(s) URL of the page to convert (e.g. https://en.wikipedia.org/wiki/Markdown). Private, loopback and link-local destinations are refused.
article = Mozilla Readability main-content extraction, verified against the whole page and auto-downgraded when it strips too much; full = the whole body with nav/footer/aside/form removed (e.g. article).
Maximum characters of markdown to return (e.g. 100000). Output is cut at the nearest paragraph/line boundary and truncated is set.
Total network budget in milliseconds across the direct attempt and the one proxied retry (e.g. 20000). Capped below the 28s API-gateway edge timeout.
Keep inline [text](url) links in the markdown and return the extracted link list (e.g. true). false unwraps every anchor to plain text.
Keep  image references in the markdown (e.g. false). Images are dropped by default because they cost tokens and rarely help an LLM.
Run this endpoint live
Jump in as a guest — no signup — and run fetch-markdown.post with your own inputs. Create a free account anytime to get your own API key.
Code examples
curl -X POST https://api.upapi.io/fetch-markdown.post \
-H 'Content-Type: application/json' \
-H 'x-api-key: YOUR_API_KEY' \
-d '{ "url": "https://en.wikipedia.org/wiki/Markdown", "mode": "article", "maxChars": 100000, "timeoutMs": 20000, "includeLinks": true, "includeImages": false }'