Skip to content

Common body params

All render methods share three body properties: doppio, launch, and page. Let's look at each of them:

☝️ Keep in mind that most parameters are optional.

About params

The parameters we expose are modeled after the Puppeteer API.

doppio

js
{
  "doppio": {
    "presignedUrl": "string",
    "contentDisposition": "inline"
  }
}

The presignedUrl property defines the URL we use to upload your document to your S3 bucket. For more information, see Upload to your S3 bucket. If it is not set, the document is stored temporarily in our own S3 bucket.

The contentDisposition property determines how the uploaded file is presented to the user. It can be set to inline to display the document in the browser, or attachment to prompt the user to download it. If this property is not specified, the upload proceeds without setting this header and falls back to your bucket's default behavior.

When you use a custom presigned URL, make sure your bucket supports setting this header.

☝️ This property can also be used without a presigned URL.

Property details

Property nameTypeDescription
presignedUrlstringS3 upload URL Optional
contentDispositionstring"inline" or "attachment" Optional

launch

js
{
  "launch": {
    "defaultViewport": {
      "width": 0,
      "height": 0,
      "deviceScaleFactor": 0,
      "isMobile": true,
      "hasTouch": true,
      "isLandscape": true
    }
  }
}

The launch object exposes properties from Puppeteer's BrowserConnectOptions.

Property details

Property nameTypeDescription
defaultViewportViewportSets the viewport for each page. Optional

defaultViewport properties:
Property nameTypeDefault valueDescription
widthnumber1920The page width in pixels. Optional
heightnumber1080The page height in pixels. Optional
deviceScaleFactornumber1Specifies the device scale factor. Set a value between 1 and 2. See devicePixelRatio for more information. Optional
isMobilebooleanfalseWhether the meta viewport tag is taken into account. Optional
hasTouchbooleanfalseSpecifies whether the viewport supports touch events. Optional
isLandscapebooleanfalseSpecifies whether the viewport is in landscape mode. Optional

page

Most of the properties are optional 😌

js
{
  "page": {
    "goto": {
      "url": "https://doc.doppio.sh",
      "options": {
        "waitUntil": ["load"],
        "referer": "https://doc.doppio.sh"
      }
    },
    "setContent": {
      "html": "PHA+ZG9wcGlvLnNoPC9wPg==",
      "options": {
        "waitUntil": ["networkidle0"]
      }
    },
    "setJavaScriptEnabled": true,
    "emulateMediaType": "print",
    "setExtraHTTPHeaders": {},
    "emulateTimezone": "America/New_York",
    "authenticate": {
      "username": "thisisausername",
      "password": "thisisapassword"
    },
    "setCookies": [],
    "setUserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.5 Safari/605.1.15",
    "setLocalStorageItems": [],
    "waitForFunction": {
      "pageFunction": "() => !document.querySelector('.loading')",
      "options": { "timeout": 10000 }
    },
    "waitForSelector": {
      "selector": "#invoice-ready",
      "options": { "timeout": 10000, "visible": true }
    },
    "pdf": { ... },
    "screenshot": { ... },
  }
}

The page property defines what you want to render, how Doppio should access it, and which render options should be applied. Some properties vary depending on whether you want to render a PDF or a screenshot.

Property nameTypeDescription
gotoGotoUse this when your document is available at a public or reachable URL.
setContentSetContentUse this when you want to send the document HTML directly as base64-encoded content.
setJavaScriptEnabledbooleanWhether to enable JavaScript on the source page. Enabled by default. optional
setUserAgentstringSets a custom User-Agent header. optional
emulateMediaTypestringChanges the CSS media type of the page. The only allowed values are screen, print and null. Passing null disables CSS media emulation. optional
emulateTimezonestringChanges the page timezone by providing a timezone ID (America/New_York, Europe/Paris, Asia/Tokyo, ...). optional
setExtraHTTPHeadersRecord<string, string>An object containing additional HTTP headers to be sent with every request. All header values must be strings. optional
authenticateCredentialsProvides credentials for HTTP authentication. optional
setCookiesarray of Network.CookieParamList of cookies. The format follows Protocol.Network.CookieParam without experimental features. optional
setLocalStorageItemsarray of { key: string, value: string }Doppio-specific local storage entries to set before rendering. optional
waitForFunctionwaitForFunctionParametersWaits for a function to finish evaluating in the page's context. optional
waitForSelectorwaitForSelectorParametersWaits for a selector to appear in the page. optional
pdfPDFOptionsOptions to configure PDF generation. Only available for PDF render. optional
screenshotScreenshotOptionsOptions to configure screenshot generation. Only available for screenshot render. optional

