ブログに戻る

How to call the Fusion API (OpenRouter)

A practical guide to calling the OpenRouter Fusion API: the endpoint, request shape, custom panels, the judge model, and streaming — with copy-paste examples.

Jun 15, 2026FusionAPIFusionAPI
How to call the Fusion API (OpenRouter)

The Fusion API is OpenAI-compatible, so calling it is almost identical to calling any other model on OpenRouter — you just swap in the openrouter/fusion model id. Under the hood, your prompt is sent to a panel of models in parallel, a judge model reviews them, and one synthesized answer comes back. (New here? Start with what the Fusion API is.)

The endpoint

POST https://openrouter.ai/api/v1/chat/completions

Required header: Authorization: Bearer <OPENROUTER_API_KEY>. Optional HTTP-Referer and X-Title headers attribute usage to your app on OpenRouter's leaderboards.

The simplest call

curl https://openrouter.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $OPENROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openrouter/fusion",
    "messages": [
      { "role": "user", "content": "What is the most reliable way to rate-limit a public API in 2026?" }
    ]
  }'

That's it — the default panel runs and you get a single synthesized answer in choices[0].message.content.

Customizing the panel and judge

To control which models form the panel and which model synthesizes the result, pass a plugins array with the fusion plugin. analysis_models is the panel; model is the judge/synthesizer:

{
  "model": "openrouter/fusion",
  "messages": [{ "role": "user", "content": "..." }],
  "plugins": [{
    "id": "fusion",
    "model": "google/gemini-3-flash-preview",
    "analysis_models": [
      "google/gemini-3-flash-preview",
      "moonshotai/kimi-k2.6",
      "deepseek/deepseek-v4-pro"
    ]
  }]
}

A cheaper panel of efficient models keeps cost down; a panel of frontier models maximizes quality. Want to know what each setup costs before you ship? Use the Fusion API cost calculator.

Streaming

Add "stream": true and read the response as Server-Sent Events — exactly like the OpenAI streaming format. Each chunk's choices[0].delta.content carries the next piece of the answer.

What you get back (and what you don't)

The response contains the final synthesized answer only. The individual panel members' raw answers aren't returned in the completion — to see which models ran and what each one cost, check your OpenRouter Activity page. Because a Fusion call is billed as the sum of every underlying completion, it costs more than a single model; here's why, and when it's worth it.

Try it without writing code

You can run a real Fusion call right now in the live Playground — paste a question and watch the panel → judge → synthesis stream in. Then drop into Python or Node.js to wire it into your app.