Dein Browser ist zu alt für Guard.ch

Aktualisiere ihn wie unten beschrieben und öffne die Seite dann nochmals.

iPhone und iPad

Aktualisiere iOS oder iPadOS unter Einstellungen > Allgemein > Softwareupdate. Auf iPhone und iPad läuft jeder Browser mit der Version des Systems, eine andere Browser-App bringt also nichts.

Computer und Android

Aktualisiere deinen Browser oder öffne Guard.ch in einer aktuellen Version von Chrome, Edge, Firefox oder Safari.

Alle Integrationen

API-Referenz von Guard.ch

Alle Routen, die du mit einem API-Schlüssel aufrufen kannst, mit Feldern, Beispielen und Fehlern.

Hier steht, was die API annimmt und zurückgibt. Wie du vom API-Schlüssel zum laufenden Playwright-Skript kommst, zeigt die Anleitung zur eigenen Integration. Einen KI-Assistenten bindest du stattdessen über MCP an.

Grundlagen

Basis-URL
https://api.guard.ch/v7
Authentifizierung
Ein API-Schlüssel im Authorization-Header
Format
JSON über HTTPS
Zugang
Enterprise

Die Pfade in dieser Referenz beziehen sich auf die Basis-URL. Schick einen Body immer als JSON mit Content-Type: application/json. Antworten können weitere Felder enthalten, die hier fehlen; ignorier einfach, was du nicht brauchst.

API-Schlüssel erstellst du im Reiter «Agenten» deines Dashboards, unter «Erweitert». Ein Schlüssel handelt für dein Konto: Die Sessions, die er startet, gehören dir, zählen zu deinen Limits und stehen in deiner Session-Liste.

API-Schlüssel erstellen

Authentifizierung

Schick den Schlüssel bei jeder Anfrage mit:

Authorization: Bearer YOUR_API_KEY

Schlüssel beginnen mit brl_k_ (früher erstellte mit brl-k-v7-). Die API liest sie nur aus diesem Header, nie aus der URL. GET /image ist die einzige Route auf dieser Seite, die ohne Schlüssel funktioniert. Ein Schlüssel gilt, bis du ihn widerrufst, oder bis zu dem festen Datum, das du beim Erstellen gewählt hast.

Antworten und Fehler

Jede Route antwortet mit HTTP 200 und einem JSON-Body. Ob es geklappt hat, steht im Feld status. Prüf also dieses Feld und nicht den HTTP-Code:

StatusBedeutung
okDie Anfrage hat geklappt. Die übrigen Felder enthalten das Ergebnis.
deniedDie Anfrage wurde abgelehnt, zum Beispiel weil der Schlüssel fehlt oder abgelaufen ist, ein Wert ungültig ist, alle gleichzeitigen Sessions belegt sind oder es die Session nicht gibt.
upgradeDein Plan enthält das nicht: den API-Zugang selbst oder eine App oder Option, die du angefragt hast.
errorBei uns ist etwas schiefgelaufen, oder den Pfad gibt es nicht. Versuch es später nochmals.

Werte jeden anderen Status als ok als Fehler. message nennt den Grund in einem Satz, den du einer Person zeigen kannst. Die Sprache folgt dem Header Accept-Language und ist ohne ihn Englisch. Werte den Text deshalb nicht aus, sondern verzweige nach status und, falls vorhanden, nach code oder reason.

{
  "status": "denied",
  "message": "This browser session could not be found. Check the session ID and try again."
}

Fehlt der Schlüssel oder ist er ungültig, widerrufen oder abgelaufen, lautet die Antwort denied mit loggedIn: false. Ist deine E-Mail-Adresse noch nicht bestätigt, kommt denied mit verified: false. Einzige Ausnahme von HTTP 200 sind Datei-Downloads, siehe Datei herunterladen.

Endpunkte

