{
  "openapi": "3.0.0",
  "info": {
    "title": "API Documentation",
    "description": "Authenticate every request with your Browse AI API key, sent as a Bearer token in the `Authorization` header. [Generate your API key](https://dashboard.browse.ai/api).\n\nThis version (v1) is an older API version that will be deprecated soon. To see the documentation for the most recent version (v2), [click here](/api).\n",
    "version": "v1"
  },
  "servers": [
    {
      "url": "https://api.browse.ai/v1"
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "tags": [
    {
      "name": "tasks",
      "x-displayName": "Tasks",
      "description": "A task is an automation that can do almost anything you do manually on the web. For example:\n\n  - Open a webpage,\n  - Log in,\n  - Click on buttons,\n  - Fill out forms,\n  - Extract structured data from a webpage into a spreadsheet,\n  - Take screenshots,\n  - Monitor specific parts of webpages for visual or content changes.\n\nTasks are created either using 1-Click Automations or using Browse AI Recorder and its click-and-extract interface.  Every task has a few variables (like the webpage address) that you can adjust every time you run it.\n"
    },
    {
      "name": "executions",
      "x-displayName": "Task Execution",
      "description": "Every time Browse AI runs a task for you, it counts as **one execution**.\nFor example, if you set up a monitoring task to monitor a webpage for changes daily,  Browse AI will have to execute the task every day or about 30 times per month for you.\n\n**Note:** Task *executions* used to be called *jobs*. The word *job* is still used in some API endpoints and parameters for backwards-compatibility.\n"
    },
    {
      "name": "monitors",
      "x-displayName": "Monitors",
      "description": "Each task on Browse AI can optionally have one or more monitors. Monitoring tasks come with one monitor by default.\n\nFor example, if you set up a monitoring task to monitor a category page on an e-commerce site for changes daily,  you can set up additional monitors to monitor other category pages on the same site using the same task.\n\nEach monitor can have different variables and schedule.\n"
    },
    {
      "name": "bulk runs",
      "x-displayName": "Bulk Runs",
      "description": "You can run a task up to 1,000 times at once with different variables for each run.\n"
    }
  ],
  "paths": {
    "/teams/{teamId}/tasks": {
      "get": {
        "tags": [
          "tasks"
        ],
        "summary": "Retrieve list of tasks under your account",
        "operationId": "getTeamTasks",
        "description": "If you have already created a few tasks on [your dashboard](https://dashboard.browse.ai), you can use this endpoint to retrieve a list of them.\n  \nYou can then use other endpoints to retrieve more information about your tasks or run tasks.\n",
        "parameters": [
          {
            "in": "path",
            "name": "teamId",
            "schema": {
              "type": "string"
            },
            "required": true,
            "description": "Team ID.\n  \nEven single-user personal accounts have a team ID. Feel free to [ask us](/support) if you do not know your ID.\n"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "C#",
            "label": "C#",
            "source": "var client = new RestClient(\"https://api.browse.ai/v1/teams/{teamId}/tasks/\");\nvar request = new RestRequest(Method.GET);\nrequest.AddHeader(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\");\nIRestResponse response = client.Execute(request);\n"
          },
          {
            "lang": "Go",
            "label": "Go",
            "source": "package main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"io/ioutil\"\n)\n\nfunc main() {\n\n\turl := \"https://api.browse.ai/v1/teams/{teamId}/tasks/\"\n\n\treq, _ := http.NewRequest(\"GET\", url, nil)\n\n\treq.Header.Add(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\")\n\n\tres, _ := http.DefaultClient.Do(req)\n\n\tdefer res.Body.Close()\n\tbody, _ := ioutil.ReadAll(res.Body)\n\n\tfmt.Println(res)\n\tfmt.Println(string(body))\n\n}\n"
          },
          {
            "lang": "Java",
            "label": "Java",
            "source": "HttpResponse<String> response = Unirest.get(\"https://api.browse.ai/v1/teams/{teamId}/tasks/\")\n  .header(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\")\n  .asString();\n"
          },
          {
            "lang": "Node",
            "label": "Node (Native)",
            "source": "const http = require(\"https\");\n\nconst options = {\n  \"method\": \"GET\",\n  \"hostname\": \"api.browse.ai\",\n  \"port\": null,\n  \"path\": \"/v1/teams/{teamId}/tasks/\",\n  \"headers\": {\n    \"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on(\"data\", function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on(\"end\", function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();\n"
          },
          {
            "lang": "Node",
            "label": "Node (request)",
            "source": "const request = require('request');\n\nconst options = {\n  method: 'GET',\n  url: 'https://api.browse.ai/v1/teams/{teamId}/tasks/',\n  headers: {Authorization: 'Bearer YOUR_SECRET_API_KEY'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"
          },
          {
            "lang": "Objective-C",
            "label": "Objective-C",
            "source": "#import <Foundation/Foundation.h>\n\nNSDictionary *headers = @{ @\"Authorization\": @\"Bearer YOUR_SECRET_API_KEY\" };\n\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@\"https://api.browse.ai/v1/teams/{teamId}/tasks/\"]\n                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy\n                                                   timeoutInterval:10.0];\n[request setHTTPMethod:@\"GET\"];\n[request setAllHTTPHeaderFields:headers];\n\nNSURLSession *session = [NSURLSession sharedSession];\nNSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request\n                                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n                                                if (error) {\n                                                    NSLog(@\"%@\", error);\n                                                } else {\n                                                    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;\n                                                    NSLog(@\"%@\", httpResponse);\n                                                }\n                                            }];\n[dataTask resume];\n"
          },
          {
            "lang": "PHP",
            "label": "PHP",
            "source": "<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.browse.ai/v1/teams/{teamId}/tasks/\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Bearer YOUR_SECRET_API_KEY\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}\n"
          },
          {
            "lang": "Python",
            "label": "Python (python3)",
            "source": "import http.client\n\nconn = http.client.HTTPSConnection(\"api.browse.ai\")\n\nheaders = { 'Authorization': \"Bearer YOUR_SECRET_API_KEY\" }\n\nconn.request(\"GET\", \"/v1/teams/{teamId}/tasks/\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))\n"
          },
          {
            "lang": "Python",
            "label": "Python (requests)",
            "source": "import requests\n\nurl = \"https://api.browse.ai/v1/teams/{teamId}/tasks/\"\n\nheaders = {\"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"}\n\nresponse = requests.request(\"GET\", url, headers=headers)\n\nprint(response.text)\n"
          },
          {
            "lang": "Ruby",
            "label": "Ruby",
            "source": "require 'uri'\nrequire 'net/http'\nrequire 'openssl'\n\nurl = URI(\"https://api.browse.ai/v1/teams/{teamId}/tasks/\")\n\nhttp = Net::HTTP.new(url.host, url.port)\nhttp.use_ssl = true\nhttp.verify_mode = OpenSSL::SSL::VERIFY_NONE\n\nrequest = Net::HTTP::Get.new(url)\nrequest[\"Authorization\"] = 'Bearer YOUR_SECRET_API_KEY'\n\nresponse = http.request(request)\nputs response.read_body\n"
          },
          {
            "lang": "Shell",
            "label": "Shell (cURL)",
            "source": "curl --request GET \\\n  --url https://api.browse.ai/v1/teams/{teamId}/tasks/ \\\n  --header 'Authorization: Bearer YOUR_SECRET_API_KEY'\n"
          },
          {
            "lang": "Shell",
            "label": "Shell (wget)",
            "source": "wget --quiet \\\n  --method GET \\\n  --header 'Authorization: Bearer YOUR_SECRET_API_KEY' \\\n  --output-document \\\n  - https://api.browse.ai/v1/teams/{teamId}/tasks/\n"
          },
          {
            "lang": "Swift",
            "label": "Swift",
            "source": "import Foundation\n\nlet headers = [\"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"]\n\nlet request = NSMutableURLRequest(url: NSURL(string: \"https://api.browse.ai/v1/teams/{teamId}/tasks/\")! as URL,\n                                        cachePolicy: .useProtocolCachePolicy,\n                                    timeoutInterval: 10.0)\nrequest.httpMethod = \"GET\"\nrequest.allHTTPHeaderFields = headers\n\nlet session = URLSession.shared\nlet dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in\n  if (error != nil) {\n    print(error)\n  } else {\n    let httpResponse = response as? HTTPURLResponse\n    print(httpResponse)\n  }\n})\n\ndataTask.resume()\n"
          }
        ],
        "responses": {
          "200": {
            "description": "A JSON containing the total number of tasks and an array of tasks under this team.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getTeamTasks-200"
                }
              }
            }
          },
          "400": {
            "description": "A JSON containing an error code and message.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getTeamTasks-400"
                }
              }
            }
          },
          "401": {
            "description": "A JSON containing an error code and message.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getTeamTasks-401"
                }
              }
            }
          }
        }
      }
    },
    "/tasks/{taskId}/jobs": {
      "post": {
        "tags": [
          "executions"
        ],
        "summary": "Run a task",
        "operationId": "newTaskJob",
        "description": "Run a task on-demand with custom variable inputs.\n\nWhen you need to run a task and get its captured data, you can use this endpoint to run  the task, and then use webhooks to receive the captured data as soon as the execution is finished.  Alternatively, you can poll the GET endpoint to retrieve an execution's details as soon as it is finished.\n",
        "parameters": [
          {
            "in": "path",
            "name": "taskId",
            "schema": {
              "type": "string"
            },
            "required": true,
            "description": "Unique task ID\n\nYou can find a task's ID by opening it on the dashboard and copying its ID in the browser address bar.\n"
          },
          {
            "in": "query",
            "name": "waitForJob",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "required": false,
            "deprecated": true,
            "description": "~Set this to `false` if you want to receive the execution ID and other details immediately, as soon as the task starts running.~\n\n~Set it to `true` if you want to wait for the running task to finish and then receive a response containing captured data.  Please note that if the execution lasts longer than 20 seconds, this endpoint will respond with the pending execution's details. In that case,  you will need to poll the GET endpoint or use webhooks to retrieve the captured data once execution is finished.~\n\nThis option has been fully deprecated. Its value is always assumed `false`. You should use webhooks or polling to retrieve a task execution's results.\n"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "C#",
            "label": "C#",
            "source": "var client = new RestClient(\"https://api.browse.ai/v1/tasks/{taskId}/jobs?waitForJob=false\");\nvar request = new RestRequest(Method.POST);\nrequest.AddHeader(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\");\nrequest.AddParameter(\"undefined\", \"{\\\"variables\\\":{\\\"originUrl\\\":\\\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\\\"}}\", ParameterType.RequestBody);\nIRestResponse response = client.Execute(request);\n"
          },
          {
            "lang": "Go",
            "label": "Go",
            "source": "package main\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"net/http\"\n\t\"io/ioutil\"\n)\n\nfunc main() {\n\n\turl := \"https://api.browse.ai/v1/tasks/{taskId}/jobs?waitForJob=false\"\n\n\tpayload := strings.NewReader(\"{\\\"variables\\\":{\\\"originUrl\\\":\\\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\\\"}}\")\n\n\treq, _ := http.NewRequest(\"POST\", url, payload)\n\n\treq.Header.Add(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\")\n\n\tres, _ := http.DefaultClient.Do(req)\n\n\tdefer res.Body.Close()\n\tbody, _ := ioutil.ReadAll(res.Body)\n\n\tfmt.Println(res)\n\tfmt.Println(string(body))\n\n}\n"
          },
          {
            "lang": "Java",
            "label": "Java",
            "source": "HttpResponse<String> response = Unirest.post(\"https://api.browse.ai/v1/tasks/{taskId}/jobs?waitForJob=false\")\n  .header(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\")\n  .body(\"{\\\"variables\\\":{\\\"originUrl\\\":\\\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\\\"}}\")\n  .asString();\n"
          },
          {
            "lang": "Node",
            "label": "Node (Native)",
            "source": "const http = require(\"https\");\n\nconst options = {\n  \"method\": \"POST\",\n  \"hostname\": \"api.browse.ai\",\n  \"port\": null,\n  \"path\": \"/v1/tasks/{taskId}/jobs?waitForJob=false\",\n  \"headers\": {\n    \"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on(\"data\", function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on(\"end\", function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  variables: {\n    originUrl: 'https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines'\n  }\n}));\nreq.end();\n"
          },
          {
            "lang": "Node",
            "label": "Node (request)",
            "source": "const request = require('request');\n\nconst options = {\n  method: 'POST',\n  url: 'https://api.browse.ai/v1/tasks/{taskId}/jobs',\n  qs: {waitForJob: 'false'},\n  headers: {Authorization: 'Bearer YOUR_SECRET_API_KEY'},\n  body: {\n    variables: {\n      originUrl: 'https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines'\n    }\n  },\n  json: true\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"
          },
          {
            "lang": "Objective-C",
            "label": "Objective-C",
            "source": "#import <Foundation/Foundation.h>\n\nNSDictionary *headers = @{ @\"Authorization\": @\"Bearer YOUR_SECRET_API_KEY\" };\nNSDictionary *parameters = @{ @\"variables\": @{ @\"originUrl\": @\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\" } };\n\nNSData *postData = [NSJSONSerialization dataWithJSONObject:parameters options:0 error:nil];\n\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@\"https://api.browse.ai/v1/tasks/{taskId}/jobs?waitForJob=false\"]\n                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy\n                                                   timeoutInterval:10.0];\n[request setHTTPMethod:@\"POST\"];\n[request setAllHTTPHeaderFields:headers];\n[request setHTTPBody:postData];\n\nNSURLSession *session = [NSURLSession sharedSession];\nNSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request\n                                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n                                                if (error) {\n                                                    NSLog(@\"%@\", error);\n                                                } else {\n                                                    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;\n                                                    NSLog(@\"%@\", httpResponse);\n                                                }\n                                            }];\n[dataTask resume];\n"
          },
          {
            "lang": "PHP",
            "label": "PHP",
            "source": "<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.browse.ai/v1/tasks/{taskId}/jobs?waitForJob=false\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"POST\",\n  CURLOPT_POSTFIELDS => \"{\\\"variables\\\":{\\\"originUrl\\\":\\\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\\\"}}\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Bearer YOUR_SECRET_API_KEY\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}\n"
          },
          {
            "lang": "Python",
            "label": "Python (python3)",
            "source": "import http.client\n\nconn = http.client.HTTPSConnection(\"api.browse.ai\")\n\npayload = \"{\\\"variables\\\":{\\\"originUrl\\\":\\\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\\\"}}\"\n\nheaders = { 'Authorization': \"Bearer YOUR_SECRET_API_KEY\" }\n\nconn.request(\"POST\", \"/v1/tasks/{taskId}/jobs?waitForJob=false\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))\n"
          },
          {
            "lang": "Python",
            "label": "Python (requests)",
            "source": "import requests\n\nurl = \"https://api.browse.ai/v1/tasks/{taskId}/jobs\"\n\nquerystring = {\"waitForJob\":\"false\"}\n\npayload = {\"variables\": {\"originUrl\": \"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\"}}\nheaders = {\"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"}\n\nresponse = requests.request(\"POST\", url, json=payload, headers=headers, params=querystring)\n\nprint(response.text)\n"
          },
          {
            "lang": "Ruby",
            "label": "Ruby",
            "source": "require 'uri'\nrequire 'net/http'\nrequire 'openssl'\n\nurl = URI(\"https://api.browse.ai/v1/tasks/{taskId}/jobs?waitForJob=false\")\n\nhttp = Net::HTTP.new(url.host, url.port)\nhttp.use_ssl = true\nhttp.verify_mode = OpenSSL::SSL::VERIFY_NONE\n\nrequest = Net::HTTP::Post.new(url)\nrequest[\"Authorization\"] = 'Bearer YOUR_SECRET_API_KEY'\nrequest.body = \"{\\\"variables\\\":{\\\"originUrl\\\":\\\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\\\"}}\"\n\nresponse = http.request(request)\nputs response.read_body\n"
          },
          {
            "lang": "Shell",
            "label": "Shell (cURL)",
            "source": "curl --request POST \\\n  --url 'https://api.browse.ai/v1/tasks/{taskId}/jobs?waitForJob=false' \\\n  --header 'Authorization: Bearer YOUR_SECRET_API_KEY' \\\n  --data '{\"variables\":{\"originUrl\":\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\"}}'\n"
          },
          {
            "lang": "Shell",
            "label": "Shell (wget)",
            "source": "wget --quiet \\\n  --method POST \\\n  --header 'Authorization: Bearer YOUR_SECRET_API_KEY' \\\n  --body-data '{\"variables\":{\"originUrl\":\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\"}}' \\\n  --output-document \\\n  - 'https://api.browse.ai/v1/tasks/{taskId}/jobs?waitForJob=false'\n"
          },
          {
            "lang": "Swift",
            "label": "Swift",
            "source": "import Foundation\n\nlet headers = [\"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"]\nlet parameters = [\"variables\": [\"originUrl\": \"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\"]] as [String : Any]\n\nlet postData = JSONSerialization.data(withJSONObject: parameters, options: [])\n\nlet request = NSMutableURLRequest(url: NSURL(string: \"https://api.browse.ai/v1/tasks/{taskId}/jobs?waitForJob=false\")! as URL,\n                                        cachePolicy: .useProtocolCachePolicy,\n                                    timeoutInterval: 10.0)\nrequest.httpMethod = \"POST\"\nrequest.allHTTPHeaderFields = headers\nrequest.httpBody = postData as Data\n\nlet session = URLSession.shared\nlet dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in\n  if (error != nil) {\n    print(error)\n  } else {\n    let httpResponse = response as? HTTPURLResponse\n    print(httpResponse)\n  }\n})\n\ndataTask.resume()\n"
          }
        ],
        "responses": {
          "200": {
            "description": "A JSON including tasks list.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/newTaskJob-200"
                }
              }
            }
          },
          "400": {
            "description": "A JSON containing error attributes. This will happen if any of the parameters are not valid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/newTaskJob-400"
                }
              }
            }
          },
          "401": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/newTaskJob-401"
                }
              }
            }
          },
          "404": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/newTaskJob-404"
                }
              }
            }
          },
          "500": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/newTaskJob-500"
                }
              }
            }
          },
          "503": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/newTaskJob-503"
                }
              }
            }
          }
        }
      }
    },
    "/tasks/{taskId}/jobs/{jobId}": {
      "get": {
        "tags": [
          "executions"
        ],
        "summary": "Retrieve a task execution",
        "operationId": "getTaskJob",
        "description": "Retrieve a task execution's details and captured data.",
        "parameters": [
          {
            "in": "path",
            "name": "taskId",
            "schema": {
              "type": "string"
            },
            "required": true,
            "description": "Unique task ID\n\nYou can find a task's ID by opening it on the dashboard and copying its ID in the browser address bar.\n"
          },
          {
            "in": "path",
            "name": "jobId",
            "schema": {
              "type": "string"
            },
            "required": true,
            "description": "Unique execution ID"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "C#",
            "label": "C#",
            "source": "var client = new RestClient(\"https://api.browse.ai/v1/tasks/{taskId}/jobs/{jobId}\");\nvar request = new RestRequest(Method.GET);\nrequest.AddHeader(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\");\nIRestResponse response = client.Execute(request);\n"
          },
          {
            "lang": "Go",
            "label": "Go",
            "source": "package main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"io/ioutil\"\n)\n\nfunc main() {\n\n\turl := \"https://api.browse.ai/v1/tasks/{taskId}/jobs/{jobId}\"\n\n\treq, _ := http.NewRequest(\"GET\", url, nil)\n\n\treq.Header.Add(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\")\n\n\tres, _ := http.DefaultClient.Do(req)\n\n\tdefer res.Body.Close()\n\tbody, _ := ioutil.ReadAll(res.Body)\n\n\tfmt.Println(res)\n\tfmt.Println(string(body))\n\n}\n"
          },
          {
            "lang": "Java",
            "label": "Java",
            "source": "HttpResponse<String> response = Unirest.get(\"https://api.browse.ai/v1/tasks/{taskId}/jobs/{jobId}\")\n  .header(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\")\n  .asString();\n"
          },
          {
            "lang": "Node",
            "label": "Node (Native)",
            "source": "const http = require(\"https\");\n\nconst options = {\n  \"method\": \"GET\",\n  \"hostname\": \"api.browse.ai\",\n  \"port\": null,\n  \"path\": \"/v1/tasks/{taskId}/jobs/{jobId}\",\n  \"headers\": {\n    \"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on(\"data\", function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on(\"end\", function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();\n"
          },
          {
            "lang": "Node",
            "label": "Node (request)",
            "source": "const request = require('request');\n\nconst options = {\n  method: 'GET',\n  url: 'https://api.browse.ai/v1/tasks/{taskId}/jobs/{jobId}',\n  headers: {Authorization: 'Bearer YOUR_SECRET_API_KEY'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"
          },
          {
            "lang": "Objective-C",
            "label": "Objective-C",
            "source": "#import <Foundation/Foundation.h>\n\nNSDictionary *headers = @{ @\"Authorization\": @\"Bearer YOUR_SECRET_API_KEY\" };\n\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@\"https://api.browse.ai/v1/tasks/{taskId}/jobs/{jobId}\"]\n                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy\n                                                   timeoutInterval:10.0];\n[request setHTTPMethod:@\"GET\"];\n[request setAllHTTPHeaderFields:headers];\n\nNSURLSession *session = [NSURLSession sharedSession];\nNSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request\n                                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n                                                if (error) {\n                                                    NSLog(@\"%@\", error);\n                                                } else {\n                                                    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;\n                                                    NSLog(@\"%@\", httpResponse);\n                                                }\n                                            }];\n[dataTask resume];\n"
          },
          {
            "lang": "PHP",
            "label": "PHP",
            "source": "<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.browse.ai/v1/tasks/{taskId}/jobs/{jobId}\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Bearer YOUR_SECRET_API_KEY\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}\n"
          },
          {
            "lang": "Python",
            "label": "Python (python3)",
            "source": "import http.client\n\nconn = http.client.HTTPSConnection(\"api.browse.ai\")\n\nheaders = { 'Authorization': \"Bearer YOUR_SECRET_API_KEY\" }\n\nconn.request(\"GET\", \"/v1/tasks/{taskId}/jobs/{jobId}\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))\n"
          },
          {
            "lang": "Python",
            "label": "Python (requests)",
            "source": "import requests\n\nurl = \"https://api.browse.ai/v1/tasks/{taskId}/jobs/{jobId}\"\n\nheaders = {\"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"}\n\nresponse = requests.request(\"GET\", url, headers=headers)\n\nprint(response.text)\n"
          },
          {
            "lang": "Ruby",
            "label": "Ruby",
            "source": "require 'uri'\nrequire 'net/http'\nrequire 'openssl'\n\nurl = URI(\"https://api.browse.ai/v1/tasks/{taskId}/jobs/{jobId}\")\n\nhttp = Net::HTTP.new(url.host, url.port)\nhttp.use_ssl = true\nhttp.verify_mode = OpenSSL::SSL::VERIFY_NONE\n\nrequest = Net::HTTP::Get.new(url)\nrequest[\"Authorization\"] = 'Bearer YOUR_SECRET_API_KEY'\n\nresponse = http.request(request)\nputs response.read_body\n"
          },
          {
            "lang": "Shell",
            "label": "Shell (cURL)",
            "source": "curl --request GET \\\n  --url https://api.browse.ai/v1/tasks/{taskId}/jobs/{jobId} \\\n  --header 'Authorization: Bearer YOUR_SECRET_API_KEY'\n"
          },
          {
            "lang": "Shell",
            "label": "Shell (wget)",
            "source": "wget --quiet \\\n  --method GET \\\n  --header 'Authorization: Bearer YOUR_SECRET_API_KEY' \\\n  --output-document \\\n  - https://api.browse.ai/v1/tasks/{taskId}/jobs/{jobId}\n"
          },
          {
            "lang": "Swift",
            "label": "Swift",
            "source": "import Foundation\n\nlet headers = [\"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"]\n\nlet request = NSMutableURLRequest(url: NSURL(string: \"https://api.browse.ai/v1/tasks/{taskId}/jobs/{jobId}\")! as URL,\n                                        cachePolicy: .useProtocolCachePolicy,\n                                    timeoutInterval: 10.0)\nrequest.httpMethod = \"GET\"\nrequest.allHTTPHeaderFields = headers\n\nlet session = URLSession.shared\nlet dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in\n  if (error != nil) {\n    print(error)\n  } else {\n    let httpResponse = response as? HTTPURLResponse\n    print(httpResponse)\n  }\n})\n\ndataTask.resume()\n"
          }
        ],
        "responses": {
          "200": {
            "description": "A JSON including tasks list.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getTaskJob-200"
                }
              }
            }
          },
          "400": {
            "description": "A JSON containing error attributes. This will happen if any of the parameters are not valid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getTaskJob-400"
                }
              }
            }
          },
          "401": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getTaskJob-401"
                }
              }
            }
          },
          "404": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getTaskJob-404"
                }
              }
            }
          }
        }
      }
    },
    "/tasks/{taskId}/monitors": {
      "get": {
        "tags": [
          "monitors"
        ],
        "summary": "Retrieve a task's monitors",
        "operationId": "getMonitors",
        "description": "Retrieve a task's monitors list.",
        "parameters": [
          {
            "in": "path",
            "name": "taskId",
            "schema": {
              "type": "string"
            },
            "required": true,
            "description": "Unique task ID\n\nYou can find a task's ID by opening it on the dashboard and copying its ID in the browser address bar.\n"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "C#",
            "label": "C#",
            "source": "var client = new RestClient(\"https://api.browse.ai/v1/tasks/{taskId}/monitors\");\nvar request = new RestRequest(Method.GET);\nrequest.AddHeader(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\");\nIRestResponse response = client.Execute(request);\n"
          },
          {
            "lang": "Go",
            "label": "Go",
            "source": "package main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"io/ioutil\"\n)\n\nfunc main() {\n\n\turl := \"https://api.browse.ai/v1/tasks/{taskId}/monitors\"\n\n\treq, _ := http.NewRequest(\"GET\", url, nil)\n\n\treq.Header.Add(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\")\n\n\tres, _ := http.DefaultClient.Do(req)\n\n\tdefer res.Body.Close()\n\tbody, _ := ioutil.ReadAll(res.Body)\n\n\tfmt.Println(res)\n\tfmt.Println(string(body))\n\n}\n"
          },
          {
            "lang": "Java",
            "label": "Java",
            "source": "HttpResponse<String> response = Unirest.get(\"https://api.browse.ai/v1/tasks/{taskId}/monitors\")\n  .header(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\")\n  .asString();\n"
          },
          {
            "lang": "Node",
            "label": "Node (Native)",
            "source": "const http = require(\"https\");\n\nconst options = {\n  \"method\": \"GET\",\n  \"hostname\": \"api.browse.ai\",\n  \"port\": null,\n  \"path\": \"/v1/tasks/{taskId}/monitors\",\n  \"headers\": {\n    \"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on(\"data\", function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on(\"end\", function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();\n"
          },
          {
            "lang": "Node",
            "label": "Node (request)",
            "source": "const request = require('request');\n\nconst options = {\n  method: 'GET',\n  url: 'https://api.browse.ai/v1/tasks/{taskId}/monitors',\n  headers: {Authorization: 'Bearer YOUR_SECRET_API_KEY'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"
          },
          {
            "lang": "Objective-C",
            "label": "Objective-C",
            "source": "#import <Foundation/Foundation.h>\n\nNSDictionary *headers = @{ @\"Authorization\": @\"Bearer YOUR_SECRET_API_KEY\" };\n\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@\"https://api.browse.ai/v1/tasks/{taskId}/monitors\"]\n                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy\n                                                   timeoutInterval:10.0];\n[request setHTTPMethod:@\"GET\"];\n[request setAllHTTPHeaderFields:headers];\n\nNSURLSession *session = [NSURLSession sharedSession];\nNSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request\n                                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n                                                if (error) {\n                                                    NSLog(@\"%@\", error);\n                                                } else {\n                                                    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;\n                                                    NSLog(@\"%@\", httpResponse);\n                                                }\n                                            }];\n[dataTask resume];\n"
          },
          {
            "lang": "PHP",
            "label": "PHP",
            "source": "<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.browse.ai/v1/tasks/{taskId}/monitors\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Bearer YOUR_SECRET_API_KEY\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}\n"
          },
          {
            "lang": "Python",
            "label": "Python (python3)",
            "source": "import http.client\n\nconn = http.client.HTTPSConnection(\"api.browse.ai\")\n\nheaders = { 'Authorization': \"Bearer YOUR_SECRET_API_KEY\" }\n\nconn.request(\"GET\", \"/v1/tasks/{taskId}/monitors\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))\n"
          },
          {
            "lang": "Python",
            "label": "Python (requests)",
            "source": "import requests\n\nurl = \"https://api.browse.ai/v1/tasks/{taskId}/monitors\"\n\nheaders = {\"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"}\n\nresponse = requests.request(\"GET\", url, headers=headers)\n\nprint(response.text)\n"
          },
          {
            "lang": "Ruby",
            "label": "Ruby",
            "source": "require 'uri'\nrequire 'net/http'\nrequire 'openssl'\n\nurl = URI(\"https://api.browse.ai/v1/tasks/{taskId}/monitors\")\n\nhttp = Net::HTTP.new(url.host, url.port)\nhttp.use_ssl = true\nhttp.verify_mode = OpenSSL::SSL::VERIFY_NONE\n\nrequest = Net::HTTP::Get.new(url)\nrequest[\"Authorization\"] = 'Bearer YOUR_SECRET_API_KEY'\n\nresponse = http.request(request)\nputs response.read_body\n"
          },
          {
            "lang": "Shell",
            "label": "Shell (cURL)",
            "source": "curl --request GET \\\n  --url https://api.browse.ai/v1/tasks/{taskId}/monitors \\\n  --header 'Authorization: Bearer YOUR_SECRET_API_KEY'\n"
          },
          {
            "lang": "Shell",
            "label": "Shell (wget)",
            "source": "wget --quiet \\\n  --method GET \\\n  --header 'Authorization: Bearer YOUR_SECRET_API_KEY' \\\n  --output-document \\\n  - https://api.browse.ai/v1/tasks/{taskId}/monitors\n"
          },
          {
            "lang": "Swift",
            "label": "Swift",
            "source": "import Foundation\n\nlet headers = [\"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"]\n\nlet request = NSMutableURLRequest(url: NSURL(string: \"https://api.browse.ai/v1/tasks/{taskId}/monitors\")! as URL,\n                                        cachePolicy: .useProtocolCachePolicy,\n                                    timeoutInterval: 10.0)\nrequest.httpMethod = \"GET\"\nrequest.allHTTPHeaderFields = headers\n\nlet session = URLSession.shared\nlet dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in\n  if (error != nil) {\n    print(error)\n  } else {\n    let httpResponse = response as? HTTPURLResponse\n    print(httpResponse)\n  }\n})\n\ndataTask.resume()\n"
          }
        ],
        "responses": {
          "200": {
            "description": "A JSON including monitors list.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getMonitors-200"
                }
              }
            }
          },
          "400": {
            "description": "A JSON containing error attributes. This will happen if any of the parameters are not valid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getMonitors-400"
                }
              }
            }
          },
          "401": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getMonitors-401"
                }
              }
            }
          },
          "404": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getMonitors-404"
                }
              }
            }
          },
          "500": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getMonitors-500"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "monitors"
        ],
        "summary": "Create a new monitor on a task",
        "operationId": "createNewMonitor",
        "description": "Create a new monitor on a task.",
        "parameters": [
          {
            "in": "path",
            "name": "taskId",
            "schema": {
              "type": "string"
            },
            "required": true,
            "description": "Unique task ID\n\nYou can find a task's ID by opening it on the dashboard and copying its ID in the browser address bar.\n"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MonitorBodyParams"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "C#",
            "label": "C#",
            "source": "var client = new RestClient(\"https://api.browse.ai/v1/tasks/{taskId}/monitors\");\nvar request = new RestRequest(Method.POST);\nrequest.AddHeader(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\");\nrequest.AddParameter(\"undefined\", \"{\\\"name\\\":\\\"Monitor products\\\",\\\"variables\\\":{\\\"originUrl\\\":\\\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\\\"},\\\"schedules\\\":[{\\\"type\\\":\\\"FIXED_INTERVAL\\\",\\\"everyMinutes\\\":60}],\\\"notifyOnCapturedScreenshotChange\\\":true,\\\"notifyOnCapturedTextChange\\\":true,\\\"capturedScreenshotNotificationThreshold\\\":15}\", ParameterType.RequestBody);\nIRestResponse response = client.Execute(request);\n"
          },
          {
            "lang": "Go",
            "label": "Go",
            "source": "package main\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"net/http\"\n\t\"io/ioutil\"\n)\n\nfunc main() {\n\n\turl := \"https://api.browse.ai/v1/tasks/{taskId}/monitors\"\n\n\tpayload := strings.NewReader(\"{\\\"name\\\":\\\"Monitor products\\\",\\\"variables\\\":{\\\"originUrl\\\":\\\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\\\"},\\\"schedules\\\":[{\\\"type\\\":\\\"FIXED_INTERVAL\\\",\\\"everyMinutes\\\":60}],\\\"notifyOnCapturedScreenshotChange\\\":true,\\\"notifyOnCapturedTextChange\\\":true,\\\"capturedScreenshotNotificationThreshold\\\":15}\")\n\n\treq, _ := http.NewRequest(\"POST\", url, payload)\n\n\treq.Header.Add(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\")\n\n\tres, _ := http.DefaultClient.Do(req)\n\n\tdefer res.Body.Close()\n\tbody, _ := ioutil.ReadAll(res.Body)\n\n\tfmt.Println(res)\n\tfmt.Println(string(body))\n\n}\n"
          },
          {
            "lang": "Java",
            "label": "Java",
            "source": "HttpResponse<String> response = Unirest.post(\"https://api.browse.ai/v1/tasks/{taskId}/monitors\")\n  .header(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\")\n  .body(\"{\\\"name\\\":\\\"Monitor products\\\",\\\"variables\\\":{\\\"originUrl\\\":\\\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\\\"},\\\"schedules\\\":[{\\\"type\\\":\\\"FIXED_INTERVAL\\\",\\\"everyMinutes\\\":60}],\\\"notifyOnCapturedScreenshotChange\\\":true,\\\"notifyOnCapturedTextChange\\\":true,\\\"capturedScreenshotNotificationThreshold\\\":15}\")\n  .asString();\n"
          },
          {
            "lang": "Node",
            "label": "Node (Native)",
            "source": "const http = require(\"https\");\n\nconst options = {\n  \"method\": \"POST\",\n  \"hostname\": \"api.browse.ai\",\n  \"port\": null,\n  \"path\": \"/v1/tasks/{taskId}/monitors\",\n  \"headers\": {\n    \"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on(\"data\", function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on(\"end\", function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  name: 'Monitor products',\n  variables: {\n    originUrl: 'https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines'\n  },\n  schedules: [{type: 'FIXED_INTERVAL', everyMinutes: 60}],\n  notifyOnCapturedScreenshotChange: true,\n  notifyOnCapturedTextChange: true,\n  capturedScreenshotNotificationThreshold: 15\n}));\nreq.end();\n"
          },
          {
            "lang": "Node",
            "label": "Node (request)",
            "source": "const request = require('request');\n\nconst options = {\n  method: 'POST',\n  url: 'https://api.browse.ai/v1/tasks/{taskId}/monitors',\n  headers: {Authorization: 'Bearer YOUR_SECRET_API_KEY'},\n  body: {\n    name: 'Monitor products',\n    variables: {\n      originUrl: 'https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines'\n    },\n    schedules: [{type: 'FIXED_INTERVAL', everyMinutes: 60}],\n    notifyOnCapturedScreenshotChange: true,\n    notifyOnCapturedTextChange: true,\n    capturedScreenshotNotificationThreshold: 15\n  },\n  json: true\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"
          },
          {
            "lang": "Objective-C",
            "label": "Objective-C",
            "source": "#import <Foundation/Foundation.h>\n\nNSDictionary *headers = @{ @\"Authorization\": @\"Bearer YOUR_SECRET_API_KEY\" };\nNSDictionary *parameters = @{ @\"name\": @\"Monitor products\",\n                              @\"variables\": @{ @\"originUrl\": @\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\" },\n                              @\"schedules\": @[ @{ @\"type\": @\"FIXED_INTERVAL\", @\"everyMinutes\": @60 } ],\n                              @\"notifyOnCapturedScreenshotChange\": @YES,\n                              @\"notifyOnCapturedTextChange\": @YES,\n                              @\"capturedScreenshotNotificationThreshold\": @15 };\n\nNSData *postData = [NSJSONSerialization dataWithJSONObject:parameters options:0 error:nil];\n\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@\"https://api.browse.ai/v1/tasks/{taskId}/monitors\"]\n                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy\n                                                   timeoutInterval:10.0];\n[request setHTTPMethod:@\"POST\"];\n[request setAllHTTPHeaderFields:headers];\n[request setHTTPBody:postData];\n\nNSURLSession *session = [NSURLSession sharedSession];\nNSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request\n                                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n                                                if (error) {\n                                                    NSLog(@\"%@\", error);\n                                                } else {\n                                                    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;\n                                                    NSLog(@\"%@\", httpResponse);\n                                                }\n                                            }];\n[dataTask resume];\n"
          },
          {
            "lang": "PHP",
            "label": "PHP",
            "source": "<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.browse.ai/v1/tasks/{taskId}/monitors\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"POST\",\n  CURLOPT_POSTFIELDS => \"{\\\"name\\\":\\\"Monitor products\\\",\\\"variables\\\":{\\\"originUrl\\\":\\\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\\\"},\\\"schedules\\\":[{\\\"type\\\":\\\"FIXED_INTERVAL\\\",\\\"everyMinutes\\\":60}],\\\"notifyOnCapturedScreenshotChange\\\":true,\\\"notifyOnCapturedTextChange\\\":true,\\\"capturedScreenshotNotificationThreshold\\\":15}\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Bearer YOUR_SECRET_API_KEY\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}\n"
          },
          {
            "lang": "Python",
            "label": "Python (python3)",
            "source": "import http.client\n\nconn = http.client.HTTPSConnection(\"api.browse.ai\")\n\npayload = \"{\\\"name\\\":\\\"Monitor products\\\",\\\"variables\\\":{\\\"originUrl\\\":\\\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\\\"},\\\"schedules\\\":[{\\\"type\\\":\\\"FIXED_INTERVAL\\\",\\\"everyMinutes\\\":60}],\\\"notifyOnCapturedScreenshotChange\\\":true,\\\"notifyOnCapturedTextChange\\\":true,\\\"capturedScreenshotNotificationThreshold\\\":15}\"\n\nheaders = { 'Authorization': \"Bearer YOUR_SECRET_API_KEY\" }\n\nconn.request(\"POST\", \"/v1/tasks/{taskId}/monitors\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))\n"
          },
          {
            "lang": "Python",
            "label": "Python (requests)",
            "source": "import requests\n\nurl = \"https://api.browse.ai/v1/tasks/{taskId}/monitors\"\n\npayload = {\n    \"name\": \"Monitor products\",\n    \"variables\": {\"originUrl\": \"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\"},\n    \"schedules\": [\n        {\n            \"type\": \"FIXED_INTERVAL\",\n            \"everyMinutes\": 60\n        }\n    ],\n    \"notifyOnCapturedScreenshotChange\": True,\n    \"notifyOnCapturedTextChange\": True,\n    \"capturedScreenshotNotificationThreshold\": 15\n}\nheaders = {\"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"}\n\nresponse = requests.request(\"POST\", url, json=payload, headers=headers)\n\nprint(response.text)\n"
          },
          {
            "lang": "Ruby",
            "label": "Ruby",
            "source": "require 'uri'\nrequire 'net/http'\nrequire 'openssl'\n\nurl = URI(\"https://api.browse.ai/v1/tasks/{taskId}/monitors\")\n\nhttp = Net::HTTP.new(url.host, url.port)\nhttp.use_ssl = true\nhttp.verify_mode = OpenSSL::SSL::VERIFY_NONE\n\nrequest = Net::HTTP::Post.new(url)\nrequest[\"Authorization\"] = 'Bearer YOUR_SECRET_API_KEY'\nrequest.body = \"{\\\"name\\\":\\\"Monitor products\\\",\\\"variables\\\":{\\\"originUrl\\\":\\\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\\\"},\\\"schedules\\\":[{\\\"type\\\":\\\"FIXED_INTERVAL\\\",\\\"everyMinutes\\\":60}],\\\"notifyOnCapturedScreenshotChange\\\":true,\\\"notifyOnCapturedTextChange\\\":true,\\\"capturedScreenshotNotificationThreshold\\\":15}\"\n\nresponse = http.request(request)\nputs response.read_body\n"
          },
          {
            "lang": "Shell",
            "label": "Shell (cURL)",
            "source": "curl --request POST \\\n  --url https://api.browse.ai/v1/tasks/{taskId}/monitors \\\n  --header 'Authorization: Bearer YOUR_SECRET_API_KEY' \\\n  --data '{\"name\":\"Monitor products\",\"variables\":{\"originUrl\":\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\"},\"schedules\":[{\"type\":\"FIXED_INTERVAL\",\"everyMinutes\":60}],\"notifyOnCapturedScreenshotChange\":true,\"notifyOnCapturedTextChange\":true,\"capturedScreenshotNotificationThreshold\":15}'\n"
          },
          {
            "lang": "Shell",
            "label": "Shell (wget)",
            "source": "wget --quiet \\\n  --method POST \\\n  --header 'Authorization: Bearer YOUR_SECRET_API_KEY' \\\n  --body-data '{\"name\":\"Monitor products\",\"variables\":{\"originUrl\":\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\"},\"schedules\":[{\"type\":\"FIXED_INTERVAL\",\"everyMinutes\":60}],\"notifyOnCapturedScreenshotChange\":true,\"notifyOnCapturedTextChange\":true,\"capturedScreenshotNotificationThreshold\":15}' \\\n  --output-document \\\n  - https://api.browse.ai/v1/tasks/{taskId}/monitors\n"
          },
          {
            "lang": "Swift",
            "label": "Swift",
            "source": "import Foundation\n\nlet headers = [\"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"]\nlet parameters = [\n  \"name\": \"Monitor products\",\n  \"variables\": [\"originUrl\": \"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\"],\n  \"schedules\": [\n    [\n      \"type\": \"FIXED_INTERVAL\",\n      \"everyMinutes\": 60\n    ]\n  ],\n  \"notifyOnCapturedScreenshotChange\": true,\n  \"notifyOnCapturedTextChange\": true,\n  \"capturedScreenshotNotificationThreshold\": 15\n] as [String : Any]\n\nlet postData = JSONSerialization.data(withJSONObject: parameters, options: [])\n\nlet request = NSMutableURLRequest(url: NSURL(string: \"https://api.browse.ai/v1/tasks/{taskId}/monitors\")! as URL,\n                                        cachePolicy: .useProtocolCachePolicy,\n                                    timeoutInterval: 10.0)\nrequest.httpMethod = \"POST\"\nrequest.allHTTPHeaderFields = headers\nrequest.httpBody = postData as Data\n\nlet session = URLSession.shared\nlet dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in\n  if (error != nil) {\n    print(error)\n  } else {\n    let httpResponse = response as? HTTPURLResponse\n    print(httpResponse)\n  }\n})\n\ndataTask.resume()\n"
          }
        ],
        "responses": {
          "200": {
            "description": "A JSON object containing the newly created monitor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/createNewMonitor-200"
                }
              }
            }
          },
          "400": {
            "description": "A JSON containing error attributes. This will happen if any of the parameters are not valid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/createNewMonitor-400"
                }
              }
            }
          },
          "401": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/createNewMonitor-401"
                }
              }
            }
          },
          "403": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/createNewMonitor-403"
                }
              }
            }
          },
          "404": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/createNewMonitor-404"
                }
              }
            }
          },
          "500": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/createNewMonitor-500"
                }
              }
            }
          }
        }
      }
    },
    "/tasks/{taskId}/monitors/{monitorId}": {
      "get": {
        "tags": [
          "monitors"
        ],
        "summary": "Retrieve a task's monitor",
        "operationId": "getMonitor",
        "description": "Retrieve a task's monitor.",
        "parameters": [
          {
            "in": "path",
            "name": "taskId",
            "schema": {
              "type": "string"
            },
            "required": true,
            "description": "Unique task ID\n\nYou can find a task's ID by opening it on the dashboard and copying its ID in the browser address bar.\n"
          },
          {
            "in": "path",
            "name": "monitorId",
            "schema": {
              "type": "string"
            },
            "required": true,
            "description": "Unique monitor ID\n\nYou can find a monitor's ID by opening it on the dashboard and copying its ID in the browser address bar.\n"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "C#",
            "label": "C#",
            "source": "var client = new RestClient(\"https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\");\nvar request = new RestRequest(Method.GET);\nrequest.AddHeader(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\");\nIRestResponse response = client.Execute(request);\n"
          },
          {
            "lang": "Go",
            "label": "Go",
            "source": "package main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"io/ioutil\"\n)\n\nfunc main() {\n\n\turl := \"https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\"\n\n\treq, _ := http.NewRequest(\"GET\", url, nil)\n\n\treq.Header.Add(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\")\n\n\tres, _ := http.DefaultClient.Do(req)\n\n\tdefer res.Body.Close()\n\tbody, _ := ioutil.ReadAll(res.Body)\n\n\tfmt.Println(res)\n\tfmt.Println(string(body))\n\n}\n"
          },
          {
            "lang": "Java",
            "label": "Java",
            "source": "HttpResponse<String> response = Unirest.get(\"https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\")\n  .header(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\")\n  .asString();\n"
          },
          {
            "lang": "Node",
            "label": "Node (Native)",
            "source": "const http = require(\"https\");\n\nconst options = {\n  \"method\": \"GET\",\n  \"hostname\": \"api.browse.ai\",\n  \"port\": null,\n  \"path\": \"/v1/tasks/{taskId}/monitors/{monitorId}\",\n  \"headers\": {\n    \"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on(\"data\", function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on(\"end\", function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();\n"
          },
          {
            "lang": "Node",
            "label": "Node (request)",
            "source": "const request = require('request');\n\nconst options = {\n  method: 'GET',\n  url: 'https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}',\n  headers: {Authorization: 'Bearer YOUR_SECRET_API_KEY'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"
          },
          {
            "lang": "Objective-C",
            "label": "Objective-C",
            "source": "#import <Foundation/Foundation.h>\n\nNSDictionary *headers = @{ @\"Authorization\": @\"Bearer YOUR_SECRET_API_KEY\" };\n\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@\"https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\"]\n                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy\n                                                   timeoutInterval:10.0];\n[request setHTTPMethod:@\"GET\"];\n[request setAllHTTPHeaderFields:headers];\n\nNSURLSession *session = [NSURLSession sharedSession];\nNSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request\n                                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n                                                if (error) {\n                                                    NSLog(@\"%@\", error);\n                                                } else {\n                                                    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;\n                                                    NSLog(@\"%@\", httpResponse);\n                                                }\n                                            }];\n[dataTask resume];\n"
          },
          {
            "lang": "PHP",
            "label": "PHP",
            "source": "<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Bearer YOUR_SECRET_API_KEY\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}\n"
          },
          {
            "lang": "Python",
            "label": "Python (python3)",
            "source": "import http.client\n\nconn = http.client.HTTPSConnection(\"api.browse.ai\")\n\nheaders = { 'Authorization': \"Bearer YOUR_SECRET_API_KEY\" }\n\nconn.request(\"GET\", \"/v1/tasks/{taskId}/monitors/{monitorId}\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))\n"
          },
          {
            "lang": "Python",
            "label": "Python (requests)",
            "source": "import requests\n\nurl = \"https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\"\n\nheaders = {\"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"}\n\nresponse = requests.request(\"GET\", url, headers=headers)\n\nprint(response.text)\n"
          },
          {
            "lang": "Ruby",
            "label": "Ruby",
            "source": "require 'uri'\nrequire 'net/http'\nrequire 'openssl'\n\nurl = URI(\"https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\")\n\nhttp = Net::HTTP.new(url.host, url.port)\nhttp.use_ssl = true\nhttp.verify_mode = OpenSSL::SSL::VERIFY_NONE\n\nrequest = Net::HTTP::Get.new(url)\nrequest[\"Authorization\"] = 'Bearer YOUR_SECRET_API_KEY'\n\nresponse = http.request(request)\nputs response.read_body\n"
          },
          {
            "lang": "Shell",
            "label": "Shell (cURL)",
            "source": "curl --request GET \\\n  --url https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId} \\\n  --header 'Authorization: Bearer YOUR_SECRET_API_KEY'\n"
          },
          {
            "lang": "Shell",
            "label": "Shell (wget)",
            "source": "wget --quiet \\\n  --method GET \\\n  --header 'Authorization: Bearer YOUR_SECRET_API_KEY' \\\n  --output-document \\\n  - https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\n"
          },
          {
            "lang": "Swift",
            "label": "Swift",
            "source": "import Foundation\n\nlet headers = [\"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"]\n\nlet request = NSMutableURLRequest(url: NSURL(string: \"https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\")! as URL,\n                                        cachePolicy: .useProtocolCachePolicy,\n                                    timeoutInterval: 10.0)\nrequest.httpMethod = \"GET\"\nrequest.allHTTPHeaderFields = headers\n\nlet session = URLSession.shared\nlet dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in\n  if (error != nil) {\n    print(error)\n  } else {\n    let httpResponse = response as? HTTPURLResponse\n    print(httpResponse)\n  }\n})\n\ndataTask.resume()\n"
          }
        ],
        "responses": {
          "200": {
            "description": "A JSON object containing the monitor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getMonitor-200"
                }
              }
            }
          },
          "400": {
            "description": "A JSON containing error attributes. This will happen if any of the parameters are not valid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getMonitor-400"
                }
              }
            }
          },
          "401": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getMonitor-401"
                }
              }
            }
          },
          "404": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getMonitor-404"
                }
              }
            }
          },
          "500": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getMonitor-500"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "monitors"
        ],
        "summary": "Update a task monitor",
        "operationId": "updateMonitor",
        "description": "Update a task monitor",
        "parameters": [
          {
            "in": "path",
            "name": "taskId",
            "schema": {
              "type": "string"
            },
            "required": true,
            "description": "Unique task ID\n\nYou can find a task's ID by opening it on the dashboard and copying its ID in the browser address bar.\n"
          },
          {
            "in": "path",
            "name": "monitorId",
            "schema": {
              "type": "string"
            },
            "required": true,
            "description": "Unique monitor ID\n\nYou can find a monitor's ID by opening it on the dashboard and copying its ID in the browser address bar.\n"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MonitorUpdateBodyParams"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "C#",
            "label": "C#",
            "source": "var client = new RestClient(\"https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\");\nvar request = new RestRequest(Method.PATCH);\nrequest.AddHeader(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\");\nrequest.AddParameter(\"undefined\", \"{\\\"name\\\":\\\"Monitor products\\\",\\\"variables\\\":{\\\"originUrl\\\":\\\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\\\"},\\\"schedules\\\":[{\\\"type\\\":\\\"FIXED_INTERVAL\\\",\\\"everyMinutes\\\":65}],\\\"notifyOnCapturedScreenshotChange\\\":false,\\\"notifyOnCapturedTextChange\\\":true,\\\"capturedScreenshotNotificationThreshold\\\":16}\", ParameterType.RequestBody);\nIRestResponse response = client.Execute(request);\n"
          },
          {
            "lang": "Go",
            "label": "Go",
            "source": "package main\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"net/http\"\n\t\"io/ioutil\"\n)\n\nfunc main() {\n\n\turl := \"https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\"\n\n\tpayload := strings.NewReader(\"{\\\"name\\\":\\\"Monitor products\\\",\\\"variables\\\":{\\\"originUrl\\\":\\\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\\\"},\\\"schedules\\\":[{\\\"type\\\":\\\"FIXED_INTERVAL\\\",\\\"everyMinutes\\\":65}],\\\"notifyOnCapturedScreenshotChange\\\":false,\\\"notifyOnCapturedTextChange\\\":true,\\\"capturedScreenshotNotificationThreshold\\\":16}\")\n\n\treq, _ := http.NewRequest(\"PATCH\", url, payload)\n\n\treq.Header.Add(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\")\n\n\tres, _ := http.DefaultClient.Do(req)\n\n\tdefer res.Body.Close()\n\tbody, _ := ioutil.ReadAll(res.Body)\n\n\tfmt.Println(res)\n\tfmt.Println(string(body))\n\n}\n"
          },
          {
            "lang": "Java",
            "label": "Java",
            "source": "HttpResponse<String> response = Unirest.patch(\"https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\")\n  .header(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\")\n  .body(\"{\\\"name\\\":\\\"Monitor products\\\",\\\"variables\\\":{\\\"originUrl\\\":\\\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\\\"},\\\"schedules\\\":[{\\\"type\\\":\\\"FIXED_INTERVAL\\\",\\\"everyMinutes\\\":65}],\\\"notifyOnCapturedScreenshotChange\\\":false,\\\"notifyOnCapturedTextChange\\\":true,\\\"capturedScreenshotNotificationThreshold\\\":16}\")\n  .asString();\n"
          },
          {
            "lang": "Node",
            "label": "Node (Native)",
            "source": "const http = require(\"https\");\n\nconst options = {\n  \"method\": \"PATCH\",\n  \"hostname\": \"api.browse.ai\",\n  \"port\": null,\n  \"path\": \"/v1/tasks/{taskId}/monitors/{monitorId}\",\n  \"headers\": {\n    \"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on(\"data\", function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on(\"end\", function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  name: 'Monitor products',\n  variables: {\n    originUrl: 'https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines'\n  },\n  schedules: [{type: 'FIXED_INTERVAL', everyMinutes: 65}],\n  notifyOnCapturedScreenshotChange: false,\n  notifyOnCapturedTextChange: true,\n  capturedScreenshotNotificationThreshold: 16\n}));\nreq.end();\n"
          },
          {
            "lang": "Node",
            "label": "Node (request)",
            "source": "const request = require('request');\n\nconst options = {\n  method: 'PATCH',\n  url: 'https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}',\n  headers: {Authorization: 'Bearer YOUR_SECRET_API_KEY'},\n  body: {\n    name: 'Monitor products',\n    variables: {\n      originUrl: 'https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines'\n    },\n    schedules: [{type: 'FIXED_INTERVAL', everyMinutes: 65}],\n    notifyOnCapturedScreenshotChange: false,\n    notifyOnCapturedTextChange: true,\n    capturedScreenshotNotificationThreshold: 16\n  },\n  json: true\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"
          },
          {
            "lang": "Objective-C",
            "label": "Objective-C",
            "source": "#import <Foundation/Foundation.h>\n\nNSDictionary *headers = @{ @\"Authorization\": @\"Bearer YOUR_SECRET_API_KEY\" };\nNSDictionary *parameters = @{ @\"name\": @\"Monitor products\",\n                              @\"variables\": @{ @\"originUrl\": @\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\" },\n                              @\"schedules\": @[ @{ @\"type\": @\"FIXED_INTERVAL\", @\"everyMinutes\": @65 } ],\n                              @\"notifyOnCapturedScreenshotChange\": @NO,\n                              @\"notifyOnCapturedTextChange\": @YES,\n                              @\"capturedScreenshotNotificationThreshold\": @16 };\n\nNSData *postData = [NSJSONSerialization dataWithJSONObject:parameters options:0 error:nil];\n\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@\"https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\"]\n                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy\n                                                   timeoutInterval:10.0];\n[request setHTTPMethod:@\"PATCH\"];\n[request setAllHTTPHeaderFields:headers];\n[request setHTTPBody:postData];\n\nNSURLSession *session = [NSURLSession sharedSession];\nNSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request\n                                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n                                                if (error) {\n                                                    NSLog(@\"%@\", error);\n                                                } else {\n                                                    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;\n                                                    NSLog(@\"%@\", httpResponse);\n                                                }\n                                            }];\n[dataTask resume];\n"
          },
          {
            "lang": "PHP",
            "label": "PHP",
            "source": "<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"PATCH\",\n  CURLOPT_POSTFIELDS => \"{\\\"name\\\":\\\"Monitor products\\\",\\\"variables\\\":{\\\"originUrl\\\":\\\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\\\"},\\\"schedules\\\":[{\\\"type\\\":\\\"FIXED_INTERVAL\\\",\\\"everyMinutes\\\":65}],\\\"notifyOnCapturedScreenshotChange\\\":false,\\\"notifyOnCapturedTextChange\\\":true,\\\"capturedScreenshotNotificationThreshold\\\":16}\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Bearer YOUR_SECRET_API_KEY\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}\n"
          },
          {
            "lang": "Python",
            "label": "Python (python3)",
            "source": "import http.client\n\nconn = http.client.HTTPSConnection(\"api.browse.ai\")\n\npayload = \"{\\\"name\\\":\\\"Monitor products\\\",\\\"variables\\\":{\\\"originUrl\\\":\\\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\\\"},\\\"schedules\\\":[{\\\"type\\\":\\\"FIXED_INTERVAL\\\",\\\"everyMinutes\\\":65}],\\\"notifyOnCapturedScreenshotChange\\\":false,\\\"notifyOnCapturedTextChange\\\":true,\\\"capturedScreenshotNotificationThreshold\\\":16}\"\n\nheaders = { 'Authorization': \"Bearer YOUR_SECRET_API_KEY\" }\n\nconn.request(\"PATCH\", \"/v1/tasks/{taskId}/monitors/{monitorId}\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))\n"
          },
          {
            "lang": "Python",
            "label": "Python (requests)",
            "source": "import requests\n\nurl = \"https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\"\n\npayload = {\n    \"name\": \"Monitor products\",\n    \"variables\": {\"originUrl\": \"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\"},\n    \"schedules\": [\n        {\n            \"type\": \"FIXED_INTERVAL\",\n            \"everyMinutes\": 65\n        }\n    ],\n    \"notifyOnCapturedScreenshotChange\": False,\n    \"notifyOnCapturedTextChange\": True,\n    \"capturedScreenshotNotificationThreshold\": 16\n}\nheaders = {\"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"}\n\nresponse = requests.request(\"PATCH\", url, json=payload, headers=headers)\n\nprint(response.text)\n"
          },
          {
            "lang": "Ruby",
            "label": "Ruby",
            "source": "require 'uri'\nrequire 'net/http'\nrequire 'openssl'\n\nurl = URI(\"https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\")\n\nhttp = Net::HTTP.new(url.host, url.port)\nhttp.use_ssl = true\nhttp.verify_mode = OpenSSL::SSL::VERIFY_NONE\n\nrequest = Net::HTTP::Patch.new(url)\nrequest[\"Authorization\"] = 'Bearer YOUR_SECRET_API_KEY'\nrequest.body = \"{\\\"name\\\":\\\"Monitor products\\\",\\\"variables\\\":{\\\"originUrl\\\":\\\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\\\"},\\\"schedules\\\":[{\\\"type\\\":\\\"FIXED_INTERVAL\\\",\\\"everyMinutes\\\":65}],\\\"notifyOnCapturedScreenshotChange\\\":false,\\\"notifyOnCapturedTextChange\\\":true,\\\"capturedScreenshotNotificationThreshold\\\":16}\"\n\nresponse = http.request(request)\nputs response.read_body\n"
          },
          {
            "lang": "Shell",
            "label": "Shell (cURL)",
            "source": "curl --request PATCH \\\n  --url https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId} \\\n  --header 'Authorization: Bearer YOUR_SECRET_API_KEY' \\\n  --data '{\"name\":\"Monitor products\",\"variables\":{\"originUrl\":\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\"},\"schedules\":[{\"type\":\"FIXED_INTERVAL\",\"everyMinutes\":65}],\"notifyOnCapturedScreenshotChange\":false,\"notifyOnCapturedTextChange\":true,\"capturedScreenshotNotificationThreshold\":16}'\n"
          },
          {
            "lang": "Shell",
            "label": "Shell (wget)",
            "source": "wget --quiet \\\n  --method PATCH \\\n  --header 'Authorization: Bearer YOUR_SECRET_API_KEY' \\\n  --body-data '{\"name\":\"Monitor products\",\"variables\":{\"originUrl\":\"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\"},\"schedules\":[{\"type\":\"FIXED_INTERVAL\",\"everyMinutes\":65}],\"notifyOnCapturedScreenshotChange\":false,\"notifyOnCapturedTextChange\":true,\"capturedScreenshotNotificationThreshold\":16}' \\\n  --output-document \\\n  - https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\n"
          },
          {
            "lang": "Swift",
            "label": "Swift",
            "source": "import Foundation\n\nlet headers = [\"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"]\nlet parameters = [\n  \"name\": \"Monitor products\",\n  \"variables\": [\"originUrl\": \"https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines\"],\n  \"schedules\": [\n    [\n      \"type\": \"FIXED_INTERVAL\",\n      \"everyMinutes\": 65\n    ]\n  ],\n  \"notifyOnCapturedScreenshotChange\": false,\n  \"notifyOnCapturedTextChange\": true,\n  \"capturedScreenshotNotificationThreshold\": 16\n] as [String : Any]\n\nlet postData = JSONSerialization.data(withJSONObject: parameters, options: [])\n\nlet request = NSMutableURLRequest(url: NSURL(string: \"https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\")! as URL,\n                                        cachePolicy: .useProtocolCachePolicy,\n                                    timeoutInterval: 10.0)\nrequest.httpMethod = \"PATCH\"\nrequest.allHTTPHeaderFields = headers\nrequest.httpBody = postData as Data\n\nlet session = URLSession.shared\nlet dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in\n  if (error != nil) {\n    print(error)\n  } else {\n    let httpResponse = response as? HTTPURLResponse\n    print(httpResponse)\n  }\n})\n\ndataTask.resume()\n"
          }
        ],
        "responses": {
          "200": {
            "description": "A JSON object containing the updated monitor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/updateMonitor-200"
                }
              }
            }
          },
          "400": {
            "description": "A JSON containing error attributes. This will happen if any of the parameters are not valid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/updateMonitor-400"
                }
              }
            }
          },
          "401": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/updateMonitor-401"
                }
              }
            }
          },
          "403": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/updateMonitor-403"
                }
              }
            }
          },
          "404": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/updateMonitor-404"
                }
              }
            }
          },
          "500": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/updateMonitor-500"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "monitors"
        ],
        "summary": "Delete a task's monitor",
        "operationId": "deleteMonitor",
        "description": "Delete a task's monitor.",
        "parameters": [
          {
            "in": "path",
            "name": "taskId",
            "schema": {
              "type": "string"
            },
            "required": true,
            "description": "Unique task ID\n\nYou can find a task's ID by opening it on the dashboard and copying its ID in the browser address bar.\n"
          },
          {
            "in": "path",
            "name": "monitorId",
            "schema": {
              "type": "string"
            },
            "required": true,
            "description": "Unique monitor ID\n\nYou can find a monitor's ID by opening it on the dashboard and copying its ID in the browser address bar.\n"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "C#",
            "label": "C#",
            "source": "var client = new RestClient(\"https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\");\nvar request = new RestRequest(Method.DELETE);\nrequest.AddHeader(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\");\nIRestResponse response = client.Execute(request);\n"
          },
          {
            "lang": "Go",
            "label": "Go",
            "source": "package main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"io/ioutil\"\n)\n\nfunc main() {\n\n\turl := \"https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\"\n\n\treq, _ := http.NewRequest(\"DELETE\", url, nil)\n\n\treq.Header.Add(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\")\n\n\tres, _ := http.DefaultClient.Do(req)\n\n\tdefer res.Body.Close()\n\tbody, _ := ioutil.ReadAll(res.Body)\n\n\tfmt.Println(res)\n\tfmt.Println(string(body))\n\n}\n"
          },
          {
            "lang": "Java",
            "label": "Java",
            "source": "HttpResponse<String> response = Unirest.delete(\"https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\")\n  .header(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\")\n  .asString();\n"
          },
          {
            "lang": "Node",
            "label": "Node (Native)",
            "source": "const http = require(\"https\");\n\nconst options = {\n  \"method\": \"DELETE\",\n  \"hostname\": \"api.browse.ai\",\n  \"port\": null,\n  \"path\": \"/v1/tasks/{taskId}/monitors/{monitorId}\",\n  \"headers\": {\n    \"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on(\"data\", function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on(\"end\", function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();\n"
          },
          {
            "lang": "Node",
            "label": "Node (request)",
            "source": "const request = require('request');\n\nconst options = {\n  method: 'DELETE',\n  url: 'https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}',\n  headers: {Authorization: 'Bearer YOUR_SECRET_API_KEY'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"
          },
          {
            "lang": "Objective-C",
            "label": "Objective-C",
            "source": "#import <Foundation/Foundation.h>\n\nNSDictionary *headers = @{ @\"Authorization\": @\"Bearer YOUR_SECRET_API_KEY\" };\n\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@\"https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\"]\n                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy\n                                                   timeoutInterval:10.0];\n[request setHTTPMethod:@\"DELETE\"];\n[request setAllHTTPHeaderFields:headers];\n\nNSURLSession *session = [NSURLSession sharedSession];\nNSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request\n                                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n                                                if (error) {\n                                                    NSLog(@\"%@\", error);\n                                                } else {\n                                                    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;\n                                                    NSLog(@\"%@\", httpResponse);\n                                                }\n                                            }];\n[dataTask resume];\n"
          },
          {
            "lang": "PHP",
            "label": "PHP",
            "source": "<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"DELETE\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Bearer YOUR_SECRET_API_KEY\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}\n"
          },
          {
            "lang": "Python",
            "label": "Python (python3)",
            "source": "import http.client\n\nconn = http.client.HTTPSConnection(\"api.browse.ai\")\n\nheaders = { 'Authorization': \"Bearer YOUR_SECRET_API_KEY\" }\n\nconn.request(\"DELETE\", \"/v1/tasks/{taskId}/monitors/{monitorId}\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))\n"
          },
          {
            "lang": "Python",
            "label": "Python (requests)",
            "source": "import requests\n\nurl = \"https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\"\n\nheaders = {\"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"}\n\nresponse = requests.request(\"DELETE\", url, headers=headers)\n\nprint(response.text)\n"
          },
          {
            "lang": "Ruby",
            "label": "Ruby",
            "source": "require 'uri'\nrequire 'net/http'\nrequire 'openssl'\n\nurl = URI(\"https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\")\n\nhttp = Net::HTTP.new(url.host, url.port)\nhttp.use_ssl = true\nhttp.verify_mode = OpenSSL::SSL::VERIFY_NONE\n\nrequest = Net::HTTP::Delete.new(url)\nrequest[\"Authorization\"] = 'Bearer YOUR_SECRET_API_KEY'\n\nresponse = http.request(request)\nputs response.read_body\n"
          },
          {
            "lang": "Shell",
            "label": "Shell (cURL)",
            "source": "curl --request DELETE \\\n  --url https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId} \\\n  --header 'Authorization: Bearer YOUR_SECRET_API_KEY'\n"
          },
          {
            "lang": "Shell",
            "label": "Shell (wget)",
            "source": "wget --quiet \\\n  --method DELETE \\\n  --header 'Authorization: Bearer YOUR_SECRET_API_KEY' \\\n  --output-document \\\n  - https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\n"
          },
          {
            "lang": "Swift",
            "label": "Swift",
            "source": "import Foundation\n\nlet headers = [\"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"]\n\nlet request = NSMutableURLRequest(url: NSURL(string: \"https://api.browse.ai/v1/tasks/{taskId}/monitors/{monitorId}\")! as URL,\n                                        cachePolicy: .useProtocolCachePolicy,\n                                    timeoutInterval: 10.0)\nrequest.httpMethod = \"DELETE\"\nrequest.allHTTPHeaderFields = headers\n\nlet session = URLSession.shared\nlet dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in\n  if (error != nil) {\n    print(error)\n  } else {\n    let httpResponse = response as? HTTPURLResponse\n    print(httpResponse)\n  }\n})\n\ndataTask.resume()\n"
          }
        ],
        "responses": {
          "200": {
            "description": "A JSON object containing the deleted monitor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/deleteMonitor-200"
                }
              }
            }
          },
          "400": {
            "description": "A JSON containing error attributes. This will happen if any of the parameters are not valid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/deleteMonitor-400"
                }
              }
            }
          },
          "401": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/deleteMonitor-401"
                }
              }
            }
          },
          "404": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/deleteMonitor-404"
                }
              }
            }
          },
          "500": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/deleteMonitor-500"
                }
              }
            }
          }
        }
      }
    },
    "/tasks/{taskId}/bulk-runs": {
      "post": {
        "tags": [
          "bulk runs"
        ],
        "summary": "Bulk run a task",
        "operationId": "newBulkRun",
        "description": "Create a new bulk run on a task.",
        "parameters": [
          {
            "in": "path",
            "name": "taskId",
            "schema": {
              "type": "string"
            },
            "required": true,
            "description": "Unique task ID\n\nYou can find a task's ID by opening it on the dashboard and copying its ID in the browser address bar.\n"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkRunBodyParams"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "C#",
            "label": "C#",
            "source": "var client = new RestClient(\"https://api.browse.ai/v1/tasks/{taskId}/bulk-runs\");\nvar request = new RestRequest(Method.POST);\nrequest.AddHeader(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\");\nrequest.AddParameter(\"undefined\", \"{\\\"title\\\":\\\"Bulk Run Title\\\",\\\"variables\\\":[{\\\"originUrl\\\":\\\"https://www.seattlecoffeegear.com/shop-gear/accessories/espresso-accessories\\\"},{\\\"originUrl\\\":\\\"https://www.seattlecoffeegear.com/shop-gear/coffee-makers/drip-brewers\\\"}]}\", ParameterType.RequestBody);\nIRestResponse response = client.Execute(request);\n"
          },
          {
            "lang": "Go",
            "label": "Go",
            "source": "package main\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"net/http\"\n\t\"io/ioutil\"\n)\n\nfunc main() {\n\n\turl := \"https://api.browse.ai/v1/tasks/{taskId}/bulk-runs\"\n\n\tpayload := strings.NewReader(\"{\\\"title\\\":\\\"Bulk Run Title\\\",\\\"variables\\\":[{\\\"originUrl\\\":\\\"https://www.seattlecoffeegear.com/shop-gear/accessories/espresso-accessories\\\"},{\\\"originUrl\\\":\\\"https://www.seattlecoffeegear.com/shop-gear/coffee-makers/drip-brewers\\\"}]}\")\n\n\treq, _ := http.NewRequest(\"POST\", url, payload)\n\n\treq.Header.Add(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\")\n\n\tres, _ := http.DefaultClient.Do(req)\n\n\tdefer res.Body.Close()\n\tbody, _ := ioutil.ReadAll(res.Body)\n\n\tfmt.Println(res)\n\tfmt.Println(string(body))\n\n}\n"
          },
          {
            "lang": "Java",
            "label": "Java",
            "source": "HttpResponse<String> response = Unirest.post(\"https://api.browse.ai/v1/tasks/{taskId}/bulk-runs\")\n  .header(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\")\n  .body(\"{\\\"title\\\":\\\"Bulk Run Title\\\",\\\"variables\\\":[{\\\"originUrl\\\":\\\"https://www.seattlecoffeegear.com/shop-gear/accessories/espresso-accessories\\\"},{\\\"originUrl\\\":\\\"https://www.seattlecoffeegear.com/shop-gear/coffee-makers/drip-brewers\\\"}]}\")\n  .asString();\n"
          },
          {
            "lang": "Node",
            "label": "Node (Native)",
            "source": "const http = require(\"https\");\n\nconst options = {\n  \"method\": \"POST\",\n  \"hostname\": \"api.browse.ai\",\n  \"port\": null,\n  \"path\": \"/v1/tasks/{taskId}/bulk-runs\",\n  \"headers\": {\n    \"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on(\"data\", function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on(\"end\", function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  title: 'Bulk Run Title',\n  variables: [\n    {\n      originUrl: 'https://www.seattlecoffeegear.com/shop-gear/accessories/espresso-accessories'\n    },\n    {\n      originUrl: 'https://www.seattlecoffeegear.com/shop-gear/coffee-makers/drip-brewers'\n    }\n  ]\n}));\nreq.end();\n"
          },
          {
            "lang": "Node",
            "label": "Node (request)",
            "source": "const request = require('request');\n\nconst options = {\n  method: 'POST',\n  url: 'https://api.browse.ai/v1/tasks/{taskId}/bulk-runs',\n  headers: {Authorization: 'Bearer YOUR_SECRET_API_KEY'},\n  body: {\n    title: 'Bulk Run Title',\n    variables: [\n      {\n        originUrl: 'https://www.seattlecoffeegear.com/shop-gear/accessories/espresso-accessories'\n      },\n      {\n        originUrl: 'https://www.seattlecoffeegear.com/shop-gear/coffee-makers/drip-brewers'\n      }\n    ]\n  },\n  json: true\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"
          },
          {
            "lang": "Objective-C",
            "label": "Objective-C",
            "source": "#import <Foundation/Foundation.h>\n\nNSDictionary *headers = @{ @\"Authorization\": @\"Bearer YOUR_SECRET_API_KEY\" };\nNSDictionary *parameters = @{ @\"title\": @\"Bulk Run Title\",\n                              @\"variables\": @[ @{ @\"originUrl\": @\"https://www.seattlecoffeegear.com/shop-gear/accessories/espresso-accessories\" }, @{ @\"originUrl\": @\"https://www.seattlecoffeegear.com/shop-gear/coffee-makers/drip-brewers\" } ] };\n\nNSData *postData = [NSJSONSerialization dataWithJSONObject:parameters options:0 error:nil];\n\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@\"https://api.browse.ai/v1/tasks/{taskId}/bulk-runs\"]\n                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy\n                                                   timeoutInterval:10.0];\n[request setHTTPMethod:@\"POST\"];\n[request setAllHTTPHeaderFields:headers];\n[request setHTTPBody:postData];\n\nNSURLSession *session = [NSURLSession sharedSession];\nNSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request\n                                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n                                                if (error) {\n                                                    NSLog(@\"%@\", error);\n                                                } else {\n                                                    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;\n                                                    NSLog(@\"%@\", httpResponse);\n                                                }\n                                            }];\n[dataTask resume];\n"
          },
          {
            "lang": "PHP",
            "label": "PHP",
            "source": "<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.browse.ai/v1/tasks/{taskId}/bulk-runs\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"POST\",\n  CURLOPT_POSTFIELDS => \"{\\\"title\\\":\\\"Bulk Run Title\\\",\\\"variables\\\":[{\\\"originUrl\\\":\\\"https://www.seattlecoffeegear.com/shop-gear/accessories/espresso-accessories\\\"},{\\\"originUrl\\\":\\\"https://www.seattlecoffeegear.com/shop-gear/coffee-makers/drip-brewers\\\"}]}\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Bearer YOUR_SECRET_API_KEY\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}\n"
          },
          {
            "lang": "Python",
            "label": "Python (python3)",
            "source": "import http.client\n\nconn = http.client.HTTPSConnection(\"api.browse.ai\")\n\npayload = \"{\\\"title\\\":\\\"Bulk Run Title\\\",\\\"variables\\\":[{\\\"originUrl\\\":\\\"https://www.seattlecoffeegear.com/shop-gear/accessories/espresso-accessories\\\"},{\\\"originUrl\\\":\\\"https://www.seattlecoffeegear.com/shop-gear/coffee-makers/drip-brewers\\\"}]}\"\n\nheaders = { 'Authorization': \"Bearer YOUR_SECRET_API_KEY\" }\n\nconn.request(\"POST\", \"/v1/tasks/{taskId}/bulk-runs\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))\n"
          },
          {
            "lang": "Python",
            "label": "Python (requests)",
            "source": "import requests\n\nurl = \"https://api.browse.ai/v1/tasks/{taskId}/bulk-runs\"\n\npayload = {\n    \"title\": \"Bulk Run Title\",\n    \"variables\": [{\"originUrl\": \"https://www.seattlecoffeegear.com/shop-gear/accessories/espresso-accessories\"}, {\"originUrl\": \"https://www.seattlecoffeegear.com/shop-gear/coffee-makers/drip-brewers\"}]\n}\nheaders = {\"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"}\n\nresponse = requests.request(\"POST\", url, json=payload, headers=headers)\n\nprint(response.text)\n"
          },
          {
            "lang": "Ruby",
            "label": "Ruby",
            "source": "require 'uri'\nrequire 'net/http'\nrequire 'openssl'\n\nurl = URI(\"https://api.browse.ai/v1/tasks/{taskId}/bulk-runs\")\n\nhttp = Net::HTTP.new(url.host, url.port)\nhttp.use_ssl = true\nhttp.verify_mode = OpenSSL::SSL::VERIFY_NONE\n\nrequest = Net::HTTP::Post.new(url)\nrequest[\"Authorization\"] = 'Bearer YOUR_SECRET_API_KEY'\nrequest.body = \"{\\\"title\\\":\\\"Bulk Run Title\\\",\\\"variables\\\":[{\\\"originUrl\\\":\\\"https://www.seattlecoffeegear.com/shop-gear/accessories/espresso-accessories\\\"},{\\\"originUrl\\\":\\\"https://www.seattlecoffeegear.com/shop-gear/coffee-makers/drip-brewers\\\"}]}\"\n\nresponse = http.request(request)\nputs response.read_body\n"
          },
          {
            "lang": "Shell",
            "label": "Shell (cURL)",
            "source": "curl --request POST \\\n  --url https://api.browse.ai/v1/tasks/{taskId}/bulk-runs \\\n  --header 'Authorization: Bearer YOUR_SECRET_API_KEY' \\\n  --data '{\"title\":\"Bulk Run Title\",\"variables\":[{\"originUrl\":\"https://www.seattlecoffeegear.com/shop-gear/accessories/espresso-accessories\"},{\"originUrl\":\"https://www.seattlecoffeegear.com/shop-gear/coffee-makers/drip-brewers\"}]}'\n"
          },
          {
            "lang": "Shell",
            "label": "Shell (wget)",
            "source": "wget --quiet \\\n  --method POST \\\n  --header 'Authorization: Bearer YOUR_SECRET_API_KEY' \\\n  --body-data '{\"title\":\"Bulk Run Title\",\"variables\":[{\"originUrl\":\"https://www.seattlecoffeegear.com/shop-gear/accessories/espresso-accessories\"},{\"originUrl\":\"https://www.seattlecoffeegear.com/shop-gear/coffee-makers/drip-brewers\"}]}' \\\n  --output-document \\\n  - https://api.browse.ai/v1/tasks/{taskId}/bulk-runs\n"
          },
          {
            "lang": "Swift",
            "label": "Swift",
            "source": "import Foundation\n\nlet headers = [\"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"]\nlet parameters = [\n  \"title\": \"Bulk Run Title\",\n  \"variables\": [[\"originUrl\": \"https://www.seattlecoffeegear.com/shop-gear/accessories/espresso-accessories\"], [\"originUrl\": \"https://www.seattlecoffeegear.com/shop-gear/coffee-makers/drip-brewers\"]]\n] as [String : Any]\n\nlet postData = JSONSerialization.data(withJSONObject: parameters, options: [])\n\nlet request = NSMutableURLRequest(url: NSURL(string: \"https://api.browse.ai/v1/tasks/{taskId}/bulk-runs\")! as URL,\n                                        cachePolicy: .useProtocolCachePolicy,\n                                    timeoutInterval: 10.0)\nrequest.httpMethod = \"POST\"\nrequest.allHTTPHeaderFields = headers\nrequest.httpBody = postData as Data\n\nlet session = URLSession.shared\nlet dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in\n  if (error != nil) {\n    print(error)\n  } else {\n    let httpResponse = response as? HTTPURLResponse\n    print(httpResponse)\n  }\n})\n\ndataTask.resume()\n"
          }
        ],
        "responses": {
          "200": {
            "description": "A JSON object containing the newly created Bulk run.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/newBulkRun-200"
                }
              }
            }
          },
          "400": {
            "description": "A JSON containing error attributes. This will happen if any of the parameters are not valid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/newBulkRun-400"
                }
              }
            }
          },
          "401": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/newBulkRun-401"
                }
              }
            }
          },
          "403": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/newBulkRun-403"
                }
              }
            }
          },
          "404": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/newBulkRun-404"
                }
              }
            }
          },
          "500": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/newBulkRun-500"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "bulk runs"
        ],
        "summary": "Retrieve a task's bulk runs list",
        "operationId": "getBulkRuns",
        "description": "Retrieve a task's bulk runs list.",
        "parameters": [
          {
            "in": "path",
            "name": "taskId",
            "schema": {
              "type": "string"
            },
            "required": true,
            "description": "Unique task ID\n\nYou can find a task's ID by opening it on the dashboard and copying its ID in the browser address bar.\n"
          },
          {
            "in": "query",
            "name": "page",
            "schema": {
              "type": "integer",
              "minimum": 1
            },
            "required": false,
            "description": "Page number"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "C#",
            "label": "C#",
            "source": "var client = new RestClient(\"https://api.browse.ai/v1/tasks/{taskId}/bulk-runs?page=1\");\nvar request = new RestRequest(Method.GET);\nrequest.AddHeader(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\");\nIRestResponse response = client.Execute(request);\n"
          },
          {
            "lang": "Go",
            "label": "Go",
            "source": "package main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"io/ioutil\"\n)\n\nfunc main() {\n\n\turl := \"https://api.browse.ai/v1/tasks/{taskId}/bulk-runs?page=1\"\n\n\treq, _ := http.NewRequest(\"GET\", url, nil)\n\n\treq.Header.Add(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\")\n\n\tres, _ := http.DefaultClient.Do(req)\n\n\tdefer res.Body.Close()\n\tbody, _ := ioutil.ReadAll(res.Body)\n\n\tfmt.Println(res)\n\tfmt.Println(string(body))\n\n}\n"
          },
          {
            "lang": "Java",
            "label": "Java",
            "source": "HttpResponse<String> response = Unirest.get(\"https://api.browse.ai/v1/tasks/{taskId}/bulk-runs?page=1\")\n  .header(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\")\n  .asString();\n"
          },
          {
            "lang": "Node",
            "label": "Node (Native)",
            "source": "const http = require(\"https\");\n\nconst options = {\n  \"method\": \"GET\",\n  \"hostname\": \"api.browse.ai\",\n  \"port\": null,\n  \"path\": \"/v1/tasks/{taskId}/bulk-runs?page=1\",\n  \"headers\": {\n    \"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on(\"data\", function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on(\"end\", function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();\n"
          },
          {
            "lang": "Node",
            "label": "Node (request)",
            "source": "const request = require('request');\n\nconst options = {\n  method: 'GET',\n  url: 'https://api.browse.ai/v1/tasks/{taskId}/bulk-runs',\n  qs: {page: '1'},\n  headers: {Authorization: 'Bearer YOUR_SECRET_API_KEY'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"
          },
          {
            "lang": "Objective-C",
            "label": "Objective-C",
            "source": "#import <Foundation/Foundation.h>\n\nNSDictionary *headers = @{ @\"Authorization\": @\"Bearer YOUR_SECRET_API_KEY\" };\n\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@\"https://api.browse.ai/v1/tasks/{taskId}/bulk-runs?page=1\"]\n                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy\n                                                   timeoutInterval:10.0];\n[request setHTTPMethod:@\"GET\"];\n[request setAllHTTPHeaderFields:headers];\n\nNSURLSession *session = [NSURLSession sharedSession];\nNSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request\n                                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n                                                if (error) {\n                                                    NSLog(@\"%@\", error);\n                                                } else {\n                                                    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;\n                                                    NSLog(@\"%@\", httpResponse);\n                                                }\n                                            }];\n[dataTask resume];\n"
          },
          {
            "lang": "PHP",
            "label": "PHP",
            "source": "<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.browse.ai/v1/tasks/{taskId}/bulk-runs?page=1\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Bearer YOUR_SECRET_API_KEY\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}\n"
          },
          {
            "lang": "Python",
            "label": "Python (python3)",
            "source": "import http.client\n\nconn = http.client.HTTPSConnection(\"api.browse.ai\")\n\nheaders = { 'Authorization': \"Bearer YOUR_SECRET_API_KEY\" }\n\nconn.request(\"GET\", \"/v1/tasks/{taskId}/bulk-runs?page=1\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))\n"
          },
          {
            "lang": "Python",
            "label": "Python (requests)",
            "source": "import requests\n\nurl = \"https://api.browse.ai/v1/tasks/{taskId}/bulk-runs\"\n\nquerystring = {\"page\":\"1\"}\n\nheaders = {\"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"}\n\nresponse = requests.request(\"GET\", url, headers=headers, params=querystring)\n\nprint(response.text)\n"
          },
          {
            "lang": "Ruby",
            "label": "Ruby",
            "source": "require 'uri'\nrequire 'net/http'\nrequire 'openssl'\n\nurl = URI(\"https://api.browse.ai/v1/tasks/{taskId}/bulk-runs?page=1\")\n\nhttp = Net::HTTP.new(url.host, url.port)\nhttp.use_ssl = true\nhttp.verify_mode = OpenSSL::SSL::VERIFY_NONE\n\nrequest = Net::HTTP::Get.new(url)\nrequest[\"Authorization\"] = 'Bearer YOUR_SECRET_API_KEY'\n\nresponse = http.request(request)\nputs response.read_body\n"
          },
          {
            "lang": "Shell",
            "label": "Shell (cURL)",
            "source": "curl --request GET \\\n  --url 'https://api.browse.ai/v1/tasks/{taskId}/bulk-runs?page=1' \\\n  --header 'Authorization: Bearer YOUR_SECRET_API_KEY'\n"
          },
          {
            "lang": "Shell",
            "label": "Shell (wget)",
            "source": "wget --quiet \\\n  --method GET \\\n  --header 'Authorization: Bearer YOUR_SECRET_API_KEY' \\\n  --output-document \\\n  - 'https://api.browse.ai/v1/tasks/{taskId}/bulk-runs?page=1'\n"
          },
          {
            "lang": "Swift",
            "label": "Swift",
            "source": "import Foundation\n\nlet headers = [\"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"]\n\nlet request = NSMutableURLRequest(url: NSURL(string: \"https://api.browse.ai/v1/tasks/{taskId}/bulk-runs?page=1\")! as URL,\n                                        cachePolicy: .useProtocolCachePolicy,\n                                    timeoutInterval: 10.0)\nrequest.httpMethod = \"GET\"\nrequest.allHTTPHeaderFields = headers\n\nlet session = URLSession.shared\nlet dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in\n  if (error != nil) {\n    print(error)\n  } else {\n    let httpResponse = response as? HTTPURLResponse\n    print(httpResponse)\n  }\n})\n\ndataTask.resume()\n"
          }
        ],
        "responses": {
          "200": {
            "description": "A JSON object containing the bulk runs list.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getBulkRuns-200"
                }
              }
            }
          },
          "400": {
            "description": "A JSON containing error attributes. This will happen if any of the parameters are not valid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getBulkRuns-400"
                }
              }
            }
          },
          "401": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getBulkRuns-401"
                }
              }
            }
          },
          "404": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getBulkRuns-404"
                }
              }
            }
          }
        }
      }
    },
    "/tasks/{taskId}/bulk-runs/{bulkRunId}": {
      "get": {
        "tags": [
          "bulk runs"
        ],
        "summary": "Retrieve a task's bulk run",
        "operationId": "getBulkRun",
        "description": "Retrieve a task's bulk run along with a list of task executions triggered through the bulk run.",
        "parameters": [
          {
            "in": "path",
            "name": "taskId",
            "schema": {
              "type": "string"
            },
            "required": true,
            "description": "Unique task ID\n\nYou can find a task's ID by opening it on the dashboard and copying its ID in the browser address bar.\n"
          },
          {
            "in": "path",
            "name": "bulkRunId",
            "schema": {
              "type": "string"
            },
            "required": true,
            "description": "Unique bulk run ID\n"
          },
          {
            "in": "query",
            "name": "page",
            "schema": {
              "type": "integer",
              "minimum": 1
            },
            "required": false,
            "description": "Page number"
          }
        ],
        "x-codeSamples": [
          {
            "lang": "C#",
            "label": "C#",
            "source": "var client = new RestClient(\"https://api.browse.ai/v1/tasks/{taskId}/bulk-runs/{bulkRunId}?page=1\");\nvar request = new RestRequest(Method.GET);\nrequest.AddHeader(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\");\nIRestResponse response = client.Execute(request);\n"
          },
          {
            "lang": "Go",
            "label": "Go",
            "source": "package main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"io/ioutil\"\n)\n\nfunc main() {\n\n\turl := \"https://api.browse.ai/v1/tasks/{taskId}/bulk-runs/{bulkRunId}?page=1\"\n\n\treq, _ := http.NewRequest(\"GET\", url, nil)\n\n\treq.Header.Add(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\")\n\n\tres, _ := http.DefaultClient.Do(req)\n\n\tdefer res.Body.Close()\n\tbody, _ := ioutil.ReadAll(res.Body)\n\n\tfmt.Println(res)\n\tfmt.Println(string(body))\n\n}\n"
          },
          {
            "lang": "Java",
            "label": "Java",
            "source": "HttpResponse<String> response = Unirest.get(\"https://api.browse.ai/v1/tasks/{taskId}/bulk-runs/{bulkRunId}?page=1\")\n  .header(\"Authorization\", \"Bearer YOUR_SECRET_API_KEY\")\n  .asString();\n"
          },
          {
            "lang": "Node",
            "label": "Node (Native)",
            "source": "const http = require(\"https\");\n\nconst options = {\n  \"method\": \"GET\",\n  \"hostname\": \"api.browse.ai\",\n  \"port\": null,\n  \"path\": \"/v1/tasks/{taskId}/bulk-runs/{bulkRunId}?page=1\",\n  \"headers\": {\n    \"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on(\"data\", function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on(\"end\", function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();\n"
          },
          {
            "lang": "Node",
            "label": "Node (request)",
            "source": "const request = require('request');\n\nconst options = {\n  method: 'GET',\n  url: 'https://api.browse.ai/v1/tasks/{taskId}/bulk-runs/{bulkRunId}',\n  qs: {page: '1'},\n  headers: {Authorization: 'Bearer YOUR_SECRET_API_KEY'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"
          },
          {
            "lang": "Objective-C",
            "label": "Objective-C",
            "source": "#import <Foundation/Foundation.h>\n\nNSDictionary *headers = @{ @\"Authorization\": @\"Bearer YOUR_SECRET_API_KEY\" };\n\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@\"https://api.browse.ai/v1/tasks/{taskId}/bulk-runs/{bulkRunId}?page=1\"]\n                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy\n                                                   timeoutInterval:10.0];\n[request setHTTPMethod:@\"GET\"];\n[request setAllHTTPHeaderFields:headers];\n\nNSURLSession *session = [NSURLSession sharedSession];\nNSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request\n                                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n                                                if (error) {\n                                                    NSLog(@\"%@\", error);\n                                                } else {\n                                                    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;\n                                                    NSLog(@\"%@\", httpResponse);\n                                                }\n                                            }];\n[dataTask resume];\n"
          },
          {
            "lang": "PHP",
            "label": "PHP",
            "source": "<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"https://api.browse.ai/v1/tasks/{taskId}/bulk-runs/{bulkRunId}?page=1\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Bearer YOUR_SECRET_API_KEY\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}\n"
          },
          {
            "lang": "Python",
            "label": "Python (python3)",
            "source": "import http.client\n\nconn = http.client.HTTPSConnection(\"api.browse.ai\")\n\nheaders = { 'Authorization': \"Bearer YOUR_SECRET_API_KEY\" }\n\nconn.request(\"GET\", \"/v1/tasks/{taskId}/bulk-runs/{bulkRunId}?page=1\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))\n"
          },
          {
            "lang": "Python",
            "label": "Python (requests)",
            "source": "import requests\n\nurl = \"https://api.browse.ai/v1/tasks/{taskId}/bulk-runs/{bulkRunId}\"\n\nquerystring = {\"page\":\"1\"}\n\nheaders = {\"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"}\n\nresponse = requests.request(\"GET\", url, headers=headers, params=querystring)\n\nprint(response.text)\n"
          },
          {
            "lang": "Ruby",
            "label": "Ruby",
            "source": "require 'uri'\nrequire 'net/http'\nrequire 'openssl'\n\nurl = URI(\"https://api.browse.ai/v1/tasks/{taskId}/bulk-runs/{bulkRunId}?page=1\")\n\nhttp = Net::HTTP.new(url.host, url.port)\nhttp.use_ssl = true\nhttp.verify_mode = OpenSSL::SSL::VERIFY_NONE\n\nrequest = Net::HTTP::Get.new(url)\nrequest[\"Authorization\"] = 'Bearer YOUR_SECRET_API_KEY'\n\nresponse = http.request(request)\nputs response.read_body\n"
          },
          {
            "lang": "Shell",
            "label": "Shell (cURL)",
            "source": "curl --request GET \\\n  --url 'https://api.browse.ai/v1/tasks/{taskId}/bulk-runs/{bulkRunId}?page=1' \\\n  --header 'Authorization: Bearer YOUR_SECRET_API_KEY'\n"
          },
          {
            "lang": "Shell",
            "label": "Shell (wget)",
            "source": "wget --quiet \\\n  --method GET \\\n  --header 'Authorization: Bearer YOUR_SECRET_API_KEY' \\\n  --output-document \\\n  - 'https://api.browse.ai/v1/tasks/{taskId}/bulk-runs/{bulkRunId}?page=1'\n"
          },
          {
            "lang": "Swift",
            "label": "Swift",
            "source": "import Foundation\n\nlet headers = [\"Authorization\": \"Bearer YOUR_SECRET_API_KEY\"]\n\nlet request = NSMutableURLRequest(url: NSURL(string: \"https://api.browse.ai/v1/tasks/{taskId}/bulk-runs/{bulkRunId}?page=1\")! as URL,\n                                        cachePolicy: .useProtocolCachePolicy,\n                                    timeoutInterval: 10.0)\nrequest.httpMethod = \"GET\"\nrequest.allHTTPHeaderFields = headers\n\nlet session = URLSession.shared\nlet dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in\n  if (error != nil) {\n    print(error)\n  } else {\n    let httpResponse = response as? HTTPURLResponse\n    print(httpResponse)\n  }\n})\n\ndataTask.resume()\n"
          }
        ],
        "responses": {
          "200": {
            "description": "A JSON object containing the bulk run information along with a paginated list of all its task executions.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getBulkRun-200"
                }
              }
            }
          },
          "400": {
            "description": "A JSON containing error attributes. This will happen if any of the parameters are not valid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getBulkRun-400"
                }
              }
            }
          },
          "401": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getBulkRun-401"
                }
              }
            }
          },
          "404": {
            "description": "A JSON containing error attributes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/getBulkRun-404"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "Your Browse AI API key, sent as a Bearer token. [Generate an API key](https://dashboard.browse.ai/api).\n"
      }
    },
    "schemas": {
      "Variables": {
        "type": "array",
        "description": "Variable values used in this task execution.\n",
        "items": {
          "anyOf": [
            {
              "type": "object",
              "title": "Text Variable",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "text"
                  ],
                  "example": "text",
                  "description": "Variable type"
                },
                "name": {
                  "type": "string",
                  "example": "originUrl",
                  "description": "Variable name"
                },
                "label": {
                  "type": "string",
                  "example": "Origin URL",
                  "description": "Variable title"
                },
                "encrypted": {
                  "type": "boolean",
                  "example": false,
                  "description": "Whether variable value and defaultValue are encrypted"
                },
                "defaultValue": {
                  "type": "string",
                  "example": "https://www.espressozone.com/espresso-machines/semi-automatic-espresso-machines",
                  "description": "Variable default value that will be used as a fallback if you do not specify a variable's value when running a task.\n\nIf `encrypted` is `true`, this will appear as an arbitrary string like `******`.\n\nVariable default values can be updated on task Settings page on your dashboard.\n"
                },
                "value": {
                  "type": "string",
                  "nullable": true,
                  "example": null,
                  "description": "Variable value specified when running task.\n\nIf `encrypted` is `true`, this will appear as an arbitrary string like `******`.\n"
                }
              }
            },
            {
              "type": "object",
              "title": "Numeric Variable",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "number"
                  ],
                  "example": "number",
                  "description": "Variable type"
                },
                "name": {
                  "type": "string",
                  "example": "limit",
                  "description": "Variable name"
                },
                "label": {
                  "type": "string",
                  "example": "Limit",
                  "description": "Variable title"
                },
                "defaultValue": {
                  "type": "number",
                  "example": 10,
                  "description": "Variable default value that will be used if you do not specify a variable's value when running a task."
                },
                "value": {
                  "type": "number",
                  "nullable": true,
                  "example": null,
                  "description": "Variable value specified when running task."
                },
                "min": {
                  "type": "number",
                  "nullable": true,
                  "example": 0,
                  "description": "Minimum value this variable accepts"
                },
                "max": {
                  "type": "number",
                  "nullable": true,
                  "example": 200,
                  "description": "Maximum value this variable accepts"
                }
              }
            }
          ]
        }
      },
      "Task": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "4f5cd7ff-6c98-4cac-8cf0-d7d0cb050b06",
            "description": "Unique task ID"
          },
          "name": {
            "type": "string",
            "example": "Extract data from Realtor.com",
            "description": "Task name"
          },
          "createdAt": {
            "type": "integer",
            "example": 1620739118,
            "description": "Task creation date and time in the form of a Unix timestamp"
          },
          "variables": {
            "$ref": "#/components/schemas/Variables"
          }
        }
      },
      "getTeamTasks-200": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              200
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "success"
            ]
          },
          "tasks": {
            "type": "object",
            "properties": {
              "totalCount": {
                "type": "integer",
                "description": "Total number of tasks this team has."
              },
              "items": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Task"
                }
              }
            }
          }
        }
      },
      "getTeamTasks-400": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              400
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "bad_request",
              "invalid_team_id"
            ],
            "example": "bad_request"
          }
        }
      },
      "getTeamTasks-401": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              401
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "unauthorized",
              "no_api_access"
            ],
            "example": "unauthorized"
          }
        }
      },
      "CapturedTexts": {
        "type": "array",
        "description": "Captured texts",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "example": "a5398be3-020c-4b6f-a6c6-59ed4d86ab5c",
              "description": "Unique captured text ID"
            },
            "name": {
              "type": "string",
              "example": "Product Title",
              "description": "Captured text name"
            },
            "text": {
              "type": "string",
              "nullable": true,
              "example": "Apple iPhone 8, 64GB, Space Gray",
              "description": "Captured text\n\n`null` if `targetNotFound` is `true`.\n"
            },
            "targetNotFound": {
              "type": "boolean",
              "example": false,
              "description": "If `true`, the HTML element with the target text was not found in rendered page markup."
            },
            "type": {
              "type": "string",
              "enum": [
                "alt",
                "backgroundImageUrl",
                "href",
                "imgSrc",
                "innerHTML",
                "innerText",
                "outerHTML",
                "title"
              ],
              "example": "innerText",
              "description": "Type of captured text. For example: \n\n- `alt`: HTML `alt` attribute.\n- `backgroundImageUrl`: Background image URL assigned to target element using CSS.\n- `href`: Anchor HTML `href` attribute.\n- `imgSrc`: Image (`img`) HTML element `src` attribute.\n- `title`: HTML `title` attribute.\n"
            },
            "createdAt": {
              "type": "integer",
              "example": 1620739118,
              "description": "When this text was captured in the form of a Unix timestamp"
            }
          }
        }
      },
      "CapturedScreenshots": {
        "type": "array",
        "description": "All screenshots captured in this task execution.",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "example": "b4d132f3-12d9-4770-ac7d-88e481fc5b47",
              "description": "Unique screenshot ID"
            },
            "name": {
              "type": "string",
              "nullable": true,
              "example": "Top ads",
              "description": "Screenshot name"
            },
            "src": {
              "type": "string",
              "example": "https://prod-browseai-captured-data.s3.amazonaws.com/1fae674a-2788-46a8-83c8-95c4664c6d25/6326b3c1-7b16-4256-a323-7d8d8954bd4e/1061671f-7f71-42ac-bb9a-207d126d1f3a/00001-user-1620230947-6f113cf2-90ef-4c66-a448-9d5c6bd64873.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAQVG3TPBVXHSCAX63%2F20221031%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221031T185642Z&X-Amz-Expires=1800&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJIMEYCIQDfX8VNAl5kBgttrCU85U5wc1ZtSOmshO6%2FPilXOv8nvgIhAIveFfsk%2B2CnEkrMZWriodEPsj0osO5a5zV6eVu%2FXfuZKp8DCHwQAhoMMDQ1NTU3NzA4OTA3IgyrbhVK0MP1WMFBXh0q%2FAJulP5qfaV5mn3NRbINqZN4hy4Dg3IujNrZjw8ef32sWE1Gj2D%2Fc0YTJUzvx%2Fnm7LxyNO6AR35mrVy%2FBm9Q80UIspkcLMl45EK%2FoUDO0fAvoUF8g6iZ905qS3MvnOTxXkObhM1PVmpFeJFMw3jksnOPfKE4X7Ut%2FJXNwD%2F5QzdkQCXkGem%2BlrYSSSf8jB8lihTAjT%2FNXmOKMv3jktmZ13T8J1R8F8zeuLPMQf7QphUzlKn5joPb28cConluQC97y%2BjwxqIYjvIFKXY9cZEoaHGh4c6FbXsia714zG3CQp8NSGLbqCCu93oJI1Z61E%2BZ6PhB3vZGdBvXi61AlJcxZ7sti6i0h4VAbWspiJIgWwoZzrsTtneBNNpUW9tvtacGgEZIwAKV%2F3AhVEZu3WC1eQ9HtfjT9%2FjW99SEB8VVGXwkM%2FA9mtT%2FuiL0cAfQZRMhtbQJXXDRdkYEw%2FWuhjJ3zxEtEB2m3uH%2B%2BUEzOzGTd5Knm%2Bero%2BhMfN8X%2Botm3DDbtICbBjqcAf5Riii0XE1w2TZvpm%2FPNHTchCu7FnNz5hfvflv8scpgO5M4bGpy%2FadI4%2F7AUQqCQXFw4scF0FCCdb8AKJZsFGG18W1jjDHyR0YuxZFQ%2FJQRt0JP3yr%2BkVxjAH7qTtc0AzF%2FnGTgy3MOF%2Bm6Y7EkyCWyV2r6o1JTBQMftlf7MI8Uvw4cSZE6JoZviaFtmKVLGGgR4F3cDiyU56augA%3D%3D&X-Amz-Signature=a7bb4d7597ad37cdf1f260890c3c474f7f49334db58c9650d75302a34126f7bc&X-Amz-SignedHeaders=host",
              "description": "Screenshot image link"
            },
            "width": {
              "type": "number",
              "example": 600,
              "minimum": 0,
              "description": "Screenshot rectangle width in pixels"
            },
            "height": {
              "type": "number",
              "example": 120,
              "minimum": 0,
              "description": "Screenshot rectangle height in pixels"
            },
            "x": {
              "type": "number",
              "example": 201,
              "description": "Screenshot rectangle distance from the left edge of the page in pixels"
            },
            "y": {
              "type": "number",
              "example": 142,
              "description": "Screenshot rectangle distance from the top edge of the page in pixels"
            },
            "deviceScaleFactor": {
              "type": "number",
              "example": 1.2,
              "description": "Device scale factor when screenshot was taken"
            },
            "full": {
              "type": "string",
              "nullable": true,
              "enum": [
                "page",
                "viewport"
              ],
              "example": null,
              "description": "Whether this is a full *page* screenshot, a *viewport* screenshot, or a different type of screenshot.\n\n`null` means it is either an HTML element screenshot or a particular rectangle (x, y, w, h) screenshot.\n"
            },
            "createdAt": {
              "type": "integer",
              "example": 1620739118,
              "description": "Screenshot capture date and time in the form of a Unix timestamp"
            },
            "comparedToScreenshotId": {
              "type": "string",
              "nullable": true,
              "example": "29d742c2-6f45-4f29-9d48-ba6fe66e6e3d",
              "description": "If screenshot was taken in a monitoring check, this is the ID of the screenshot it was compared to."
            },
            "diffImageSrc": {
              "type": "string",
              "nullable": true,
              "example": "https://prod-browseai-captured-data.s3.amazonaws.com/1fae674a-2788-46a8-83c8-95c4664c6d25/6326b3c1-7b16-4256-a323-7d8d8954bd4e/1061671f-7f71-42ac-bb9a-207d126d1f3a/00001-user-1620230947-6f113cf2-90ef-4c66-a448-9d5c6bd64873.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAQVG3TPBVXHSCAX63%2F20221031%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221031T185642Z&X-Amz-Expires=1800&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJIMEYCIQDfX8VNAl5kBgttrCU85U5wc1ZtSOmshO6%2FPilXOv8nvgIhAIveFfsk%2B2CnEkrMZWriodEPsj0osO5a5zV6eVu%2FXfuZKp8DCHwQAhoMMDQ1NTU3NzA4OTA3IgyrbhVK0MP1WMFBXh0q%2FAJulP5qfaV5mn3NRbINqZN4hy4Dg3IujNrZjw8ef32sWE1Gj2D%2Fc0YTJUzvx%2Fnm7LxyNO6AR35mrVy%2FBm9Q80UIspkcLMl45EK%2FoUDO0fAvoUF8g6iZ905qS3MvnOTxXkObhM1PVmpFeJFMw3jksnOPfKE4X7Ut%2FJXNwD%2F5QzdkQCXkGem%2BlrYSSSf8jB8lihTAjT%2FNXmOKMv3jktmZ13T8J1R8F8zeuLPMQf7QphUzlKn5joPb28cConluQC97y%2BjwxqIYjvIFKXY9cZEoaHGh4c6FbXsia714zG3CQp8NSGLbqCCu93oJI1Z61E%2BZ6PhB3vZGdBvXi61AlJcxZ7sti6i0h4VAbWspiJIgWwoZzrsTtneBNNpUW9tvtacGgEZIwAKV%2F3AhVEZu3WC1eQ9HtfjT9%2FjW99SEB8VVGXwkM%2FA9mtT%2FuiL0cAfQZRMhtbQJXXDRdkYEw%2FWuhjJ3zxEtEB2m3uH%2B%2BUEzOzGTd5Knm%2Bero%2BhMfN8X%2Botm3DDbtICbBjqcAf5Riii0XE1w2TZvpm%2FPNHTchCu7FnNz5hfvflv8scpgO5M4bGpy%2FadI4%2F7AUQqCQXFw4scF0FCCdb8AKJZsFGG18W1jjDHyR0YuxZFQ%2FJQRt0JP3yr%2BkVxjAH7qTtc0AzF%2FnGTgy3MOF%2Bm6Y7EkyCWyV2r6o1JTBQMftlf7MI8Uvw4cSZE6JoZviaFtmKVLGGgR4F3cDiyU56augA%3D%3D&X-Amz-Signature=a7bb4d7597ad37cdf1f260890c3c474f7f49334db58c9650d75302a34126f7bc&X-Amz-SignedHeaders=host",
              "description": "A transparent PNG highlighting changes compared to previous screenshot in red"
            },
            "changePercentage": {
              "type": "number",
              "example": 20,
              "minimum": 0,
              "description": "How much screenshot changed compared to previous screenshot"
            },
            "diffThreshold": {
              "type": "integer",
              "example": 5,
              "minimum": 0,
              "description": "The change percentage threshold above which the user would be notified of the change, based on monitor settings."
            },
            "fileRemovedAt": {
              "type": "integer",
              "nullable": true,
              "example": 1620739118,
              "description": "After your account's data retention period, screenshots get removed and  this field will be screenshot removal date and time in the form of a Unix timestamp.\n"
            }
          }
        }
      },
      "CapturedLists": {
        "type": "array",
        "description": "All lists captured in this task execution.",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "example": "b9585fa0-20be-4094-8a03-6878b86d7cbf",
              "description": "Unique captured list ID"
            },
            "name": {
              "type": "string",
              "example": "Products",
              "description": "Captured list name"
            },
            "skip": {
              "type": "integer",
              "example": 0,
              "minimum": 0,
              "description": "How many list items were skipped before capturing data."
            },
            "limit": {
              "type": "integer",
              "example": 100,
              "description": "How many list items Browse AI was trying to capture from the list."
            },
            "itemsCount": {
              "type": "integer",
              "example": 86,
              "minimum": 0,
              "description": "How many list items Browse AI found in the list"
            },
            "uniqueCapturedTextName": {
              "type": "string",
              "nullable": true,
              "example": "Product Title",
              "description": "Name of the captured text in this list that Browse AI assumes to be unique per list item.\n\nThis is used internally by Browse AI when comparing a captured list to its older version  from a previous monitoring check to link the previous version of each list item to the new one.\n"
            },
            "createdAt": {
              "type": "integer",
              "example": 1620739118,
              "description": "When this list was captured in in the form of a Unix timestamp"
            },
            "listItems": {
              "type": "array",
              "description": "List items",
              "items": {
                "type": "object",
                "properties": {
                  "listItemIndex": {
                    "type": "integer",
                    "example": 0,
                    "minimum": 0
                  },
                  "capturedTexts": {
                    "$ref": "#/components/schemas/CapturedTexts"
                  },
                  "capturedLists": {
                    "type": "array",
                    "description": "(Advanced) Nested captured lists that follow the exact same data structure as regular captured lists.\n\nNested lists are used when, for example, a task is capturing a list products and each product  has a list of tags or available colors that need to be captured.\n",
                    "items": {
                      "type": "object"
                    },
                    "example": {}
                  }
                }
              }
            }
          }
        }
      },
      "TaskJob": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "f6fb62b6-f06a-4bf7-a623-c6a35c2e70b0",
            "description": "Unique task execution ID"
          },
          "variables": {
            "$ref": "#/components/schemas/Variables"
          },
          "triggeredByUserId": {
            "type": "string",
            "nullable": true,
            "example": null,
            "description": "User ID who ran the task on the dashboard"
          },
          "triggeredByTaskMonitorId": {
            "type": "string",
            "nullable": true,
            "example": null,
            "description": "Monitor ID that ran this check"
          },
          "triggeredByAPI": {
            "type": "boolean",
            "example": true,
            "description": "Whether the task was ran through the API"
          },
          "createdAt": {
            "type": "integer",
            "example": 1620739118,
            "description": "Execution creation date and time in the form of a Unix timestamp"
          },
          "startedAt": {
            "type": "integer",
            "nullable": true,
            "example": 1620739118,
            "description": "Execution start date and time in the form of a Unix timestamp"
          },
          "finishedAt": {
            "type": "integer",
            "nullable": true,
            "example": 1620739118,
            "description": "Execution finish date and time in the form of a Unix timestamp.\n\nIf `null`, it means task is still running and capturing data.\n\nExecutions time out with an error if they are not finished within 15 minutes (or the maximum duration allowed on your plan).\n"
          },
          "userFriendlyError": {
            "type": "string",
            "nullable": true,
            "example": null,
            "description": "If task execution fails, a user-friendly error will be provided here."
          },
          "triedRecordingVideo": {
            "type": "boolean",
            "example": true,
            "description": "Whether Browse AI tried to record a video for this task execution.\n\nYou can change a task's video recording setting on its Settings page. \n\nBrowse AI records a video when a task execution is failed and auto-retried as well.\n"
          },
          "videoUrl": {
            "type": "string",
            "nullable": true,
            "example": "https://prod-browseai-captured-data.s3.amazonaws.com/1fae674a-2788-46a8-83c8-95c4664c6d25/6326b3c1-7b16-4256-a323-7d8d8954bd4e/1061671f-7f71-42ac-bb9a-207d126d1f3a/system-1620230966-b1a9688b-05d3-4682-beeb-9ce035e482b1.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAQVG3TPBVXHSCAX63%2F20221031%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221031T185642Z&X-Amz-Expires=1800&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJIMEYCIQDfX8VNAl5kBgttrCU85U5wc1ZtSOmshO6%2FPilXOv8nvgIhAIveFfsk%2B2CnEkrMZWriodEPsj0osO5a5zV6eVu%2FXfuZKp8DCHwQAhoMMDQ1NTU3NzA4OTA3IgyrbhVK0MP1WMFBXh0q%2FAJulP5qfaV5mn3NRbINqZN4hy4Dg3IujNrZjw8ef32sWE1Gj2D%2Fc0YTJUzvx%2Fnm7LxyNO6AR35mrVy%2FBm9Q80UIspkcLMl45EK%2FoUDO0fAvoUF8g6iZ905qS3MvnOTxXkObhM1PVmpFeJFMw3jksnOPfKE4X7Ut%2FJXNwD%2F5QzdkQCXkGem%2BlrYSSSf8jB8lihTAjT%2FNXmOKMv3jktmZ13T8J1R8F8zeuLPMQf7QphUzlKn5joPb28cConluQC97y%2BjwxqIYjvIFKXY9cZEoaHGh4c6FbXsia714zG3CQp8NSGLbqCCu93oJI1Z61E%2BZ6PhB3vZGdBvXi61AlJcxZ7sti6i0h4VAbWspiJIgWwoZzrsTtneBNNpUW9tvtacGgEZIwAKV%2F3AhVEZu3WC1eQ9HtfjT9%2FjW99SEB8VVGXwkM%2FA9mtT%2FuiL0cAfQZRMhtbQJXXDRdkYEw%2FWuhjJ3zxEtEB2m3uH%2B%2BUEzOzGTd5Knm%2Bero%2BhMfN8X%2Botm3DDbtICbBjqcAf5Riii0XE1w2TZvpm%2FPNHTchCu7FnNz5hfvflv8scpgO5M4bGpy%2FadI4%2F7AUQqCQXFw4scF0FCCdb8AKJZsFGG18W1jjDHyR0YuxZFQ%2FJQRt0JP3yr%2BkVxjAH7qTtc0AzF%2FnGTgy3MOF%2Bm6Y7EkyCWyV2r6o1JTBQMftlf7MI8Uvw4cSZE6JoZviaFtmKVLGGgR4F3cDiyU56augA%3D%3D&X-Amz-Signature=a7bb4d7597ad37cdf1f260890c3c474f7f49334db58c9650d75302a34126f7bc&X-Amz-SignedHeaders=host",
            "description": "If a video was recorded for this task execution, this is the link to the video."
          },
          "videoRemovedAt": {
            "type": "integer",
            "nullable": true,
            "example": 1620739118,
            "description": "After your account's data retention period, execution videos get removed and  this field will be video removal date and time in the form of a Unix timestamp.\n"
          },
          "retriedJobId": {
            "deprecated": true,
            "type": "string",
            "nullable": true,
            "example": "673da019-bf0c-476e-9c4f-d35252a151dc",
            "description": "The ID of the failed task execution this execution was retrying."
          },
          "retriedOriginalJobId": {
            "type": "string",
            "nullable": true,
            "example": "673da019-bf0c-476e-9c4f-d35252a151dc",
            "description": "The ID of the failed task execution this execution was retrying."
          },
          "retriedByJobId": {
            "type": "string",
            "nullable": true,
            "example": null,
            "description": "The ID of the task execution that retried this execution, if this execution failed with an error and was retried.\n\nFailed executions get retried if \"Double Check\" option is enabled on task Settings page. \"Double Check\" is enabled by default. \n\nRetry executions do not count towards your credit quota.\n"
          },
          "capturedTexts": {
            "$ref": "#/components/schemas/CapturedTexts"
          },
          "capturedScreenshots": {
            "$ref": "#/components/schemas/CapturedScreenshots"
          },
          "capturedLists": {
            "$ref": "#/components/schemas/CapturedLists"
          }
        }
      },
      "newTaskJob-200": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              200
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "success"
            ]
          },
          "result": {
            "$ref": "#/components/schemas/TaskJob"
          }
        }
      },
      "newTaskJob-400": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              400
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "bad_request",
              "body_parse_error",
              "invalid_task_id"
            ],
            "example": "bad_request"
          }
        }
      },
      "newTaskJob-401": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              401
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "unauthorized",
              "no_api_access"
            ],
            "example": "unauthorized"
          }
        }
      },
      "newTaskJob-404": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              404
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "not_found"
            ]
          }
        }
      },
      "newTaskJob-500": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              500
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "internal_server_error"
            ]
          }
        }
      },
      "newTaskJob-503": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              500
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "task_under_maintenance"
            ]
          }
        }
      },
      "getTaskJob-200": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              200
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "success"
            ]
          },
          "result": {
            "$ref": "#/components/schemas/TaskJob"
          }
        }
      },
      "getTaskJob-400": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              400
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "bad_request",
              "invalid_task_id"
            ],
            "example": "bad_request"
          }
        }
      },
      "getTaskJob-401": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              401
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "unauthorized",
              "no_api_access"
            ],
            "example": "unauthorized"
          }
        }
      },
      "getTaskJob-404": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              404
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "not_found"
            ]
          }
        }
      },
      "Schedules": {
        "type": "array",
        "nullable": true,
        "description": "Array of schedules.\n",
        "items": {
          "anyOf": [
            {
              "type": "object",
              "title": "Fixed interval schedule",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "FIXED_INTERVAL"
                  ],
                  "example": "FIXED_INTERVAL",
                  "description": "Schedule type"
                },
                "everyMinutes": {
                  "type": "number",
                  "example": 60,
                  "description": "Schedule interval in minutes"
                }
              }
            }
          ]
        }
      },
      "Monitor": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "f6fb62b6-f06a-4bf7-a623-c6a35c2e70b0",
            "description": "Unique task monitor ID"
          },
          "name": {
            "type": "string",
            "example": "Monitor Products",
            "description": "Monitor name"
          },
          "variables": {
            "$ref": "#/components/schemas/Variables"
          },
          "schedules": {
            "$ref": "#/components/schemas/Schedules"
          },
          "notifyOnCapturedScreenshotChange": {
            "type": "boolean",
            "example": true,
            "description": "If set to `true`, an email notification will be sent to you when a change is detected in captured screenshots."
          },
          "notifyOnCapturedTextChange": {
            "type": "boolean",
            "example": true,
            "description": "If set to `true`, an email notification will be sent to you when a change is detected in captured texts."
          },
          "capturedScreenshotNotificationThreshold": {
            "type": "number",
            "example": 15,
            "description": "The \"screenshot changed\" email notification will be sent to you if the change is greater than this threshold (in percent)."
          },
          "createdAt": {
            "type": "integer",
            "example": 1620739118,
            "description": "Monitor creation date and time in the form of a Unix timestamp."
          },
          "pausedAt": {
            "type": "integer",
            "nullable": true,
            "example": 1620739118,
            "description": "Monitor pause date and time in the form of a Unix timestamp."
          },
          "updatedAt": {
            "type": "integer",
            "nullable": true,
            "example": 1620739118,
            "description": "Monitor last update date and time in the form of a Unix timestamp."
          }
        }
      },
      "getMonitors-200": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              200
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "success"
            ]
          },
          "monitors": {
            "type": "array",
            "description": "Array of all monitors.",
            "items": {
              "totalCount": {
                "type": "number",
                "example": 10,
                "description": "Total number of monitors this task has"
              },
              "items": {
                "$ref": "#/components/schemas/Monitor"
              }
            }
          }
        }
      },
      "getMonitors-400": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              400
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "invalid_task_id",
              "bad_request"
            ],
            "example": "bad_request"
          }
        }
      },
      "getMonitors-401": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              401
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "unauthorized",
              "no_api_access"
            ],
            "example": "unauthorized"
          }
        }
      },
      "getMonitors-404": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              404
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "not_found"
            ]
          }
        }
      },
      "getMonitors-500": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              500
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "internal_server_error"
            ]
          }
        }
      },
      "MonitorBodyParams": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Monitor Products",
            "description": "Monitor name",
            "minLength": 1,
            "maxLength": 200
          },
          "variables": {
            "type": "object",
            "example": {
              "originUrl": "www.google.com",
              "limit": 10
            },
            "description": "An object of variable values to override default variables."
          },
          "schedules": {
            "$ref": "#/components/schemas/Schedules"
          },
          "notifyOnCapturedScreenshotChange": {
            "type": "boolean",
            "example": true,
            "description": "If set to `true`, an email notification will be sent to you when a change is detected in captured screenshots."
          },
          "notifyOnCapturedTextChange": {
            "type": "boolean",
            "example": true,
            "description": "If set to `true`, an email notification will be sent to you when a change is detected in captured texts."
          },
          "capturedScreenshotNotificationThreshold": {
            "type": "number",
            "example": 15,
            "description": "The \"screenshot changed\" email notification will be sent to you if the change is greater than this threshold (in percent)."
          }
        }
      },
      "createNewMonitor-200": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              200
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "success"
            ]
          },
          "monitor": {
            "$ref": "#/components/schemas/Monitor"
          }
        }
      },
      "createNewMonitor-400": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              400
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "invalid_task_id",
              "bad_request",
              "body_parse_error",
              "invalid_name",
              "invalid_variables",
              "invalid_notifyOnCapturedScreenshotChange",
              "invalid_notifyOnCapturedTextChange",
              "invalid_capturedScreenshotNotificationThreshold",
              "invalid_schedules"
            ],
            "example": "bad_request"
          }
        }
      },
      "createNewMonitor-401": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              401
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "unauthorized",
              "no_api_access"
            ],
            "example": "unauthorized"
          }
        }
      },
      "createNewMonitor-403": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              403
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "schedule_interval_below_minimum"
            ],
            "example": "schedule_interval_below_minimum"
          }
        }
      },
      "createNewMonitor-404": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              404
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "not_found"
            ]
          }
        }
      },
      "createNewMonitor-500": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              500
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "internal_server_error"
            ]
          }
        }
      },
      "getMonitor-200": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              200
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "success"
            ]
          },
          "monitor": {
            "$ref": "#/components/schemas/Monitor"
          }
        }
      },
      "getMonitor-400": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              400
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "invalid_task_id",
              "bad_request"
            ],
            "example": "bad_request"
          }
        }
      },
      "getMonitor-401": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              401
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "unauthorized",
              "no_api_access"
            ],
            "example": "unauthorized"
          }
        }
      },
      "getMonitor-404": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              404
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "not_found"
            ]
          }
        }
      },
      "getMonitor-500": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              500
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "internal_server_error"
            ]
          }
        }
      },
      "deleteMonitor-200": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              200
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "success"
            ]
          },
          "monitor": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "example": "673da019-bf0c-476e-9c4f-d35252a151dc"
              }
            }
          }
        }
      },
      "deleteMonitor-400": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              400
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "invalid_task_id",
              "bad_request"
            ],
            "example": "bad_request"
          }
        }
      },
      "deleteMonitor-401": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              401
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "unauthorized",
              "no_api_access"
            ],
            "example": "unauthorized"
          }
        }
      },
      "deleteMonitor-404": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              404
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "not_found"
            ]
          }
        }
      },
      "deleteMonitor-500": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              500
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "internal_server_error"
            ]
          }
        }
      },
      "MonitorUpdateBodyParams": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "Monitor Products",
            "description": "Monitor name",
            "nullable": true
          },
          "variables": {
            "type": "object",
            "example": {
              "originUrl": "www.google.com",
              "limit": 10
            },
            "description": "An object of variable values to override default variables.",
            "nullable": true
          },
          "schedules": {
            "$ref": "#/components/schemas/Schedules"
          },
          "notifyOnCapturedScreenshotChange": {
            "type": "boolean",
            "example": true,
            "description": "If set to `true`, an email notification will be sent to you when a change is detected in captured screenshots.",
            "nullable": true
          },
          "notifyOnCapturedTextChange": {
            "type": "boolean",
            "example": true,
            "description": "If set to `true`, an email notification will be sent to you when a change is detected in captured texts.",
            "nullable": true
          },
          "capturedScreenshotNotificationThreshold": {
            "type": "number",
            "example": 15,
            "description": "The \"screenshot changed\" email notification will be sent to you if the change is greater than this threshold (in percent).",
            "nullable": true
          }
        }
      },
      "updateMonitor-200": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              200
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "success"
            ]
          },
          "monitor": {
            "$ref": "#/components/schemas/Monitor"
          }
        }
      },
      "updateMonitor-400": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              400
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "invalid_task_id",
              "bad_request",
              "body_parse_error",
              "invalid_name",
              "invalid_variables",
              "invalid_notifyOnCapturedScreenshotChange",
              "invalid_notifyOnCapturedTextChange",
              "invalid_capturedScreenshotNotificationThreshold",
              "invalid_schedules"
            ],
            "example": "bad_request"
          }
        }
      },
      "updateMonitor-401": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              401
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "unauthorized",
              "no_api_access"
            ],
            "example": "unauthorized"
          }
        }
      },
      "updateMonitor-403": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              403
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "schedule_interval_below_minimum"
            ],
            "example": "schedule_interval_below_minimum"
          }
        }
      },
      "updateMonitor-404": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              404
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "not_found"
            ]
          }
        }
      },
      "updateMonitor-500": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              500
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "internal_server_error"
            ]
          }
        }
      },
      "BulkRun": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "f6fb62b6-f06a-4bf7-a623-c6a35c2e70b0",
            "description": "Unique bulk run ID"
          },
          "title": {
            "type": "string",
            "example": "Bulk Run Title",
            "description": "An optional string that describes the bulk run.",
            "minLength": 1,
            "maxLength": 200
          },
          "jobsCount": {
            "type": "integer",
            "example": 10,
            "description": "Number of task executions under this bulk run."
          },
          "taskId": {
            "type": "string",
            "example": "4f5cd7ff-6c98-4cac-8cf0-d7d0cb050b06",
            "description": "Unique task ID"
          },
          "createdAt": {
            "type": "integer",
            "example": 1620739118,
            "description": "Bulk run creation date and time in the form of a Unix timestamp."
          }
        }
      },
      "BulkRuns": {
        "type": "object",
        "properties": {
          "totalCount": {
            "type": "integer",
            "example": 101,
            "description": "Total number of bulk runs a task has had."
          },
          "pageNumber": {
            "type": "integer",
            "example": 1,
            "description": "Current page number."
          },
          "hasMore": {
            "type": "boolean",
            "example": true,
            "description": "Whether there are more bulk runs on the next page."
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BulkRun"
            }
          }
        }
      },
      "getBulkRuns-200": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              200
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "success"
            ]
          },
          "result": {
            "$ref": "#/components/schemas/BulkRuns"
          }
        }
      },
      "getBulkRuns-400": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              400
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "bad_request",
              "invalid_task_id"
            ],
            "example": "bad_request"
          }
        }
      },
      "getBulkRuns-401": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              401
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "unauthorized",
              "no_api_access"
            ],
            "example": "unauthorized"
          }
        }
      },
      "getBulkRuns-404": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              404
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "not_found"
            ]
          }
        }
      },
      "BulkRunBodyParams": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "example": "Bulk Run Title",
            "description": "A string that describes the bulk run.",
            "minLength": 1,
            "maxLength": 200,
            "required": false
          },
          "variables": {
            "type": "array",
            "description": "An array of variables to override the task's default variables.",
            "example": [
              {
                "originUrl": "https://www.ycombinator.com/companies/airbnb"
              },
              {
                "originUrl": "https://www.ycombinator.com/companies/coinbase"
              }
            ],
            "items": {
              "type": "object",
              "description": "An object of variable values to override default variables."
            }
          }
        }
      },
      "newBulkRun-200": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              200
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "success"
            ]
          },
          "result": {
            "type": "object",
            "properties": {
              "bulkRun": {
                "$ref": "#/components/schemas/BulkRun"
              }
            }
          }
        }
      },
      "newBulkRun-400": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              400
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "bad_request",
              "body_parse_error",
              "invalid_task_id",
              "invalid_variables",
              "zero_length_variables"
            ],
            "example": "bad_request"
          }
        }
      },
      "newBulkRun-401": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              401
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "unauthorized",
              "no_api_access"
            ],
            "example": "unauthorized"
          }
        }
      },
      "newBulkRun-403": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              403
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "exceeded_task_execution_quota",
              "exceeded_bulk_run_threshold"
            ],
            "example": "exceeded_task_execution_quota"
          }
        }
      },
      "newBulkRun-404": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              404
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "not_found"
            ]
          }
        }
      },
      "newBulkRun-500": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              500
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "internal_server_error"
            ]
          }
        }
      },
      "TaskJobs": {
        "type": "object",
        "description": "A paginated list of task executions.",
        "properties": {
          "totalCount": {
            "type": "integer",
            "example": 101,
            "description": "Total number of task executions."
          },
          "pageNumber": {
            "type": "integer",
            "example": 1,
            "description": "Current page number."
          },
          "hasMore": {
            "type": "boolean",
            "example": true,
            "description": "Whether there are more task executions on the next page."
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TaskJob"
            }
          }
        }
      },
      "getBulkRun-200": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              200
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "success"
            ]
          },
          "result": {
            "type": "object",
            "properties": {
              "bulkRun": {
                "$ref": "#/components/schemas/BulkRun"
              },
              "taskJobs": {
                "$ref": "#/components/schemas/TaskJobs"
              }
            }
          }
        }
      },
      "getBulkRun-400": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              400
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "bad_request",
              "invalid_task_id"
            ],
            "example": "bad_request"
          }
        }
      },
      "getBulkRun-401": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              401
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "unauthorized",
              "no_api_access"
            ],
            "example": "unauthorized"
          }
        }
      },
      "getBulkRun-404": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "enum": [
              404
            ]
          },
          "messageCode": {
            "type": "string",
            "enum": [
              "not_found"
            ]
          }
        }
      }
    }
  },
  "x-tagGroups": [
    {
      "name": "Core Resources",
      "tags": [
        "tasks",
        "executions",
        "monitors",
        "bulk runs"
      ]
    }
  ]
}