{
  "openapi": "3.0.1",
  "info": {
    "title": "Bulk LLM Runner — GPT, Claude, Gemini, Perplexity (No API Key)",
    "description": "Run hundreds of prompts in parallel across GPT, Claude, Gemini and Perplexity Sonar — plus 400+ other LLMs — without API key. Built-in web search, PDF reading, vision, JSON output and side-by-side model comparison.",
    "version": "0.1",
    "x-build-id": "4ddfLgETclbXZagmw"
  },
  "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": [
          "prompts",
          "model"
        ],
        "properties": {
          "prompts": {
            "title": "Prompts",
            "type": "array",
            "description": "One prompt per line / per array item. Each prompt runs as an independent chat completion. Use this for batch / multi-command processing.",
            "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-sonnet-4.5",
              "anthropic/claude-opus-4.1",
              "anthropic/claude-haiku-4.5",
              "anthropic/claude-3.5-sonnet",
              "anthropic/claude-3.5-haiku",
              "perplexity/sonar-pro",
              "perplexity/sonar",
              "perplexity/sonar-reasoning-pro",
              "perplexity/sonar-reasoning",
              "perplexity/sonar-deep-research",
              "openai/gpt-5",
              "openai/gpt-5-mini",
              "openai/gpt-5-nano",
              "openai/gpt-4.1",
              "openai/gpt-4.1-mini",
              "openai/gpt-4o",
              "openai/gpt-4o-mini",
              "openai/o3",
              "openai/o4-mini",
              "google/gemini-2.5-pro",
              "google/gemini-2.5-flash",
              "google/gemini-2.5-flash-lite",
              "google/gemini-2.0-flash-001",
              "deepseek/deepseek-chat-v3.1",
              "deepseek/deepseek-r1",
              "deepseek/deepseek-v3",
              "x-ai/grok-4",
              "x-ai/grok-4-fast",
              "x-ai/grok-code-fast-1",
              "meta-llama/llama-4-maverick",
              "meta-llama/llama-4-scout",
              "meta-llama/llama-3.3-70b-instruct",
              "qwen/qwen3-coder",
              "qwen/qwen3-235b-a22b",
              "qwen/qwen-2.5-72b-instruct",
              "moonshotai/kimi-k2",
              "mistralai/mistral-large-2411",
              "mistralai/mistral-small-3.2-24b-instruct",
              "nvidia/nemotron-nano-9b-v2",
              "z-ai/glm-4.6",
              "cohere/command-a"
            ],
            "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. Paste any OpenRouter model id (e.g. 'qwen/qwen3-vl-235b-a22b-thinking'). Browse the full list at https://openrouter.ai/models — click any model and copy the id shown under its name. If filled, this overrides the Model dropdown."
          },
          "enable_web_search": {
            "title": "Enable web search",
            "type": "boolean",
            "description": "Appends ':online' so a live web search runs before the model answers.",
            "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 OpenRouter model ids here 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.",
            "items": {
              "type": "string"
            }
          },
          "image_urls": {
            "title": "Image URLs (vision)",
            "uniqueItems": true,
            "type": "array",
            "description": "Optional. Public image URLs attached to every prompt. Only used with multimodal models (GPT-4o/5, Claude 4.x, Gemini 2.5, Llama 4, Qwen-VL).",
            "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. 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",
            "uniqueItems": true,
            "type": "array",
            "description": "Optional. If the main model fails or is rate-limited, OpenRouter automatically retries with these models in order.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}