{
  "openapi": "3.0.1",
  "info": {
    "title": "Website Screenshot Generator - $3.00 per 1,000",
    "description": "Give it a list of URLs, get a rendered PNG or JPEG of each page: viewport or full page, 320-2560 px wide, 1x/2x/3x density, dark mode, mobile layout. A CSS selector takes out the cookie banner. One row per page: image link, final URL, title, status. Failed pages aren't charged.",
    "version": "0.1",
    "x-build-id": "xadXbTRNXMiqokUQp"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/dami_studio~website-screenshot-generator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-dami_studio-website-screenshot-generator",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/dami_studio~website-screenshot-generator/runs": {
      "post": {
        "operationId": "runs-sync-dami_studio-website-screenshot-generator",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/dami_studio~website-screenshot-generator/run-sync": {
      "post": {
        "operationId": "run-sync-dami_studio-website-screenshot-generator",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "urls": {
            "title": "Page addresses",
            "minItems": 0,
            "maxItems": 300,
            "type": "array",
            "description": "One or more pages to photograph, one per line. A bare domain like example.com works too. Up to 300 per run, and duplicates are dropped before anything is charged.",
            "items": {
              "type": "string"
            }
          },
          "fullPage": {
            "title": "Capture the whole page",
            "type": "boolean",
            "description": "Off: you get exactly the viewport, like the first screen a visitor sees. On: the page is scrolled and stitched into one tall image, down to the height ceiling below."
          },
          "viewportWidth": {
            "title": "Viewport width (px)",
            "minimum": 320,
            "maximum": 2560,
            "type": "integer",
            "description": "Browser window width the page is laid out at. 1440 is a typical laptop, 1920 a desktop monitor, 390 a phone. Between 320 and 2560."
          },
          "viewportHeight": {
            "title": "Viewport height (px)",
            "minimum": 200,
            "maximum": 4000,
            "type": "integer",
            "description": "Browser window height. This is the image height unless \"Capture the whole page\" is on. Between 200 and 4000."
          },
          "deviceScaleFactor": {
            "title": "Pixel density",
            "minimum": 1,
            "maximum": 3,
            "type": "integer",
            "description": "1 for a normal screen, 2 for a retina-quality image at twice the pixels on each axis, 3 for print. Remember that 2x is four times the file size and 3x is nine times."
          },
          "darkMode": {
            "title": "Dark mode",
            "type": "boolean",
            "description": "Tells the page the visitor prefers a dark colour scheme. Sites that ship a dark theme will render it; sites that do not are unchanged."
          },
          "mobile": {
            "title": "Mobile device",
            "type": "boolean",
            "description": "Renders as a touch phone with a mobile user agent, so you get the responsive layout. Pair it with a narrow viewport width such as 390."
          },
          "format": {
            "title": "Image format",
            "enum": [
              "jpeg",
              "png"
            ],
            "type": "string",
            "description": "JPEG is far smaller and right for almost everything. PNG is lossless and supports a transparent background."
          },
          "quality": {
            "title": "JPEG quality",
            "minimum": 30,
            "maximum": 100,
            "type": "integer",
            "description": "Only applies to JPEG. 80 is visually clean at about a third of the size of 100. Lower it to fit more pages inside the run's size budget."
          },
          "waitUntil": {
            "title": "Wait until",
            "enum": [
              "domcontentloaded",
              "load",
              "networkidle",
              "commit"
            ],
            "type": "string",
            "description": "How ready the page must be before the shutter fires. \"domcontentloaded\" is the fast default. \"load\" waits for images and stylesheets. \"networkidle\" waits for traffic to stop, which on an ad-funded page can mean waiting for the timeout. \"commit\" fires almost immediately."
          },
          "delayMs": {
            "title": "Extra wait (ms)",
            "minimum": 0,
            "maximum": 15000,
            "type": "integer",
            "description": "Pause after the page is ready, to let animations finish and fonts swap in. 800 ms suits most sites; raise it for a heavy single-page app."
          },
          "navigationTimeoutMs": {
            "title": "Navigation timeout (ms)",
            "minimum": 5000,
            "maximum": 60000,
            "type": "integer",
            "description": "Give up on a page that has not become ready in this long. The page still gets an uncharged row explaining the timeout."
          },
          "scrollToBottom": {
            "title": "Scroll before capturing",
            "type": "boolean",
            "description": "Scrolls to the foot of the page first so lazy-loaded images below the fold are actually there in the picture. Turned on automatically when you capture the whole page."
          },
          "maxFullPageHeight": {
            "title": "Full-page height ceiling (px)",
            "minimum": 600,
            "maximum": 20000,
            "type": "integer",
            "description": "The tallest a whole-page capture may get before it is cut off. Protects you from an endless feed turning into a 60,000 pixel image. Rows tell you when a picture was cut."
          },
          "maxTotalImageMb": {
            "title": "Total image budget (MB)",
            "minimum": 5,
            "maximum": 500,
            "type": "integer",
            "description": "The run stops taking pictures once it has written this many megabytes and writes one uncharged row saying so. Nothing is charged for the pages it skipped."
          },
          "maxItems": {
            "title": "Maximum screenshots",
            "minimum": 1,
            "maximum": 300,
            "type": "integer",
            "description": "Hard stop on how many pages this run will photograph, whatever the list length. Keep it low while you are testing - you pay per screenshot."
          },
          "selector": {
            "title": "Capture one element only",
            "type": "string",
            "description": "A CSS selector. Fill it in to photograph just that element - a pricing table, a hero banner, a chart - instead of the page. Left empty, the whole viewport or page is captured."
          },
          "hideSelectors": {
            "title": "Hide these elements",
            "minItems": 0,
            "maxItems": 30,
            "type": "array",
            "description": "CSS selectors to make invisible before capturing, while keeping the space they occupy. Good for a sticky header you want gone without the layout shifting.",
            "items": {
              "type": "string"
            }
          },
          "removeSelectors": {
            "title": "Remove these elements",
            "minItems": 0,
            "maxItems": 30,
            "type": "array",
            "description": "CSS selectors to take out of the layout entirely. This is the one for cookie banners, chat bubbles and newsletter pop-ups.",
            "items": {
              "type": "string"
            }
          },
          "customCss": {
            "title": "Extra CSS",
            "type": "string",
            "description": "Raw CSS injected just before the picture is taken. Anything you can write in a stylesheet works, up to 4,000 characters."
          },
          "transparentBackground": {
            "title": "Transparent background",
            "type": "boolean",
            "description": "PNG only. Leaves the page background out of the image, which is what you want when capturing a single element to drop into a design."
          },
          "locale": {
            "title": "Language",
            "type": "string",
            "description": "The language the browser asks for, as a code such as en-US, de-DE or fr-FR. Sites that localise will render in that language."
          },
          "timezone": {
            "title": "Time zone",
            "type": "string",
            "description": "An IANA time zone such as Europe/Berlin or America/New_York, for pages that print dates or clocks."
          },
          "concurrency": {
            "title": "Pages at a time",
            "minimum": 1,
            "maximum": 6,
            "type": "integer",
            "description": "How many pages render simultaneously. 3 is a good balance. Lower it to 1 if a site you are capturing objects to several requests at once."
          },
          "useProxy": {
            "title": "Route through rotating addresses",
            "type": "boolean",
            "description": "Off by default, and off is usually right: the run goes out from its own container address, which costs you nothing and works on ordinary public pages. Turn it on if a site you are capturing serves the container an anti-bot check instead of the page — every render then leaves through a different address from a large rotating pool.",
            "default": false
          },
          "proxyUrls": {
            "title": "Your own proxy servers (optional)",
            "minItems": 0,
            "maxItems": 50,
            "type": "array",
            "description": "Leave this empty unless you already pay for proxy servers and want the traffic to leave through them, in the form http://user:pass@host:port. Anything listed here takes precedence over the rotating pool. This Actor never uses per-gigabyte metered proxy groups, whatever is requested.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}