SNG Hosting API · v1
تحكّم في خوادمك من الكود الخاص بك
التشغيل والاستهلاك وعناوين IP وrDNS والترافيك والجدار الناري وحماية DDoS لكل خوادم VPS والخوادم المخصصة لدى SNG، بتوكن واحد وواجهة واحدة متّسقة.
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"
}
}
}
مقدمة
واجهة SNG هي API بصيغة JSON عبر HTTPS. كل المسارات تحت العنوان الأساسي أدناه، وكل رد يحتوي إما data أو error، ولا يجتمعان أبدًا.
كل ما تستطيع فعله في لوحة التحكم لخادم وشبكته وحماية DDoS متاح هنا، وبنفس فحوصات الملكية: التوكن لا يرى إلا خوادم الحساب الذي أنشأه.
https://api.snghosting.com/api/v1البداية السريعة
- افتح API و MCP في لوحة تحكم SNG وأنشئ توكن وصول شخصي، واختر فقط الصلاحيات التي يحتاجها تكاملك.
- انسخ التوكن؛ تعرضه SNG مرة واحدة ولا تحفظ إلا بصمته المشفّرة.
- استدعِ
GET /connectللتأكد من أن التوكن يعمل، ثمGET /serversلعرض خوادمك.
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"];
المصادقة
أرسل التوكن في ترويسة Authorization مع كل طلب: Authorization: Bearer sng_pat_v1_….
للتوكن تاريخ انتهاء (30 يومًا افتراضيًا و90 كحد أقصى)، ويمكن إلغاؤه في أي وقت. يمكنك حصره في حتى عشرة عناوين IP، وتوكنات الموزعين تتطلب قائمة عناوين دائمًا.
لا تضع التوكن أبدًا في كود الواجهة الأمامية أو في مستودع عام. إن تسرّب، ألغِه من لوحة التحكم وسيُرفض أول طلب بعدها.
الصلاحيات
لكل توكن صلاحيات محددة. أي طلب خارجها يُرفض بالرمز insufficient_scope، ولا توجد صلاحية تمنح كل شيء.
| الصلاحية | تسمح بـ |
|---|---|
servers:read | عرض الخوادم وتفاصيلها واستهلاكها وحالة العمليات. |
servers:power | تشغيل الخوادم وإعادة تشغيلها. |
servers:control | إيقاف الخوادم وفصل تشغيلها وإعادة ضبطها من العتاد. تُستخدم مع servers:power. |
network:read | عرض عناوين IP وrDNS والترافيك وحماية DDoS والهجمات وقواعد الفلترة وجدار VPS الناري. |
network:write | تعديل rDNS ووصف عناوين IP ووضع حماية DDoS وجدار VPS الناري. |
الطلبات والردود
أرسل JSON مع Content-Type: application/json، والحد الأقصى لحجم الجسم 10 كيلوبايت.
معرّفات الخوادم بالشكل vps_1_4021 أو ded_<uuid>. خذها من GET /servers ولا تبنِها بنفسك.
كل رد يحمل ترويسة X-Request-Id؛ أرفقها عند تواصلك مع الدعم.
أوامر لا تتكرر
كل طلب يغيّر شيئًا يحتاج ترويسة Idempotency-Key: قيمة فريدة من 8 إلى 128 حرفًا لكل أمر تقصده، مثل UUID.
إن انقطع الاتصال وأعدت المحاولة بنفس المفتاح، تُرجع SNG النتيجة الأولى (مع Idempotent-Replayed: true) بدل إعادة تشغيل الخادم مرتين. واستخدام المفتاح نفسه بجسم مختلف يُرفض بالرمز idempotency_key_reused.
الأوامر تُنفَّذ في الخلفية. الرد 202 يحتوي عملية؛ تابعها عبر GET /servers/{serverId}/operations/{operationId} حتى تصبح succeeded أو failed أو timed_out أو outcome_unknown. لا تعلن الواجهة النجاح قبل أن يؤكده الخادم.
حدود الطلبات
لكل توكن 120 طلبًا و10 أوامر في الدقيقة، وللحساب 300 طلب في الدقيقة عبر كل توكناته. كل رد يوضّح أضيق حد ينطبق عليه:
RateLimit-Limit | عدد الطلبات المسموح بها في الفترة. |
RateLimit-Remaining | الطلبات المتبقية في الفترة. |
RateLimit-Reset | الثواني المتبقية حتى تتجدد الفترة. |
Retry-After | مع 429 فقط: الثواني التي تنتظرها قبل إعادة المحاولة. |
البيانات الحيّة والمخزّنة
قراءات الشبكة والبنية التحتية تُخزَّن لثوانٍ وتُشارك بين الطلبات، فيبقى الاستعلام المتكرر سريعًا ولا يبطئ أحدًا.
إن تعذّرت البيانات الحيّة لحظيًا، تُرجع الواجهة آخر قيمة صحيحة مع meta.stale: true وmeta.observedAt بدل الفشل. أما الرفض، مثل خادم لم يعد ملكك، فلا يُجاب أبدًا من المخزّن.
الأخطاء
الأخطاء برموز ثابتة يمكنك الاعتماد عليها في الكود، أما الرسالة فهي للقراءة وقد تتغير.
{
"error": {
"code": "insufficient_scope",
"message": "This API token does not have the network:read scope.",
"requestId": "req_8f2kQ1mZx0aLr3Ts"
}
}
| HTTP | الرمز | المعنى |
|---|---|---|
| 400 | validation_failed | الجسم أو أحد المعاملات غير صالح، وfields يوضّح كل مشكلة. |
| 400 | idempotency_key_required | أُرسل طلب تعديل بدون Idempotency-Key. |
| 401 | unauthorized | التوكن مفقود أو غير صالح أو منتهٍ أو ملغى. |
| 403 | insufficient_scope | التوكن لا يملك الصلاحية المطلوبة. |
| 403 | ip_not_allowed | الطلب من عنوان لا يسمح به التوكن. |
| 403 | primary_owner_required | الخادم مُشارَك معك؛ وحده مالكه يستطيع تعديله. |
| 404 | not_found | الخادم أو العنوان أو العملية غير موجودة في هذا الحساب. |
| 409 | action_unsupported | نوع الخادم لا يدعم هذا الطلب. |
| 409 | idempotency_request_in_progress | طلب بهذا المفتاح ما زال قيد التنفيذ. |
| 422 | idempotency_key_reused | المفتاح استُخدم من قبل لطلب مختلف. |
| 423 | service_locked | الخدمة موقوفة أو مقفلة. |
| 429 | rate_limited | طلبات كثيرة؛ انتظر مدة Retry-After. |
| 502 | action_failed | أبلغ الخادم أن الأمر فشل. |
| 503 | outcome_unknown | أُرسل الأمر لكن تعذّر تأكيد نتيجته؛ تحقّق من الخادم قبل إعادة المحاولة. |
| 503 | temporarily_unavailable | حاول مجددًا بعد قليل. |
| 504 | action_timeout | لم يؤكد الخادم الأمر في الوقت المحدد. |
مرجع الـ API
الحساب
اختبار التوكن
GET/connect
الصلاحية أي توكن صالح
يتأكد أن التوكن يعمل ويعرض صلاحياته. لا يحتاج صلاحية.
الرد 200
accountIdinteger |
|
tokenobject |
|
token.namestring |
|
token.typestring |
|
token.scopesstring[] |
|
sourceIpstring |
|
apiVersionstring |
|
الأخطاء
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"
}
}
الخوادم
عرض الخوادم
GET/servers
الصلاحية servers:read
كل خوادم VPS وVDS والمخصصة في الحساب، بما فيها المُشارَكة معك.
الرد 200
idstring |
معرّف الخادم من GET /servers، مثل |
typestring |
|
namestring |
|
hostnamestring أو null |
|
statusstring |
حالة الخدمة. الأوامر لا تُقبل إلا في حالة
|
powerstring |
|
ipv4string[] |
|
ipv6string[] |
|
osstring أو null |
|
resourcesobject |
|
resources.cpuCoresnumber أو null |
|
resources.memoryMbnumber أو null |
|
resources.storageGbnumber أو null |
|
resources.trafficGbnumber أو null |
الترافيك الشهري المسموح؛ null إن كان غير محدود. |
accessRolestring |
|
serviceIdinteger أو null |
رقم الخدمة في فوترة SNG. |
createdAtstring أو null |
وقت بصيغة ISO 8601. |
الأخطاء
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"
}
]
}
تفاصيل خادم
GET/servers/{serverId}
الصلاحية servers:read
تشمل أوامر التشغيل التي يستطيع هذا التوكن تنفيذها الآن وأي أمر قيد التنفيذ.
المعاملات
serverId مسار · مطلوبstring |
معرّف الخادم من GET /servers، مثل |
الرد 200
idstring |
معرّف الخادم من GET /servers، مثل |
typestring |
|
namestring |
|
hostnamestring أو null |
|
statusstring |
حالة الخدمة. الأوامر لا تُقبل إلا في حالة
|
powerstring |
|
ipv4string[] |
|
ipv6string[] |
|
osstring أو null |
|
resourcesobject |
|
resources.cpuCoresnumber أو null |
|
resources.memoryMbnumber أو null |
|
resources.storageGbnumber أو null |
|
resources.trafficGbnumber أو null |
الترافيك الشهري المسموح؛ null إن كان غير محدود. |
accessRolestring |
|
serviceIdinteger أو null |
رقم الخدمة في فوترة SNG. |
createdAtstring أو null |
وقت بصيغة ISO 8601. |
actionsstring[] |
أوامر التشغيل التي يستطيع هذا التوكن تنفيذها على الخادم الآن.
|
currentOperationobject أو null |
|
currentOperation.idstring |
|
currentOperation.serverIdstring |
معرّف الخادم من GET /servers، مثل |
currentOperation.actionstring |
|
currentOperation.statusstring |
|
currentOperation.messagestring أو null |
|
currentOperation.requestedAtstring أو null |
وقت بصيغة ISO 8601. |
currentOperation.completedAtstring أو null |
وقت بصيغة ISO 8601. |
الأخطاء
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
}
}
}
الاستهلاك
GET/servers/{serverId}/metrics
الصلاحية servers:read
المعالج والذاكرة والقرص والترافيك الشهري. الخوادم المخصصة تُبلغ عن الاستهلاك عبر وكيل SNG.
المعاملات
serverId مسار · مطلوبstring |
معرّف الخادم من GET /servers، مثل |
الرد 200
sampledAtstring أو null |
وقت بصيغة ISO 8601. |
cpuPercentnumber أو null |
|
memoryobject أو null |
|
memory.totalBytesnumber |
|
memory.usedBytesnumber |
|
memory.usagePercentnumber أو null |
|
storageobject[] |
|
storage.mountstring |
|
storage.totalBytesnumber |
|
storage.usedBytesnumber |
|
storage.usagePercentnumber أو null |
|
bandwidthobject أو null |
الترافيك المستخدم في شهر الفوترة الحالي، إن أبلغ عنه الخادم. |
bandwidth.usedBytesnumber |
|
bandwidth.limitBytesnumber أو null |
الأخطاء
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
}
}
}
تنفيذ أمر تشغيل
POST/servers/{serverId}/actions
الصلاحية servers:power
start وreboot يحتاجان servers:power، وshutdown وpower_off وreset تحتاج أيضًا servers:control. يبدأ الأمر ويُرجع عملية؛ الرد 202 يعني أنه ما زال جاريًا، فتابع GET /servers/{serverId}/operations/{operationId} حتى يصل إلى حالة نهائية. لا تعلن الواجهة النجاح قبل أن يؤكده الخادم.
المعاملات
serverId مسار · مطلوبstring |
معرّف الخادم من GET /servers، مثل |
Idempotency-Key ترويسة · مطلوبstring |
قيمة فريدة لكل أمر تقصده (8–128 حرفًا). تكرار الطلب بنفس المفتاح يُرجع النتيجة الأولى بدل تنفيذ الأمر مرة أخرى. |
جسم الطلب
actionstring |
|
الرد 202
operationobject |
|
operation.idstring |
|
operation.serverIdstring |
معرّف الخادم من GET /servers، مثل |
operation.actionstring |
|
operation.statusstring |
|
operation.messagestring أو null |
|
operation.requestedAtstring أو null |
وقت بصيغة ISO 8601. |
operation.completedAtstring أو null |
وقت بصيغة ISO 8601. |
الأخطاء
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
}
}
}
حالة عملية
GET/servers/{serverId}/operations/{operationId}
الصلاحية servers:read
المعاملات
serverId مسار · مطلوبstring |
معرّف الخادم من GET /servers، مثل |
operationId مسار · مطلوبstring |
معرّف العملية الذي يُرجعه الأمر. |
الرد 200
idstring |
|
serverIdstring |
معرّف الخادم من GET /servers، مثل |
actionstring |
|
statusstring |
|
messagestring أو null |
|
requestedAtstring أو null |
وقت بصيغة ISO 8601. |
completedAtstring أو null |
وقت بصيغة ISO 8601. |
الأخطاء
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
}
}
الشبكة
عناوين IP
GET/servers/{serverId}/ips
الصلاحية network:read
المعاملات
serverId مسار · مطلوبstring |
معرّف الخادم من GET /servers، مثل |
الرد 200
addressstring |
|
versionstring |
|
primaryboolean |
الأخطاء
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
GET/servers/{serverId}/ips/{ip}
الصلاحية network:read
rDNS والوصف ووضع حماية DDoS لعنوان واحد.
المعاملات
serverId مسار · مطلوبstring |
معرّف الخادم من GET /servers، مثل |
ip مسار · مطلوبstring · ipv4 |
عنوان IPv4 مخصّص للخادم. |
الرد 200
addressstring |
|
rdnsstring أو null |
|
descriptionstring أو null |
|
protectionobject أو null |
وضع حماية DDoS. |
protection.layer4string |
|
protection.layer7string |
|
editableobject |
|
editable.rdnsboolean |
|
editable.descriptionboolean |
|
editable.protectionboolean |
الأخطاء
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
PATCH/servers/{serverId}/ips/{ip}
الصلاحية network:write
تعديل rDNS أو الوصف أو وضع حماية DDoS لعنوان خادم مخصص. تعديل واحد لكل طلب.
المعاملات
serverId مسار · مطلوبstring |
معرّف الخادم من GET /servers، مثل |
ip مسار · مطلوبstring · ipv4 |
عنوان IPv4 مخصّص للخادم. |
Idempotency-Key ترويسة · مطلوبstring |
قيمة فريدة لكل أمر تقصده (8–128 حرفًا). تكرار الطلب بنفس المفتاح يُرجع النتيجة الأولى بدل تنفيذ الأمر مرة أخرى. |
جسم الطلب
تعديل واحد بالضبط لكل طلب: rdns أو description أو protection.
| واحد من · 1 | |
rdnsstring |
|
| واحد من · 2 | |
descriptionstring |
|
| واحد من · 3 | |
protectionobject |
|
protection.layer4string |
|
protection.layer7string |
|
الرد 200
addressstring |
|
rdnsstring أو null |
|
descriptionstring أو null |
|
protectionobject أو null |
وضع حماية DDoS. |
protection.layer4string |
|
protection.layer7string |
|
editableobject |
|
editable.rdnsboolean |
|
editable.descriptionboolean |
|
editable.protectionboolean |
الأخطاء
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
}
}
}
الترافيك
GET/servers/{serverId}/traffic
الصلاحية network:read
الخوادم المخصصة تُرجع سرعات المنفذ بالـ Mbps لآخر 24 ساعة (kind: rates)، وخوادم VPS تُرجع الاستهلاك لكل شهر فوترة (kind: monthly).
المعاملات
serverId مسار · مطلوبstring |
معرّف الخادم من GET /servers، مثل |
الرد 200
| واحد من · 1 | |
kindstring |
|
fromstring |
وقت بصيغة ISO 8601. |
tostring |
وقت بصيغة ISO 8601. |
totalsobject أو null |
حجم النقل خلال الفترة. |
totals.incomingGbnumber |
|
totals.outgoingGbnumber |
|
interfacesobject[] |
|
interfaces.incomingobject[] |
|
interfaces.incoming.timestring |
وقت بصيغة ISO 8601. |
interfaces.incoming.mbpsnumber |
|
interfaces.outgoingobject[] |
|
interfaces.outgoing.timestring |
وقت بصيغة ISO 8601. |
interfaces.outgoing.mbpsnumber |
|
| واحد من · 2 | |
kindstring |
|
monthsobject[] |
|
months.startstring |
وقت بصيغة ISO 8601. |
months.endstring |
وقت بصيغة ISO 8601. |
months.rxBytesnumber |
|
months.txBytesnumber |
|
months.totalBytesnumber |
|
months.limitGbnumber أو null |
|
الأخطاء
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
حماية DDoS والهجمات
GET/servers/{serverId}/ddos
الصلاحية network:read
حالة الحماية وآخر الهجمات لعنوان واحد من الخادم (العنوان الأساسي افتراضيًا).
المعاملات
serverId مسار · مطلوبstring |
معرّف الخادم من GET /servers، مثل |
ip استعلامstring · ipv4 |
العنوان المراد فحصه. |
الرد 200
addressstring أو null |
|
statusstring |
|
incidentsobject[] |
|
incidents.idstring |
|
incidents.startedAtstring |
وقت بصيغة ISO 8601. |
incidents.endedAtstring أو null |
وقت بصيغة ISO 8601. |
incidents.durationSecondsnumber أو null |
|
incidents.peakstring أو null |
ذروة الهجوم، مثل |
incidents.attackTypesstring[] |
|
totalIncidentsinteger |
|
addressesstring[] |
كل عناوين الخادم التي يمكنك الاستعلام عنها بـ |
الأخطاء
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
GET/servers/{serverId}/ips/{ip}/ddos/rules
الصلاحية network:read
قواعد الفلترة المطبّقة على عنوان واحد من خادم مخصص.
المعاملات
serverId مسار · مطلوبstring |
معرّف الخادم من GET /servers، مثل |
ip مسار · مطلوبstring · ipv4 |
عنوان IPv4 مخصّص للخادم. |
الرد 200
addressstring |
|
availableboolean |
|
rulesobject[] |
|
rules.protocolstring |
|
rules.portnumber |
|
rules.statestring |
الأخطاء
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"
}
]
}
}
الجدار الناري
مجموعات قواعد الجدار الناري
GET/firewall/rulesets
الصلاحية network:read
مجموعات القواعد التي يمكن تطبيقها على جدار VPS الناري.
الرد 200
idinteger |
|
namestring |
الأخطاء
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 الناري
GET/servers/{serverId}/firewall
الصلاحية network:read
المعاملات
serverId مسار · مطلوبstring |
معرّف الخادم من GET /servers، مثل |
الرد 200
enabledboolean |
|
rulesetsinteger[] |
معرّفات مجموعات القواعد المطبّقة. |
الأخطاء
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 الناري
PUT/servers/{serverId}/firewall
الصلاحية network:write
تشغيل الجدار الناري أو إيقافه واختيار مجموعات القواعد المطبّقة.
المعاملات
serverId مسار · مطلوبstring |
معرّف الخادم من GET /servers، مثل |
Idempotency-Key ترويسة · مطلوبstring |
قيمة فريدة لكل أمر تقصده (8–128 حرفًا). تكرار الطلب بنفس المفتاح يُرجع النتيجة الأولى بدل تنفيذ الأمر مرة أخرى. |
جسم الطلب
enabled اختياريboolean |
|
rulesets اختياريinteger[] |
الرد 200
enabledboolean |
|
rulesetsinteger[] |
معرّفات مجموعات القواعد المطبّقة. |
الأخطاء
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
]
}
}