{
 "info": {
  "name": "ScreenshotInk API",
  "_postman_id": "f1e7a9c2-ink1-4a2e-9b7d-screenshotink",
  "description": "Screenshot API with full-page capture, PDF rendering, HTML-to-image, dark mode, clip regions and more.\n\n**Setup:** set the `api_key` variable (collection or environment) to your key from https://screenshotink.com/api-keys — it starts with `sk_live_`.\n\n**Docs:** https://screenshotink.com/docs/request-parameters\n**Errors:** https://screenshotink.com/docs/errors — stable `error.code` values, failed captures are never billed.\n\nRate limit: your plan's req/s (1–20). Identical requests within 24h return the cached render free (`cached: true`).",
  "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
 },
 "auth": {
  "type": "bearer",
  "bearer": [
   {
    "key": "token",
    "value": "{{api_key}}",
    "type": "string"
   }
  ]
 },
 "variable": [
  {
   "key": "base_url",
   "value": "https://screenshotink.com"
  },
  {
   "key": "api_key",
   "value": "sk_live_YOUR_KEY_HERE"
  }
 ],
 "item": [
  {
   "name": "Basic capture",
   "request": {
    "method": "POST",
    "header": [
     {
      "key": "Content-Type",
      "value": "application/json"
     }
    ],
    "url": {
     "raw": "{{base_url}}/v1/capture",
     "host": [
      "{{base_url}}"
     ],
     "path": [
      "v1",
      "capture"
     ]
    },
    "body": {
     "mode": "raw",
     "raw": "{\n  \"url\": \"https://example.com\"\n}"
    },
    "description": "Simplest call — renders a 1440×900 PNG above the fold and returns a hosted image_url."
   },
   "response": [
    {
     "name": "200 OK",
     "originalRequest": {
      "method": "POST",
      "url": {
       "raw": "{{base_url}}/v1/capture"
      }
     },
     "status": "OK",
     "code": 200,
     "header": [
      {
       "key": "Content-Type",
       "value": "application/json"
      }
     ],
     "body": "{\n  \"status\": \"done\",\n  \"image_url\": \"https://screenshotink.com/shots/9f/9f2k1x….png\",\n  \"width\": 1440,\n  \"height\": 900,\n  \"format\": \"png\",\n  \"bytes\": 184412,\n  \"render_ms\": 1840,\n  \"cached\": false,\n  \"expires_at\": \"2026-07-12T14:03:00Z\"\n}"
    }
   ]
  },
  {
   "name": "Full-page capture",
   "request": {
    "method": "POST",
    "header": [
     {
      "key": "Content-Type",
      "value": "application/json"
     }
    ],
    "url": {
     "raw": "{{base_url}}/v1/capture",
     "host": [
      "{{base_url}}"
     ],
     "path": [
      "v1",
      "capture"
     ]
    },
    "body": {
     "mode": "raw",
     "raw": "{\n  \"url\": \"https://example.com\",\n  \"full_size\": true,\n  \"no_ads\": true,\n  \"lazy_load\": true,\n  \"max_height\": 20000\n}"
    },
    "description": "Entire scrollable page (up to 20,000px). lazy_load scrolls first so lazy images render; max_height caps monsters."
   },
   "response": []
  },
  {
   "name": "JPEG thumbnail",
   "request": {
    "method": "POST",
    "header": [
     {
      "key": "Content-Type",
      "value": "application/json"
     }
    ],
    "url": {
     "raw": "{{base_url}}/v1/capture",
     "host": [
      "{{base_url}}"
     ],
     "path": [
      "v1",
      "capture"
     ]
    },
    "body": {
     "mode": "raw",
     "raw": "{\n  \"url\": \"https://example.com\",\n  \"format\": \"jpeg\",\n  \"quality\": 80,\n  \"scaled_width\": 400\n}"
    },
    "description": "Render at full width, store downscaled to 400px — small, fast thumbnails for previews and dashboards."
   },
   "response": []
  },
  {
   "name": "PDF document",
   "request": {
    "method": "POST",
    "header": [
     {
      "key": "Content-Type",
      "value": "application/json"
     }
    ],
    "url": {
     "raw": "{{base_url}}/v1/capture",
     "host": [
      "{{base_url}}"
     ],
     "path": [
      "v1",
      "capture"
     ]
    },
    "body": {
     "mode": "raw",
     "raw": "{\n  \"url\": \"https://example.com\",\n  \"format\": \"pdf\"\n}"
    },
    "description": "Print-quality A4 PDF with backgrounds. width/height are null in the response; scaled_width and retina are ignored for pdf."
   },
   "response": [
    {
     "name": "200 OK",
     "originalRequest": {
      "method": "POST",
      "url": {
       "raw": "{{base_url}}/v1/capture"
      }
     },
     "status": "OK",
     "code": 200,
     "header": [
      {
       "key": "Content-Type",
       "value": "application/json"
      }
     ],
     "body": "{\n  \"status\": \"done\",\n  \"image_url\": \"https://screenshotink.com/shots/96/96qcjb….pdf\",\n  \"width\": null,\n  \"height\": null,\n  \"format\": \"pdf\",\n  \"bytes\": 20641,\n  \"render_ms\": 2100,\n  \"cached\": false,\n  \"expires_at\": \"2026-07-12T14:03:00Z\"\n}"
    }
   ]
  },
  {
   "name": "HTML to image",
   "request": {
    "method": "POST",
    "header": [
     {
      "key": "Content-Type",
      "value": "application/json"
     }
    ],
    "url": {
     "raw": "{{base_url}}/v1/capture",
     "host": [
      "{{base_url}}"
     ],
     "path": [
      "v1",
      "capture"
     ]
    },
    "body": {
     "mode": "raw",
     "raw": "{\n  \"html\": \"<html><body style=\\\"font:40px sans-serif;display:grid;place-items:center;height:100vh;background:#6E5CFF;color:#fff\\\"><div>Hello from raw HTML</div></body></html>\",\n  \"width\": 800,\n  \"height\": 400\n}"
    },
    "description": "Render raw markup instead of navigating to a URL (≤2MB). Send html OR url — not both. Subresources (images, fonts) load normally."
   },
   "response": []
  },
  {
   "name": "Dark mode + custom CSS",
   "request": {
    "method": "POST",
    "header": [
     {
      "key": "Content-Type",
      "value": "application/json"
     }
    ],
    "url": {
     "raw": "{{base_url}}/v1/capture",
     "host": [
      "{{base_url}}"
     ],
     "path": [
      "v1",
      "capture"
     ]
    },
    "body": {
     "mode": "raw",
     "raw": "{\n  \"url\": \"https://example.com\",\n  \"dark_mode\": true,\n  \"css\": \".cookie-banner, .newsletter-popup { display: none !important }\"\n}"
    },
    "description": "dark_mode emulates prefers-color-scheme: dark. css (≤20KB) is injected before capture — hide elements, force themes."
   },
   "response": []
  },
  {
   "name": "Clip region + retina",
   "request": {
    "method": "POST",
    "header": [
     {
      "key": "Content-Type",
      "value": "application/json"
     }
    ],
    "url": {
     "raw": "{{base_url}}/v1/capture",
     "host": [
      "{{base_url}}"
     ],
     "path": [
      "v1",
      "capture"
     ]
    },
    "body": {
     "mode": "raw",
     "raw": "{\n  \"url\": \"https://example.com\",\n  \"clip_x\": 0,\n  \"clip_y\": 0,\n  \"clip_width\": 600,\n  \"clip_height\": 400,\n  \"retina\": 2\n}"
    },
    "description": "Capture an exact region (clip wins over full_size). retina=2 doubles the device pixel ratio → 1200×800 output here."
   },
   "response": []
  },
  {
   "name": "Transparent PNG",
   "request": {
    "method": "POST",
    "header": [
     {
      "key": "Content-Type",
      "value": "application/json"
     }
    ],
    "url": {
     "raw": "{{base_url}}/v1/capture",
     "host": [
      "{{base_url}}"
     ],
     "path": [
      "v1",
      "capture"
     ]
    },
    "body": {
     "mode": "raw",
     "raw": "{\n  \"html\": \"<body style=\\\"background:transparent\\\"><h1 style=\\\"color:#6E5CFF\\\">Floating title</h1></body>\",\n  \"omit_background\": true,\n  \"format\": \"png\",\n  \"width\": 600,\n  \"height\": 200\n}"
    },
    "description": "omit_background keeps the alpha channel — png only (422 with jpeg)."
   },
   "response": []
  },
  {
   "name": "Wait & timing control",
   "request": {
    "method": "POST",
    "header": [
     {
      "key": "Content-Type",
      "value": "application/json"
     }
    ],
    "url": {
     "raw": "{{base_url}}/v1/capture",
     "host": [
      "{{base_url}}"
     ],
     "path": [
      "v1",
      "capture"
     ]
    },
    "body": {
     "mode": "raw",
     "raw": "{\n  \"url\": \"https://example.com\",\n  \"wait_until\": \"networkidle2\",\n  \"wait_for_selector\": \"#app .loaded\",\n  \"sleep_time\": 2000,\n  \"timeout\": 45000\n}"
    },
    "description": "wait_until: navigation event (load / domcontentloaded / networkidle0 / networkidle2). wait_for_selector: up to 10s, tolerant if missing. sleep_time: extra ms after load. timeout: total budget — whatever rendered by then is captured."
   },
   "response": []
  },
  {
   "name": "Force fresh render (nocache)",
   "request": {
    "method": "POST",
    "header": [
     {
      "key": "Content-Type",
      "value": "application/json"
     }
    ],
    "url": {
     "raw": "{{base_url}}/v1/capture",
     "host": [
      "{{base_url}}"
     ],
     "path": [
      "v1",
      "capture"
     ]
    },
    "body": {
     "mode": "raw",
     "raw": "{\n  \"url\": \"https://example.com\",\n  \"nocache\": true\n}"
    },
    "description": "Identical requests within 24h normally return the cached render free (cached: true). nocache forces a fresh, billed render."
   },
   "response": []
  },
  {
   "name": "GET variant (query params)",
   "request": {
    "method": "GET",
    "url": {
     "raw": "{{base_url}}/v1/capture?url=https://example.com&full_size=true&format=jpeg",
     "host": [
      "{{base_url}}"
     ],
     "path": [
      "v1",
      "capture"
     ],
     "query": [
      {
       "key": "url",
       "value": "https://example.com"
      },
      {
       "key": "full_size",
       "value": "true"
      },
      {
       "key": "format",
       "value": "jpeg"
      }
     ]
    },
    "description": "Everything also works as GET query params (handy for quick tests). Prefer POST + the Authorization header in production so keys stay out of logs."
   },
   "response": []
  },
  {
   "name": "Lighthouse audit",
   "request": {
    "method": "GET",
    "header": [],
    "url": {
     "raw": "{{base_url}}/v1/lighthouse?url=https://example.com&strategy=desktop",
     "host": [
      "{{base_url}}"
     ],
     "path": [
      "v1",
      "lighthouse"
     ],
     "query": [
      {
       "key": "url",
       "value": "https://example.com"
      },
      {
       "key": "strategy",
       "value": "desktop"
      }
     ]
    },
    "description": "Google Lighthouse scores (performance, accessibility, best practices, SEO) plus core web vitals. Costs 1 quota unit, refunded if the audit fails. strategy = desktop | mobile."
   },
   "response": [
    {
     "name": "200 OK",
     "originalRequest": {
      "method": "GET",
      "url": {
       "raw": "{{base_url}}/v1/lighthouse"
      }
     },
     "status": "OK",
     "code": 200,
     "header": [
      {
       "key": "Content-Type",
       "value": "application/json"
      }
     ],
     "body": "{\n  \"status\": \"done\",\n  \"url\": \"https://example.com\",\n  \"strategy\": \"desktop\",\n  \"scores\": {\n    \"performance\": 100,\n    \"accessibility\": 96,\n    \"best_practices\": 96,\n    \"seo\": 80\n  },\n  \"metrics\": {\n    \"fcp\": \"0.3 s\",\n    \"lcp\": \"0.3 s\",\n    \"tbt\": \"0 ms\"\n  }\n}"
    }
   ]
  },
  {
   "name": "Sitemap URL list",
   "request": {
    "method": "GET",
    "header": [],
    "url": {
     "raw": "{{base_url}}/v1/sitemap?url=https://example.com/sitemap.xml&limit=20",
     "host": [
      "{{base_url}}"
     ],
     "path": [
      "v1",
      "sitemap"
     ],
     "query": [
      {
       "key": "url",
       "value": "https://example.com/sitemap.xml"
      },
      {
       "key": "limit",
       "value": "20"
      }
     ]
    },
    "description": "Fetch + parse a sitemap.xml (one index level deep) and return up to `limit` (max 50) page URLs. Parse-only: costs nothing."
   },
   "response": [
    {
     "name": "200 OK",
     "originalRequest": {
      "method": "GET",
      "url": {
       "raw": "{{base_url}}/v1/sitemap"
      }
     },
     "status": "OK",
     "code": 200,
     "header": [
      {
       "key": "Content-Type",
       "value": "application/json"
      }
     ],
     "body": "{\n  \"status\": \"done\",\n  \"sitemap\": \"https://example.com/sitemap.xml\",\n  \"count\": 3,\n  \"urls\": [\n    \"https://example.com/\",\n    \"https://example.com/pricing\",\n    \"https://example.com/docs\"\n  ]\n}"
    }
   ]
  },
  {
   "name": "Error example (region=us)",
   "request": {
    "method": "POST",
    "header": [
     {
      "key": "Content-Type",
      "value": "application/json"
     }
    ],
    "url": {
     "raw": "{{base_url}}/v1/capture",
     "host": [
      "{{base_url}}"
     ],
     "path": [
      "v1",
      "capture"
     ]
    },
    "body": {
     "mode": "raw",
     "raw": "{\n  \"url\": \"https://example.com\",\n  \"region\": \"us\"\n}"
    },
    "description": "Errors always use the same envelope with a stable code — branch on error.code, not the message."
   },
   "response": [
    {
     "name": "422 region_unavailable",
     "originalRequest": {
      "method": "POST",
      "url": {
       "raw": "{{base_url}}/v1/capture"
      }
     },
     "status": "Unprocessable Entity",
     "code": 422,
     "header": [
      {
       "key": "Content-Type",
       "value": "application/json"
      }
     ],
     "body": "{\n  \"error\": {\n    \"code\": \"region_unavailable\",\n    \"message\": \"The US region is on the roadmap; only region=eu is available today.\"\n  }\n}"
    }
   ]
  }
 ]
}