{
  "openapi": "3.0.1",
  "info": {
    "title": "Universal Request Runner — Send Any HTTP Request",
    "description": "Send any HTTP request (GET/POST/PUT/PATCH/DELETE) to any URL with custom headers, body & proxies. Supports sticky sessions (same IP across runs) — ideal for start a job then poll its status from one identity. No code needed.",
    "version": "0.2",
    "x-build-id": "QB6MzK3qKwb4AuOhs"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/vasram~universal-request-runner/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-vasram-universal-request-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/vasram~universal-request-runner/runs": {
      "post": {
        "operationId": "runs-sync-vasram-universal-request-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/vasram~universal-request-runner/run-sync": {
      "post": {
        "operationId": "run-sync-vasram-universal-request-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": [
          "url",
          "method"
        ],
        "properties": {
          "url": {
            "title": "Target URL",
            "pattern": "^https?://",
            "type": "string",
            "description": "The full web address to send the request to. Must start with http:// or https://. Example: https://api.example.com/v1/users"
          },
          "method": {
            "title": "HTTP Method",
            "enum": [
              "GET",
              "POST",
              "PUT",
              "PATCH",
              "DELETE",
              "HEAD",
              "OPTIONS"
            ],
            "type": "string",
            "description": "What kind of request to send. GET = read data. POST = create/submit. PUT/PATCH = update. DELETE = remove. HEAD = like GET but headers only. OPTIONS = ask the server which methods are allowed.",
            "default": "POST"
          },
          "headers": {
            "title": "Custom Headers",
            "type": "object",
            "description": "Extra info sent with the request (API keys, auth tokens, custom content types), as a JSON object. Example: {\"Authorization\": \"Bearer my_token123\", \"Accept\": \"application/json\"}. Leave empty ({}) if not needed. Tip: JSON bodies automatically get Content-Type: application/json unless you set it here yourself.",
            "default": {}
          },
          "body": {
            "title": "Request Body (optional)",
            "type": "string",
            "description": "Data to send with POST/PUT/PATCH requests. Paste JSON like {\"name\": \"Alice\", \"age\": 30} OR plain text. If it looks like JSON, Content-Type: application/json is set automatically. Ignored for GET/HEAD/DELETE/OPTIONS.",
            "default": ""
          },
          "followRedirects": {
            "title": "Follow redirects (3xx)",
            "type": "boolean",
            "description": "ON: automatically follow redirect responses and return the FINAL page (like a browser). OFF (default): return the raw 3xx redirect response itself, so you can see where it points. Turn ON when you need the end content of a shortened or moved URL.",
            "default": false
          },
          "timeoutSecs": {
            "title": "Timeout (seconds)",
            "minimum": 1,
            "maximum": 600,
            "type": "integer",
            "description": "How long to wait for a response before giving up on ONE attempt. Default 30 seconds. Increase for slow APIs.",
            "default": 30
          },
          "maxRetries": {
            "title": "Automatic retries",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many times to retry automatically when an attempt fails (network error, timeout, rate limit 429, or server error 5xx). Retries use increasing waits (1s, 2s, 4s…) and respect the server's Retry-After header. Retries are included in the price of a single request — no extra charge.",
            "default": 2
          },
          "sessionId": {
            "title": "Session ID (keep same IP across runs)",
            "type": "string",
            "description": "USE THIS to keep the SAME IP address across multiple Actor runs. Enter any word or number (e.g. mysession1). Every run that uses the SAME session ID goes out from the SAME IP address.\n\nExample use case: Run #1 with session=sess1 starts a video generation from IP A. Run #2 with the same session=sess1 will check its status FROM THE SAME IP A.\n\nLeave empty for a fresh random IP each time. NOTE: Only works when a proxy is enabled below.",
            "default": ""
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Route your request through Apify's proxy network. Click the toggle below to enable. When OFF, the request goes out directly from your own IP. REQUIRED for the Session ID above to work. RECOMMENDED for any site that blocks bots or datacenter IPs."
          },
          "useCurlCffi": {
            "title": "Browser TLS fingerprint (curl_cffi)",
            "type": "boolean",
            "description": "Turn ON to send the request with a real browser's TLS/HTTP2 fingerprint (curl_cffi) instead of plain httpx. This helps bypass advanced anti-bot protection (Cloudflare, Akamai, Datadome, PerimeterX) that detects non-browser clients. Leave OFF for normal APIs — it is slower and unnecessary there.",
            "default": false
          },
          "impersonate": {
            "title": "Browser version to impersonate",
            "type": "string",
            "description": "Which browser fingerprint to mimic when the option above is ON. Ignored otherwise. Use 'chrome' (default = latest available), a specific version like 'chrome131', or 'safari'/'edge'. If the exact version is unsupported, the Actor automatically falls back to plain 'chrome'.",
            "default": "chrome"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}