Create each key on its own page, paste it below, then copy the finished lines into your project's .env file. What you paste stays in this tab. It is never sent to Wirestack or saved.
On November 10, 2026 OpenRouter announced the Extractions API. You send text, an image or a document plus a list of typed fields, and it returns each value with the place in the source it came from and a confidence score. The route is alpha: POST https://openrouter.ai/api/alpha/extractions. OpenRouter says its shape can change.
The request takes model, state (the text, or the key of an asset), optional assets (each with type of "image" or "document", format and data_base64), fields and an optional reference_date. Since November 11, state may be empty or left out when the request carries assets; the assets are then read on their own. Each field has a type: text, number, date, time, datetime, list, duration, estimate or forecast, plus optional instructions.
The response has answers (one per field, with value, span or spans, p_null and confidence), truncated and usage. A value is null when p_null passes the threshold.
On November 10 OpenRouter marked a change "Action required": an entry in a list answer's spans can now be null when that item has no offsets in the state text, for example a list item read from an image or a document. Such responses used to fail with 502 and now return 200.
Models named in the announcement, with input prices as of November 6, 2026 (output is free on all three):
cloudflare/clairic: text and up to 4 PNG, JPEG or WebP images, all field types, $0.10 per 1M input tokens. It does not accept PDFs.
scaledown/extract: text, or one PDF or image, text and list of text fields only, $0.04 per 1M input tokens
inception/mercury-decide: text only, text and list of text fields only, $0.02 per 1M input tokens
The guide also lists levanto/sage-2, perplexity/pplx-decider-v1.3, perplexity/pplx-decider-flash-v1.3, inference-net/schematron-v2-small and inference-net/schematron-v2-turbo.
Bad requests return HTTP 400 with a message naming the problem, for example an unsupported field type for the model, a fifth image on Clairic or a PDF on Clairic. Sending questions to this route returns a 400 that points to /api/alpha/decisions.
Prerequisites
An OpenRouter API key in OPENROUTER_API_KEY
Steps
Send a request with your text in state and the fields you want in fields:
Read each value from answers.<field>.value. Use span (or spans for a list) to find the matching text in your input, counted in Unicode code points. Check each spans entry for null before you read its offsets.
For an image or a PDF, put it in assets as base64 and set state to the asset's key, or leave state out.
Check truncated. It is true when the provider read only the start of state.
Test it
Run the request above. answers.invoice_number.value should be INV-2291, answers.total.value should be 1080, and usage.output_tokens should be 0.
Not confirmed
The route is alpha and OpenRouter says the shape can change, so re-check the guide before relying on it in production.
The pages read do not mention rate limits or SDK support. The examples use curl and Python requests.
The announcement gives prices for three models only. We did not confirm prices for the other models in the guide.