Writing
URL to Markdown API
GET request to /v1/url-to-markdown, returning json in the standard envelope.
GET
/v1/url-to-markdown40 credits / call PaidAuthentication
Send your API key as a bearer token. Create one free in the dashboard.
Authorization: Bearer $TOOLSXPO_KEYParameters
Sent as query-string parameters. The values below are the examples used throughout this page.
| Name | Example value |
|---|---|
| url | https://example.com |
Example request
curl "https://api.toolsxpo.com/v1/url-to-markdown?url=https%3A%2F%2Fexample.com" \
-H "Authorization: Bearer $TOOLSXPO_KEY"Response
Every endpoint answers with the same envelope. The result is in data (json); meta.credits reports what the call cost.
{
"ok": true,
"data": { /* json */ },
"meta": { "credits": 40 }
}Errors
Failures use the same envelope with ok: false and a machine-readable code.
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_input | A parameter failed validation. `details` lists which. |
| 401 | unauthorized | Missing or invalid API key. |
| 402 | quota_exceeded | Out of credits on this workspace. |
| 404 | not_found | No such tool. |
| 429 | rate_limited | Too many requests. Retry after `Retry-After` seconds. |
| 503 | service_unavailable | Temporarily disabled by an administrator. |
How to use the URL → Markdown API
Render a page in a real browser and get clean Markdown of its main content back in data.markdown — ideal for feeding pages into an LLM, a RAG index, or a content pipeline without shipping a headless browser yourself.
Bashcurl "https://api.toolsxpo.com/v1/url-to-markdown?url=https://example.com" \ -H "Authorization: Bearer $TOOLSXPO_KEY"
Why Markdown (not raw HTML)
- It's already stripped of boilerplate, scripts and styling, so it's far cheaper to send to a model.
- Headings, lists, links and code blocks survive, so structure is preserved for chunking and retrieval.
Pairs well with
text-summarizer— summarise the Markdown you just extracted.text-embeddings— embed each section for semantic search.
Tips & gotchas
- Single-page apps that render everything client-side work here (unlike a plain
fetch), because a real browser executes the JS first. data.lengthgives the character count, handy for budgeting model tokens.