Skip to content

API reference

Content

Extract metadata, links, HTML, Markdown and sitemap from any rendered webpage.

GEThttp://localhost:4000/v1/content
Credit cost
1 per successful request
Async
Supported (is_async)
404 billed
No
Plans
All plans

Authenticate with the x-api-key header. See authentication and credits & billing.

Parameters

Basics

ParameterDescription
url
stringrequired

The URL of the webpage to capture.

Example: https://example.com

Output

ParameterDescription
include_html
boolean

Include the rendered HTML.

include_markdown
boolean

Include clean Markdown.

include_sitemap
boolean

Include the site's sitemap URLs.

use_defuddle
boolean

Run Defuddle to keep only the main content (removes nav, sidebars, footers, comments).

Page

ParameterDescription
remove_selectors
string

Comma-separated CSS selectors to hide before capturing (e.g. ads, popups).

remove_cookie_banners
boolean

Automatically remove cookie banners before capturing.

remove_ads
boolean

Automatically remove ads before capturing.

block_resources
enum[]

Comma-separated list of resource types to block (e.g. image,stylesheet,font).

Values (comma-separated):documentstylesheetimagemediafontscripttexttrackxhrfetcheventsourcewebsocketmanifestother

block_urls
string

Comma-separated URL patterns to block (e.g. analytics,tracking,.example.com/).

Timing

ParameterDescription
delay
number

Delay in seconds before capturing (max 30).

wait_until
enum[]

When to consider navigation finished.

Default: load

Values (comma-separated):loaddomcontentloadednetworkidle0networkidle2

wait_for_selector
string

Wait for a specific element to appear before capturing.

Network

ParameterDescription
proxy
string

Proxy to route the request through (http://user:pass@host:port, https:// or socks5://).

stealth
boolean

Stealth mode: fingerprint hardening and user-agent rotation to reduce bot detection (paid plans).

user_agent
string

Override the browser user agent.

headers
json

Extra HTTP headers as a JSON object.

cookies
json

Cookies to set, as a JSON array of {name,value,domain?,path?}.

Cache

ParameterDescription
cache
boolean

Cache the response at the edge.

cache_ttl
number

Custom cache TTL in seconds (max 2,592,000 = 30 days, default 86,400).

Global parameters

Accepted by every billable endpoint. Details in Global parameters.

ParameterDescription
soft_fail
boolean

Return HTTP 200 even when an error occurs, with the message in error.

Default: false

is_async
boolean

Process asynchronously; returns a job_id to poll on /v1/jobs/{id}.

Default: false

fields
string

Comma-separated list of response fields to keep (dot notation for nested).

webhook_url
string

With is_async=true, POST the finished job to this URL (signed, paid plans).

Code examples

curl "http://localhost:4000/v1/content?url=https%3A%2F%2Fexample.com&include_markdown=true" \
  -H "x-api-key: $SCREENSHOTDUDE_API_KEY"

Responses

200 — application/json

{
  "success": true,
  "data": {
    "metadata": {
      "title": "Acme — Project management for remote teams",
      "description": "Plan sprints, track work and ship faster with Acme.",
      "favicon": "https://acme.example/favicon.ico",
      "ogImage": "https://acme.example/og.png",
      "ogTitle": "Acme — Project management for remote teams",
      "ogDescription": "Plan sprints, track work and ship faster.",
      "canonical": "https://acme.example/",
      "lang": "en",
      "keywords": [
        "project management",
        "remote teams",
        "kanban"
      ],
      "author": "Acme Inc.",
      "schemaOrg": [
        {
          "@type": "Organization",
          "name": "Acme Inc.",
          "url": "https://acme.example"
        }
      ]
    },
    "links": {
      "internal": [
        "https://acme.example/pricing",
        "https://acme.example/blog",
        "https://acme.example/login"
      ],
      "external": [
        "https://status.acme-hosting.example"
      ],
      "social": [
        "https://x.com/acme",
        "https://www.linkedin.com/company/acme"
      ]
    },
    "markdown": "# Project management for remote teams\n\nPlan sprints, track work and ship faster..."
  }
}

202 — with is_async=true

{
  "success": true,
  "job_id": "job_4f8k2m9q1x7c3v5b6n0z8l2p",
  "status": "Queued"
}
{ success, data: { metadata, links, html?, markdown?, sitemap? } }
Field Type Description
data.metadata.title string Document title.
data.metadata.description string Meta description.
data.metadata.favicon string Absolute favicon URL.
data.metadata.ogImage string Open Graph image.
data.metadata.ogTitle string Open Graph title.
data.metadata.ogDescription string Open Graph description.
data.metadata.canonical string Canonical URL.
data.metadata.lang string Document language (<html lang>).
data.metadata.keywords string[] Meta keywords.
data.metadata.author string Meta author.
data.metadata.schemaOrg object[] Parsed JSON-LD (schema.org) blocks.
data.links.internal string[] Absolute links on the same domain.
data.links.external string[] Links to other domains.
data.links.social string[] Links to social networks.
data.html string Rendered HTML (include_html=true).
data.markdown string Markdown (include_markdown=true; main content only with use_defuddle=true).
data.sitemap string[] URLs from the site's sitemap (include_sitemap=true).

Missing values are returned as null or empty arrays. Use fields to keep only what you need, e.g. fields=markdown,metadata.title.

Errors

Errors return JSON { "error": "…" }. Failed requests are never billed. Full list in Status codes.

StatusMeaning
400Missing or invalid parameter (e.g. invalid URL, unsupported format, private network target)
401Invalid, inactive or expired API key; plan rate limit (Rate limit exceeded: …) or key quota (…: quota daily)
403IP temporarily blocked after repeated authentication failures; endpoint not included in your plan
402Payment required, You have open invoices: … or Insufficient credits: X required, Y available
404Target page not found — not billed
413Result too large (e.g. extremely tall full-page capture)
500Rendering failed or timed out (60 s) — not billed; retry or use is_async=true