EndpunktBeschreibung
POST /web/sessionsSession starten
GET /web/sessionsEigene Sessions auflisten
GET /web/sessions/:idEine Session abrufen
DELETE /web/sessions/:idSession beenden
GET /web/sessions/:id/downloads/:downloadIdVom Browser heruntergeladene Datei abholen
GET /extensionsApps für eine neue oder laufende Session
POST /vm/:vmId/extensionsApps in einer laufenden Session einschalten
PATCH /vm/:vmId/extensions/:idEinstellungen einer aktiven App ändern
DELETE /vm/:vmId/extensions/:idEine App ausschalten
GET /web/usageDeine API-Nutzung der letzten 30 Tage
GET /user/quotaLimits deines Plans und was davon belegt ist
GET /imageBrowser-Images und Standorte

Sessions

Eine Session ist ein Cloud-Browser. Dein Code steuert ihn über CDP, und eine Person kann in der Live-Ansicht zuschauen oder übernehmen. Diese Routen erreichen nur Sessions deines eigenen Kontos, nie die deiner Kolleginnen und Kollegen.

Session starten

POST https://api.guard.ch/v7/web/sessions

Startet einen Browser und antwortet sofort, während er im Hintergrund weiter hochfährt: status ist erst starting, dann running. Verbinde Playwright über connectOverCDP oder Puppeteer über browserWSEndpoint mit der connectUrl. Wird die Verbindung anfangs abgelehnt, warte, bis GET /web/sessions/:id running meldet.

Alle Felder im Body sind optional:

FeldBeschreibung
imageID des Browser-Images. Jedes aktive Image mit supports_programmatic in GET /image. Standard: chrome.
nameAnzeigename für deine Session-Liste, 1 bis 64 Zeichen. Ohne Angabe entsteht ein Name wie brisk-otter-27.
urlAdresse, die beim Start geöffnet wird. Erlaubt sind nur http und https.
extensionsDie Apps, mit denen die Session startet, als [{ id, settings? }] (siehe Apps weiter unten). agent kommt immer dazu. Lässt du das Feld weg, startet die Session mit deinen immer aktiven Apps; was dein Plan, dein Workspace oder der Browser davon ablehnt, fällt weg, statt den Start scheitern zu lassen. Wird eine App abgelehnt, die du ausdrücklich nennst, scheitert der Start, und die Antwort nennt sie in extension. Was dein Workspace erzwingt, ist in jedem Fall dabei. Nenn eine Netzwerk-App entweder hier oder mit den älteren Feldern unten, nicht beides.
countryDie ältere Art, network.location anzugeben, und sie funktioniert weiterhin: ein Länder- oder Stadtcode aus vpnLocations in GET /image, zum Beispiel de oder us-dal. Ist an diesem Standort gerade kein Ausgang frei, startet die Session trotzdem, über den eigenen Anschluss des Rechenzentrums, und die Antwort meldet das mit location_applied: false. Nicht mit proxy kombinierbar.
egressresidential steht für network.residential: Die Session geht über einen Residential-Anschluss ins Netz, country wählt das Land. Der Verkehr zählt zum Residential-Kontingent deines Plans. Nicht mit proxy kombinierbar.
proxySteht für network.proxy: dein eigener Proxy im Format protocol://[user:password@]host:port, mit http, https, socks4 oder socks5. Private und interne Adressen werden abgelehnt. Nicht mit country oder egress kombinierbar. Für einen in Guard.ch gespeicherten Proxy oder ein VPN nennst du network.proxy oder network.wireguard mit der egressId in extensions.
analysisDer ältere Schalter für die Sicherheits-Apps: true startet die Session mit allen, wie die Security Suite. Ein Browser ohne supports_analysis antwortet mit analysis_unavailable.
screenViewport als {"width": 1440, "height": 900}: Breite 320 bis 1920, Höhe 480 bis 1080. Standard: 1366 x 768.
idempotencyKeyWiederholungsschlüssel mit 1 bis 128 Zeichen. Schickst du die Anfrage innerhalb von 10 Minuten mit demselben API-Schlüssel und Wiederholungsschlüssel nochmals, bekommst du die erste erfolgreiche Antwort zurück statt eines zweiten Browsers. Fehlgeschlagene Versuche werden nicht gespeichert; ein neuer Versuch nach einer Ablehnung startet also wirklich neu.

Zum Beispiel:

