# PDF to Markdown

> Convert one public PDF URL to bounded Markdown without signup or an API key.

Source page: https://docs.replynodes.com/docs/guides/pdf

# PDF to Markdown

Direct public HTTP `POST https://pdf.replynodes.com/` requires no account, API key, or cookie when converting one public PDF URL. The MCP `read_document` / `tools/call` at [`https://mcp.replynodes.com/mcp`](https://mcp.replynodes.com/mcp) requires the existing MCP authorization boundary; MCP is not anonymous.

`GET /` and `HEAD /` are documentation-only. `POST /` performs the conversion; the allowed methods are `GET`, `HEAD`, and `POST`.

The contract limits the source/download to 10 MiB, the document to 50 pages, and each conversion to 60 seconds. Each IP may make 20 requests per hour and run 2 conversions at once. Successful JSON responses are limited to 1 MiB including the response newline; an oversized conversion is rejected with `502 upstream_unavailable` rather than truncated.

```sh
curl -X POST https://pdf.replynodes.com/ \
  -H 'Content-Type: application/json' \
  -d '{"url":"https://public.example/file.pdf"}'
```

The successful response is exactly a document object with `type`, `mime_type`, `markdown`, and `metadata.pages`; `metadata.title` is included when available. The endpoint rejects private/metadata targets, unsafe redirects, non-PDF content, partial results, and malformed input.

All errors use the standard `{ "error": { "code", "message", "request_id" } }` envelope. The documented statuses are `400 invalid_request`, `405 method_not_allowed` (`Allow: GET, HEAD, POST`), `413 payload_too_large`, `429 rate_limited`, `502 upstream_unavailable`, `503 degraded`, and `504 gateway_timeout`.

Limits are 10 MiB per source/download, 50 pages, 60 seconds, 20 conversions per IP per hour, and two active conversions per IP. Successful bounded responses are cached for 24 hours by normalized URL without its fragment. A cache hit still consumes hourly quota and does not consume an active conversion slot. Redis is shared and mandatory; cache, quota, admission, and Redis failures fail closed.

This public HTTP contract is also exposed through the sole MCP application at
[`https://mcp.replynodes.com/mcp`](https://mcp.replynodes.com/mcp) as the
`read_document` tool. It accepts exactly one top-level `url` input and uses the
same PDF to Markdown limits, safety checks, cache, rate limits, concurrency,
and error behavior as this POST endpoint. It is intended for read PDF, PDF for
AI agents, extract PDF text, and PDF context workflows.
