Skip to content

OpenRouter [Vision]

Integrate

Model id openrouter/router/vision
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://api.doitong.com/v1/run/openrouter/router/vision?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
    "model": "openai/gpt-6-sol"
  }'

# Still "queued" or "running"? Poll with the id from the response:
curl "https://api.doitong.com/v1/requests/REQUEST_ID?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY"

Up to $14.34 per run charged by actual usage, the rest is refunded Run it on this page

Get API key
OpenRouter LLM

Routes a prompt with images or PDFs to a selectable multimodal LLM for captioning, OCR or visual Q&A

OpenRouter · Text

Your first result goes here

Build a request below and run it with your API key. Outputs are copied to our storage, kept forever or 7 days for free.

Build a request

Controls are generated from the model schema. The code and the price update as you change them.

•required

Prompt applied to the image.

•required

Name identifying the model to run.

Advanced system_prompt · images · temperature · max_tokens · reasoning · enable_web_search · pdf_urls · web_search_options

System prompt supplying the model with instructions or context.

image_urls
Drop a file, or

URLs identifying the images for processing.

default 1

Response variability control, with 0 guaranteeing an identical answer whenever the input is unchanged. Increasing the value shifts responses away from predictable, typical answers toward greater diversity and less common answers.

Cap the response's generated token count at a value no greater than the context length less the prompt length. Generation cannot exceed the specified cap.

Provide document locations as a list containing only PDFs: http(s) URLs pointing to .pdf files or data URIs in the form data:application/pdf;base64,... . OpenRouter's document parser handles them when the model cannot process PDFs natively.

Web search configuration, including engine selection, result caps, and domain filtering. Used only when enable_web_search is true.

POST /run/openrouter/router/vision?wait=20 quote → $14.34
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://api.doitong.com/v1/run/openrouter/router/vision?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
    "model": "openai/gpt-6-sol"
  }'

# Still "queued" or "running"? Poll with the id from the response:
curl "https://api.doitong.com/v1/requests/REQUEST_ID?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY"

Run this request

Your key stays in this browser: it is sent only to the Doitong API and saved (localStorage) only if you tick Remember. Get an API key

About OpenRouter [Vision]

Takes a `prompt` and the name of a vision-capable language model in `model`, then returns a text answer. Attach pictures through `image_urls` and documents through `pdf_urls`, which accepts only PDF files. Also supports `system_prompt`, `temperature` from 0 to 2, `max_tokens`, optional reasoning output and web search.

Parameters

Send either the canonical name or the native name, not both. Canonical names

