{
  "openapi": "3.0.1",
  "info": {
    "title": "Ultimate Screenshot",
    "description": "🚀 Capture ANY website as HD screenshots, videos, or PDFs! 📸 100+ device presets (iPhone, Android, tablets). Perfect for web scraping, monitoring, testing & marketing. Export as PNG/JPEG/PDF/MP4/GIF. Fast, reliable, proxy-ready. Try FREE now!",
    "version": "2.0",
    "x-build-id": "olXS7YnHqyZyk6GM1"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/dz_omar~ultimate-screenshot/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-dz_omar-ultimate-screenshot",
        "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/dz_omar~ultimate-screenshot/runs": {
      "post": {
        "operationId": "runs-sync-dz_omar-ultimate-screenshot",
        "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/dz_omar~ultimate-screenshot/run-sync": {
      "post": {
        "operationId": "run-sync-dz_omar-ultimate-screenshot",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "linkUrls"
        ],
        "properties": {
          "linkUrls": {
            "title": "🌐 Target URLs",
            "type": "array",
            "description": "The web pages to capture, one address per line. Every address is processed in turn with the settings below. The field now checks that each line looks like a web address, so a stray number or word is caught here instead of producing an empty result. A bare domain is fine — example.com is completed to https://example.com.",
            "items": {
              "type": "string",
              "pattern": "^(https?://)?(([\\w-]+\\.)+[a-zA-Z]{2,}|(\\d{1,3}\\.){3}\\d{1,3})(:\\d+)?([/?#].*)?$"
            }
          },
          "outputFormat": {
            "title": "💾 Output format",
            "enum": [
              "jpeg",
              "png",
              "pdf",
              "gif",
              "mp4"
            ],
            "type": "string",
            "description": "What to produce for each page. JPEG and PNG are still images, PDF is a printable document, MP4 and GIF are short recordings of the page (configured in the Video & GIF section).",
            "default": "jpeg"
          },
          "fullPage": {
            "title": "🖼️ Capture the whole page",
            "type": "boolean",
            "description": "Capture the entire page from top to bottom instead of just the visible window. Very tall pages are clipped to 16 000 pixels, which is the tallest image a browser can render in one pass. Applies to JPEG and PNG.",
            "default": false
          },
          "waitUntil": {
            "title": "When the page counts as ready",
            "enum": [
              "load",
              "domcontentloaded",
              "networkidle0",
              "networkidle2"
            ],
            "type": "string",
            "description": "\"Load\" suits most sites and is the fastest complete option. Choose a Network Idle mode only for pages that keep drawing after everything has loaded — it can add many seconds per page. DOM Ready is fastest of all but may capture a page before its images arrive.",
            "default": "load"
          },
          "timeouT": {
            "title": "Page load timeout",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "How long to wait for a page to load before giving up on that attempt. Raise it for slow or heavy sites.",
            "default": 30
          },
          "maxRetries": {
            "title": "Retries on failure",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Extra attempts to make when a page fails to load. 0 means a single attempt.",
            "default": 2
          },
          "delayBeforeScreenshot": {
            "title": "Wait before capturing",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Extra pause after the page is ready and before the capture starts. Useful for animations, fonts and lazy images that need a moment to settle.",
            "default": 1000
          },
          "waitForSelector": {
            "title": "Wait for an element",
            "type": "string",
            "description": "Optional CSS selector to wait for before capturing, for example \"#main\" or \".product-grid\". If it never appears the page is captured anyway, and the result row says so."
          },
          "scrollToBottom": {
            "title": "👇 Scroll through the page first",
            "type": "boolean",
            "description": "Scroll to the bottom before capturing, so lazy-loaded images and content are actually there. Recommended whenever \"Capture the whole page\" is on.",
            "default": false
          },
          "maxScrollSeconds": {
            "title": "Scrolling limit",
            "minimum": 1,
            "maximum": 60,
            "type": "integer",
            "description": "The longest scrolling is allowed to take. Scrolling also stops as soon as the page stops growing. On an endless feed — a social timeline, a news river — this limit is what ends the scroll, and it decides how much of the page ends up in the capture.",
            "default": 15
          },
          "delayAfterScrolling": {
            "title": "Wait after scrolling",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Pause after scrolling finishes, so content loaded on the way down has time to render.",
            "default": 500
          },
          "hideSelectors": {
            "title": "Hide elements before capturing",
            "type": "array",
            "description": "One selector per line. Anything matching is hidden before the shot — cookie banners, chat bubbles, sticky headers, newsletter pop-ups.\n\nHiding is applied the moment the page opens, so banners that appear a few seconds later are caught too. A selector that matches nothing is reported in the result row's `notes`, so a typo never fails silently.",
            "items": {
              "type": "string"
            }
          },
          "recordingMode": {
            "title": "What to record",
            "enum": [
              "scroll",
              "static"
            ],
            "type": "string",
            "description": "Scroll through the page records a smooth top-to-bottom pass; the step between frames follows the real page height, so the last frame lands exactly at the bottom. Stay in place records the visible window without moving, which suits carousels, animations and players.",
            "default": "scroll"
          },
          "recordSeconds": {
            "title": "Recording length",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "How long the finished clip plays for. GIFs are capped at 10 seconds and MP4s at 30. A clip is shortened automatically if length × frame rate would pass 300 frames, and the result row says when that happened.",
            "default": 5
          },
          "fps": {
            "title": "Frames per second",
            "minimum": 5,
            "maximum": 30,
            "type": "integer",
            "description": "Playback frame rate. 10 is smooth for a scroll-through, 24–30 looks like video. GIFs are capped at 15. Higher values mean more frames, a longer capture and a bigger file.",
            "default": 10
          },
          "jpegQuality": {
            "title": "JPEG quality",
            "minimum": 20,
            "maximum": 100,
            "type": "integer",
            "description": "Higher is sharper and larger. 85 is a good balance for screenshots of text-heavy pages.",
            "default": 85
          },
          "printBackground": {
            "title": "Include backgrounds",
            "type": "boolean",
            "description": "Keep background colours and images, so the PDF looks like the page rather than a printer-friendly version of it.",
            "default": true
          },
          "formaT": {
            "title": "Paper size",
            "enum": [
              "A4",
              "LETTER",
              "LEGAL",
              "TABLOID",
              "LEDGER",
              "A0",
              "A1",
              "A2",
              "A3",
              "A5",
              "A6"
            ],
            "type": "string",
            "description": "Standard paper size for the PDF. Ignored when any custom margin below is above 0.",
            "default": "A4"
          },
          "landscape": {
            "title": "Landscape orientation",
            "type": "boolean",
            "description": "Rotate the PDF pages to landscape.",
            "default": false
          },
          "toP": {
            "title": "Top margin",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Top margin in millimetres. Setting any margin above 0 replaces the paper size above with these exact margins.",
            "default": 0
          },
          "righT": {
            "title": "Right margin",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Right margin in millimetres.",
            "default": 0
          },
          "bottoM": {
            "title": "Bottom margin",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Bottom margin in millimetres.",
            "default": 0
          },
          "lefT": {
            "title": "Left margin",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Left margin in millimetres.",
            "default": 0
          },
          "device": {
            "title": "Device preset",
            "enum": [
              "Blackberry PlayBook",
              "Blackberry PlayBook landscape",
              "BlackBerry Z30",
              "BlackBerry Z30 landscape",
              "Galaxy Note 3",
              "Galaxy Note 3 landscape",
              "Galaxy Note II",
              "Galaxy Note II landscape",
              "Galaxy S III",
              "Galaxy S III landscape",
              "Galaxy S5",
              "Galaxy S5 landscape",
              "Galaxy S8",
              "Galaxy S8 landscape",
              "Galaxy S9+",
              "Galaxy S9+ landscape",
              "Galaxy Tab S4",
              "Galaxy Tab S4 landscape",
              "iPad",
              "iPad landscape",
              "iPad (gen 6)",
              "iPad (gen 6) landscape",
              "iPad (gen 7)",
              "iPad (gen 7) landscape",
              "iPad Mini",
              "iPad Mini landscape",
              "iPad Pro",
              "iPad Pro landscape",
              "iPad Pro 11",
              "iPad Pro 11 landscape",
              "iPhone 4",
              "iPhone 4 landscape",
              "iPhone 5",
              "iPhone 5 landscape",
              "iPhone 6",
              "iPhone 6 landscape",
              "iPhone 6 Plus",
              "iPhone 6 Plus landscape",
              "iPhone 7",
              "iPhone 7 landscape",
              "iPhone 7 Plus",
              "iPhone 7 Plus landscape",
              "iPhone 8",
              "iPhone 8 landscape",
              "iPhone 8 Plus",
              "iPhone 8 Plus landscape",
              "iPhone SE",
              "iPhone SE landscape",
              "iPhone X",
              "iPhone X landscape",
              "iPhone XR",
              "iPhone XR landscape",
              "iPhone 11",
              "iPhone 11 landscape",
              "iPhone 11 Pro",
              "iPhone 11 Pro landscape",
              "iPhone 11 Pro Max",
              "iPhone 11 Pro Max landscape",
              "iPhone 12",
              "iPhone 12 landscape",
              "iPhone 12 Pro",
              "iPhone 12 Pro landscape",
              "iPhone 12 Pro Max",
              "iPhone 12 Pro Max landscape",
              "iPhone 12 Mini",
              "iPhone 12 Mini landscape",
              "iPhone 13",
              "iPhone 13 landscape",
              "iPhone 13 Pro",
              "iPhone 13 Pro landscape",
              "iPhone 13 Pro Max",
              "iPhone 13 Pro Max landscape",
              "iPhone 13 Mini",
              "iPhone 13 Mini landscape",
              "iPhone 14",
              "iPhone 14 landscape",
              "iPhone 14 Plus",
              "iPhone 14 Plus landscape",
              "iPhone 14 Pro",
              "iPhone 14 Pro landscape",
              "iPhone 14 Pro Max",
              "iPhone 14 Pro Max landscape",
              "iPhone 15",
              "iPhone 15 landscape",
              "iPhone 15 Plus",
              "iPhone 15 Plus landscape",
              "iPhone 15 Pro",
              "iPhone 15 Pro landscape",
              "iPhone 15 Pro Max",
              "iPhone 15 Pro Max landscape",
              "JioPhone 2",
              "JioPhone 2 landscape",
              "Kindle Fire HDX",
              "Kindle Fire HDX landscape",
              "LG Optimus L70",
              "LG Optimus L70 landscape",
              "Microsoft Lumia 550",
              "Microsoft Lumia 950",
              "Microsoft Lumia 950 landscape",
              "Nexus 10",
              "Nexus 10 landscape",
              "Nexus 4",
              "Nexus 4 landscape",
              "Nexus 5",
              "Nexus 5 landscape",
              "Nexus 5X",
              "Nexus 5X landscape",
              "Nexus 6",
              "Nexus 6 landscape",
              "Nexus 6P",
              "Nexus 6P landscape",
              "Nexus 7",
              "Nexus 7 landscape",
              "Nokia Lumia 520",
              "Nokia Lumia 520 landscape",
              "Nokia N9",
              "Nokia N9 landscape",
              "Pixel 2",
              "Pixel 2 landscape",
              "Pixel 2 XL",
              "Pixel 2 XL landscape",
              "Pixel 3",
              "Pixel 3 landscape",
              "Pixel 4",
              "Pixel 4 landscape",
              "Pixel 4a (5G)",
              "Pixel 4a (5G) landscape",
              "Pixel 5",
              "Pixel 5 landscape",
              "Moto G4",
              "Moto G4 landscape"
            ],
            "type": "string",
            "description": "Emulate a specific phone or tablet, including its screen size, pixel density and browser identity. Leave empty to use the custom window size below."
          },
          "window_Width": {
            "title": "Window width",
            "minimum": 320,
            "maximum": 3840,
            "type": "integer",
            "description": "Browser window width in pixels when no device preset is selected. 1920 is a standard desktop; 1366 and 1440 are common laptop widths.",
            "default": 1920
          },
          "window_Height": {
            "title": "Window height",
            "minimum": 240,
            "maximum": 2160,
            "type": "integer",
            "description": "Browser window height in pixels when no device preset is selected. With \"Capture the whole page\" on, this only sets the starting window before scrolling.",
            "default": 1080
          },
          "userAgent": {
            "title": "Custom browser identity",
            "type": "string",
            "description": "Optional User-Agent string to send instead of the default one. Leave empty unless a site needs a specific browser identity."
          },
          "cookies": {
            "title": "Cookies",
            "type": "array",
            "description": "🔒 Encrypted at rest and never written to the run log — only the number of cookies applied is reported.\n\nPaste a JSON array exported from a browser where you are signed in. Cookie-Editor's JSON export works as-is: `expirationDate`, `sameSite: \"no_restriction\"`, `hostOnly` and a leading dot on the domain are all understood.\n\n**How to get them**\n1. Install [Cookie-Editor](https://cookie-editor.com) or [Copy Cookies](https://chromewebstore.google.com/detail/copy-cookies/jcbpglbplpblnagieibnemmkiamekcdg)\n2. Sign in to the site in your browser\n3. Open the extension → Export → JSON\n4. Paste the array here\n\nEach cookie needs at least a name and a value; the address being captured supplies the domain when it is missing. If the site clears the session during load, the result row says so."
          },
          "proxyConfig": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Which proxy to use. Leave the default unless you need a specific country or your own proxy.",
            "default": {
              "useApifyProxy": true
            }
          },
          "enableSSL": {
            "title": "Verify certificates",
            "type": "boolean",
            "description": "Keep this on for normal use. Turn it off only to capture a page with a self-signed or expired certificate that you trust.",
            "default": true
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}