Web Page to Markdown
API key v1Clean article text from any page as Markdown, ready for LLM ingestion.
Fetches a page, extracts the main article with a Readability algorithm, converts it to Markdown with headings, lists, code blocks, tables, absolute links and images, and returns it with the title, byline, excerpt and word count. Send mode=full for the whole body instead of the article, or POST raw html to convert your own markup.
https://api.zactonz.com/markdown/
Parameters
| Name | Type | Description |
|---|---|---|
url |
string |
The page to convert. Omit it and POST |
mode |
enum |
articlefull |
render |
boolean |
Default
|
images |
boolean |
Default
1 |
links |
boolean |
Default
1 |
max_chars |
integer |
Maximum Markdown length, 1000 to 500000. Default
100000 |
format |
enum |
jsontext |
fresh |
boolean |
Default
|
Send parameters in the query string.
Response
OK
| Field | Type | Description |
|---|---|---|
status |
integer |
|
data |
object | The result. |
data.url |
string | Final URL. |
data.title |
string | Article title. |
data.byline |
string | Author when declared. |
data.excerpt |
string | Short summary. |
data.site_name |
string | Site name. |
data.language |
string | Page language. |
data.image |
string | Lead image URL. |
data.published_time |
string | Publication date as declared. |
data.mode |
string |
|
data.word_count |
integer | Words in the Markdown. |
data.length |
integer | Characters in the Markdown. |
data.truncated |
boolean | Whether |
data.markdown |
string | The Markdown. |
data.rendered |
boolean | Whether a browser was used. |
data.from_cache |
boolean | Whether the answer came from the cache. |
Status codes
The outcome is reported in the JSON status field. See Errors & status codes for the general rules.
400 |
Bad request | Neither |
413 |
Too large | The page or the posted HTML exceeds the size limit. |
415 |
Not HTML | The URL does not serve HTML or plain text. |
422 |
Unreachable | The page could not be fetched. |
401 |
Unauthorized | The Authorization header is missing or the key is not recognised. |
403 |
Forbidden | The key is not licensed for this product. |
429 |
Too many requests | The per-minute rate or the plan quota is exhausted. Retry after the seconds given in |
Notes
Scripts, styles, forms, iframes and hidden elements are removed. Output is capped by max_chars and flagged truncated when cut. Pages that only render with JavaScript need render=1, which costs 5 units instead of 2. Results are cached for an hour per URL and option set.