NameType DefaultAllowed Description
image_urlsoptional images
Typeurl[] · image
URLs identifying the images for processing.
pdf_urlsoptional
Typestring[]
Provide document locations as a list containing only PDFs: http(s) URLs pointing to .pdf files or data URIs in the form data:application/pdf;base64,... . OpenRouter's document parser handles them when the model cannot process PDFs natively.
promptrequired
Typestring
Prompt applied to the image.
system_promptoptional
Typestring | null
System prompt supplying the model with instructions or context.
modelrequired
Typestring
Name identifying the model to run.
reasoningoptional
Typeboolean
Defaultfalse
Whether to include reasoning in the final response.
temperatureoptional
Typenumber
Default1
0 – 2
Response variability control, with 0 guaranteeing an identical answer whenever the input is unchanged. Increasing the value shifts responses away from predictable, typical answers toward greater diversity and less common answers.
max_tokensoptional
Typeinteger | null
≥ 1
Cap the response's generated token count at a value no greater than the context length less the prompt length. Generation cannot exceed the specified cap.
web_search_optionsoptional
Typeobject
Web search configuration, including engine selection, result caps, and domain filtering. Used only when enable_web_search is true.
web_search_options.engineoptional
Typeenum
Defaultauto
autonativeexa
Search engine selection: 'auto' and 'native' both fall back to Exa when native search is unavailable. 'auto' uses available provider-native search; 'native' prefers built-in search from OpenAI, Anthropic, Google, xAI, or Perplexity. To use Exa's search API exclusively, select 'exa'.
web_search_options.max_resultsoptional
Typeinteger | null
1 – 25
Result cap for each Exa search call, from 1 to 25, with a default of 5. Native provider search ignores this setting.
web_search_options.max_usesoptional
Typeinteger | null
≥ 1
Per-request search cap, passed to Anthropic for native search but ignored by other native providers. Calls beyond the cap receive an error result and do not run.
web_search_options.max_total_resultsoptional
Typeinteger | null
≥ 1
Combined result limit for all searches within one request.
web_search_options.search_context_sizeoptional
Typeenum
lowmediumhigh
Per-result retrieval amount for Exa, superseded by max_characters if both are supplied and ignored for native provider search. Choose low for 5K characters, medium for 15K, or high for 30K; leaving it unspecified lets Exa adapt the amount to approximately 2–4K per result.
web_search_options.max_charactersoptional
Typeinteger | null
1 – 100,000
Per-result content character cap for Exa, overriding search_context_size if both settings are supplied. Set an exact maximum from 1 to 100,000 characters; native provider search disregards this setting.
web_search_options.allowed_domainsoptional
Typestring[]
Domain allowlist for Exa and most native search providers, restricting results to the listed domains. Google native search does not support it.
web_search_options.excluded_domainsoptional
Typestring[]
Domain exclusion list for Exa searches and compatible native providers; Google and OpenAI native searches cannot apply this list. Results originating from listed domains are excluded.
web_search_options.user_locationoptional
Typeobject
Approximate user location that biases native search results geographically; Exa does not use this information.
web_search_options.user_location.typeoptional
Typestring
Defaultapproximate
Location classification; the only supported value is 'approximate'.
web_search_options.user_location.cityoptional
Typestring | null
Name of the city, such as 'San Francisco'.
web_search_options.user_location.regionoptional
Typestring | null
State or region name, such as 'California'.
web_search_options.user_location.countryoptional
Typestring | null
Country identifier expressed as two letters, such as 'US'.
web_search_options.user_location.timezoneoptional
Typestring | null
Timezone identifier in IANA notation, such as 'America/Los_Angeles'.
required Canonical name, also accepted

File parameters take a public https:// URL, a data: URI up to 10 MB, or the file_url of an upload. Files

Output

GET /requests/req_8k2m4q7x1z9c3v5b6n0p2r4t
{
  "id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
  "object": "request",
  "model": "openrouter/router/vision",
  "status": "succeeded",
  "created_at": "2026-10-20T12:00:00Z",
  "started_at": "2026-10-20T12:00:02Z",
  "completed_at": "2026-10-20T12:00:09Z",
  "queue_position": null,
  "cost": {
    "credits": 14340,
    "usd": "14.34",
    "charged": 14340,
    "refunded": 0
  },
  "input": {
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
    "model": "openai/gpt-6-sol"
  },
  "output": {
    "output": "A close-up of a tiger's face focusing on its bright orange iris and the area around its eye, with white fur eyebrows and a contrasting black and rich orange striped fur pattern. The word \"FLUX\" is overlaid in bold, white, brush-stroke styled text across the tiger's face.",
    "usage": {
      "prompt_tokens": 1,
      "completion_tokens": 1,
      "total_tokens": 0,
      "cost": 1.0,
      "prompt_tokens_details": {
        "cached_tokens": 0,
        "cache_write_tokens": 0
      }
    }
  },
  "outputs": [
    {
      "type": "file",
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_size": 1843200,
      "stored": true
    }
  ],
  "error": null,
  "metrics": {
    "inference_seconds": 6.8
  },
  "urls": {
    "self": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
    "cancel": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
  }
}
Your files, your choiceEvery outputs[].url is a copy on our storage: kept forever (paid per GB-month) or 7 days for free, by your account setting or ?storage=.
Same shape on every modeltype, url, content_type, width, height and duration, for images, video and audio alike. output is the model’s own result object.
Fields of output
output
stringResult produced by the model.
usage
object {prompt_tokens, completion_tokens, total_tokens, cost, prompt_tokens_details} | nullDetails of token consumption.

More models: LLM

For AI agents: this page as Markdown is at https://doitong.com/developers/models/openrouter/router/vision.md. All models and guides: https://doitong.com/developers/llms.txt