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.
Authentifizierung
Schick den Schlüssel bei jeder Anfrage mit:
Authorization: Bearer YOUR_API_KEYSchlü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:
| Status | Bedeutung |
|---|---|
ok | Die Anfrage hat geklappt. Die übrigen Felder enthalten das Ergebnis. |
denied | Die 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. |
upgrade | Dein Plan enthält das nicht: den API-Zugang selbst oder eine App oder Option, die du angefragt hast. |
error | Bei 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
| Endpunkt | Beschreibung |
|---|---|
POST /web/sessions | Session starten |
GET /web/sessions | Eigene Sessions auflisten |
GET /web/sessions/:id | Eine Session abrufen |
DELETE /web/sessions/:id | Session beenden |
GET /web/sessions/:id/downloads/:downloadId | Vom Browser heruntergeladene Datei abholen |
GET /extensions | Apps für eine neue oder laufende Session |
POST /vm/:vmId/extensions | Apps in einer laufenden Session einschalten |
PATCH /vm/:vmId/extensions/:id | Einstellungen einer aktiven App ändern |
DELETE /vm/:vmId/extensions/:id | Eine App ausschalten |
GET /web/usage | Deine API-Nutzung der letzten 30 Tage |
GET /user/quota | Limits deines Plans und was davon belegt ist |
GET /image | Browser-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/sessionsStartet 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:
| Feld | Beschreibung |
|---|---|
image | ID des Browser-Images. Jedes aktive Image mit supports_programmatic in GET /image. Standard: chrome. |
name | Anzeigename für deine Session-Liste, 1 bis 64 Zeichen. Ohne Angabe entsteht ein Name wie brisk-otter-27. |
url | Adresse, die beim Start geöffnet wird. Erlaubt sind nur http und https. |
extensions | Die 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. |
country | Die ä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. |
egress | residential 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. |
proxy | Steht 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. |
analysis | Der ä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. |
screen | Viewport als {"width": 1440, "height": 900}: Breite 320 bis 1920, Höhe 480 bis 1080. Standard: 1366 x 768. |
idempotencyKey | Wiederholungsschlü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:
| Feld | Beschreibung |
|---|---|
id | Session-ID für die anderen Routen. |
name | Der Name, den du angegeben hast, oder der erzeugte. |
image | Das Image, auf dem die Session läuft. |
connectUrl | CDP-WebSocket-URL für Playwright oder Puppeteer. Sie enthält einen eigenen Token der Session; behandle sie wie ein Passwort. |
liveViewUrl | Die Live-Ansicht der Session in Guard.ch, zum Zuschauen und Übernehmen. Zum Öffnen musst du in deinem Konto angemeldet sein. |
createdAt | Startzeit im Format ISO 8601. |
screen | Der Viewport, mit dem der Browser läuft. |
analysisEnabled | Ob die Session mit eingeschalteten Sicherheits-Apps gestartet ist. |
location_applied, location_reason | location_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. |
quota | Deine gleichzeitigen Sessions inklusive dieser: running_session_limit, running_sessions_used und running_sessions_remaining. |
Ein abgelehnter Start enthält zusätzlich einen maschinenlesbaren code:
| Code | Bedeutung |
|---|---|
invalid_arguments | Ein 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_required | Deinem 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_unavailable | analysis: true auf einem Browser, der die Sicherheits-Apps nicht ausführen kann. |
image_not_supported | Das Image gibt es nicht, oder es kann keine API-Sessions ausführen. allowedImages listet die Images, die du nutzen kannst. |
image_restricted | Dein Plan kann dieses Image nicht starten (Status upgrade). allowedImages listet die Images, die du nutzen kannst. |
quota_exceeded | Alle deine gleichzeitigen Sessions sind belegt, oder ein Kontingent ist aufgebraucht. Beende eine Session oder ändere die Anfrage; denselben Aufruf zu wiederholen, hilft nicht. |
rate_limited | Du hast in kurzer Zeit zu viele Sessions gestartet. retryAfterMs sagt dir, wie viele Millisekunden du warten sollst. |
internal_error | Bei uns ist etwas fehlgeschlagen (Status error). Versuch es später nochmals. |
Sessions auflisten
GET https://api.guard.ch/v7/web/sessionsGibt 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.
| Parameter | Beschreibung |
|---|---|
status | all nimmt beendete Sessions der letzten 30 Tage dazu. Ohne den Parameter siehst du nur Sessions, die gerade starten oder laufen. |
limit | Hö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:
| Feld | Beschreibung |
|---|---|
id, name, image | Session-ID, Anzeigename und Image, wie beim Start zurückgegeben. |
status | starting oder running, solange die Session läuft. Jeder andere Wert heisst, dass sie beendet ist. |
createdAt, endedAt | Start- und Endzeit im Format ISO 8601. endedAt ist null, solange die Session läuft. |
endedReason | Warum 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. |
expiresAt | Der späteste Zeitpunkt, zu dem die Session endet, festgelegt durch deinen Plan. Sie kann auch früher enden, siehe Limits. |
lastseen | Wann ein verbundener Client die Session zuletzt am Leben gehalten hat. |
url | Die Startadresse aus der Anfrage oder null. |
country | Der Standort, über den die Session gerade ins Netz geht, oder null für den eigenen Anschluss des Rechenzentrums. |
location_applied, location_reason | location_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). |
connectUrl | CDP-WebSocket-URL, solange die Session startet oder läuft, sonst null. |
liveViewUrl | Die Live-Ansicht in Guard.ch. |
startedByKind | agent für Sessions, die über die API oder MCP gestartet wurden, app für Sessions, die jemand in Guard.ch von Hand gestartet hat. |
analysisEnabled | Ob gerade eine Sicherheits-App eingeschaltet ist. |
startedBy | Das Konto, das die Session gestartet hat: id, email, firstname und lastname. |
Session abrufen
GET https://api.guard.ch/v7/web/sessions/:idGibt 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/:idBeendet 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/:downloadIdGibt 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:
| App | Beschreibung |
|---|---|
network.location | Location Switch, ein Ausgang im Rechenzentrum. Einstellungen: country (zwei Buchstaben, US) und optional location, ein Stadtcode aus GET /image (us-dal). |
network.residential | Home IP, ein Residential-Anschluss, der zu deinem Kontingent zählt. Einstellungen: country, optional. |
network.proxy | Proxy 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.wireguard | Custom VPN, dein eigenes WireGuard-VPN. Einstellungen: egressId eines gespeicherten VPN. |
mail | Anonyme Mail: deine Adressen und dein Posteingang in der Session. |
files | Dateien: Uploads und Downloads zwischen deinem Gerät und der Session. |
agent | Agent 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.ai | Die 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/extensionsMit 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"]
}| Feld | Beschreibung |
|---|---|
extensions | Jede 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. |
packs | Gruppen, 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. |
alwaysOn | Deine immer aktiven Apps: damit startet eine Session, wenn du kein extensions schickst. |
canChange | Mit vm: ob du die Apps dieser Session schalten darfst. |
Apps einschalten
POST https://api.guard.ch/v7/vm/:vmId/extensionsSchaltet 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" } }] }'| Feld | Beschreibung |
|---|---|
extensions | Die aktiven Apps nach der Änderung, je mit id, settings, activatedAt und problem. |
activated, reconfigured, deactivated | Was die Änderung eingeschaltet, angepasst oder ausgeschaltet hat (ein neuer Ausgang schaltet den alten aus). |
egress | Nur 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:
| Grund | Bedeutung |
|---|---|
feature | Dein Plan enthält sie nicht (Status upgrade; feature nennt die fehlende Planfunktion). |
workspace_policy | Dein Workspace hat sie gesperrt (policy nennt sie). |
enforced | Dein Workspace erzwingt sie, darum lässt sie sich nicht ausschalten. |
image | Der Browser der Session unterstützt sie nicht, etwa eine Sicherheits-App auf Firefox. |
invalid_settings | Eine Einstellung stimmt nicht; field nennt sie. |
unknown, offered, unavailable | Guard.ch kennt diese App nicht oder bietet sie nicht an, oder sie kann gerade nicht laufen. |
conflict, inactive, not_running, not_found | Zwei 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/:idSchaltet 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/usageSummen über die Sessions, die dein Konto über die API oder MCP gestartet hat:
| Feld | Beschreibung |
|---|---|
activeSessions | Sessions, die gerade starten oder laufen. |
sessionsLast30d | In den letzten 30 Tagen gestartete Sessions. |
totalMinutesLast30d | Ihre gesamte Laufzeit in Minuten; laufende Sessions zählen bis jetzt. |
plan | Dein Plan: name, runningSessionLimit (gleichzeitige Sessions) und featureProgrammaticAccess. |
Limits des Plans
GET https://api.guard.ch/v7/user/quotaDie Zähler, die dein Plan durchsetzt, über alle Sessions deines Workspace, egal ob von Hand oder über die API gestartet:
| Feld | Beschreibung |
|---|---|
has_plan | Ob ein aktiver Plan gilt. |
running_session_limit, running_sessions_used, running_sessions_remaining | Gleichzeitige Sessions: erlaubt, belegt und frei. |
cycle_start, cycle_session_limit, cycle_sessions_used, cycle_sessions_remaining | Beginn des aktuellen Abrechnungszeitraums und die darin gezählten Sessions. Null als Limit heisst unbegrenzt. |
residential_cycle_mb_limit, residential_bytes_used_cycle | Das Residential-Kontingent deines Workspace für den Zyklus in MB (null, wenn unbegrenzt, 0 ohne Plan) und der Verbrauch in Bytes. |
member | Dein 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/imageDer Katalog hinter image, den Standortcodes und den Residential-Ausgängen. Dafür brauchst du keinen Schlüssel.
curl https://api.guard.ch/v7/image| Feld | Beschreibung |
|---|---|
images | Browser-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. |
vpnLocations | Lä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. |
residential | Abdeckung 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_limitedundretryAfterMs. - 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
connectUrlhat 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.