{
  "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.1",
    "x-build-id": "2euhiw7w7YGZqEx0U"
  },
  "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"
            ],
            "type": "string",
            "description": "What kind of request to send. GET = read data. POST = create/submit. PUT/PATCH = update. DELETE = remove. Most APIs use POST or GET.",
            "default": "POST"
          },
          "headers": {
            "title": "Custom Headers",
            "type": "object",
            "description": "Extra info sent with the request (like an API key or content type), as a JSON object. Example: {\"Authorization\": \"Bearer my_token123\", \"Accept\": \"application/json\"}. Leave empty ({}) if not needed.",
            "default": {}
          },
          "body": {
            "title": "Request Body (optional)",
            "type": "string",
            "description": "Data to send with POST/PUT/PATCH requests. You can paste JSON like {\"name\": \"Alice\", \"age\": 30} OR plain text. If it looks like JSON, we automatically set the right content type for you. Ignored for GET/DELETE.",
            "default": ""
          },
          "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 (residential IPs from real devices — harder for websites to block). 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 production use."
          },
          "useCurlCffi": {
            "title": "Use curl_cffi (anti-bot bypass)",
            "type": "boolean",
            "description": "Turn ON to send the request using curl_cffi instead of httpx. curl_cffi mimics a real browser's TLS/HTTP2 fingerprint, which helps bypass advanced anti-bot protection (Cloudflare, Akamai, Datadome, PerimeterX). Leave OFF for normal APIs that don't block requests. Requires the 'curl_cffi' package in the Actor image.",
            "default": false
          },
          "impersonate": {
            "title": "Browser to impersonate (curl_cffi only)",
            "type": "string",
            "description": "Which browser fingerprint to mimic when 'Use curl_cffi' is ON. Ignored when OFF. Use 'chrome' (default, latest available) for most sites, or a specific version like 'chrome131', 'safari', 'edge'. If the value is unsupported, the Actor falls back to plain 'chrome'.",
            "default": "chrome"
          },
          "timeoutSecs": {
            "title": "Timeout (seconds)",
            "minimum": 1,
            "maximum": 600,
            "type": "integer",
            "description": "How long to wait for a response before giving up. Default 30 seconds. Increase for slow APIs.",
            "default": 30
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}