Claude reads PDFs natively: each page is converted to an image and its extracted text is provided alongside, so the model sees both layout and words. That processing is available on the Claude API, Claude Platform on AWS, Amazon Bedrock, Google Cloud, and Microsoft Foundry, on all active models. What differs is delivery. A PDF document block accepts three sources — a URL reference (the platform fetches it), inline base64 with media_type: "application/pdf", and a Files API file_id — but per Anthropic's PDF documentation, Bedrock and Google Cloud support base64 only. URL and file_id delivery are the province of the first-party API and Claude Platform on AWS (with Foundry's Files API limited to Hosted-on-Anthropic deployments).
A portable document-delivery layer
Structure it the same way as the image adapter: one internal document reference, rendered to the richest source the platform supports, with base64 as the universal floor.
- Where URL sources work, use them for documents that already live at stable HTTPS locations — the request stays tiny and there's no double transfer.
- Where
file_idworks, use it for documents referenced repeatedly; upload once, memoize the ID by content hash and workspace. - Everywhere else, fetch the bytes yourself and inline them base64-encoded. Enforce payload ceilings in this path: the Messages API allows 32 MB per request (and Anthropic notes the whole-payload limit varies by platform — Bedrock caps requests at 20 MB, Vertex at 30 MB), and base64 inflates file size by about a third.
Page limits ride alongside: up to 600 PDF pages per request on 1M-context models, 100 pages when the request's context window is under 1M tokens. Cost is per page on two meters — typically 1,500–3,000 text tokens per page depending on density, plus image tokens per the vision formula. Dense documents can fill the context window before they hit the page limit, so a splitting step belongs in the delivery layer too. Standard PDFs only: no passwords or encryption, and scanned pages without extractable text can't be cited.
The Bedrock Converse citation caveat
Bedrock adds a wrinkle that isn't about source types at all. On Bedrock's legacy surface there are two request APIs — InvokeModel (the Anthropic-native body shape) and Converse (AWS's unified schema). Per Anthropic's documentation, on the Converse API, full visual PDF understanding requires citations to be enabled. Without citations, Converse falls back to text-only extraction: a 3-page PDF that costs roughly 7,000 tokens with full visual processing costs about 1,000 tokens as text-only extraction. The InvokeModel API has no such constraint.
This cuts both ways. If your Bedrock PDF pipeline uses Converse and you're seeing surprisingly cheap PDF requests, you may be getting text extraction when you thought you were getting visual understanding — tables, charts, and layout are invisible to the model in that mode. Conversely, if you only need the text, Converse-without-citations is a legitimate 7x token saving. Make the choice explicit: enable citations on Converse for visual fidelity, use InvokeModel for full control, or document that a given pipeline is text-extraction-only by design. (On the current bedrock-mantle Messages API surface used by AnthropicBedrockMantle, you're back in the standard Anthropic request shape.)
Practices that pay on every platform
Anthropic's own guidance: place PDFs before text in the request; use prompt caching when the same document is analyzed repeatedly (the document block is a natural cache_control breakpoint); use the Batch API for high-volume PDF jobs where available; and estimate with the token counting endpoint before committing a big document set. All four practices live comfortably inside the delivery layer, which is exactly why it's worth building one instead of scattering source dictionaries through application code.
Where to go next
The PDF support reference covers block anatomy and token math in detail; Bedrock PDF modes goes deeper on the Converse/InvokeModel split; and the Files API portability gap explains the file_id half of this story.