curl -X POST https://api.guard.ch/v7/web/sessions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "triage-4821",
    "url": "https://example.com",
    "extensions": [
      { "id": "network.location", "settings": { "country": "DE" } },
      { "id": "security.reputation" }
    ],
    "screen": { "width": 1440, "height": 900 },
    "idempotencyKey": "ticket-4821"
  }'
{
  "status": "ok",
  "id": "brl-v-v7-q8m2r7k4d1",
  "name": "triage-4821",
  "image": "chrome",
  "connectUrl": "wss://api.guard.ch/web/brl-v-v7-q8m2r7k4d1/cdp?token=3f9c2a7d",
  "liveViewUrl": "https://guard.ch/en/viewer?id=brl-v-v7-q8m2r7k4d1",
  "createdAt": "2026-09-26T08:14:03.512Z",
  "screen": { "width": 1440, "height": 900 },
  "analysisEnabled": true,
  "location_applied": true,
  "quota": {
    "running_session_limit": 3,
    "running_sessions_used": 1,
    "running_sessions_remaining": 2
  }
}

Eine erfolgreiche Antwort enthält:

FeldBeschreibung
idSession-ID für die anderen Routen.
nameDer Name, den du angegeben hast, oder der erzeugte.
imageDas Image, auf dem die Session läuft.
connectUrlCDP-WebSocket-URL für Playwright oder Puppeteer. Sie enthält einen eigenen Token der Session; behandle sie wie ein Passwort.
liveViewUrlDie Live-Ansicht der Session in Guard.ch, zum Zuschauen und Übernehmen. Zum Öffnen musst du in deinem Konto angemeldet sein.
createdAtStartzeit im Format ISO 8601.
screenDer Viewport, mit dem der Browser läuft.
analysisEnabledOb die Session mit eingeschalteten Sicherheits-Apps gestartet ist.
location_applied, location_reasonlocation_applied ist false, wenn der gewünschte Standort nicht angewendet werden konnte, und location_reason sagt warum: unavailable heisst, an diesem Standort war kein Ausgang frei. Die Session läuft dann über den Anschluss des Rechenzentrums. Ohne Standort ist der Wert true.
quotaDeine gleichzeitigen Sessions inklusive dieser: running_session_limit, running_sessions_used und running_sessions_remaining.

Ein abgelehnter Start enthält zusätzlich einen maschinenlesbaren code:

CodeBedeutung
invalid_argumentsEin Wert ist nicht verwendbar, etwa ein fehlerhafter Proxy oder eine App oder Einstellung, die die API nicht annimmt (reason und extension sagen welche). Die meisten Feldprüfungen antworten ohne Code; dann nennt message das Feld.
plan_requiredDeinem Plan fehlt eine App, die du angefragt hast (Status upgrade; extension und feature nennen sie), oder dein Workspace hat sie ausgeschaltet (Status denied, reason: workspace_policy, policy nennt sie).
analysis_unavailableanalysis: true auf einem Browser, der die Sicherheits-Apps nicht ausführen kann.
image_not_supportedDas Image gibt es nicht, oder es kann keine API-Sessions ausführen. allowedImages listet die Images, die du nutzen kannst.
image_restrictedDein Plan kann dieses Image nicht starten (Status upgrade). allowedImages listet die Images, die du nutzen kannst.
quota_exceededAlle deine gleichzeitigen Sessions sind belegt, oder ein Kontingent ist aufgebraucht. Beende eine Session oder ändere die Anfrage; denselben Aufruf zu wiederholen, hilft nicht.
rate_limitedDu hast in kurzer Zeit zu viele Sessions gestartet. retryAfterMs sagt dir, wie viele Millisekunden du warten sollst.
internal_errorBei uns ist etwas fehlgeschlagen (Status error). Versuch es später nochmals.

Sessions auflisten

GET https://api.guard.ch/v7/web/sessions

Gibt deine Sessions in data zurück, die neuste zuerst. Aufgelistet werden nur Sessions, die über die API oder MCP gestartet wurden. Sessions, die du in Guard.ch von Hand startest, fehlen hier; mit GET /web/sessions/:id findest du sie trotzdem über ihre ID.