⚠️ WARNING

goto and setContent cannot be used at the same time. They are mutually exclusive, and at least one of them must be set.

💡 TIP

All HTTP header names are lowercased (HTTP headers are case-insensitive, so this shouldn’t impact your server code).

ℹ INFO

page.setExtraHTTPHeaders does not guarantee the order of headers in the outgoing requests.

-> LINKS


goto properties

Property nameTypeDescription
urlstringURL to navigate to. The URL should include the scheme, for example https://.
optionsGotoOptionsNavigation parameters. optional

setContent properties

Property nameTypeDescription
htmlstringYour page HTML, encoded as base64
optionsSetContentOptionsContent loading parameters. optional

GotoOptions properties

Exposes some of Puppeteer's page.goto options.

Property nameTypeDescription
waitUntilarray of stringsWaits for Puppeteer lifecycle events. Possible values are load, domcontentloaded, networkidle0, and networkidle2. optional
refererstringThe referrer value. This overrides the value set in setExtraHTTPHeaders. optional

SetContentOptions properties

Exposes some of Puppeteer's page.setContent options.

Property nameTypeDescription
waitUntilarray of stringsWaits for Puppeteer lifecycle events. Possible values are load, domcontentloaded, networkidle0, and networkidle2. optional

authenticate properties

Credentials to pass to Puppeteer's page.authenticate method.

Property nameTypeDescription
usernamestringUsername credential.
passwordstringPassword credential.

waitForFunction properties

Exposes some properties of Puppeteer's page.waitForFunction method waitForFunction.

Property nameTypeDescription
pageFunctionstringFunction to evaluate in the page. It must return a truthy value when the condition is met (for example "() => document.readyState === 'complete'").
optionsFrameWaitForFunctionOptionsOptional timeout (ms), polling ('raf', 'mutation' or number in ms). See FrameWaitForFunctionOptions.

Timeout

waitForFunction can fail with a timeout if the condition is never satisfied. Set a realistic timeout in options and ensure your page can reach the condition (e.g. loading finishes, data is rendered).

Common use cases:

  • Wait until loading is done: "pageFunction": "() => !document.querySelector('.loading')" — capture only after the loading indicator is removed.
  • Wait for app-ready flag (SPA): "pageFunction": "() => window.__APP_READY__ === true" — if your app sets a global when it has finished rendering.
  • Wait for a minimum number of items: "pageFunction": "() => document.querySelectorAll('.list-item').length >= 10" — e.g. for a list or table that loads asynchronously.

waitForSelector properties

Exposes some properties of Puppeteer's page.waitForSelector method waitForSelector.

Property nameTypeDescription
selectorstringCSS selector for the element to wait for (for example "#content", ".chart-container", or "[data-rendered]").
optionsWaitForSelectorOptionsOptional timeout (ms), visible (wait until element is visible), hidden (wait until element is hidden). See WaitForSelectorOptions.

Timeout

waitForSelector can fail with a timeout if the selector never appears (or never becomes visible/hidden). Use a timeout that fits your page load time.

Common use cases:

  • Wait for content before PDF/screenshot: "selector": "#invoice" or "selector": ".report-ready" — ensure the main content exists before capture.
  • Wait for a chart or iframe: "selector": "canvas" or "selector": ".dashboard-loaded" — useful when the page draws content after data is fetched.
  • Wait for loading to disappear: "selector": ".spinner", "options": { "hidden": true, "timeout": 10000 } — capture only after the spinner is gone.

All rights reserved