API-Referenz

Erfassen Sie Screenshots, PDFs, Markdown, Crawls, Video, forensische Pakete und strukturierte Extrakte über eine einfache HTTPS-API. Authentifizieren Sie sich mit einem API-Schlüssel aus dem Dashboard.

Erste Schritte

  1. Erstellen Sie ein Konto und öffnen Sie API-Schlüssel im Dashboard.
  2. Kopieren Sie einen Schlüssel, der mit ssk_ beginnt.
  3. Rufen Sie die API unter https://api.sitescreens.com auf (ersetzen Sie dies bei Self-Hosting durch Ihren Deployment-Host).
  4. Senden Sie Authorization: Bearer ssk_your_api_key (oder X-Api-Key: ssk_your_api_key).
  5. Erstellen Sie Jobs mit POST /v1/… und pollen Sie anschliessend GET /v1/jobs/:id, bis status succeeded oder failed ist.

Die meisten Capture-Endpunkte antworten mit 202 Accepted und einer jobId. Signierte Download-URLs für Artefakte werden im Job-Detail zurückgegeben.

Minimaler Screenshot

curl -X POST 'https://api.sitescreens.com/v1/screenshot' \
  -H 'Authorization: Bearer ssk_your_api_key' \
  -H 'Content-Type: application/json' \
  -d '{"url":"https://example.com","device":"mobile"}'

Fehler

API-Fehler verwenden standardisierte HTTP-Statuscodes. Validierungsantworten enthalten details aus den Schema-Prüfungen.

Prüfen Sie vor einem erneuten Versuch Ihren API-Schlüssel, die Tarifberechtigung, das Credit-Guthaben der Organisation und die Limits pro Schlüssel.

StatusBedeutung
400Validierung fehlgeschlagen — der Body enthält details aus Schema-Prüfungen.
401Fehlender oder ungültiger API-Schlüssel / Sitzung.
402Unzureichende Organisations-Credits.
403Tariffunktion nicht verfügbar, Konto gesperrt oder unveränderliches Artefakt.
404Ressource nicht gefunden.
429Tägliches/wöchentliches/monatliches Credit-Limit des API-Schlüssels überschritten (period, limit, spent, requested).
500Unerwarteter Serverfehler.

Gemeinsame Capture-Optionen

Overlay-Bereinigung, Proxys und Wartebedingungen gelten gemeinsam für Capture-Endpunkte.

  • overlayMode: cut (schliessen/entfernen), pass (unverändert lassen), disable (Skripte blockieren / ausblenden).
  • Pro Kategorie: overlays.cookies, overlays.ads, overlays.modals, optional overlays.timeoutMs.
  • Standard: cookies/modals = cut, ads = disable.
  • Für Text, Markdown und Crawl setzen Sie overlays.ads: "cut", um In-Content-Werbung vor der Extraktion aus dem DOM zu entfernen.
  • useProxy / proxy erfordern Pro+.
  • Relative href/src-Werte in Markdown, Crawl-Paketen und Extract-JSON werden relativ zur finalen Seiten-URL in absolute URLs umgeschrieben.

Meta

GET/v1/health

Health-Check

Liveness-Probe für die API.

Auth: None (public)

No required parameters.

Request

curl -X GET 'https://api.sitescreens.com/v1/health'

Response HTTP 200

{
  "ok": true,
  "service": "sitescreens-api"
}
GET/v1/plans

Tarifkatalog

Öffentliche Tarifdefinitionen, Funktionen und Credit-Kontingente.

Auth: None (public)

No required parameters.

Request

curl -X GET 'https://api.sitescreens.com/v1/plans'

Response HTTP 200

{
  "plans": [
    {
      "id": "starter",
      "name": "Starter",
      "creditsPerMonth": 2000,
      "features": {
        "crawl": true,
        "batch": true,
        "video": false
      }
    }
  ]
}

Capture-Jobs

POST/v1/screenshot

Screenshot-Job erstellen

Viewport- oder Full-Page-Screenshot in die Warteschlange stellen. Free-Tarife können Ergebnisse mit Wasserzeichen versehen. Status und signierte Artefakt-URLs über GET /v1/jobs/:id pollen.

Auth: API key or session required

Required parameters

NameInTypeDescription
urlrequiredbodystring (url)Seiten-URL zum Erfassen.

Optional parameters

