SNG Hosting API · v1
Steuern Sie Ihre Server aus Ihrem eigenen Code
Power, Auslastung, IP-Adressen, Reverse DNS, Traffic, Firewall und DDoS-Schutz für jeden SNG VPS und dedizierten Server – mit einem Token und einer einheitlichen API.
curl -X POST https://api.snghosting.com/api/v1/servers/ded_6a4b…/actions \
-H "Authorization: Bearer $SNG_API_TOKEN" \
-H "Idempotency-Key: 5f0c…" \
-d '{"action":"reboot"}'{
"data": {
"operation": {
"id": "6a4b2a40-6d0e-4c1b-9c1d-1c7c8f3f0a11",
"action": "reboot",
"status": "running",
"requestedAt": "2026-10-07T12:00:00.000Z"
}
}
}
Einführung
Die SNG API ist eine JSON-API über HTTPS. Alle Endpunkte liegen unter der unten genannten Basis-URL und liefern entweder ein data- oder ein error-Objekt, nie beides.
Alles, was Sie im Control Panel für einen Server, sein Netzwerk und seinen DDoS-Schutz tun können, steht hier zur Verfügung – mit denselben Eigentumsprüfungen: Ein Token sieht nur die Server des Kontos, das ihn erstellt hat.
https://api.snghosting.com/api/v1Schnellstart
- Öffnen Sie API & MCP im SNG Control Panel und erstellen Sie einen persönlichen Zugriffstoken. Wählen Sie nur die Berechtigungen, die Ihre Integration benötigt.
- Kopieren Sie den Token. SNG zeigt ihn nur einmal an und speichert lediglich einen Hash.
- Rufen Sie
GET /connectauf, um den Token zu prüfen, und danachGET /servers, um Ihre Server aufzulisten.
curl "https://api.snghosting.com/api/v1/servers" \
-H "Authorization: Bearer $SNG_API_TOKEN"const response = await fetch("https://api.snghosting.com/api/v1/servers", {
headers: { Authorization: `Bearer ${process.env.SNG_API_TOKEN}` },
});
const { data: servers } = await response.json();import os, requests
servers = requests.get(
"https://api.snghosting.com/api/v1/servers",
headers={"Authorization": f"Bearer {os.environ['SNG_API_TOKEN']}"},
timeout=30,
).json()["data"]$ch = curl_init("https://api.snghosting.com/api/v1/servers");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("SNG_API_TOKEN")],
]);
$servers = json_decode(curl_exec($ch), true)["data"];
Authentifizierung
Senden Sie den Token bei jeder Anfrage im Header Authorization: Authorization: Bearer sng_pat_v1_….
Tokens laufen ab (standardmäßig nach 30 Tagen, höchstens nach 90) und können jederzeit widerrufen werden. Sie können einen Token auf bis zu zehn Quell-IP-Adressen beschränken. Reseller-Tokens erfordern immer eine IP-Freigabeliste.
Legen Sie einen Token nie in Frontend-Code oder einem öffentlichen Repository ab. Falls er offengelegt wird, widerrufen Sie ihn im Control Panel; die nächste Anfrage damit wird abgelehnt.
Berechtigungen
Jeder Token hat ausdrückliche Berechtigungen. Eine Anfrage außerhalb davon wird mit insufficient_scope abgelehnt, und keine Berechtigung erlaubt alles.
| Berechtigung | Erlaubt |
|---|---|
servers:read | Server auflisten sowie Details, Auslastung und Status von Vorgängen lesen. |
servers:power | Server starten und neu starten. |
servers:control | Server herunterfahren, hart ausschalten und zurücksetzen. Zusammen mit servers:power verwenden. |
network:read | IP-Adressen, Reverse DNS, Traffic, DDoS-Schutz, Angriffe, Filterregeln und die VPS-Firewall lesen. |
network:write | Reverse DNS, IP-Beschreibungen, den DDoS-Schutzmodus und die VPS-Firewall ändern. |
Anfragen und Antworten
Senden Sie JSON mit Content-Type: application/json. Der Body ist auf 10 KB begrenzt.
Server-IDs haben die Form vps_1_4021 oder ded_<uuid>. Übernehmen Sie sie aus GET /servers, statt sie selbst zusammenzusetzen.
Jede Antwort enthält den Header X-Request-Id. Geben Sie ihn bei Supportanfragen an.
Idempotente Aktionen
Jede Anfrage, die etwas ändert, benötigt den Header Idempotency-Key: einen eindeutigen Wert mit 8–128 Zeichen je beabsichtigter Aktion, etwa eine UUID.
Bricht die Verbindung ab und Sie wiederholen die Anfrage mit demselben Schlüssel, liefert SNG das erste Ergebnis (mit Idempotent-Replayed: true), statt den Server zweimal neu zu starten. Derselbe Schlüssel mit anderem Body wird mit idempotency_key_reused abgelehnt.
Aktionen laufen asynchron. Eine 202-Antwort enthält einen Vorgang; fragen Sie GET /servers/{serverId}/operations/{operationId} ab, bis der Status succeeded, failed, timed_out oder outcome_unknown lautet. Die API meldet nie Erfolg, bevor der Server ihn bestätigt.
Ratenlimits
Jeder Token kann 120 Anfragen und 10 Aktionen pro Minute ausführen, ein Konto insgesamt 300 Anfragen pro Minute über alle Tokens. Jede Antwort meldet das engste geltende Budget:
RateLimit-Limit | Erlaubte Anfragen im Zeitfenster. |
RateLimit-Remaining | Verbleibende Anfragen im Zeitfenster. |
RateLimit-Reset | Sekunden bis zum Zurücksetzen des Zeitfensters. |
Retry-After | Nur bei 429: Sekunden bis zum nächsten Versuch. |
Aktuelle und zwischengespeicherte Daten
Netzwerk- und Infrastrukturwerte werden einige Sekunden zwischengespeichert und zwischen Aufrufern geteilt, damit häufige Abfragen schnell bleiben und niemanden ausbremsen.
Sind Live-Daten kurzzeitig nicht verfügbar, liefert die API den letzten gültigen Wert mit meta.stale: true und meta.observedAt, statt fehlzuschlagen. Eine Ablehnung, etwa für einen Server, der Ihnen nicht mehr gehört, wird nie aus dem Zwischenspeicher beantwortet.
Fehler
Fehler verwenden stabile Codes, auf die sich Ihr Code verlassen kann. Die Meldung richtet sich an Menschen und kann sich ändern.
{
"error": {
"code": "insufficient_scope",
"message": "This API token does not have the network:read scope.",
"requestId": "req_8f2kQ1mZx0aLr3Ts"
}
}
| HTTP | Code | Bedeutung |
|---|---|---|
| 400 | validation_failed | Body oder Parameter ungültig. fields nennt jedes Problem. |
| 400 | idempotency_key_required | Eine Änderungsanfrage wurde ohne Idempotency-Key gesendet. |
| 401 | unauthorized | Der Token fehlt, ist ungültig, abgelaufen oder widerrufen. |
| 403 | insufficient_scope | Dem Token fehlt die nötige Berechtigung. |
| 403 | ip_not_allowed | Die Anfrage kam von einer Adresse, die der Token nicht erlaubt. |
| 403 | primary_owner_required | Der Server wurde mit Ihnen geteilt; nur sein Eigentümer kann ihn ändern. |
| 404 | not_found | Server, Adresse oder Vorgang existiert in diesem Konto nicht. |
| 409 | action_unsupported | Dieser Servertyp unterstützt die Anfrage nicht. |
| 409 | idempotency_request_in_progress | Eine Anfrage mit diesem Schlüssel läuft noch. |
| 422 | idempotency_key_reused | Der Schlüssel wurde bereits für eine andere Anfrage verwendet. |
| 423 | service_locked | Der Dienst ist gesperrt. |
| 429 | rate_limited | Zu viele Anfragen. Warten Sie die Retry-After-Zeit ab. |
| 502 | action_failed | Der Server meldet, dass die Aktion fehlgeschlagen ist. |
| 503 | outcome_unknown | Die Aktion wurde gesendet, ihr Ergebnis konnte aber nicht bestätigt werden. Prüfen Sie den Server vor einem neuen Versuch. |
| 503 | temporarily_unavailable | Bitte versuchen Sie es gleich erneut. |
| 504 | action_timeout | Der Server hat die Aktion nicht rechtzeitig bestätigt. |
API-Referenz
Konto
Token testen
GET/connect
Berechtigung Jeder gültige Token
Bestätigt, dass der Token funktioniert, und zeigt seine Berechtigungen. Benötigt keine Berechtigung.
Antwort 200
accountIdinteger |
|
tokenobject |
|
token.namestring |
|
token.typestring |
|
token.scopesstring[] |
|
sourceIpstring |
|
apiVersionstring |
|
Fehler
curl -X GET "https://api.snghosting.com/api/v1/connect" \
-H "Authorization: Bearer $SNG_API_TOKEN"const response = await fetch("https://api.snghosting.com/api/v1/connect", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.SNG_API_TOKEN}`,
},
});
const { data, error } = await response.json();import os, uuid, requests
response = requests.get(
"https://api.snghosting.com/api/v1/connect",
headers={
"Authorization": f"Bearer {os.environ['SNG_API_TOKEN']}",
},
timeout=30,
)
data = response.json()$ch = curl_init("https://api.snghosting.com/api/v1/connect");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("SNG_API_TOKEN"),
],
]);
$data = json_decode(curl_exec($ch), true);
{
"data": {
"accountId": 0,
"token": {
"name": "game-01",
"type": "personal_token",
"scopes": [
"string"
]
},
"sourceIp": "198.51.100.7",
"apiVersion": "v1"
}
}
Server
Server auflisten
GET/servers
Berechtigung servers:read
Alle VPS, VDS und dedizierten Server des Kontos, einschließlich geteilter Server.
Antwort 200
idstring |
Server-ID aus GET /servers, z. B. |
typestring |
|
namestring |
|
hostnamestring oder null |
|
statusstring |
Dienststatus. Aktionen werden nur im Status
|
powerstring |
|
ipv4string[] |
|
ipv6string[] |
|
osstring oder null |
|
resourcesobject |
|
resources.cpuCoresnumber oder null |
|
resources.memoryMbnumber oder null |
|
resources.storageGbnumber oder null |
|
resources.trafficGbnumber oder null |
Monatliches Traffic-Kontingent; null, wenn unbegrenzt. |
accessRolestring |
|
serviceIdinteger oder null |
Dienst-ID in der SNG-Abrechnung. |
createdAtstring oder null |
Zeitstempel nach ISO 8601. |
Fehler
curl -X GET "https://api.snghosting.com/api/v1/servers" \
-H "Authorization: Bearer $SNG_API_TOKEN"const response = await fetch("https://api.snghosting.com/api/v1/servers", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.SNG_API_TOKEN}`,
},
});
const { data, error } = await response.json();import os, uuid, requests
response = requests.get(
"https://api.snghosting.com/api/v1/servers",
headers={
"Authorization": f"Bearer {os.environ['SNG_API_TOKEN']}",
},
timeout=30,
)
data = response.json()$ch = curl_init("https://api.snghosting.com/api/v1/servers");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("SNG_API_TOKEN"),
],
]);
$data = json_decode(curl_exec($ch), true);
{
"data": [
{
"id": "vps_1_4021",
"type": "vps",
"name": "game-01",
"hostname": "game-01.example.com",
"status": "active",
"power": "running",
"ipv4": [
"string"
],
"ipv6": [
"string"
],
"os": "Ubuntu 24.04",
"resources": {
"cpuCores": 0,
"memoryMb": 0,
"storageGb": 0,
"trafficGb": 0
},
"accessRole": "primary",
"serviceId": null,
"createdAt": "2026-10-07T12:00:00.000Z"
}
]
}
Server abrufen
GET/servers/{serverId}
Berechtigung servers:read
Enthält die Power-Aktionen, die dieser Token jetzt ausführen kann, und laufende Vorgänge.
Parameter
serverId Pfad · erforderlichstring |
Server-ID aus GET /servers, z. B. |
Antwort 200
idstring |
Server-ID aus GET /servers, z. B. |
typestring |
|
namestring |
|
hostnamestring oder null |
|
statusstring |
Dienststatus. Aktionen werden nur im Status
|
powerstring |
|
ipv4string[] |
|
ipv6string[] |
|
osstring oder null |
|
resourcesobject |
|
resources.cpuCoresnumber oder null |
|
resources.memoryMbnumber oder null |
|
resources.storageGbnumber oder null |
|
resources.trafficGbnumber oder null |
Monatliches Traffic-Kontingent; null, wenn unbegrenzt. |
accessRolestring |
|
serviceIdinteger oder null |
Dienst-ID in der SNG-Abrechnung. |
createdAtstring oder null |
Zeitstempel nach ISO 8601. |
actionsstring[] |
Power-Aktionen, die dieser Token jetzt auf dem Server ausführen kann.
|
currentOperationobject oder null |
|
currentOperation.idstring |
|
currentOperation.serverIdstring |
Server-ID aus GET /servers, z. B. |
currentOperation.actionstring |
|
currentOperation.statusstring |
|
currentOperation.messagestring oder null |
|
currentOperation.requestedAtstring oder null |
Zeitstempel nach ISO 8601. |
currentOperation.completedAtstring oder null |
Zeitstempel nach ISO 8601. |
Fehler
curl -X GET "https://api.snghosting.com/api/v1/servers/vps_1_4021" \
-H "Authorization: Bearer $SNG_API_TOKEN"const response = await fetch("https://api.snghosting.com/api/v1/servers/vps_1_4021", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.SNG_API_TOKEN}`,
},
});
const { data, error } = await response.json();import os, uuid, requests
response = requests.get(
"https://api.snghosting.com/api/v1/servers/vps_1_4021",
headers={
"Authorization": f"Bearer {os.environ['SNG_API_TOKEN']}",
},
timeout=30,
)
data = response.json()$ch = curl_init("https://api.snghosting.com/api/v1/servers/vps_1_4021");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("SNG_API_TOKEN"),
],
]);
$data = json_decode(curl_exec($ch), true);
{
"data": {
"id": "vps_1_4021",
"type": "vps",
"name": "game-01",
"hostname": "game-01.example.com",
"status": "active",
"power": "running",
"ipv4": [
"string"
],
"ipv6": [
"string"
],
"os": "Ubuntu 24.04",
"resources": {
"cpuCores": 0,
"memoryMb": 0,
"storageGb": 0,
"trafficGb": 0
},
"accessRole": "primary",
"serviceId": null,
"createdAt": "2026-10-07T12:00:00.000Z",
"actions": [
"start"
],
"currentOperation": {
"id": "q48211",
"serverId": "vps_1_4021",
"action": "reboot",
"status": "queued",
"message": null,
"requestedAt": "2026-10-07T12:00:00.000Z",
"completedAt": null
}
}
}
Auslastung abrufen
GET/servers/{serverId}/metrics
Berechtigung servers:read
CPU, Arbeitsspeicher, Datenträger und monatlicher Traffic. Dedizierte Server melden die Auslastung über den SNG-Agent.
Parameter
serverId Pfad · erforderlichstring |
Server-ID aus GET /servers, z. B. |
Antwort 200
sampledAtstring oder null |
Zeitstempel nach ISO 8601. |
cpuPercentnumber oder null |
|
memoryobject oder null |
|
memory.totalBytesnumber |
|
memory.usedBytesnumber |
|
memory.usagePercentnumber oder null |
|
storageobject[] |
|
storage.mountstring |
|
storage.totalBytesnumber |
|
storage.usedBytesnumber |
|
storage.usagePercentnumber oder null |
|
bandwidthobject oder null |
Im aktuellen Abrechnungsmonat genutzter Traffic, sofern der Server ihn meldet. |
bandwidth.usedBytesnumber |
|
bandwidth.limitBytesnumber oder null |
Fehler
curl -X GET "https://api.snghosting.com/api/v1/servers/vps_1_4021/metrics" \
-H "Authorization: Bearer $SNG_API_TOKEN"const response = await fetch("https://api.snghosting.com/api/v1/servers/vps_1_4021/metrics", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.SNG_API_TOKEN}`,
},
});
const { data, error } = await response.json();import os, uuid, requests
response = requests.get(
"https://api.snghosting.com/api/v1/servers/vps_1_4021/metrics",
headers={
"Authorization": f"Bearer {os.environ['SNG_API_TOKEN']}",
},
timeout=30,
)
data = response.json()$ch = curl_init("https://api.snghosting.com/api/v1/servers/vps_1_4021/metrics");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("SNG_API_TOKEN"),
],
]);
$data = json_decode(curl_exec($ch), true);
{
"data": {
"sampledAt": "2026-10-07T12:00:00.000Z",
"cpuPercent": 0,
"memory": {
"totalBytes": 0,
"usedBytes": 0,
"usagePercent": 0
},
"storage": [
{
"mount": "/",
"totalBytes": 0,
"usedBytes": 0,
"usagePercent": 0
}
],
"bandwidth": {
"usedBytes": 0,
"limitBytes": 0
}
}
}
Power-Aktion ausführen
POST/servers/{serverId}/actions
Berechtigung servers:power
start und reboot benötigen servers:power; shutdown, power_off und reset zusätzlich servers:control. Startet die Aktion und liefert einen Vorgang. 202 bedeutet, dass sie noch läuft: Fragen Sie GET /servers/{serverId}/operations/{operationId} ab, bis ein Endstatus erreicht ist. Die API meldet nie Erfolg, bevor der Server ihn bestätigt.
Parameter
serverId Pfad · erforderlichstring |
Server-ID aus GET /servers, z. B. |
Idempotency-Key Header · erforderlichstring |
Ein eindeutiger Wert je beabsichtigter Aktion (8–128 Zeichen). Eine Wiederholung mit demselben Schlüssel liefert das erste Ergebnis, statt die Aktion erneut auszuführen. |
Request-Body
actionstring |
|
Antwort 202
operationobject |
|
operation.idstring |
|
operation.serverIdstring |
Server-ID aus GET /servers, z. B. |
operation.actionstring |
|
operation.statusstring |
|
operation.messagestring oder null |
|
operation.requestedAtstring oder null |
Zeitstempel nach ISO 8601. |
operation.completedAtstring oder null |
Zeitstempel nach ISO 8601. |
Fehler
curl -X POST "https://api.snghosting.com/api/v1/servers/vps_1_4021/actions" \
-H "Authorization: Bearer $SNG_API_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"action":"reboot"}'const response = await fetch("https://api.snghosting.com/api/v1/servers/vps_1_4021/actions", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SNG_API_TOKEN}`,
"Idempotency-Key": crypto.randomUUID(),
"Content-Type": "application/json",
},
body: JSON.stringify({
"action": "reboot"
}),
});
const { data, error } = await response.json();import os, uuid, requests
response = requests.post(
"https://api.snghosting.com/api/v1/servers/vps_1_4021/actions",
headers={
"Authorization": f"Bearer {os.environ['SNG_API_TOKEN']}",
"Idempotency-Key": str(uuid.uuid4()),
},
json={
"action": "reboot"
},
timeout=30,
)
data = response.json()$ch = curl_init("https://api.snghosting.com/api/v1/servers/vps_1_4021/actions");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("SNG_API_TOKEN"),
"Idempotency-Key: " . bin2hex(random_bytes(16)),
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => '{"action":"reboot"}',
]);
$data = json_decode(curl_exec($ch), true);
{
"data": {
"operation": {
"id": "q48211",
"serverId": "vps_1_4021",
"action": "reboot",
"status": "queued",
"message": null,
"requestedAt": "2026-10-07T12:00:00.000Z",
"completedAt": null
}
}
}
Vorgang abrufen
GET/servers/{serverId}/operations/{operationId}
Berechtigung servers:read
Parameter
serverId Pfad · erforderlichstring |
Server-ID aus GET /servers, z. B. |
operationId Pfad · erforderlichstring |
Von einer Aktion gelieferte Vorgangs-ID. |
Antwort 200
idstring |
|
serverIdstring |
Server-ID aus GET /servers, z. B. |
actionstring |
|
statusstring |
|
messagestring oder null |
|
requestedAtstring oder null |
Zeitstempel nach ISO 8601. |
completedAtstring oder null |
Zeitstempel nach ISO 8601. |
Fehler
curl -X GET "https://api.snghosting.com/api/v1/servers/vps_1_4021/operations/q48211" \
-H "Authorization: Bearer $SNG_API_TOKEN"const response = await fetch("https://api.snghosting.com/api/v1/servers/vps_1_4021/operations/q48211", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.SNG_API_TOKEN}`,
},
});
const { data, error } = await response.json();import os, uuid, requests
response = requests.get(
"https://api.snghosting.com/api/v1/servers/vps_1_4021/operations/q48211",
headers={
"Authorization": f"Bearer {os.environ['SNG_API_TOKEN']}",
},
timeout=30,
)
data = response.json()$ch = curl_init("https://api.snghosting.com/api/v1/servers/vps_1_4021/operations/q48211");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("SNG_API_TOKEN"),
],
]);
$data = json_decode(curl_exec($ch), true);
{
"data": {
"id": "q48211",
"serverId": "vps_1_4021",
"action": "reboot",
"status": "queued",
"message": null,
"requestedAt": "2026-10-07T12:00:00.000Z",
"completedAt": null
}
}
Netzwerk
IP-Adressen auflisten
GET/servers/{serverId}/ips
Berechtigung network:read
Parameter
serverId Pfad · erforderlichstring |
Server-ID aus GET /servers, z. B. |
Antwort 200
addressstring |
|
versionstring |
|
primaryboolean |
Fehler
curl -X GET "https://api.snghosting.com/api/v1/servers/vps_1_4021/ips" \
-H "Authorization: Bearer $SNG_API_TOKEN"const response = await fetch("https://api.snghosting.com/api/v1/servers/vps_1_4021/ips", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.SNG_API_TOKEN}`,
},
});
const { data, error } = await response.json();import os, uuid, requests
response = requests.get(
"https://api.snghosting.com/api/v1/servers/vps_1_4021/ips",
headers={
"Authorization": f"Bearer {os.environ['SNG_API_TOKEN']}",
},
timeout=30,
)
data = response.json()$ch = curl_init("https://api.snghosting.com/api/v1/servers/vps_1_4021/ips");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("SNG_API_TOKEN"),
],
]);
$data = json_decode(curl_exec($ch), true);
{
"data": [
{
"address": "203.0.113.20",
"version": "ipv4",
"primary": true
}
]
}
IP-Einstellungen abrufen
GET/servers/{serverId}/ips/{ip}
Berechtigung network:read
Reverse DNS, Beschreibung und DDoS-Schutzmodus einer Adresse.
Parameter
serverId Pfad · erforderlichstring |
Server-ID aus GET /servers, z. B. |
ip Pfad · erforderlichstring · ipv4 |
Eine dem Server zugewiesene IPv4-Adresse. |
Antwort 200
addressstring |
|
rdnsstring oder null |
|
descriptionstring oder null |
|
protectionobject oder null |
DDoS-Schutzmodus. |
protection.layer4string |
|
protection.layer7string |
|
editableobject |
|
editable.rdnsboolean |
|
editable.descriptionboolean |
|
editable.protectionboolean |
Fehler
curl -X GET "https://api.snghosting.com/api/v1/servers/ded_6a4b2a40-6d0e-4c1b-9c1d-1c7c8f3f0a11/ips/203.0.113.20" \
-H "Authorization: Bearer $SNG_API_TOKEN"const response = await fetch("https://api.snghosting.com/api/v1/servers/ded_6a4b2a40-6d0e-4c1b-9c1d-1c7c8f3f0a11/ips/203.0.113.20", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.SNG_API_TOKEN}`,
},
});
const { data, error } = await response.json();import os, uuid, requests
response = requests.get(
"https://api.snghosting.com/api/v1/servers/ded_6a4b2a40-6d0e-4c1b-9c1d-1c7c8f3f0a11/ips/203.0.113.20",
headers={
"Authorization": f"Bearer {os.environ['SNG_API_TOKEN']}",
},
timeout=30,
)
data = response.json()$ch = curl_init("https://api.snghosting.com/api/v1/servers/ded_6a4b2a40-6d0e-4c1b-9c1d-1c7c8f3f0a11/ips/203.0.113.20");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("SNG_API_TOKEN"),
],
]);
$data = json_decode(curl_exec($ch), true);
{
"data": {
"address": "203.0.113.20",
"rdns": "mail.example.com",
"description": "Game server",
"protection": {
"layer4": "dynamic",
"layer7": "off"
},
"editable": {
"rdns": true,
"description": true,
"protection": true
}
}
}
IP-Einstellungen ändern
PATCH/servers/{serverId}/ips/{ip}
Berechtigung network:write
Reverse DNS, Beschreibung oder DDoS-Schutzmodus einer Adresse eines dedizierten Servers ändern. Eine Änderung pro Anfrage.
Parameter
serverId Pfad · erforderlichstring |
Server-ID aus GET /servers, z. B. |
ip Pfad · erforderlichstring · ipv4 |
Eine dem Server zugewiesene IPv4-Adresse. |
Idempotency-Key Header · erforderlichstring |
Ein eindeutiger Wert je beabsichtigter Aktion (8–128 Zeichen). Eine Wiederholung mit demselben Schlüssel liefert das erste Ergebnis, statt die Aktion erneut auszuführen. |
Request-Body
Genau eine Änderung pro Anfrage: rdns, description oder protection.
| Eines von · 1 | |
rdnsstring |
|
| Eines von · 2 | |
descriptionstring |
|
| Eines von · 3 | |
protectionobject |
|
protection.layer4string |
|
protection.layer7string |
|
Antwort 200
addressstring |
|
rdnsstring oder null |
|
descriptionstring oder null |
|
protectionobject oder null |
DDoS-Schutzmodus. |
protection.layer4string |
|
protection.layer7string |
|
editableobject |
|
editable.rdnsboolean |
|
editable.descriptionboolean |
|
editable.protectionboolean |
Fehler
curl -X PATCH "https://api.snghosting.com/api/v1/servers/ded_6a4b2a40-6d0e-4c1b-9c1d-1c7c8f3f0a11/ips/203.0.113.20" \
-H "Authorization: Bearer $SNG_API_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"rdns":"mail.example.com"}'const response = await fetch("https://api.snghosting.com/api/v1/servers/ded_6a4b2a40-6d0e-4c1b-9c1d-1c7c8f3f0a11/ips/203.0.113.20", {
method: "PATCH",
headers: {
Authorization: `Bearer ${process.env.SNG_API_TOKEN}`,
"Idempotency-Key": crypto.randomUUID(),
"Content-Type": "application/json",
},
body: JSON.stringify({
"rdns": "mail.example.com"
}),
});
const { data, error } = await response.json();import os, uuid, requests
response = requests.patch(
"https://api.snghosting.com/api/v1/servers/ded_6a4b2a40-6d0e-4c1b-9c1d-1c7c8f3f0a11/ips/203.0.113.20",
headers={
"Authorization": f"Bearer {os.environ['SNG_API_TOKEN']}",
"Idempotency-Key": str(uuid.uuid4()),
},
json={
"rdns": "mail.example.com"
},
timeout=30,
)
data = response.json()$ch = curl_init("https://api.snghosting.com/api/v1/servers/ded_6a4b2a40-6d0e-4c1b-9c1d-1c7c8f3f0a11/ips/203.0.113.20");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("SNG_API_TOKEN"),
"Idempotency-Key: " . bin2hex(random_bytes(16)),
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => '{"rdns":"mail.example.com"}',
]);
$data = json_decode(curl_exec($ch), true);
{
"data": {
"address": "203.0.113.20",
"rdns": "mail.example.com",
"description": "Game server",
"protection": {
"layer4": "dynamic",
"layer7": "off"
},
"editable": {
"rdns": true,
"description": true,
"protection": true
}
}
}
Traffic abrufen
GET/servers/{serverId}/traffic
Berechtigung network:read
Dedizierte Server liefern die Port-Raten der letzten 24 Stunden in Mbps (kind: rates). VPS liefern den Transfer pro Abrechnungsmonat (kind: monthly).
Parameter
serverId Pfad · erforderlichstring |
Server-ID aus GET /servers, z. B. |
Antwort 200
| Eines von · 1 | |
kindstring |
|
fromstring |
Zeitstempel nach ISO 8601. |
tostring |
Zeitstempel nach ISO 8601. |
totalsobject oder null |
Transfervolumen im Zeitfenster. |
totals.incomingGbnumber |
|
totals.outgoingGbnumber |
|
interfacesobject[] |
|
interfaces.incomingobject[] |
|
interfaces.incoming.timestring |
Zeitstempel nach ISO 8601. |
interfaces.incoming.mbpsnumber |
|
interfaces.outgoingobject[] |
|
interfaces.outgoing.timestring |
Zeitstempel nach ISO 8601. |
interfaces.outgoing.mbpsnumber |
|
| Eines von · 2 | |
kindstring |
|
monthsobject[] |
|
months.startstring |
Zeitstempel nach ISO 8601. |
months.endstring |
Zeitstempel nach ISO 8601. |
months.rxBytesnumber |
|
months.txBytesnumber |
|
months.totalBytesnumber |
|
months.limitGbnumber oder null |
|
Fehler
curl -X GET "https://api.snghosting.com/api/v1/servers/vps_1_4021/traffic" \
-H "Authorization: Bearer $SNG_API_TOKEN"const response = await fetch("https://api.snghosting.com/api/v1/servers/vps_1_4021/traffic", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.SNG_API_TOKEN}`,
},
});
const { data, error } = await response.json();import os, uuid, requests
response = requests.get(
"https://api.snghosting.com/api/v1/servers/vps_1_4021/traffic",
headers={
"Authorization": f"Bearer {os.environ['SNG_API_TOKEN']}",
},
timeout=30,
)
data = response.json()$ch = curl_init("https://api.snghosting.com/api/v1/servers/vps_1_4021/traffic");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("SNG_API_TOKEN"),
],
]);
$data = json_decode(curl_exec($ch), true);
{
"data": {
"kind": "rates",
"from": "string",
"to": "string",
"totals": {
"incomingGb": 0,
"outgoingGb": 0
},
"interfaces": [
{
"incoming": [
{
"time": "string",
"mbps": 0
}
],
"outgoing": [
{
"time": "string",
"mbps": 0
}
]
}
]
}
}
DDoS-Schutz
DDoS-Schutz und Angriffe
GET/servers/{serverId}/ddos
Berechtigung network:read
Schutzstatus und letzte Angriffe für eine Adresse des Servers (standardmäßig die primäre Adresse).
Parameter
serverId Pfad · erforderlichstring |
Server-ID aus GET /servers, z. B. |
ip Querystring · ipv4 |
Zu prüfende Adresse. |
Antwort 200
addressstring oder null |
|
statusstring |
|
incidentsobject[] |
|
incidents.idstring |
|
incidents.startedAtstring |
Zeitstempel nach ISO 8601. |
incidents.endedAtstring oder null |
Zeitstempel nach ISO 8601. |
incidents.durationSecondsnumber oder null |
|
incidents.peakstring oder null |
Spitzenrate des Angriffs, z. B. |
incidents.attackTypesstring[] |
|
totalIncidentsinteger |
|
addressesstring[] |
Alle Adressen des Servers, die Sie mit |
Fehler
curl -X GET "https://api.snghosting.com/api/v1/servers/vps_1_4021/ddos" \
-H "Authorization: Bearer $SNG_API_TOKEN"const response = await fetch("https://api.snghosting.com/api/v1/servers/vps_1_4021/ddos", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.SNG_API_TOKEN}`,
},
});
const { data, error } = await response.json();import os, uuid, requests
response = requests.get(
"https://api.snghosting.com/api/v1/servers/vps_1_4021/ddos",
headers={
"Authorization": f"Bearer {os.environ['SNG_API_TOKEN']}",
},
timeout=30,
)
data = response.json()$ch = curl_init("https://api.snghosting.com/api/v1/servers/vps_1_4021/ddos");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("SNG_API_TOKEN"),
],
]);
$data = json_decode(curl_exec($ch), true);
{
"data": {
"address": "203.0.113.20",
"status": "protected",
"incidents": [
{
"id": "vps_1_4021",
"startedAt": "2026-10-07T12:00:00.000Z",
"endedAt": null,
"durationSeconds": null,
"peak": "12.4 Gbps",
"attackTypes": [
"string"
]
}
],
"totalIncidents": 0,
"addresses": [
"string"
]
}
}
DDoS-Filterregeln auflisten
GET/servers/{serverId}/ips/{ip}/ddos/rules
Berechtigung network:read
Filterregeln für eine Adresse eines dedizierten Servers.
Parameter
serverId Pfad · erforderlichstring |
Server-ID aus GET /servers, z. B. |
ip Pfad · erforderlichstring · ipv4 |
Eine dem Server zugewiesene IPv4-Adresse. |
Antwort 200
addressstring |
|
availableboolean |
|
rulesobject[] |
|
rules.protocolstring |
|
rules.portnumber |
|
rules.statestring |
Fehler
curl -X GET "https://api.snghosting.com/api/v1/servers/ded_6a4b2a40-6d0e-4c1b-9c1d-1c7c8f3f0a11/ips/203.0.113.20/ddos/rules" \
-H "Authorization: Bearer $SNG_API_TOKEN"const response = await fetch("https://api.snghosting.com/api/v1/servers/ded_6a4b2a40-6d0e-4c1b-9c1d-1c7c8f3f0a11/ips/203.0.113.20/ddos/rules", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.SNG_API_TOKEN}`,
},
});
const { data, error } = await response.json();import os, uuid, requests
response = requests.get(
"https://api.snghosting.com/api/v1/servers/ded_6a4b2a40-6d0e-4c1b-9c1d-1c7c8f3f0a11/ips/203.0.113.20/ddos/rules",
headers={
"Authorization": f"Bearer {os.environ['SNG_API_TOKEN']}",
},
timeout=30,
)
data = response.json()$ch = curl_init("https://api.snghosting.com/api/v1/servers/ded_6a4b2a40-6d0e-4c1b-9c1d-1c7c8f3f0a11/ips/203.0.113.20/ddos/rules");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("SNG_API_TOKEN"),
],
]);
$data = json_decode(curl_exec($ch), true);
{
"data": {
"address": "203.0.113.20",
"available": true,
"rules": [
{
"protocol": "tcp",
"port": 30120,
"state": "string"
}
]
}
}
Firewall
Firewall-Regelsätze auflisten
GET/firewall/rulesets
Berechtigung network:read
Regelsätze, die auf eine VPS-Firewall angewendet werden können.
Antwort 200
idinteger |
|
namestring |
Fehler
curl -X GET "https://api.snghosting.com/api/v1/firewall/rulesets" \
-H "Authorization: Bearer $SNG_API_TOKEN"const response = await fetch("https://api.snghosting.com/api/v1/firewall/rulesets", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.SNG_API_TOKEN}`,
},
});
const { data, error } = await response.json();import os, uuid, requests
response = requests.get(
"https://api.snghosting.com/api/v1/firewall/rulesets",
headers={
"Authorization": f"Bearer {os.environ['SNG_API_TOKEN']}",
},
timeout=30,
)
data = response.json()$ch = curl_init("https://api.snghosting.com/api/v1/firewall/rulesets");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("SNG_API_TOKEN"),
],
]);
$data = json_decode(curl_exec($ch), true);
{
"data": [
{
"id": 0,
"name": "game-01"
}
]
}
VPS-Firewall abrufen
GET/servers/{serverId}/firewall
Berechtigung network:read
Parameter
serverId Pfad · erforderlichstring |
Server-ID aus GET /servers, z. B. |
Antwort 200
enabledboolean |
|
rulesetsinteger[] |
IDs der angewendeten Regelsätze. |
Fehler
curl -X GET "https://api.snghosting.com/api/v1/servers/vps_1_4021/firewall" \
-H "Authorization: Bearer $SNG_API_TOKEN"const response = await fetch("https://api.snghosting.com/api/v1/servers/vps_1_4021/firewall", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.SNG_API_TOKEN}`,
},
});
const { data, error } = await response.json();import os, uuid, requests
response = requests.get(
"https://api.snghosting.com/api/v1/servers/vps_1_4021/firewall",
headers={
"Authorization": f"Bearer {os.environ['SNG_API_TOKEN']}",
},
timeout=30,
)
data = response.json()$ch = curl_init("https://api.snghosting.com/api/v1/servers/vps_1_4021/firewall");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("SNG_API_TOKEN"),
],
]);
$data = json_decode(curl_exec($ch), true);
{
"data": {
"enabled": true,
"rulesets": [
0
]
}
}
VPS-Firewall ändern
PUT/servers/{serverId}/firewall
Berechtigung network:write
Firewall ein- oder ausschalten und die angewendeten Regelsätze wählen.
Parameter
serverId Pfad · erforderlichstring |
Server-ID aus GET /servers, z. B. |
Idempotency-Key Header · erforderlichstring |
Ein eindeutiger Wert je beabsichtigter Aktion (8–128 Zeichen). Eine Wiederholung mit demselben Schlüssel liefert das erste Ergebnis, statt die Aktion erneut auszuführen. |
Request-Body
enabled optionalboolean |
|
rulesets optionalinteger[] |
Antwort 200
enabledboolean |
|
rulesetsinteger[] |
IDs der angewendeten Regelsätze. |
Fehler
curl -X PUT "https://api.snghosting.com/api/v1/servers/vps_1_4021/firewall" \
-H "Authorization: Bearer $SNG_API_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"enabled":true,"rulesets":[3]}'const response = await fetch("https://api.snghosting.com/api/v1/servers/vps_1_4021/firewall", {
method: "PUT",
headers: {
Authorization: `Bearer ${process.env.SNG_API_TOKEN}`,
"Idempotency-Key": crypto.randomUUID(),
"Content-Type": "application/json",
},
body: JSON.stringify({
"enabled": true,
"rulesets": [
3
]
}),
});
const { data, error } = await response.json();import os, uuid, requests
response = requests.put(
"https://api.snghosting.com/api/v1/servers/vps_1_4021/firewall",
headers={
"Authorization": f"Bearer {os.environ['SNG_API_TOKEN']}",
"Idempotency-Key": str(uuid.uuid4()),
},
json={
"enabled": True,
"rulesets": [
3
]
},
timeout=30,
)
data = response.json()$ch = curl_init("https://api.snghosting.com/api/v1/servers/vps_1_4021/firewall");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("SNG_API_TOKEN"),
"Idempotency-Key: " . bin2hex(random_bytes(16)),
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => '{"enabled":true,"rulesets":[3]}',
]);
$data = json_decode(curl_exec($ch), true);
{
"data": {
"enabled": true,
"rulesets": [
0
]
}
}