ParameterBeschreibung
statusall nimmt beendete Sessions der letzten 30 Tage dazu. Ohne den Parameter siehst du nur Sessions, die gerade starten oder laufen.
limitHöchstzahl der Sessions, 1 bis 200. Standard: 50.
curl "https://api.guard.ch/v7/web/sessions?status=all&limit=20" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "status": "ok",
  "data": [
    {
      "id": "brl-v-v7-q8m2r7k4d1",
      "name": "triage-4821",
      "image": "chrome",
      "status": "running",
      "createdAt": "2026-09-26T08:14:03.512Z",
      "endedAt": null,
      "endedReason": null,
      "startRefusal": null,
      "expiresAt": "2026-09-27T02:14:03.512Z",
      "lastseen": "2026-09-26T08:31:40.087Z",
      "url": "https://example.com",
      "country": "de",
      "location_applied": true,
      "connectUrl": "wss://api.guard.ch/web/brl-v-v7-q8m2r7k4d1/cdp?token=3f9c2a7d",
      "liveViewUrl": "https://guard.ch/en/viewer?id=brl-v-v7-q8m2r7k4d1",
      "startedByKind": "agent",
      "analysisEnabled": false,
      "startedBy": { "id": 4821, "email": "ana@example.com", "firstname": "Ana", "lastname": "Meier" }
    }
  ]
}

Jede Session hat diese Felder:

FeldBeschreibung
id, name, imageSession-ID, Anzeigename und Image, wie beim Start zurückgegeben.
statusstarting oder running, solange die Session läuft. Jeder andere Wert heisst, dass sie beendet ist.
createdAt, endedAtStart- und Endzeit im Format ISO 8601. endedAt ist null, solange die Session läuft.
endedReasonWarum sie endete: stopped (von dir oder über die API beendet), timeout (maximale Laufzeit erreicht), disconnect (zu lange nichts verbunden), runtime (Laufzeitkontingent des Plans aufgebraucht), disk (Speicherlimit voll), error oder lost (der Browser ist ausgefallen oder seine Maschine ist weg). Null, solange sie läuft.
expiresAtDer späteste Zeitpunkt, zu dem die Session endet, festgelegt durch deinen Plan. Sie kann auch früher enden, siehe Limits.
lastseenWann ein verbundener Client die Session zuletzt am Leben gehalten hat.
urlDie Startadresse aus der Anfrage oder null.
countryDer Standort, über den die Session gerade ins Netz geht, oder null für den eigenen Anschluss des Rechenzentrums.
location_applied, location_reasonlocation_applied ist false, wenn der beim Start gewünschte Standort nicht angewendet werden konnte und seither nicht gewechselt wurde; location_reason sagt dann warum (unavailable).
connectUrlCDP-WebSocket-URL, solange die Session startet oder läuft, sonst null.
liveViewUrlDie Live-Ansicht in Guard.ch.
startedByKindagent für Sessions, die über die API oder MCP gestartet wurden, app für Sessions, die jemand in Guard.ch von Hand gestartet hat.
analysisEnabledOb gerade eine Sicherheits-App eingeschaltet ist.
startedByDas Konto, das die Session gestartet hat: id, email, firstname und lastname.

Session abrufen

GET https://api.guard.ch/v7/web/sessions/:id

Gibt eine Session in data zurück, mit denselben Feldern wie die Liste. So findest du auch Sessions, die du in Guard.ch von Hand gestartet hast, und ein Skript kann sich über ihre connectUrl damit verbinden. Eine unbekannte ID oder die Session einer anderen Person ergibt denied.

Session beenden

DELETE https://api.guard.ch/v7/web/sessions/:id

Beendet die Session sofort und entfernt ihren Browser; sie zählt dann nicht mehr zu deinen gleichzeitigen Sessions. Die Antwort ist ok, auch wenn die Session schon beendet war. endedReason wird zu stopped, ausser die Session endete vorher aus einem anderen Grund. Das beendet auch Sessions, die du von Hand gestartet hast; beende also nur, was dein Skript gestartet hat.

