{
  "openapi": "3.0.1",
  "info": {
    "title": "Run ChatGPT, Claude, Gemini & DeepSeek in Bulk (No API Key)",
    "description": "Run hundreds of prompts in parallel across GPT, Claude, Gemini, Perplexity, DeepSeek, Qwen, Kimi and 350+ models, with web search, JSON columns and side-by-side model comparison. Optional: upload an Excel, CSV or Google Sheet to run AI on every row. No API key needed.",
    "version": "0.1",
    "x-build-id": "qc2q3eaO7zApAOS88"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fayoussef~bulk-llm-runner/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fayoussef-bulk-llm-runner",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/fayoussef~bulk-llm-runner/runs": {
      "post": {
        "operationId": "runs-sync-fayoussef-bulk-llm-runner",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/fayoussef~bulk-llm-runner/run-sync": {
      "post": {
        "operationId": "run-sync-fayoussef-bulk-llm-runner",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "model"
        ],
        "properties": {
          "prompts": {
            "title": "Prompts",
            "type": "array",
            "description": "One prompt per line / per array item. Each prompt runs as an independent chat completion. With a spreadsheet attached, every prompt runs once for each row: put column names in double curly braces and they are replaced by that row's values, for example: What tests does {{Lab name}}, {{Address}}, phone {{Phone}} offer? A prompt without placeholders gets the row's fields added to it. The example prompts are skipped in spreadsheet mode.",
            "items": {
              "type": "string"
            }
          },
          "spreadsheet_file": {
            "title": "Spreadsheet (optional)",
            "type": "string",
            "description": "Optional. Upload an Excel (.xlsx), CSV or TSV file, or paste a public link to one (Google Sheets links work if the sheet is shared as 'Anyone with the link'). The first row must be the column names. Every prompt above runs once per row, and the output keeps all of your file's columns with the AI answers next to them, in the Output table and as a ready-made Excel file. Leave empty to run the Prompts list as usual."
          },
          "sheet_name": {
            "title": "Sheet name (optional)",
            "type": "string",
            "description": "Only for Excel files with several sheets. Leave empty to read the first sheet."
          },
          "checklist_items": {
            "title": "Checklist: yes / no / unknown columns (optional)",
            "uniqueItems": true,
            "type": "array",
            "description": "Optional. A short list of things to check for every prompt or spreadsheet row, one per line, for example 'Offers HbA1c testing'. Each item becomes its own column answered yes, no or unknown, plus an evidence column and a source link column. The model answers unknown instead of guessing when it cannot find clear evidence. Works best with web search on. With a spreadsheet, the Prompts list can be left empty: each row's fields are then checked against the list. Replaces the Response format setting when used.",
            "items": {
              "type": "string"
            }
          },
          "system_prompt": {
            "title": "System prompt (optional)",
            "type": "string",
            "description": "Shared system instruction prepended to every prompt.",
            "default": "You are a helpful, accurate assistant. Use the available tools when they would improve the answer."
          },
          "model": {
            "title": "Model",
            "enum": [
              "anthropic/claude-opus-5.5",
              "anthropic/claude-opus-5",
              "anthropic/claude-sonnet-5",
              "anthropic/claude-opus-4.8",
              "anthropic/claude-opus-4.7",
              "anthropic/claude-sonnet-4.6",
              "anthropic/claude-opus-4.6",
              "anthropic/claude-opus-4.5",
              "anthropic/claude-haiku-4.5",
              "anthropic/claude-sonnet-4.5",
              "anthropic/claude-opus-4.1",
              "anthropic/claude-sonnet-4",
              "anthropic/claude-3-haiku",
              "anthropic/claude-fable-5.1",
              "anthropic/claude-fable-5",
              "google/gemini-3.8-flash",
              "google/gemini-3.7-flash",
              "google/gemini-3.6-flash",
              "google/gemini-3.5-flash-lite",
              "google/gemini-3.1-flash-lite-image",
              "google/gemini-3.1-flash-image",
              "google/gemini-3-pro-image",
              "google/gemini-3.5-flash",
              "google/gemini-3.1-flash-lite",
              "google/gemini-3.1-flash-lite-preview",
              "google/gemini-3.1-flash-image-preview",
              "google/gemini-3.1-pro-preview-customtools",
              "google/gemini-3.1-pro-preview",
              "google/gemini-3-flash-preview",
              "google/gemini-3-pro-image-preview",
              "google/gemini-2.5-flash-image",
              "google/gemini-2.5-flash-lite",
              "google/gemini-2.5-flash",
              "google/gemini-2.5-pro",
              "google/gemini-2.5-pro-preview",
              "google/gemma-4-26b-a4b-it",
              "google/gemma-4-31b-it",
              "google/lyria-3-pro-preview",
              "google/lyria-3-clip-preview",
              "google/gemma-3-4b-it",
              "google/gemma-3-12b-it",
              "google/gemma-3-27b-it",
              "google/gemma-2-27b-it",
              "google/gemma-4-26b-a4b-it:free",
              "google/gemma-4-31b-it:free",
              "openai/gpt-5.6-luna-pro",
              "openai/gpt-5.6-luna",
              "openai/gpt-5.6-terra-pro",
              "openai/gpt-5.6-terra",
              "openai/gpt-5.6-sol-pro",
              "openai/gpt-5.6-sol",
              "openai/gpt-5.5-pro",
              "openai/gpt-5.5",
              "openai/gpt-5.4-image-2",
              "openai/gpt-5.4-nano",
              "openai/gpt-5.4-mini",
              "openai/gpt-5.4-pro",
              "openai/gpt-5.4",
              "openai/gpt-5.3-codex",
              "openai/gpt-5.2-codex",
              "openai/gpt-5.2-chat",
              "openai/gpt-5.2-pro",
              "openai/gpt-5.2",
              "openai/gpt-5.1-codex-max",
              "openai/gpt-5.1",
              "openai/gpt-5.1-codex",
              "openai/gpt-5.1-codex-mini",
              "openai/gpt-5-image-mini",
              "openai/gpt-5-image",
              "openai/gpt-5-pro",
              "openai/gpt-5",
              "openai/gpt-5-mini",
              "openai/gpt-5-nano",
              "openai/o3-pro",
              "openai/o4-mini-high",
              "openai/o3",
              "openai/o4-mini",
              "openai/gpt-4.1",
              "openai/gpt-4.1-mini",
              "openai/gpt-4.1-nano",
              "openai/o3-mini-high",
              "openai/o3-mini",
              "openai/gpt-4o-2024-11-20",
              "openai/gpt-4o-2024-08-06",
              "openai/gpt-4o-mini",
              "openai/gpt-4o-mini-2024-07-18",
              "openai/gpt-4o",
              "openai/gpt-4o-2024-05-13",
              "openai/gpt-4-turbo",
              "openai/gpt-4",
              "openai/gpt-6-luna-pro",
              "openai/gpt-6-luna",
              "openai/gpt-6-sol-pro",
              "openai/gpt-6-sol",
              "openai/gpt-6-astra",
              "openai/gpt-6-astra-pro",
              "openai/gpt-chat-latest",
              "openai/gpt-audio",
              "openai/gpt-audio-mini",
              "openai/gpt-oss-safeguard-20b",
              "openai/gpt-oss-120b",
              "openai/gpt-oss-20b",
              "openai/o1-pro",
              "openai/o1",
              "openai/gpt-3.5-turbo-0613",
              "openai/gpt-3.5-turbo-instruct",
              "openai/gpt-3.5-turbo-16k",
              "openai/gpt-3.5-turbo",
              "deepseek/deepseek-v3.2",
              "deepseek/deepseek-v3.2-exp",
              "deepseek/deepseek-v3.1-terminus",
              "deepseek/deepseek-chat-v3.1",
              "deepseek/deepseek-r1-0528",
              "deepseek/deepseek-chat-v3-0324",
              "deepseek/deepseek-r1-distill-llama-70b",
              "deepseek/deepseek-r1",
              "deepseek/deepseek-chat",
              "deepseek/deepseek-v4.1-flash",
              "deepseek/deepseek-v4-flash-vision-exp",
              "deepseek/deepseek-v4-pro-0813",
              "deepseek/deepseek-v4-flash-0731",
              "deepseek/deepseek-v4-pro",
              "deepseek/deepseek-v4-flash",
              "x-ai/grok-4.7",
              "x-ai/grok-4.6",
              "x-ai/grok-4.5",
              "x-ai/grok-4.3",
              "x-ai/grok-4.20-multi-agent",
              "x-ai/grok-4.20",
              "x-ai/grok-build-0.1",
              "meta-llama/llama-4-maverick",
              "meta-llama/llama-4-scout",
              "meta-llama/llama-guard-4-12b",
              "meta-llama/llama-3.3-70b-instruct",
              "meta-llama/llama-3.2-1b-instruct",
              "meta-llama/llama-3.2-3b-instruct",
              "meta-llama/llama-3.1-70b-instruct",
              "meta-llama/llama-3.1-8b-instruct",
              "qwen/qwen3.8-max-prime",
              "qwen/qwen3.8-omni-flash",
              "qwen/qwen3.8-max-0902",
              "qwen/qwen3.8-flash",
              "qwen/qwen3.8-27b",
              "qwen/qwen3.8-2.4t-a95b",
              "qwen/qwen3.7-flash",
              "qwen/qwen3.7-plus",
              "qwen/qwen3.7-max",
              "qwen/qwen3.5-plus-20260420",
              "qwen/qwen3.6-flash",
              "qwen/qwen3.6-35b-a3b",
              "qwen/qwen3.6-max-preview",
              "qwen/qwen3.6-27b",
              "qwen/qwen3.6-plus",
              "qwen/qwen3.5-9b",
              "qwen/qwen3.5-35b-a3b",
              "qwen/qwen3.5-27b",
              "qwen/qwen3.5-122b-a10b",
              "qwen/qwen3.5-flash-02-23",
              "qwen/qwen3.5-plus-02-15",
              "qwen/qwen3.5-397b-a17b",
              "qwen/qwen3-max-thinking",
              "qwen/qwen3-coder-next",
              "qwen/qwen3-vl-32b-instruct",
              "qwen/qwen3-vl-8b-thinking",
              "qwen/qwen3-vl-8b-instruct",
              "qwen/qwen3-vl-30b-a3b-thinking",
              "qwen/qwen3-vl-30b-a3b-instruct",
              "qwen/qwen3-vl-235b-a22b-thinking",
              "qwen/qwen3-vl-235b-a22b-instruct",
              "qwen/qwen3-max",
              "qwen/qwen3-coder-plus",
              "qwen/qwen3-coder-flash",
              "qwen/qwen3-next-80b-a3b-thinking",
              "qwen/qwen3-next-80b-a3b-instruct",
              "qwen/qwen3-30b-a3b-thinking-2507",
              "qwen/qwen3-coder-30b-a3b-instruct",
              "qwen/qwen3-30b-a3b-instruct-2507",
              "qwen/qwen3-235b-a22b-thinking-2507",
              "qwen/qwen3-coder",
              "qwen/qwen3-235b-a22b-2507",
              "qwen/qwen3-30b-a3b",
              "qwen/qwen3-8b",
              "qwen/qwen3-14b",
              "qwen/qwen3-32b",
              "qwen/qwen3-235b-a22b",
              "qwen/qwen-2.5-coder-32b-instruct",
              "qwen/qwen-2.5-7b-instruct",
              "qwen/qwen-2.5-72b-instruct",
              "qwen/qwen3.8-27b:free",
              "qwen/qwen-plus-2025-07-28",
              "qwen/qwen2.5-vl-72b-instruct",
              "qwen/qwen-plus",
              "mistralai/mistral-medium-3-5",
              "mistralai/mistral-small-2603",
              "mistralai/mistral-medium-3.1",
              "mistralai/mistral-small-3.2-24b-instruct",
              "mistralai/mistral-medium-3",
              "mistralai/mistral-small-3.1-24b-instruct",
              "mistralai/mistral-small-24b-instruct-2501",
              "mistralai/mistral-large-2407",
              "mistralai/mistral-large",
              "mistralai/ministral-14b-2512",
              "mistralai/ministral-8b-2512",
              "mistralai/ministral-3b-2512",
              "mistralai/voxtral-small-24b-2507",
              "mistralai/codestral-2508",
              "mistralai/mistral-saba",
              "mistralai/mistral-nemo",
              "mistralai/mixtral-8x22b-instruct",
              "moonshotai/kimi-k3",
              "moonshotai/kimi-k2.7-code",
              "moonshotai/kimi-k2.6",
              "moonshotai/kimi-k2.5",
              "moonshotai/kimi-k2-thinking",
              "moonshotai/kimi-k2-0905",
              "moonshotai/kimi-k2",
              "z-ai/glm-5.3-prime",
              "z-ai/glm-5.3-flashx",
              "z-ai/glm-5.3-flash",
              "z-ai/glm-5.3",
              "z-ai/glm-5.2",
              "z-ai/glm-5.1",
              "z-ai/glm-5v-turbo",
              "z-ai/glm-5-turbo",
              "z-ai/glm-5",
              "z-ai/glm-4.7-flash",
              "z-ai/glm-4.7",
              "z-ai/glm-4.6v",
              "z-ai/glm-4.6",
              "z-ai/glm-4.5v",
              "z-ai/glm-4.5",
              "z-ai/glm-4.5-air",
              "z-ai/glm-5.2:free",
              "perplexity/sonar-pro-search",
              "perplexity/sonar-reasoning-pro",
              "perplexity/sonar-pro",
              "perplexity/sonar-deep-research",
              "perplexity/sonar",
              "cohere/command-a-plus",
              "cohere/command-a",
              "cohere/command-r7b-12-2024",
              "cohere/command-r-08-2024",
              "cohere/command-r-plus-08-2024",
              "cohere/north-mini-code:free",
              "amazon/nova-2-lite-v1",
              "amazon/nova-premier-v1",
              "amazon/nova-lite-v1",
              "amazon/nova-micro-v1",
              "amazon/nova-pro-v1",
              "nvidia/nemotron-3.5-lightning",
              "nvidia/nemotron-3.5-content-safety",
              "nvidia/nemotron-3-ultra-550b-a55b",
              "nvidia/nemotron-3-super-120b-a12b",
              "nvidia/nemotron-3-nano-30b-a3b",
              "nvidia/nemotron-3.5-lightning:free",
              "nvidia/nemotron-3.5-content-safety:free",
              "nvidia/nemotron-3-ultra-550b-a55b:free",
              "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free",
              "nvidia/nemotron-3-super-120b-a12b:free",
              "minimax/minimax-m3",
              "minimax/minimax-m2.7",
              "minimax/minimax-m2.5",
              "minimax/minimax-m2-her",
              "minimax/minimax-m2.1",
              "minimax/minimax-m2",
              "minimax/minimax-m1",
              "minimax/minimax-01",
              "aion-labs/aion-3.5-mini",
              "aion-labs/aion-3.5",
              "aion-labs/aion-3.0-mini",
              "aion-labs/aion-3.0",
              "aion-labs/aion-2.0",
              "aion-labs/aion-rp-llama-3.1-8b",
              "anthracite-org/magnum-v4-72b",
              "arcee-ai/trinity-large-thinking",
              "baidu/ernie-4.5-vl-424b-a47b",
              "bytedance/ui-tars-1.5-7b",
              "bytedance-seed/seed-2-1-turbo",
              "bytedance-seed/seed-2.0-code",
              "bytedance-seed/seed-2.0-lite",
              "bytedance-seed/seed-2.0-mini",
              "bytedance-seed/seed-1.6-flash",
              "bytedance-seed/seed-1.6",
              "cognitivecomputations/dolphin-mistral-24b-venice-edition",
              "dots-studio/dots-3-note-preview:free",
              "fireworks/ember-1",
              "gryphe/mythomax-l2-13b",
              "ibm-granite/granite-4.2-8b",
              "ibm-granite/granite-4.0-h-micro",
              "inception/mercury-2.5",
              "inception/mercury-2",
              "inclusionai/ling-3.0-flash-vl",
              "inclusionai/ling-3.0-flash-fin",
              "inclusionai/ling-3.0-flash",
              "inclusionai/ling-3.0-flash-sante:free",
              "inclusionai/ling-3.0-flash-fin:free",
              "inference-net/schematron-v2-turbo",
              "inference-net/schematron-v2-small",
              "kwaipilot/kat-coder-pro-v2.5",
              "liquid/lfm-2.5-2.6b:free",
              "mancer/weaver",
              "meituan/longcat-2.0",
              "meta/muse-spark-1.3-contributor",
              "meta/muse-spark-1.3",
              "meta/muse-spark-1.2-contributor",
              "meta/muse-glimmer-30b",
              "meta/muse-spark-1.2",
              "meta/muse-spark-1.1",
              "microsoft/phi-4",
              "microsoft/wizardlm-2-8x22b",
              "nex-agi/nex-n2.5-mini:free",
              "nex-agi/nex-n2.5-pro:free",
              "nousresearch/hermes-4-405b",
              "nousresearch/hermes-3-llama-3.1-70b",
              "nousresearch/hermes-3-llama-3.1-405b",
              "openrouter/auto-beta",
              "openrouter/fusion",
              "openrouter/pareto-code",
              "openrouter/free",
              "openrouter/bodybuilder",
              "openrouter/auto",
              "perceptron/perceptron-mk1",
              "poolside/laguna-s-2.1",
              "poolside/laguna-xs-2.1",
              "poolside/laguna-s-2.1:free",
              "poolside/laguna-xs-2.1:free",
              "prism-ml/ternary-bonsai-2-27b",
              "rekaai/reka-edge",
              "rekaai/reka-flash-3",
              "relace/relace-search",
              "relace/relace-apply-3",
              "sakana/fugu-ultra-v2",
              "sakana/fugu-max",
              "sakana/sakana-namazu",
              "sakana/fugu-ultra",
              "sao10k/l3.3-euryale-70b",
              "sao10k/l3.1-euryale-70b",
              "sao10k/l3-lunaris-8b",
              "stealth/space-bunny-alpha",
              "stepfun/step-3.7-flash",
              "stepfun/step-3.5-flash",
              "tencent/hy4-preview",
              "tencent/hy-mt2-1.8b",
              "tencent/hy-mt2-30b-a3b",
              "tencent/hy-mt2-7b",
              "tencent/hy3",
              "tencent/hy3-preview",
              "tencent/hunyuan-a13b-instruct",
              "thedrummer/cydonia-24b-v4.1",
              "thedrummer/skyfall-36b-v2",
              "thedrummer/unslopnemo-12b",
              "thinkingmachines/inkling-small",
              "thinkingmachines/inkling",
              "thinkingmachines/inkling-small:free",
              "thinkingmachines/inkling:free",
              "unbiased/pareto",
              "undi95/remm-slerp-l2-13b",
              "upstage/solar-pro4",
              "upstage/solar-mini4",
              "upstage/solar-pro-3",
              "writer/palmyra-x5",
              "xiaomi/mimo-v2.6-pro-ultraspeed",
              "xiaomi/mimo-v2.6-flash",
              "xiaomi/mimo-v2.6-pro",
              "xiaomi/mimo-v2.5-pro",
              "xiaomi/mimo-v2.5"
            ],
            "type": "string",
            "description": "Most-used OpenRouter models. Append ':online' or toggle 'Enable web search' to add real-time web search to any of them.",
            "default": "anthropic/claude-haiku-4.5"
          },
          "custom_model": {
            "title": "Custom model id (overrides Model)",
            "type": "string",
            "description": "Optional. Enter a model id in vendor/model format — it must include the vendor prefix and the slash. Correct: qwen/qwen3-vl-235b-a22b-thinking. Wrong: qwen3-vl-235b-a22b-thinking (missing the 'qwen/' prefix — this will be rejected). More examples: anthropic/claude-opus-4.8, openai/gpt-5, google/gemini-2.5-pro. To find the exact id, open https://openrouter.ai/models, click a model, and copy the id shown under its name (it always has a slash). Tip: common labels like 'Claude Opus 4.8' are auto-corrected, but any model not in the dropdown must be entered as its exact vendor/model id. If filled, this overrides the Model dropdown."
          },
          "enable_web_search": {
            "title": "Enable web search",
            "type": "boolean",
            "description": "Runs a live web search before the model answers and feeds the results in as context. Works with any model.",
            "default": true
          },
          "enable_file_parser": {
            "title": "Enable PDF / file parsing",
            "type": "boolean",
            "description": "Activates the file-parser plugin so the model can read PDFs/URLs you reference in the prompt.",
            "default": false
          },
          "temperature": {
            "title": "Temperature",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "Sampling temperature x100 (0 = deterministic, 200 = very creative).",
            "default": 70
          },
          "max_tokens": {
            "title": "Max output tokens",
            "minimum": 64,
            "maximum": 32000,
            "type": "integer",
            "description": "Upper bound on tokens per response.",
            "default": 2048
          },
          "compare_models": {
            "title": "Compare with extra models",
            "uniqueItems": true,
            "type": "array",
            "description": "Optional. Add more model ids in vendor/model format (e.g. openai/gpt-5, google/gemini-2.5-pro, anthropic/claude-opus-4.8) to run EVERY prompt against the main model AND each of these. One dataset row per (prompt × model). Great for A/B testing GPT-5 vs Claude vs Gemini side by side. Enter ids, not display names — find them at https://openrouter.ai/models.",
            "items": {
              "type": "string"
            }
          },
          "image_urls": {
            "title": "Image URLs (vision)",
            "uniqueItems": true,
            "type": "array",
            "description": "Optional. Direct, publicly downloadable image URLs attached to every prompt. Only used with multimodal models (GPT-4o/5, Claude 4.x, Gemini 2.5, Llama 4, Qwen-VL). The URL must open the image file itself with no login and no expiring link: sharing pages from Google Drive, Dropbox or OneDrive serve a web page, not an image, so use the direct file link. Each image must be under 10 MB. Bad URLs stop the run immediately with an explanation, before anything is charged.",
            "items": {
              "type": "string"
            }
          },
          "response_format": {
            "title": "Response format",
            "enum": [
              "json_object",
              "text",
              "json_schema"
            ],
            "type": "string",
            "description": "How the model should format its reply. Default 'Auto JSON' makes every reply a JSON object so the Excel/CSV export gets one column per field: simple prompts return `{\"response\": \"...\"}` (a single 'response' column), and prompts that ask for specific fields like 'return description, price, rating' return those exact keys as columns. Pick 'JSON Schema (strict)' to lock the output to an exact schema, or 'Plain text' for free-form text.",
            "default": "json_object"
          },
          "json_schema": {
            "title": "JSON schema (optional)",
            "type": "object",
            "description": "Only used when Response format = 'JSON Schema (strict)'. Paste a JSON Schema describing the exact shape you want back; each top-level property becomes its own column. Example: { \"type\": \"object\", \"properties\": { \"title\": {\"type\":\"string\"}, \"tags\": {\"type\":\"array\",\"items\":{\"type\":\"string\"}} }, \"required\": [\"title\",\"tags\"] }"
          },
          "reasoning_effort": {
            "title": "Reasoning effort",
            "enum": [
              "default",
              "none",
              "low",
              "medium",
              "high"
            ],
            "type": "string",
            "description": "For reasoning models (o3, o4-mini, GPT-5, DeepSeek R1, Sonar Reasoning). 'none' disables reasoning where possible; models that must always reason (such as GPT-5 and Gemini 3.5 Flash) use low effort instead. Ignored by non-reasoning models.",
            "default": "default"
          },
          "provider_sort": {
            "title": "Provider routing preference",
            "enum": [
              "default",
              "price",
              "throughput",
              "latency"
            ],
            "type": "string",
            "description": "When a model is available from multiple providers, prefer the one optimised for this dimension.",
            "default": "default"
          },
          "fallback_models": {
            "title": "Fallback models",
            "maxItems": 2,
            "uniqueItems": true,
            "type": "array",
            "description": "Optional. If the main model fails or is rate-limited, it automatically retries with these models in order. Up to 2 fallback models. Use model ids in vendor/model format (e.g. anthropic/claude-sonnet-4.6, openai/gpt-4o-mini), not display names.",
            "items": {
              "type": "string"
            }
          },
          "max_retries": {
            "title": "Retries on transient errors",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Number of automatic retries on HTTP 429 / 5xx errors before giving up on a prompt.",
            "default": 2
          },
          "concurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "How many prompts to run in parallel against the openrouter actor.",
            "default": 4
          },
          "apify_token": {
            "title": "Apify token (optional)",
            "type": "string",
            "description": "Defaults to the run's own APIFY_TOKEN. Override only if you want to bill a different account."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}