> ## Documentation Index
> Fetch the complete documentation index at: https://docs.screenshothis.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Take Screenshot

> Generate optimized website screenshots with advanced customization options



## OpenAPI

````yaml get /v1/screenshots/take
openapi: 3.1.0
info:
  version: 1.0.0
  title: Screenshothis API
  description: API designed to take screenshots of websites
servers:
  - url: https://api.screenshothis.com
    description: Production Server
security: []
paths:
  /v1/screenshots/take:
    get:
      summary: Generate optimized website screenshot
      description: >-
        Captures high-quality screenshots of websites with advanced optimization
        features including smart caching, CDN integration, request
        deduplication, and quota management. Supports multiple image formats
        (JPEG, PNG, WebP) with customizable dimensions, device emulation, and
        viewport settings. Implements efficient S3 streaming for large images
        and conditional requests for optimal performance.
      operationId: takeScreenshot
      parameters:
        - schema:
            type: string
            minLength: 32
            description: >-
              API key used to authenticate the request. Must be at least 32
              characters long.
            example: sk_live_abcdef1234567890abcdef1234567890
          required: true
          name: api_key
          in: query
        - schema:
            type: string
            format: uri
            description: >-
              Target URL of the website to capture. Must be a valid HTTP or
              HTTPS URL.
            example: https://example.com
          required: true
          name: url
          in: query
        - schema:
            type: string
            nullable: true
            description: >-
              CSS selector to capture a specific element instead of the full
              page. If provided, only the matching element will be
              screenshotted.
            example: .main-content
          required: false
          name: selector
          in: query
        - schema:
            type: number
            nullable: true
            default: 1920
            description: Width of the viewport in pixels for the screenshot
            example: 1920
            minimum: 1
            maximum: 7680
          required: false
          name: width
          in: query
        - schema:
            type: number
            nullable: true
            default: 1080
            description: Height of the viewport in pixels for the screenshot
            example: 1080
            minimum: 1
            maximum: 4320
          required: false
          name: height
          in: query
        - schema:
            type: boolean
            nullable: true
            default: false
            description: >-
              Enable mobile device emulation with touch events and mobile user
              agent
            example: false
          required: false
          name: is_mobile
          in: query
        - schema:
            type: boolean
            nullable: true
            default: false
            description: >-
              Set device orientation to landscape mode when mobile emulation is
              enabled
            example: false
          required: false
          name: is_landscape
          in: query
        - schema:
            type: boolean
            nullable: true
            default: false
            description: Enable touch event support for the emulated device
            example: false
          required: false
          name: has_touch
          in: query
        - schema:
            type: number
            nullable: true
            default: 1
            description: >-
              Device pixel ratio for high-DPI displays. Higher values produce
              sharper images on retina displays.
            example: 1
            minimum: 0.1
            maximum: 3
          required: false
          name: device_scale_factor
          in: query
        - schema:
            type: string
            enum:
              - jpeg
              - png
              - webp
            default: jpeg
            description: >-
              Output image format. JPEG offers smaller file sizes, PNG supports
              transparency, WebP provides modern compression.
            example: jpeg
          required: false
          name: format
          in: query
        - schema:
            type: number
            minimum: 20
            maximum: 100
            default: 80
            description: >-
              Image compression quality from 20 (lowest/smallest) to 100
              (highest/largest). Only applies to JPEG and WebP formats.
            example: 80
          required: false
          name: quality
          in: query
        - schema:
            type: boolean
            nullable: true
            default: false
            description: >-
              Block advertisements and ad-related content from loading during
              screenshot capture
            example: false
          required: false
          name: block_ads
          in: query
        - schema:
            type: boolean
            nullable: true
            default: false
            description: >-
              Automatically hide cookie consent banners and GDPR notices for
              cleaner screenshots
            example: false
          required: false
          name: block_cookie_banners
          in: query
        - schema:
            type: boolean
            nullable: true
            default: false
            description: >-
              Block tracking scripts and analytics to improve page load speed
              and privacy
            example: false
          required: false
          name: block_trackers
          in: query
        - schema:
            type: string
            description: >-
              Newline-separated list of URL patterns to block during page load.
              Supports wildcards and regex patterns.
            example: |-
              *.doubleclick.net
              *.googletagmanager.com
              */analytics/*
          required: false
          name: block_requests
          in: query
        - schema:
            type: array
            items:
              type: string
              enum:
                - document
                - stylesheet
                - image
                - media
                - font
                - script
                - texttrack
                - xhr
                - fetch
                - prefetch
                - eventsource
                - websocket
                - manifest
                - signedexchange
                - ping
                - cspviolationreport
                - preflight
                - other
              description: >-
                Types of web resources that can be blocked during screenshot
                capture
              example: script
            default: []
            description: >-
              Array of resource types to prevent from loading. Useful for faster
              page loads and cleaner screenshots.
            example:
              - script
              - stylesheet
              - font
          required: false
          name: block_resources
          in: query
        - schema:
            type: string
            enum:
              - light
              - dark
            default: light
            description: >-
              Set the preferred color scheme for websites that support
              dark/light mode theming
            example: light
          required: false
          name: prefers_color_scheme
          in: query
        - schema:
            type: string
            enum:
              - no-preference
              - reduce
            default: no-preference
            description: >-
              Accessibility setting to reduce animations and transitions for
              motion-sensitive users
            example: no-preference
          required: false
          name: prefers_reduced_motion
          in: query
        - schema:
            type: boolean
            nullable: true
            default: false
            description: >-
              Whether to use cached version of the screenshot if available, or
              force a fresh capture
            example: false
          required: false
          name: is_cached
          in: query
        - schema:
            type: number
            minimum: 3600
            maximum: 31622400
            default: 3600
            description: >-
              Cache expiration time in seconds. Minimum 1 hour (3600), maximum 1
              year (31622400)
            example: 3600
          required: false
          name: cache_ttl
          in: query
        - schema:
            type: string
            description: >-
              Custom cache key for grouping related screenshots. Auto-generated
              if not provided.
            example: homepage-desktop-light
          required: false
          name: cache_key
          in: query
        - schema:
            type: string
            maxLength: 8192
            description: >-
              Custom HTTP headers to send with the request in 'Name: Value'
              format, one per line. Maximum 8KB total size.
            example: |-
              User-Agent: MyBot/1.0
              Authorization: Bearer token123
              X-Custom-Header: value
          required: false
          name: headers
          in: query
        - schema:
            type: string
            maxLength: 4096
            description: >-
              Cookies to set before capturing the screenshot using Set-Cookie
              syntax (name=value; attributes), one per line. Maximum 4KB total
              size.
            example: |-
              session_id=abc123; Domain=example.com; Path=/; Secure
              user_pref=dark_mode; Max-Age=3600
          required: false
          name: cookies
          in: query
        - schema:
            type: boolean
            nullable: true
            default: false
            description: >-
              Bypass Content Security Policy restrictions that might prevent
              proper page rendering or script execution
            example: false
          required: false
          name: bypass_csp
          in: query
      responses:
        '200':
          description: Optimized screenshot response with enhanced CDN support
          content:
            image/jpeg:
              schema:
                type: string
                format: binary
                example: <binary JPEG image data>
            image/png:
              schema:
                type: string
                format: binary
                example: <binary PNG image data>
            image/webp:
              schema:
                type: string
                format: binary
                example: <binary WebP image data>
        '304':
          description: Not Modified - Content hasn't changed
        '403':
          description: Quota exceeded
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  requestId:
                    type: string
                required:
                  - error
                  - requestId
              example:
                error: Quota exceeded for this billing period
                requestId: req_1234567890abcdef
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  requestId:
                    type: string
                  message:
                    type: string
                  code:
                    type: string
                required:
                  - requestId
                  - message
                  - code
              example:
                requestId: req_1234567890abcdef
                message: Screenshot generation failed
                code: SCREENSHOT_ERROR
      x-codeSamples:
        - lang: typescript
          label: Typescript (SDK)
          source: |-
            import { Screenshothis } from "@screenshothis/sdk";

            const screenshothis = new Screenshothis();

            async function run() {
              const result = await screenshothis.screenshots.take({
                apiKey: "sk_live_abcdef1234567890abcdef1234567890",
                url: "https://example.com",
                selector: ".main-content",
                blockRequests: "*.doubleclick.net\n" +
                "*.googletagmanager.com\n" +
                "*/analytics/*",
                blockResources: [
                  "script",
                  "stylesheet",
                  "font",
                ],
                cacheKey: "homepage-desktop-light",
                headers: "User-Agent: MyBot/1.0\n" +
                "Authorization: Bearer token123\n" +
                "X-Custom-Header: value",
                cookies: "session_id=abc123; Domain=example.com; Path=/; Secure\n" +
                "user_pref=dark_mode; Max-Age=3600",
              });

              console.log(result);
            }

            run();
        - lang: php
          label: PHP (SDK)
          source: |-
            declare(strict_types=1);

            require 'vendor/autoload.php';

            use Screenshothis\Screenshothis;
            use Screenshothis\Screenshothis\Models\Operations;

            $sdk = Screenshothis\Screenshothis::builder()->build();

            $request = new Operations\TakeScreenshotRequest(
                apiKey: 'sk_live_abcdef1234567890abcdef1234567890',
                url: 'https://example.com',
                selector: '.main-content',
                blockRequests: '*.doubleclick.net\n' .
                '*.googletagmanager.com\n' .
                '*/analytics/*',
                blockResources: [
                    Operations\BlockResource::Script,
                    Operations\BlockResource::Stylesheet,
                    Operations\BlockResource::Font,
                ],
                cacheKey: 'homepage-desktop-light',
                headers: 'User-Agent: MyBot/1.0\n' .
                'Authorization: Bearer token123\n' .
                'X-Custom-Header: value',
                cookies: 'session_id=abc123; Domain=example.com; Path=/; Secure\n' .
                'user_pref=dark_mode; Max-Age=3600',
            );

            $response = $sdk->takeScreenshot(
                request: $request
            );

            if ($response->twoHundredImageJpegBytes !== null) {
                // handle response
            }

````