curl -X DELETE https://api.guard.ch/v7/web/sessions/brl-v-v7-q8m2r7k4d1 \
  -H "Authorization: Bearer YOUR_API_KEY"

Datei herunterladen

GET https://api.guard.ch/v7/web/sessions/:id/downloads/:downloadId

Gibt die Bytes einer Datei zurück, die der Browser während der Session heruntergeladen hat, mit Inhaltstyp und Dateiname. Das MCP-Tool browser_downloads liefert diese URL mit einem signierten Parameter token. Der Link selbst ist die Berechtigung: Er öffnet genau diese Datei 15 Minuten lang ohne Authorization-Header, du kannst ihn also im Browser öffnen oder weitergeben. Für einen neuen Link listest du die Downloads nochmals auf.

Anders als alle anderen Routen antwortet diese mit echten HTTP-Statuscodes: 200 mit der Datei, 403 mit Status denied, wenn der Link abgelaufen oder ungültig ist, oder 404 mit Status denied, wenn die Datei nicht verfügbar ist. Die Datei wird mit den Cookies der Seite nochmals angefordert; ein einmaliger oder abgelaufener Download-Link ergibt deshalb 404.

Apps

Alles Optionale an einer Session ist eine App aus dem App Store: ihr Ausgang, die Anonyme Mail, Dateien, die Agent-Steuerung und die Sicherheits-Apps. Eine Session startet mit denen, die du in extensions nennst, oder mit deinen immer aktiven, und du kannst sie schalten, solange sie läuft. Dein Workspace kann eine App sperren oder erzwingen; die API hält sich daran und nennt die App, an der es scheitert.

Die Apps und ihre Einstellungen:

AppBeschreibung
network.locationLocation Switch, ein Ausgang im Rechenzentrum. Einstellungen: country (zwei Buchstaben, US) und optional location, ein Stadtcode aus GET /image (us-dal).
network.residentialHome IP, ein Residential-Anschluss, der zu deinem Kontingent zählt. Einstellungen: country, optional.
network.proxyProxy Connect, dein eigener Proxy. Einstellungen: egressId eines Proxys, der für dich oder deinen Workspace gespeichert ist, oder proxy im Format protocol://[user:password@]host:port.
network.wireguardCustom VPN, dein eigenes WireGuard-VPN. Einstellungen: egressId eines gespeicherten VPN.
mailAnonyme Mail: deine Adressen und dein Posteingang in der Session.
filesDateien: Uploads und Downloads zwischen deinem Gerät und der Session.
agentAgent Bridge: CDP, MCP und die Übergabe des Browsers. In Sessions, die über diese API starten, immer an.
security.reputation, security.domain, security.privacy, security.page, security.aiDie Sicherheits-Apps: Reputation Check, Domain Inspector, Tracker Scan, Page Guard und AI Verdict. Sie brauchen ein Image mit supports_analysis in GET /image.

Apps auflisten

GET https://api.guard.ch/v7/extensions

Mit image (einer Image-ID) siehst du, was eine neue Session auf diesem Browser nutzen könnte; mit vm (einer Session-ID) den aktuellen Stand dieser Session. Schick genau einen der beiden Parameter.

curl "https://api.guard.ch/v7/extensions?image=chrome" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "status": "ok",
  "extensions": [
    { "id": "network.location", "state": "available", "alwaysOn": true },
    { "id": "mail", "state": "available", "alwaysOn": false },
    { "id": "security.ai", "state": "locked", "reason": "policy", "alwaysOn": false }
  ],
  "packs": [
    {
      "id": "pack.security",
      "extensions": ["security.reputation", "security.domain", "security.privacy", "security.page", "security.ai"]
    }
  ],
  "alwaysOn": ["network.location"]
}
FeldBeschreibung
extensionsJede App mit id, state (available, active, locked oder enforced), reason bei gesperrten (offered, feature, policy oder image), feature für eine fehlende Planfunktion und alwaysOn.
packsGruppen, die der App Store in einem Schritt einschaltet, etwa pack.security (Security Suite), mit ihren extensions. Zum Starten oder Ändern einer Session schickst du die Apps selbst.
alwaysOnDeine immer aktiven Apps: damit startet eine Session, wenn du kein extensions schickst.
canChangeMit vm: ob du die Apps dieser Session schalten darfst.