NameInTypeDescription
fullPagebodybooleanDie gesamte scrollbare Seite erfassen. Kostet 2 Credits statt 1. Default: false
formatbody"png" | "jpeg" | "webp"Bildausgabeformat. Default: "png"
devicebody"desktop" | "mobile" | "tablet"Geräte-Viewport-Voreinstellung. Default: "desktop"
resolutionbodystring (preset id | "custom")Benannte Viewport-Preset-ID oder "custom" mit width/height. Verfügbarkeit hängt von Ihrem Tarif ab (grössere Formate benötigen höhere Tarife).
ValueDescription
desktop_800x600800 × 600 · desktop · min plan: free
desktop_1024x7681024 × 768 (XGA) · desktop · min plan: free
desktop_1280x7201280 × 720 (HD) · desktop · min plan: free
desktop_1366x7681366 × 768 (laptop) · desktop · min plan: starter
desktop_1440x9001440 × 900 · desktop · min plan: starter
desktop_1536x8641536 × 864 · desktop · min plan: starter
desktop_1920x10801920 × 1080 (Full HD) · desktop · min plan: starter
desktop_2560x14402560 × 1440 (QHD) · desktop · min plan: pro
desktop_3840x21603840 × 2160 (4K) · desktop · min plan: business
mobile_360x640360 × 640 (small Android) · mobile · min plan: free
mobile_375x667375 × 667 (iPhone SE) · mobile · min plan: free
mobile_390x844390 × 844 (iPhone 14/15) · mobile · min plan: starter
mobile_393x873393 × 873 (Pixel 7) · mobile · min plan: starter
mobile_412x915412 × 915 (Pixel 8) · mobile · min plan: starter
mobile_430x932430 × 932 (iPhone 15 Pro Max) · mobile · min plan: starter
tablet_768x1024768 × 1024 (iPad) · tablet · min plan: free
tablet_800x1280800 × 1280 · tablet · min plan: starter
tablet_820x1180820 × 1180 (iPad Air) · tablet · min plan: starter
tablet_834x1194834 × 1194 (iPad Pro 11") · tablet · min plan: starter
tablet_1024x13661024 × 1366 (iPad Pro 12.9") · tablet · min plan: starter
customCustom size — set width and height. Requires Starter+.
widthbodyinteger (320–3840)Override der Viewport-Breite.
heightbodyinteger (240–2160)Override der Viewport-Höhe.
deviceScaleFactorbodynumber (1–3)Geräte-Pixelverhältnis. Default: 1
darkModebodybooleanprefers-color-scheme: dark emulieren. Default: false
delayMsbodyinteger (0–30000)Zusätzliche Wartezeit nach der Navigation vor der Erfassung. Default: 0
selectorbodystringCSS-Selektor für den Screenshot anstelle des gesamten Viewports.
useProxybodybooleanDie Erfassung über Ihren konfigurierten Proxy-Pool leiten. Pro+. Default: false
proxybodystringProxy-Label oder URL (beispielsweise "us"). Impliziert Geo/Proxy-Funktion (Pro+).
waitUntilbody"load" | "domcontentloaded" | "networkidle"Playwright-Navigations-Wartebedingung. Default: "networkidle"
webhookUrlbodystring (url)Webhook-Override pro Job. Empfängt job.succeeded / job.failed Ereignisse.
overlayModebody"cut" | "pass" | "disable"Kurzform der Overlay-Richtlinie für Cookies, Werbung und Modals.
overlaysbodyobjectOverlay-Steuerung pro Kategorie: cookies, ads, modals (cut|pass|disable) und timeoutMs (0–15000).

Request

{
  "url": "https://example.com",
  "device": "mobile",
  "resolution": "mobile_390x844",
  "fullPage": false,
  "format": "png",
  "overlayMode": "cut"
}

Response HTTP 202

{
  "jobId": "job_01HXYZ...",
  "reservedCredits": 1,
  "status": "queued"
}
POST/v1/scrape

Scrape-Job erstellen (PDF / Text / Markdown)

PDF-Export oder Text-/Markdown-Extraktion in die Warteschlange stellen. Relative Links in Markdown/Text werden in absolute URLs umgeschrieben. Erfordert Starter+.

Auth: API key or session required

Required parameters

NameInTypeDescription
urlrequiredbodystring (url)Seiten-URL zum Scrapen.
formatrequiredbody"pdf" | "text" | "markdown"Ausgabeformat. Entspricht dem Job-Typ pdf, text oder markdown.

Optional parameters

NameInTypeDescription
useProxybodybooleanDie Erfassung über Ihren konfigurierten Proxy-Pool leiten. Pro+. Default: false
proxybodystringProxy-Label oder URL (beispielsweise "us"). Impliziert Geo/Proxy-Funktion (Pro+).
waitUntilbody"load" | "domcontentloaded" | "networkidle"Playwright-Navigations-Wartebedingung. Default: "networkidle"
webhookUrlbodystring (url)Webhook-Override pro Job. Empfängt job.succeeded / job.failed Ereignisse.
overlayModebody"cut" | "pass" | "disable"Kurzform der Overlay-Richtlinie für Cookies, Werbung und Modals.
overlaysbodyobjectOverlay-Steuerung pro Kategorie: cookies, ads, modals (cut|pass|disable) und timeoutMs (0–15000).

Request

{
  "url": "https://example.com",
  "format": "markdown",
  "overlays": {
    "ads": "cut"
  }
}

Response HTTP 202

{
  "jobId": "job_01HXYZ...",
  "reservedCredits": 2,
  "status": "queued"
}
  • Für Text/Markdown setzen Sie overlays.ads auf "cut", um In-Content-Werbeeinheiten vor der Extraktion zu entfernen.
POST/v1/crawl

Crawl-Job erstellen

Eine Website in ein mehrseitiges Markdown-Paket plus JSONL für Agents und RAG crawlen. Erfordert Starter+. maxPages wird durch Ihren Tarif begrenzt.

Auth: API key or session required

Required parameters

NameInTypeDescription
urlrequiredbodystring (url)Start-URL.

Optional parameters

NameInTypeDescription
maxPagesbodyinteger (1–5000)Maximale Anzahl zu besuchender Seiten. Credit-Kosten skalieren mit diesem Wert. Default: 25
maxDepthbodyinteger (0–10)Link-Tiefe ab der Start-URL. Default: 2
sameOriginbodybooleanAuf derselben Origin wie die Start-URL bleiben. Default: true
includeSubdomainsbodybooleanGeschwister-Subdomains beim Crawlen erlauben. Default: false
respectRobotsTxtbodybooleanDisallow-Regeln aus robots.txt beachten. Default: true
useProxybodybooleanDie Erfassung über Ihren konfigurierten Proxy-Pool leiten. Pro+. Default: false
proxybodystringProxy-Label oder URL (beispielsweise "us"). Impliziert Geo/Proxy-Funktion (Pro+).
waitUntilbody"load" | "domcontentloaded" | "networkidle"Playwright-Navigations-Wartebedingung. Default: "networkidle"
webhookUrlbodystring (url)Webhook-Override pro Job. Empfängt job.succeeded / job.failed Ereignisse.
overlayModebody"cut" | "pass" | "disable"Kurzform der Overlay-Richtlinie für Cookies, Werbung und Modals.
overlaysbodyobjectOverlay-Steuerung pro Kategorie: cookies, ads, modals (cut|pass|disable) und timeoutMs (0–15000).

Request

{
  "url": "https://example.com",
  "maxPages": 10,
  "maxDepth": 2,
  "overlayMode": "cut"
}

Response HTTP 202

{
  "jobId": "job_01HXYZ...",
  "reservedCredits": 10,
  "status": "queued"
}
POST/v1/video

Scroll-Video-Job erstellen

Kurzes scrollendes Produkt-Demo-Video aufzeichnen (WebM oder MP4). Erfordert Pro+.

Auth: API key or session required

Required parameters

NameInTypeDescription
urlrequiredbodystring (url)Seiten-URL zum Aufzeichnen.

Optional parameters

NameInTypeDescription
secondsbodyinteger (3–30)Cliplänge in Sekunden (tarifabhängig begrenzt). Default: 10
formatbody"webm" | "mp4"Video-Containerformat. Default: "webm"
scrollbodybooleanSeite während der Aufnahme automatisch scrollen. Default: true
devicebody"desktop" | "mobile" | "tablet"Geräte-Viewport-Voreinstellung. Wird für Standard-width/height verwendet, wenn diese Felder weggelassen werden. Default: "desktop"
ValueDescription
desktopDefault viewport 1280 × 720
mobileDefault viewport 390 × 844
tabletDefault viewport 834 × 1112
widthbodyinteger (320–1920)Benutzerdefinierte Viewport-Breite. Falls weggelassen, Standard je Gerät: Desktop 1280, Mobile 390, Tablet 834. Default: desktop 1280 · mobile 390 · tablet 834
heightbodyinteger (240–1080)Benutzerdefinierte Viewport-Höhe. Falls weggelassen, Standard je Gerät: Desktop 720, Mobile 844, Tablet 1112. Default: desktop 720 · mobile 844 · tablet 1112
useProxybodybooleanDie Erfassung über Ihren konfigurierten Proxy-Pool leiten. Pro+. Default: false
proxybodystringProxy-Label oder URL (beispielsweise "us"). Impliziert Geo/Proxy-Funktion (Pro+).
waitUntilbody"load" | "domcontentloaded" | "networkidle"Playwright-Navigations-Wartebedingung. Default: "networkidle"
webhookUrlbodystring (url)Webhook-Override pro Job. Empfängt job.succeeded / job.failed Ereignisse.
overlayModebody"cut" | "pass" | "disable"Kurzform der Overlay-Richtlinie für Cookies, Werbung und Modals.
overlaysbodyobjectOverlay-Steuerung pro Kategorie: cookies, ads, modals (cut|pass|disable) und timeoutMs (0–15000).

Request

{
  "url": "https://example.com",
  "seconds": 8,
  "format": "webm",
  "scroll": true,
  "device": "desktop"
}

Response HTTP 202

{
  "jobId": "job_01HXYZ...",
  "reservedCredits": 10,
  "status": "queued"
}
POST/v1/forensic

Forensisches Evidence-Paket erstellen

Zeitgestempeltes Evidence-Paket erfassen: Screenshot, Content-Hash und Manifest. Artefakte optional als unveränderlich markieren, damit sie nicht gelöscht werden können. Erfordert Starter+.

Auth: API key or session required

Required parameters

NameInTypeDescription
urlrequiredbodystring (url)Seiten-URL als Evidence erfassen.

Optional parameters

NameInTypeDescription
immutablebodybooleanLöschen der resultierenden Artefakte über DELETE /v1/artifacts/:id verhindern. Default: false
includeMarkdownbodybooleanZusätzlich einen Markdown-Snapshot im Paket einschliessen. Default: true
fullPagebodybooleanFull-Page-Screenshot im Paket. Default: false
formatbody"png" | "jpeg" | "webp"Screenshot-Bildformat. Default: "png"
devicebody"desktop" | "mobile" | "tablet"Geräte-Viewport-Voreinstellung. Default: "desktop"
resolutionbodystring (preset id | "custom")Benannte Viewport-Preset-ID oder "custom" mit width/height. Verfügbarkeit hängt von Ihrem Tarif ab (grössere Formate benötigen höhere Tarife).
ValueDescription
desktop_800x600800 × 600 · desktop · min plan: free
desktop_1024x7681024 × 768 (XGA) · desktop · min plan: free
desktop_1280x7201280 × 720 (HD) · desktop · min plan: free
desktop_1366x7681366 × 768 (laptop) · desktop · min plan: starter
desktop_1440x9001440 × 900 · desktop · min plan: starter
desktop_1536x8641536 × 864 · desktop · min plan: starter
desktop_1920x10801920 × 1080 (Full HD) · desktop · min plan: starter
desktop_2560x14402560 × 1440 (QHD) · desktop · min plan: pro
desktop_3840x21603840 × 2160 (4K) · desktop · min plan: business
mobile_360x640360 × 640 (small Android) · mobile · min plan: free
mobile_375x667375 × 667 (iPhone SE) · mobile · min plan: free
mobile_390x844390 × 844 (iPhone 14/15) · mobile · min plan: starter
mobile_393x873393 × 873 (Pixel 7) · mobile · min plan: starter
mobile_412x915412 × 915 (Pixel 8) · mobile · min plan: starter
mobile_430x932430 × 932 (iPhone 15 Pro Max) · mobile · min plan: starter
tablet_768x1024768 × 1024 (iPad) · tablet · min plan: free
tablet_800x1280800 × 1280 · tablet · min plan: starter
tablet_820x1180820 × 1180 (iPad Air) · tablet · min plan: starter
tablet_834x1194834 × 1194 (iPad Pro 11") · tablet · min plan: starter
tablet_1024x13661024 × 1366 (iPad Pro 12.9") · tablet · min plan: starter
customCustom size — set width and height. Requires Starter+.
widthbodyinteger (320–3840)Override der Viewport-Breite.
heightbodyinteger (240–2160)Override der Viewport-Höhe.
useProxybodybooleanDie Erfassung über Ihren konfigurierten Proxy-Pool leiten. Pro+. Default: false
proxybodystringProxy-Label oder URL (beispielsweise "us"). Impliziert Geo/Proxy-Funktion (Pro+).
waitUntilbody"load" | "domcontentloaded" | "networkidle"Playwright-Navigations-Wartebedingung. Default: "networkidle"
webhookUrlbodystring (url)Webhook-Override pro Job. Empfängt job.succeeded / job.failed Ereignisse.
overlayModebody"cut" | "pass" | "disable"Kurzform der Overlay-Richtlinie für Cookies, Werbung und Modals.
overlaysbodyobjectOverlay-Steuerung pro Kategorie: cookies, ads, modals (cut|pass|disable) und timeoutMs (0–15000).

Request

{
  "url": "https://example.com",
  "immutable": true,
  "includeMarkdown": true,
  "fullPage": true
}

Response HTTP 202

{
  "jobId": "job_01HXYZ...",
  "reservedCredits": 3,
  "status": "queued"
}
POST/v1/extract

Strukturierten Extract-Job erstellen

Strukturiertes JSON von einer Seite gemäss Ihrem Schema extrahieren. Relative URL-Strings im Ergebnis werden in absolute URLs umgeschrieben. Erfordert Pro+.

Auth: API key or session required

Required parameters

NameInTypeDescription
urlrequiredbodystring (url)Seiten-URL für die Extraktion.
schemarequiredbodyobjectJSON-Schema-ähnliches Objekt, das die zu extrahierenden Felder beschreibt.

Optional parameters

NameInTypeDescription
promptbodystring (≤4000)Optionale Extraktionsanweisungen, die dem Operator-Prompt angehängt werden.
useProxybodybooleanDie Erfassung über Ihren konfigurierten Proxy-Pool leiten. Pro+. Default: false
proxybodystringProxy-Label oder URL (beispielsweise "us"). Impliziert Geo/Proxy-Funktion (Pro+).
waitUntilbody"load" | "domcontentloaded" | "networkidle"Playwright-Navigations-Wartebedingung. Default: "networkidle"
webhookUrlbodystring (url)Webhook-Override pro Job. Empfängt job.succeeded / job.failed Ereignisse.
overlayModebody"cut" | "pass" | "disable"Kurzform der Overlay-Richtlinie für Cookies, Werbung und Modals.
overlaysbodyobjectOverlay-Steuerung pro Kategorie: cookies, ads, modals (cut|pass|disable) und timeoutMs (0–15000).

Request

{
  "url": "https://example.com",
  "schema": {
    "type": "object",
    "properties": {
      "title": {
        "type": "string"
      },
      "price": {
        "type": "string"
      }
    },
    "required": [
      "title"
    ]
  }
}

Response HTTP 202

{
  "jobId": "job_01HXYZ...",
  "reservedCredits": 7,
  "status": "queued"
}
POST/v1/summary

Zusammenfassungs-Job erstellen

Eine einzelne URL, eine URL-Liste oder eine Website crawlen und pro Seite sowie als Gesamtüberblick zusammenfassen. Erfordert Pro+ und einen konfigurierten LLM-Endpunkt am Worker. Credits: 5 pro zusammengefasster Seite (+ Proxy).

Auth: API key or session required

No required parameters.

Optional parameters

NameInTypeDescription
urlbodystring (url)Start-/Seiten-URL. Erforderlich für Einzel- und Crawl-Modus.
urlsbodystring[] (urls)Explizite Liste von 2–50 URLs (nicht kombinierbar mit crawl).
crawlbodybooleanBei true mit url: BFS-Crawl bis maxPages/maxDepth. Default: false
maxPagesbodyintegerCrawl-Seitenbudget (tarifabhängig begrenzt). Default: 25
maxDepthbodyintegerCrawl-Linktiefe. Default: 2
sameOriginbodybooleanCrawl auf denselben Origin beschränken. Default: true
includeSubdomainsbodybooleanSubdomains erlauben, wenn sameOrigin true ist. Default: false
respectRobotsTxtbodybooleanrobots.txt-Disallow-Regeln beim Crawl beachten. Default: true
focusbodystring (≤2000)Optionaler Hinweis, worauf die Zusammenfassung achten soll.
lengthbody"short" | "medium" | "long"Längen-Voreinstellung der Zusammenfassung. Default: "medium"
useProxybodybooleanDie Erfassung über Ihren konfigurierten Proxy-Pool leiten. Pro+. Default: false
proxybodystringProxy-Label oder URL (beispielsweise "us"). Impliziert Geo/Proxy-Funktion (Pro+).
waitUntilbody"load" | "domcontentloaded" | "networkidle"Playwright-Navigations-Wartebedingung. Default: "networkidle"
webhookUrlbodystring (url)Webhook-Override pro Job. Empfängt job.succeeded / job.failed Ereignisse.
overlayModebody"cut" | "pass" | "disable"Kurzform der Overlay-Richtlinie für Cookies, Werbung und Modals.
overlaysbodyobjectOverlay-Steuerung pro Kategorie: cookies, ads, modals (cut|pass|disable) und timeoutMs (0–15000).

Request

{
  "url": "https://example.com",
  "crawl": true,
  "maxPages": 10,
  "maxDepth": 2,
  "length": "medium"
}

Response HTTP 202

{
  "jobId": "job_01HXYZ...",
  "reservedCredits": 50,
  "status": "queued"
}
  • Artifacts: summary.json (structured), summary.md (human-readable), pages.jsonl (per-page rows).
  • Settled credits scale with pages actually summarized (minimum 1 page).

Jobs & Artefakte

GET/v1/jobs

Jobs auflisten

Jobs Ihrer Organisation mit optionalen Filtern und Paginierung auflisten.

Auth: API key or session required

No required parameters.

Optional parameters

NameInTypeDescription
statusquery"queued" | "running" | "succeeded" | "failed"Nach Job-Status filtern. Ungültige Werte werden ignoriert.
kindquerystringExakter Job-Typ-Filter (screenshot, markdown, crawl, …).
qquerystringGross-/kleinschreibungsunabhängige Suche nach Job-URL oder Job-ID.
fromquerystring (ISO datetime)Inklusive untere Grenze für createdAt.
toquerystring (ISO datetime)Inklusive obere Grenze für createdAt.
limitqueryinteger (≥1, ≤100)Seitengrösse. Default: 25
offsetqueryinteger (≥0)Anzahl zu überspringender Jobs. Default: 0

Request

curl -X GET 'https://api.sitescreens.com/v1/jobs?status=succeeded&limit=25&offset=0' \
  -H 'Authorization: Bearer ssk_your_api_key'

Response HTTP 200

{
  "jobs": [
    {
      "id": "job_01HXYZ...",
      "kind": "screenshot",
      "status": "succeeded",
      "url": "https://example.com",
      "reservedCredits": 1,
      "settledCredits": 1,
      "createdAt": "2026-08-11T10:00:00.000Z",
      "faviconUrl": "https://api.sitescreens.com/v1/files?key=...&sig=..."
    }
  ],
  "total": 1,
  "limit": 25,
  "offset": 0
}
GET/v1/jobs/:id

Job abrufen

Einen einzelnen Job einschliesslich signierter Artefakt-Download-URLs abrufen (typischerweise ca. 1 Stunde gültig).

Auth: API key or session required

Required parameters

NameInTypeDescription
idrequiredpathstringJob-ID aus einem Create-Aufruf.

Request

curl -X GET 'https://api.sitescreens.com/v1/jobs/job_01HXYZ...' \
  -H 'Authorization: Bearer ssk_your_api_key'

Response HTTP 200

{
  "job": {
    "id": "job_01HXYZ...",
    "kind": "screenshot",
    "status": "succeeded",
    "url": "https://example.com",
    "reservedCredits": 1,
    "settledCredits": 1,
    "error": null,
    "meta": {
      "overlaysDetected": []
    },
    "createdAt": "2026-08-11T10:00:00.000Z",
    "finishedAt": "2026-08-11T10:00:08.000Z",
    "artifacts": [
      {
        "id": "art_01...",
        "contentType": "image/png",
        "byteSize": 184220,
        "contentHash": "sha256:…",
        "watermarked": false,
        "immutable": false,
        "url": "https://api.sitescreens.com/v1/artifacts/art_01...?exp=...&sig=..."
      }
    ]
  }
}
DELETE/v1/artifacts/:id

Artefakt löschen

Ein Artefakt, das Ihnen gehört, soft-löschen. Unveränderliche forensische Artefakte können nicht gelöscht werden.

Auth: API key or session required

Required parameters

NameInTypeDescription
idrequiredpathstringArtefakt-ID.

Request

curl -X DELETE 'https://api.sitescreens.com/v1/artifacts/art_01...' \
  -H 'Authorization: Bearer ssk_your_api_key'

Response HTTP 200

{
  "ok": true
}
  • Gibt 403 zurück, wenn das Artefakt als unveränderlich markiert ist.
GET/v1/artifacts/:id

Artefakt herunterladen (signierte URL)

Binärer Download für ein Artefakt. Erfordert eine gültige exp- und sig-Query-Signatur aus einer Job-Antwort — keinen API-Schlüssel.

Auth: None (public)

Required parameters

NameInTypeDescription
idrequiredpathstringArtefakt-ID.
exprequiredquerystringAblaufzeitstempel der Signatur.
sigrequiredquerystringHMAC-Signatur aus der Job-Artefakt-URL.

Request

curl -X GET 'https://api.sitescreens.com/v1/artifacts/art_01...?exp=1723370000&sig=%E2%80%A6'

Response HTTP 200

{
  "note": "Binary response body with Content-Type from the artifact (image/png, application/pdf, text/markdown, …)."
}
  • Verwenden Sie die vollständige signierte URL aus GET /v1/jobs/:id statt Signaturen selbst zu rekonstruieren.

Batch

POST/v1/batch

Batch von URLs einreihen

Viele URLs in einer Anfrage einreihen. Fehler pro URL werden in results zurückgegeben, ohne den gesamten Batch scheitern zu lassen. Erfordert Starter+. Die URL-Anzahl ist durch plan maxBatchSize begrenzt.

Auth: API key or session required

Required parameters

NameInTypeDescription
kindrequiredbody"screenshot" | "markdown" | "text" | "pdf"Job-Typ, der auf jede URL angewendet wird.
urlsrequiredbodystring[] (urls)Liste von URLs (1–500, tarifabhängig begrenzt).

Optional parameters

NameInTypeDescription
optionsbodyobjectGemeinsame Optionen: fullPage, device, width, height, resolution (Screenshot), useProxy, proxy, overlayMode, overlays, webhookUrl.

Request

{
  "kind": "screenshot",
  "urls": [
    "https://example.com",
    "https://example.org"
  ],
  "options": {
    "device": "desktop",
    "fullPage": false,
    "overlayMode": "cut"
  }
}

Response HTTP 202

{
  "batchSize": 2,
  "queued": 2,
  "failed": 0,
  "results": [
    {
      "url": "https://example.com",
      "jobId": "job_01...",
      "reservedCredits": 1
    },
    {
      "url": "https://example.org",
      "jobId": "job_02...",
      "reservedCredits": 1
    }
  ]
}

Monitore

GET/v1/monitors

Monitore auflisten

Change-Monitore Ihrer Organisation auflisten.

Auth: API key or session required

No required parameters.

Request

curl -X GET 'https://api.sitescreens.com/v1/monitors' \
  -H 'Authorization: Bearer ssk_your_api_key'

Response HTTP 200

{
  "monitors": [
    {
      "id": "mon_01...",
      "name": "example.com",
      "url": "https://example.com",
      "intervalMinutes": 60,
      "thresholdPercent": 2,
      "enabled": true,
      "lastCheckedAt": "2026-08-11T09:00:00.000Z",
      "nextRunAt": "2026-08-11T10:00:00.000Z"
    }
  ]
}
POST/v1/monitors

Monitor erstellen

Wiederkehrende visuelle/inhaltsbezogene Prüfungen planen. Erfordert Starter+. Anzahl tarifabhängig begrenzt.

Auth: API key or session required

Required parameters

NameInTypeDescription
urlrequiredbodystring (url)Zu überwachende URL.

Optional parameters

NameInTypeDescription
namebodystring (1–80)Anzeigename. Standardmässig der Hostname.
intervalMinutesbodyinteger (5–10080)Prüfintervall in Minuten. Default: 60
thresholdPercentbodynumber (0–100)Visueller Diff-Schwellenwert, der als Änderung zählt. Default: 2
fullPagebodybooleanFull-Page-Screenshots für Vergleiche erfassen. Default: false
devicebody"desktop" | "mobile" | "tablet"Viewport-Voreinstellung. Default: "desktop"
webhookUrlbodystring (url)Webhook pro Monitor für monitor.changed / monitor.unchanged.
enabledbodybooleanOb der Monitor aktiv ist. Default: true
forensicOnChangebodybooleanBei erkannter Änderung ein forensisches Paket einreihen. Default: false
overlayModebody"cut" | "pass" | "disable"Overlay-Kurzform für Monitor-Erfassungen.
overlaysbodyobjectOverlay-Einstellungen pro Kategorie.

Request

{
  "url": "https://example.com",
  "intervalMinutes": 60,
  "thresholdPercent": 2,
  "overlayMode": "cut"
}

Response HTTP 201

{
  "monitor": {
    "id": "mon_01...",
    "name": "example.com",
    "url": "https://example.com",
    "intervalMinutes": 60,
    "thresholdPercent": 2,
    "enabled": true
  }
}
GET/v1/monitors/:id

Monitor abrufen

Einen einzelnen Monitor anhand der ID abrufen.

Auth: API key or session required

Required parameters

NameInTypeDescription
idrequiredpathstringMonitor-ID.

Request

curl -X GET 'https://api.sitescreens.com/v1/monitors/mon_01...' \
  -H 'Authorization: Bearer ssk_your_api_key'

Response HTTP 200

{
  "monitor": {
    "id": "mon_01...",
    "name": "example.com",
    "url": "https://example.com",
    "intervalMinutes": 60,
    "enabled": true
  }
}
PATCH/v1/monitors/:id

Monitor aktualisieren

Teilaktualisierung der Monitor-Einstellungen. Body-Felder entsprechen Create (alle optional).

Auth: API key or session required

Required parameters

NameInTypeDescription
idrequiredpathstringMonitor-ID.

Optional parameters

NameInTypeDescription
enabledbodybooleanMonitor pausieren oder fortsetzen.
intervalMinutesbodyintegerNeues Prüfintervall.
thresholdPercentbodynumberNeuer visueller Änderungsschwellenwert.
namebodystringAnzeigename.
webhookUrlbodystring (url)Webhook-URL-Override.

Request

{
  "enabled": false,
  "intervalMinutes": 120
}

Response HTTP 200

{
  "monitor": {
    "id": "mon_01...",
    "enabled": false,
    "intervalMinutes": 120
  }
}
DELETE/v1/monitors/:id

Monitor löschen

Einen Monitor entfernen.

Auth: API key or session required

Required parameters

NameInTypeDescription
idrequiredpathstringMonitor-ID.

Request

curl -X DELETE 'https://api.sitescreens.com/v1/monitors/mon_01...' \
  -H 'Authorization: Bearer ssk_your_api_key'

Response HTTP 200

{
  "ok": true
}
GET/v1/monitors/:id/history

Monitor-Verlauf

Aktuelle Monitor-Läufe mit Änderungsflags und Screenshot-URLs.

Auth: API key or session required

Required parameters

NameInTypeDescription
idrequiredpathstringMonitor-ID.

Optional parameters

NameInTypeDescription
limitqueryinteger (1–100)Maximale Anzahl zurückzugebender Läufe. Default: 50

Request

curl -X GET 'https://api.sitescreens.com/v1/monitors/mon_01.../history?limit=20' \
  -H 'Authorization: Bearer ssk_your_api_key'

Response HTTP 200

{
  "monitor": {
    "id": "mon_01...",
    "url": "https://example.com"
  },
  "runs": [
    {
      "id": "run_01...",
      "jobId": "job_01...",
      "changed": true,
      "contentChanged": true,
      "visualChanged": true,
      "diffPercent": 4.2,
      "createdAt": "2026-08-11T09:00:00.000Z",
      "screenshotUrl": "https://api.sitescreens.com/v1/artifacts/...?exp=...&sig=..."
    }
  ]
}
GET/v1/monitors/:id/compare

Monitor-Läufe vergleichen

Seiten-an-Seiten-Vergleich zweier Monitor-Läufe.

Auth: API key or session required

Required parameters

NameInTypeDescription
idrequiredpathstringMonitor-ID.
leftrequiredquerystringLinke Lauf-ID.
rightrequiredquerystringRechte Lauf-ID.

Request

curl -X GET 'https://api.sitescreens.com/v1/monitors/mon_01.../compare?left=run_01...&right=run_02...' \
  -H 'Authorization: Bearer ssk_your_api_key'

Response HTTP 200

{
  "monitor": {
    "id": "mon_01..."
  },
  "left": {
    "id": "run_01...",
    "screenshot": {
      "url": "…"
    }
  },
  "right": {
    "id": "run_02...",
    "screenshot": {
      "url": "…"
    }
  }
}

RAG-Sync

GET/v1/rag/sources

RAG-Quellen auflisten

Allowlistete RAG-Sync-Quellen auflisten. Erstellen/Sync erfordert Pro+.

Auth: API key or session required

No required parameters.

Request

curl -X GET 'https://api.sitescreens.com/v1/rag/sources' \
  -H 'Authorization: Bearer ssk_your_api_key'

Response HTTP 200

{
  "sources": [
    {
      "id": "rag_01...",
      "name": "example.com",
      "startUrl": "https://example.com",
      "allowlistHosts": [
        "example.com"
      ],
      "maxPages": 25,
      "enabled": true
    }
  ]
}
POST/v1/rag/sources

RAG-Quelle erstellen

Eine allowlistete Website für wiederkehrenden Knowledge-Pack-Sync hinzufügen. Erfordert Pro+.

Auth: API key or session required

Required parameters

NameInTypeDescription
startUrlrequiredbodystring (url)Crawl-Start-URL.
allowlistHostsrequiredbodystring[] (1–50)Hosts, die der Crawler besuchen darf.

Optional parameters

NameInTypeDescription
namebodystring (1–80)Anzeigename.
maxPagesbodyinteger (1–5000)Seiten pro Sync. Default: 25
maxDepthbodyinteger (0–10)Crawl-Tiefe. Default: 2
intervalMinutesbodyinteger (15–10080)Automatisches Sync-Intervall. Default: 1440
respectRobotsTxtbodybooleanrobots.txt beachten. Default: true
enabledbodybooleanOb der geplante Sync aktiv ist. Default: true
webhookUrlbodystring (url)Empfängt rag.synced Ereignisse.
overlayModebody"cut" | "pass" | "disable"Overlay-Kurzform für Sync-Crawls.
overlaysbodyobjectOverlay-Einstellungen pro Kategorie.

Request

{
  "startUrl": "https://example.com/docs",
  "allowlistHosts": [
    "example.com"
  ],
  "maxPages": 25,
  "intervalMinutes": 1440
}

Response HTTP 201

{
  "source": {
    "id": "rag_01...",
    "startUrl": "https://example.com/docs",
    "allowlistHosts": [
      "example.com"
    ]
  }
}
GET/v1/rag/sources/:id

RAG-Quelle abrufen

Eine RAG-Quelle abrufen.

Auth: API key or session required

Required parameters

NameInTypeDescription
idrequiredpathstringQuellen-ID.

Request

curl -X GET 'https://api.sitescreens.com/v1/rag/sources/rag_01...' \
  -H 'Authorization: Bearer ssk_your_api_key'

Response HTTP 200

{
  "source": {
    "id": "rag_01...",
    "startUrl": "https://example.com"
  }
}
PATCH/v1/rag/sources/:id

RAG-Quelle aktualisieren

Teilaktualisierung. Body-Felder entsprechen Create (alle optional).

Auth: API key or session required

Required parameters

NameInTypeDescription
idrequiredpathstringQuellen-ID.

Optional parameters

NameInTypeDescription
enabledbodybooleanGeplanten Sync aktivieren oder deaktivieren.
maxPagesbodyintegerSeiten pro Sync.
intervalMinutesbodyintegerSync-Takt.

Request

{
  "enabled": true,
  "maxPages": 40
}

Response HTTP 200

{
  "source": {
    "id": "rag_01...",
    "maxPages": 40,
    "enabled": true
  }
}
DELETE/v1/rag/sources/:id

RAG-Quelle löschen

Eine RAG-Quelle entfernen.

Auth: API key or session required

Required parameters

NameInTypeDescription
idrequiredpathstringQuellen-ID.

Request

curl -X DELETE 'https://api.sitescreens.com/v1/rag/sources/rag_01...' \
  -H 'Authorization: Bearer ssk_your_api_key'

Response HTTP 200

{
  "ok": true
}
POST/v1/rag/sources/:id/sync

RAG-Sync auslösen

Sofortigen rag_sync-Job für die Quelle einreihen. Erfordert Pro+.

Auth: API key or session required

Required parameters

NameInTypeDescription
idrequiredpathstringQuellen-ID.

Request

curl -X POST 'https://api.sitescreens.com/v1/rag/sources/rag_01.../sync' \
  -H 'Authorization: Bearer ssk_your_api_key'

Response HTTP 202

{
  "jobId": "job_01HXYZ...",
  "reservedCredits": 1,
  "status": "queued"
}
  • Webhook-Ereignis bei Abschluss: rag.synced.
GET/v1/rag/packs

Knowledge-Packs auflisten

Versionierte Knowledge-Packs aus dem RAG-Sync auflisten.

Auth: API key or session required

No required parameters.

Optional parameters

NameInTypeDescription
ragSourceIdquerystringPacks auf eine Quelle filtern.

Request

curl -X GET 'https://api.sitescreens.com/v1/rag/packs?ragSourceId=rag_01...' \
  -H 'Authorization: Bearer ssk_your_api_key'

Response HTTP 200

{
  "packs": [
    {
      "id": "pack_01...",
      "ragSourceId": "rag_01...",
      "version": 3,
      "createdAt": "2026-08-11T08:00:00.000Z"
    }
  ]
}
GET/v1/rag/packs/:id

Knowledge-Pack abrufen

Ein Pack und seine signierten Artefakt-URLs (Markdown/JSONL) abrufen.

Auth: API key or session required

Required parameters

NameInTypeDescription
idrequiredpathstringPack-ID.

Request

curl -X GET 'https://api.sitescreens.com/v1/rag/packs/pack_01...' \
  -H 'Authorization: Bearer ssk_your_api_key'

Response HTTP 200

{
  "pack": {
    "id": "pack_01...",
    "version": 3,
    "artifacts": [
      {
        "id": "art_01...",
        "contentType": "text/markdown",
        "url": "https://api.sitescreens.com/v1/artifacts/art_01...?exp=...&sig=..."
      }
    ]
  }
}

API-Schlüssel

GET/v1/keys

API-Schlüssel auflisten

Aktive API-Schlüssel und Perioden-Ausgabenübersichten auflisten. Secrets werden hier nie zurückgegeben.

Auth: API key or session required

No required parameters.

Request

curl -X GET 'https://api.sitescreens.com/v1/keys' \
  -H 'Authorization: Bearer ssk_your_api_key'

Response HTTP 200

{
  "keys": [
    {
      "id": "key_01...",
      "name": "Production",
      "keyPrefix": "ssk_live_ab12",
      "dailyCreditLimit": 1000,
      "weeklyCreditLimit": null,
      "monthlyCreditLimit": null,
      "spentToday": 42,
      "spentThisWeek": 210,
      "spentThisMonth": 880,
      "createdAt": "2026-07-01T00:00:00.000Z"
    }
  ]
}
POST/v1/keys

API-Schlüssel erstellen

Einen neuen API-Schlüssel erstellen. Das vollständige Secret wird einmal zurückgegeben — sicher speichern.

Auth: API key or session required

No required parameters.

Optional parameters

NameInTypeDescription
namebodystring (1–60)Bezeichnung für den Schlüssel. Default: "Default"

Request

{
  "name": "CI"
}

Response HTTP 200

{
  "key": {
    "id": "key_01...",
    "name": "CI",
    "keyPrefix": "ssk_live_zz99",
    "dailyCreditLimit": null,
    "weeklyCreditLimit": null,
    "monthlyCreditLimit": null,
    "secret": "ssk_live_zz99…full_secret_once"
  }
}
PATCH/v1/keys/:id

API-Schlüssel aktualisieren

Schlüssel umbenennen oder tägliche/wöchentliche/monatliche Credit-Limits setzen. null hebt ein Limit auf (unbegrenzt).

Auth: API key or session required

Required parameters

NameInTypeDescription
idrequiredpathstringSchlüssel-ID.

Optional parameters

NameInTypeDescription
namebodystring (1–60)Neue Bezeichnung.
dailyCreditLimitbodyinteger | nullUTC-Tageslimit für Ausgaben. null = unbegrenzt.
weeklyCreditLimitbodyinteger | nullUTC-Wochenlimit (Mo–So) für Ausgaben. null = unbegrenzt.
monthlyCreditLimitbodyinteger | nullUTC-Kalendermonats-Limit für Ausgaben. null = unbegrenzt.

Request

{
  "dailyCreditLimit": 500,
  "weeklyCreditLimit": 2000
}

Response HTTP 200

{
  "key": {
    "id": "key_01...",
    "name": "CI",
    "dailyCreditLimit": 500,
    "weeklyCreditLimit": 2000,
    "monthlyCreditLimit": null,
    "spentToday": 42
  }
}
DELETE/v1/keys/:id

API-Schlüssel widerrufen

Einen API-Schlüssel sofort widerrufen.

Auth: API key or session required

Required parameters

NameInTypeDescription
idrequiredpathstringSchlüssel-ID.

Request

curl -X DELETE 'https://api.sitescreens.com/v1/keys/key_01...' \
  -H 'Authorization: Bearer ssk_your_api_key'

Response HTTP 200

{
  "ok": true
}

Webhooks & Nutzung

GET/v1/settings/webhook

Org-Webhook-Einstellungen abrufen

Organisations-Webhook-URL und ob ein HMAC-Secret konfiguriert ist lesen.

Auth: API key or session required

No required parameters.

Request

curl -X GET 'https://api.sitescreens.com/v1/settings/webhook' \
  -H 'Authorization: Bearer ssk_your_api_key'

Response HTTP 200

{
  "webhookUrl": "https://hooks.example.com/sitescreens",
  "hasSecret": true
}
PUT/v1/settings/webhook

Org-Webhook-Einstellungen aktualisieren

Organisations-Webhook-URL setzen oder löschen und optional das HMAC-Signatur-Secret rotieren.

Auth: API key or session required

No required parameters.

Optional parameters

NameInTypeDescription
webhookUrlbodystring (url) | nullZiel-URL oder null zum Löschen.
rotateSecretbodybooleanWenn true, wird ein neues Secret erzeugt und einmal zurückgegeben.

Request

{
  "webhookUrl": "https://hooks.example.com/sitescreens",
  "rotateSecret": true
}

Response HTTP 200

{
  "ok": true,
  "webhookSecret": "a1b2c3…"
}
  • Ereignisse: job.succeeded, job.failed, monitor.changed, monitor.unchanged, rag.synced.
  • Signatur-Header: X-Sitescreens-Signature: sha256=<hmac>.
GET/v1/usage

Credit-Ledger

Aktuelle Credit-Ledger-Einträge Ihrer Organisation (neueste 50).

Auth: API key or session required

No required parameters.

Request

curl -X GET 'https://api.sitescreens.com/v1/usage' \
  -H 'Authorization: Bearer ssk_your_api_key'

Response HTTP 200

{
  "ledger": [
    {
      "id": "led_01...",
      "jobId": "job_01...",
      "delta": -1,
      "balanceAfter": 999,
      "reason": "reserve",
      "createdAt": "2026-08-11T10:00:00.000Z"
    }
  ]
}
API-Referenz · Sitescreens