360 Secure SkillHub
360 安全技能中心

Scavio Screenshot API

核心功能:调用Scavio API捕获任意公开URL的全页PNG,以base64格式的data:image/png URI返回,提供normal、advanced、ultra三种捕获层级,仅成功捕获扣费。典型场景:生成网站预览/缩略图、制作报告/PPT配图、供视觉模型/OCR处理、页面视觉对比或归档。输入需指定目标URL,可选捕获模式;输出含图片URI、格式、捕获模式、字节数及信用消耗等信息,无过期托管链接,数据可直接使用。

scavio-ai
scavio-ai
热度 8.64
最近更新 2026-08-25 18:45:54
分类:自动化依赖:第三方 API应用场景:website-preview / visual-testing / 报告撰写 / 演示设计 ...

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add scavio-screenshot
Metadata
name
website-screenshot-api
description
Capture a full-page PNG screenshot of any public URL, returned inline as a base64 data:image/png URI ready to drop into an <img> tag. One endpoint, three capture tiers - normal and advanced at 1 credit, ultra for the hardest sites at 5. Only a successful capture is billed. Returns url, image, image_format, mode and image_bytes.
version
1.0.0
tags
website-screenshot, screenshot-api, url-to-screenshot, web-page-screenshot, full-page-screenshot, png, webpage-capture, visual-testing, website-preview, thumbnail, ocr-input, agent-tools, langchain, crewai, autogen, structured-data, json, ai-agents
metadata
{"openclaw":{"requires":{"env":["SCAVIO_API_KEY"]},"primaryEnv":"SCAVIO_API_KEY","timeout":120,"throttle":1,"emoji":"📸","homepage":"https://scavio.dev/docs?utm_source=agent-skills&utm_medium=skill&utm_campaign=website-screenshot-api"}}

Website Screenshot via Scavio

Give any public URL and get back a full-page PNG screenshot of the page, returned inline as a base64 data:image/png URI ready to drop into an <img> tag or decode to a file. Every capture is the full page, top to bottom.

When to trigger

Use this skill when the user asks to:

  • Screenshot a web page or capture a full-page image of a URL
  • Grab a visual snapshot / preview / thumbnail of a website
  • Turn a page into an image for a report, a slide, an email or a PDF
  • Feed a rendered page to a vision model or an OCR step as a PNG
  • Visually diff or archive how a page looks right now

Setup

Get a free API key at scavio.dev (50 free credits to get started, no card required):

export SCAVIO_API_KEY=sk_live_your_key

Every request is a POST with a JSON body and:

Authorization: Bearer $SCAVIO_API_KEY

Endpoints

Base URL: https://api.scavio.dev.

Endpoint Credits What it returns
POST /api/v1/extract/screenshot 1-5 A full-page PNG of the URL as a base64 data:image/png URI, plus its format, the capture tier used, and the image size in bytes

Parameters

Parameter Type Default Description
url string required The page to capture. http(s) only; a bare host like example.com is upgraded to https. Internal / loopback hosts are rejected. Always captured full-page
mode string normal Capture tier: normal, advanced, or ultra

Capture tiers and their cost:

mode Credits Use it for
normal 1 Most sites - the default
advanced 1 Pages that load their content a moment after the first response, so the capture waits longer before shooting
ultra 5 The hardest, most heavily protected sites that the lower tiers cannot reach

Start at normal and only step up if the returned image is blank or incomplete - the higher tiers cost more and are wasted on pages that do not need them.

Scope notes

  • The capture is always the full page, not just the visible viewport - long pages come back as tall images.
  • The image is returned inline as a data:image/png;base64,... URI, not a hosted link. There is no URL to expire; you hold the bytes.
  • Only a successful capture is billed. A page that cannot be captured (a 422) or a target that is not found (a 404) costs nothing.
  • image_bytes is the size of the decoded PNG, so you can budget before decoding.

Examples

import base64
import requests

BASE = "https://api.scavio.dev"
# Your key from https://scavio.dev. Load it from your environment or secret
# store in real code - keep it out of source control.
API_KEY = "sk_your_key_here"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}

# 1. Capture a full-page screenshot (normal tier, 1 credit)
shot = requests.post(f"{BASE}/api/v1/extract/screenshot", headers=HEADERS,
    json={"url": "https://example.com"}).json()

data = shot["data"]
print(data["mode"], data["image_format"], data["image_bytes"], "bytes")

# 2. The image is a data:image/png;base64 URI - strip the prefix, decode it,
#    and write the PNG to disk.
b64 = data["image"].split(",", 1)[1]
with open("example.png", "wb") as f:
    f.write(base64.b64decode(b64))

# 3. A tougher, heavily protected site - step up the capture tier (ultra, 5 credits)
hard = requests.post(f"{BASE}/api/v1/extract/screenshot", headers=HEADERS,
    json={"url": "https://www.nike.com", "mode": "ultra"}).json()
print(hard["credits_used"], "credits used")

curl:

curl -s https://api.scavio.dev/api/v1/extract/screenshot \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com","mode":"normal"}'

Response shape

Every response uses the envelope { data, response_time, credits_used, credits_remaining }.

{
  "data": {
    "url": "https://example.com/",
    "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA7E...",
    "image_format": "png",
    "mode": "normal",
    "image_bytes": 16917
  },
  "response_time": 4255,
  "credits_used": 1,
  "credits_remaining": 4574
}

Guardrails

  • Cost tracks the tier: normal and advanced are 1 credit, ultra is 5. Only a successful capture is billed.
  • The capture is always the full page. If the user only wants the fold, crop the returned PNG yourself.
  • Never fabricate the image, its size or its contents. Only report what the API returned.
  • The image URI can be large. Decode it to a file rather than pasting the base64 into a prompt.

Failure handling

  • 400 means an invalid or missing url, or an unreachable internal/loopback host. Fix and retry.
  • 401 means the API key is invalid or missing. Check SCAVIO_API_KEY.
  • 404 means the target page was not found.
  • 422 means the page cannot be captured - try a higher mode, or accept that the site blocks capture.
  • 429 means rate or usage limit exceeded. Wait before retrying. See rate limits.
  • 502 / 503 mean the source is temporarily unavailable - wait a few seconds and retry.
  • If SCAVIO_API_KEY is not set, prompt the user to export it before continuing.