Apps einschalten

POST https://api.guard.ch/v7/vm/:vmId/extensions

Schaltet Apps in einer laufenden Session ein oder ändert die Einstellungen von bereits aktiven. Die Session behält ihre Tabs und ihren Zustand, und eine Netzwerk-App ersetzt die aktive. Die Antwort kommt, sobald die Änderung greift. Der Body ist extensions, eine oder mehrere { id, settings? } aus der Liste oben.

curl -X POST https://api.guard.ch/v7/vm/brl-v-v7-q8m2r7k4d1/extensions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "extensions": [{ "id": "mail" }, { "id": "network.residential", "settings": { "country": "DE" } }] }'
FeldBeschreibung
extensionsDie aktiven Apps nach der Änderung, je mit id, settings, activatedAt und problem.
activated, reconfigured, deactivatedWas die Änderung eingeschaltet, angepasst oder ausgeschaltet hat (ein neuer Ausgang schaltet den alten aus).
egressNur wenn der Ausgang wechselt: auto, datacenter, residential, proxy oder wireguard, mit country, location, egressId und, wenn dein eigener Proxy oder dein VPN nicht funktioniert, problem.

Eine abgelehnte Änderung nennt die extension und einen reason:

GrundBedeutung
featureDein Plan enthält sie nicht (Status upgrade; feature nennt die fehlende Planfunktion).
workspace_policyDein Workspace hat sie gesperrt (policy nennt sie).
enforcedDein Workspace erzwingt sie, darum lässt sie sich nicht ausschalten.
imageDer Browser der Session unterstützt sie nicht, etwa eine Sicherheits-App auf Firefox.
invalid_settingsEine Einstellung stimmt nicht; field nennt sie.
unknown, offered, unavailableGuard.ch kennt diese App nicht oder bietet sie nicht an, oder sie kann gerade nicht laufen.
conflict, inactive, not_running, not_foundZwei Ausgänge gleichzeitig, eine Änderung an einer ausgeschalteten App, eine Session, die nicht läuft, oder eine, die nicht dir gehört.

Ein neuer Ausgang kann auch aus eigenem Grund scheitern, etwa residential_limit_reached, invalid_proxy oder egress_not_found.

Einstellungen einer App ändern

PATCH https://api.guard.ch/v7/vm/:vmId/extensions/:id

Ändert die Einstellungen einer aktiven App, etwa die Stadt des Serverstandorts. Schick die neuen settings als Body; ist die App aus, lautet die Antwort reason: inactive. Die Antwort ist dieselbe wie beim Einschalten.

curl -X PATCH https://api.guard.ch/v7/vm/brl-v-v7-q8m2r7k4d1/extensions/network.location \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "settings": { "country": "US", "location": "us-dal" } }'

Eine App ausschalten

DELETE https://api.guard.ch/v7/vm/:vmId/extensions/:id

Schaltet eine App aus, oder mit pack.security alle Sicherheits-Apps auf einmal. Schaltest du die Netzwerk-App aus, geht die Session über den eigenen Anschluss des Rechenzentrums; eine App, die dein Workspace erzwingt, bleibt an (reason: enforced).

curl -X DELETE https://api.guard.ch/v7/vm/brl-v-v7-q8m2r7k4d1/extensions/pack.security \
  -H "Authorization: Bearer YOUR_API_KEY"

Nutzung und Kontingent

API-Nutzung

GET https://api.guard.ch/v7/web/usage

Summen über die Sessions, die dein Konto über die API oder MCP gestartet hat:

FeldBeschreibung
activeSessionsSessions, die gerade starten oder laufen.
sessionsLast30dIn den letzten 30 Tagen gestartete Sessions.
totalMinutesLast30dIhre gesamte Laufzeit in Minuten; laufende Sessions zählen bis jetzt.
planDein Plan: name, runningSessionLimit (gleichzeitige Sessions) und featureProgrammaticAccess.

Limits des Plans

GET https://api.guard.ch/v7/user/quota

Die Zähler, die dein Plan durchsetzt, über alle Sessions deines Workspace, egal ob von Hand oder über die API gestartet:

FeldBeschreibung
has_planOb ein aktiver Plan gilt.
running_session_limit, running_sessions_used, running_sessions_remainingGleichzeitige Sessions: erlaubt, belegt und frei.
cycle_start, cycle_session_limit, cycle_sessions_used, cycle_sessions_remainingBeginn des aktuellen Abrechnungszeitraums und die darin gezählten Sessions. Null als Limit heisst unbegrenzt.
residential_cycle_mb_limit, residential_bytes_used_cycleDas Residential-Kontingent deines Workspace für den Zyklus in MB (null, wenn unbegrenzt, 0 ohne Plan) und der Verbrauch in Bytes.
memberDein eigener Anteil: die Limits, die dir ein Manager oder der Plan setzt (null, wenn nur das Limit des Workspace gilt), und deine eigenen Sessions und Residential-Bytes.

Images und Standorte

GET https://api.guard.ch/v7/image

Der Katalog hinter image, den Standortcodes und den Residential-Ausgängen. Dafür brauchst du keinen Schlüssel.

curl https://api.guard.ch/v7/image
FeldBeschreibung
imagesBrowser-Images mit id, name, picture, enabled, requires_feature_restricted_images, supports_analysis (kann die Sicherheits-Apps ausführen) und supports_programmatic. Nimm ein Image, das aktiv ist und programmatischen Zugriff unterstützt.
vpnLocationsLänder mit code, name, default (die Stadt, zu der ein reiner Ländercode aufgelöst wird) und cities mit je code und location. Als Standort funktionieren Länder- und Stadtcodes.
residentialAbdeckung des Residential-Ausgangs: configured und countries mit den erreichbaren Ländercodes (null: alle Länder).

Limits

  • 3 Sessions gleichzeitig pro Platz. Sessions, die du von Hand startest, zählen mit. Das ganze Team teilt sich diese Sessions, und Workspace-Manager können einzelnen Mitgliedern ein Limit setzen. Sind alle belegt, wird eine neue Session abgelehnt und nicht eingereiht.
  • Sessions enden von selbst. Eine Session endet wenige Minuten, nachdem sich der letzte Client getrennt hat, spätestens aber bei expiresAt: 18 Stunden nach dem Start. Beende Sessions, die du nicht mehr brauchst, damit sie sofort nicht mehr zu deinem Limit zählen.
  • Das Starten von Sessions ist begrenzt. Pro Minute, Stunde und Tag gelten Limits, je API-Schlüssel und je Konto. Eine Ablehnung enthält code: rate_limited und retryAfterMs.
  • Auch Anfragen sind begrenzt. Der API-Host nimmt von einer IP-Adresse etwa zwei Anfragen pro Sekunde an, kurze Spitzen darüber sind möglich. Wird das überschritten, lautet die Antwort denied; warte kurz und versuch es nochmals.
  • Aufrufe kosten nichts extra. Weder Anfragen noch Sessions werden nach Menge abgerechnet. Residential-Verkehr zählt zum Kontingent deines Plans im Abrechnungszeitraum.

Sicherheit

  • Ein API-Schlüssel hat auf diesen Routen dieselben Rechte wie dein Konto. Bewahr ihn in einem Secret Store auf und widerruf ihn im Reiter «Agenten», falls er je nach aussen gelangt.
  • Schick Schlüssel nur im Authorization-Header, nie in URLs, wo sie in Logs und im Browserverlauf landen.
  • Jede connectUrl hat einen eigenen Token und funktioniert nicht mehr, sobald die Session endet. Schreib sie nicht in Logs und gib sie nicht weiter.
  • Zielseiten laden in unserer Infrastruktur, nie auf dem Rechner, der die API aufruft.

Fragen zur API?

Unklarheiten bei einer Route, oder fehlt dir etwas für deine Integration? Schreib uns.

Teste Guard.ch 30 Tage lang.

Du startest ohne Karte. Für die Testphase hinterlegst du eine und zahlst erst, wenn sie endet.

30 Tage testen