Sunucular

1.6k görüntülenme Markdown

Hizmetlerin kurulduğu sunucuları tanımlayan, sınayan ve mevcut hesapları içe aktaran on bir uç.

Genel Bakış

Sunucu, hizmetlerin gerçekten kurulduğu yerdir. Bu uçlar sunucuyu tanımlar, bağlantısını sınar, panel üzerindeki görünürlüğünü ayarlar ve sunucuda hâlihazırda duran hesapları WISECP'ye taşır.

Kimlik bilgileri tek yönlüdür: parolayı ve erişim anahtarını yazarsınız ama hiçbir uçtan geri okuyamazsınız. Detayda yalnız tanımlı olup olmadıkları görünür.

Referans

Sunucuları Listeleme

get/api/v1/admin/products/servers
Products/GetServers admin sayfalı

Hizmetlerin kurulduğu sunucuları döndürür.

Sorgu parametreleri 4
searchstringSunucu adında ve adresinde arar.
groupintSunucu grubuna göre süzer.
pageintVarsayılan 1.
limitintVarsayılan 25, en çok 100.
Dönen alanlar data[] — 6
idintSunucu kimliği.
namestringSunucu adı.
typestringBağlı sunucu modülü.
ipstringSunucunun adresi.
statusstringactive ya da inactive.
max_accountsintKurulabilecek en çok hesap sayısı.
Meta 4
totalintSüzgece uyan toplam kayıt.
pageintBulunduğunuz sayfa.
limitintSayfa boyutu.
next_pageintSonraki sayfa. Sıfır son sayfada olduğunuz anlamına gelir.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/products/servers' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/products/servers', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/servers');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Products()->GetServers();

Sunucu Detayı

get/api/v1/admin/products/servers/{id}
Products/GetServer admin gizli veri dönmez

Bir sunucunun tüm ayarlarını döndürür. Parola ve erişim anahtarı hiçbir zaman geri gelmez.

Dönen alanlar data — 16
idintSunucu kimliği.
namestringSunucu adı.
typestringBağlı sunucu modülü.
ipstringSunucunun adresi.
usernamestringBağlantı kullanıcı adı.
has_passwordboolParola tanımlı mı. Parolanın kendisi hiçbir zaman dönmez.
has_access_hashboolErişim anahtarı tanımlı mı.
portintBağlantı portu.
secureboolBağlantı şifreli mi.
nameserversstring[]Sunucunun ad sunucuları. En çok dört tane; boş olanlar atılır.
max_accountsintKurulabilecek en çok hesap sayısı.
full_alertintDoluluk uyarısının verileceği eşik.
costobjectSunucunun size maliyeti.
pricefloatSunucunun size maliyeti.
currency_idintPara birimi kimliği.
statusstringactive ya da inactive.
fieldsobjectModüle özgü ayarlar. Alanlar tamamen modüle bağlıdır; gizli işaretli olanlar yıldızlarla maskelenir.
disabled_featuresobject | nullPanelde kapatılmış özellikler. Hiçbiri kapatılmamışsa boş döner.
Hatalar 2
not_found404Sunucu bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/products/servers/34' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/products/servers/34', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/servers/34');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Products()->GetServer(['id' => 34]);

// Parolanin kendisi yok; yalnizca tanimli olup olmadigi var.
$ready = $response['data']['has_password'] || $response['data']['has_access_hash'];
Yanıt
{
  "data": {
    "id": 34,
    "name": "srv1.example.com",
    "type": "cPanel",
    "ip": "192.0.2.10",
    "username": "root",
    "has_password": true,
    "has_access_hash": false,
    "port": 2087,
    "secure": true,
    "nameservers": ["ns1.example.com", "ns2.example.com"],
    "max_accounts": 200,
    "full_alert": 0,
    "cost": { "price": 0, "currency_id": 147 },
    "status": "active",
    "fields": { "api_url": "https://panel.example.com/" },
    "disabled_features": null
  }
}

Sunucu Ekleme

post/api/v1/admin/products/servers
Products/CreateServer admin 201

Yeni bir provizyon sunucusu ekler.

Gövde 13
typestringzorunluSunucu modülünün adı.
namestringzorunluSunucu adı.
ipstringzorunluSunucunun adresi.
usernamestringzorunluBağlantı kullanıcı adı.
passwordstringParola. Parola ya da erişim anahtarından biri gerekir; şifreli saklanır.
access_hashstringErişim anahtarı. Parolanın yerini tutar.
portintBağlantı portu.
secureboolBağlantıyı şifreler.
max_accountsintKurulabilecek en çok hesap sayısı. Varsayılan 200.
full_alertintDoluluk uyarısının verileceği eşik.
nameserversstring[]Ad sunucuları. En çok dört tane.
costobjectSunucunun size maliyeti.
pricefloatSunucunun size maliyeti.
currency_idintPara birimi kimliği.
fieldsobjectModüle özgü ayarlar.
Dönen alanlar 201 — data
dataobjectOluşan sunucu. Detay ucuyla aynı şekildedir, dolayısıyla hiçbir sır geri dönmez: parola ve erişim anahtarı has_password ile has_access_hash olarak bildirilir, sır işaretli modül alanları maskelenir.
Hatalar 6
name_required422Sunucu adı boş.
type_required422Sunucu tipi boş.
ip_required422Adres boş.
username_required422Kullanıcı adı boş.
credentials_required422Ne parola ne erişim anahtarı verildi.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/products/servers' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"type":"cPanel","name":"srv1.example.com","ip":"192.0.2.10","username":"root","password":"secret","port":2087,"secure":true,"nameservers":["ns1.example.com","ns2.example.com"]}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/servers', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    type: 'cPanel',
    name: 'srv1.example.com',
    ip: '192.0.2.10',
    username: 'root',
    password: 'secret',
    port: 2087,
    secure: true,
  }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/servers');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'type'     => 'cPanel',
        'name'     => 'srv1.example.com',
        'ip'       => '192.0.2.10',
        'username' => 'root',
        'password' => $secret,
        'port'     => 2087,
        'secure'   => true,
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Eklemeden once ayni govdeyle baglantiyi deneyin: test hicbir sey yazmaz.
$test = Api::Products()->TestServerConnection([
    'type'     => 'cPanel',
    'ip'       => '192.0.2.10',
    'username' => 'root',
    'password' => $secret,
]);

if ($test['data']['connected'] ?? false) {
    Api::Products()->CreateServer([
        'type'     => 'cPanel',
        'name'     => 'srv1.example.com',
        'ip'       => '192.0.2.10',
        'username' => 'root',
        'password' => $secret,
    ]);
}

Sunucuyu Güncelleme

patch/api/v1/admin/products/servers/{id}
Products/UpdateServer admin tip değişimi taşır

Gönderdiğiniz alanları uygular. Parola göndermezseniz mevcut parola korunur.

Gövde 13
typestringzorunluSunucu modülünün adı.
namestringzorunluSunucu adı.
ipstringzorunluSunucunun adresi.
usernamestringzorunluBağlantı kullanıcı adı.
passwordstringParola. Parola ya da erişim anahtarından biri gerekir; şifreli saklanır.
access_hashstringErişim anahtarı. Parolanın yerini tutar.
portintBağlantı portu.
secureboolBağlantıyı şifreler.
max_accountsintKurulabilecek en çok hesap sayısı. Varsayılan 200.
full_alertintDoluluk uyarısının verileceği eşik.
nameserversstring[]Ad sunucuları. En çok dört tane.
costobjectSunucunun size maliyeti.
pricefloatSunucunun size maliyeti.
currency_idintPara birimi kimliği.
fieldsobjectModüle özgü ayarlar.
Dönen alanlar data
dataobjectGüncel sunucu. Detay ucuyla aynı şekildedir, sırlardan arınmış olarak döner.
Hatalar 7
not_found404Sunucu bulunamadı.
name_required422Sunucu adı boş.
type_required422Sunucu tipi boş.
ip_required422Adres boş.
username_required422Kullanıcı adı boş.
credentials_required422Ne parola ne erişim anahtarı verildi.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PATCH 'https://panel.ornek.com/api/v1/admin/products/servers/34' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"max_accounts":300,"secure":true}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/servers/34', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ max_accounts: 300, secure: true }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/servers/34');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PATCH',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['max_accounts' => 300, 'secure' => true]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Detaydan okunan maskeli parolayi geri gondermek zararsizdir: mevcut parola korunur.
Api::Products()->UpdateServer([
    'id'           => 34,
    'max_accounts' => 300,
]);

Sunucuyu Silme

delete/api/v1/admin/products/servers/{id}
Products/DeleteServer admin bağlıysa reddedilir

Sunucuyu siler. Üzerinde iptal edilmemiş hizmet varsa silme reddedilir.

Dönen alanlar data — 2
deletedboolSilme başarılı mı.
idintSilinen sunucunun kimliği.
Hatalar 4
not_found404Sunucu bulunamadı.
server_in_use422Sunucuya bağlı, iptal edilmemiş hizmetler var.
blocked_by_gate422gate:product.server_delete kancası işlemi veto etti.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/products/servers/34' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/servers/34', {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/servers/34');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'DELETE',
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Products()->DeleteServer(['id' => 34]);

Toplu Durum Değiştirme

post/api/v1/admin/products/servers/bulk
Products/BulkServers admin hep ya da hiç

Birden çok sunucunun durumunu değiştirir. Doğrulama yazmadan önce tüm liste için yapılır.

Gövde 2
idsint[]zorunluSunucu kimlikleri.
actionstringzorunluactive ya da inactive.
Dönen alanlar data — 2
updatedint[]Durumu değişen kimlikler.
actionstringUygulanan durum.
Hatalar 4
ids_required422ids boş.
invalid_action422İşlem iki değerden biri değil.
server_in_use422Bir sunucu hâlâ ürünlere ya da iptal edilmemiş hizmetlere bağlı. Hata ayrıntısı hangi sunucunun ve hangi bağın engellediğini söyler.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/products/servers/bulk' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"ids":[34,35],"action":"inactive"}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/servers/bulk', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ ids: [34, 35], action: 'inactive' }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/servers/bulk');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'ids'    => [34, 35],
        'action' => 'inactive',
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Tek bir sunucu reddedilirse HICBIRI degismez; yarim uygulanmis durum olusmaz.
$response = Api::Products()->BulkServers([
    'ids'    => [34, 35],
    'action' => 'inactive',
]);

Bağlantıyı Deneme

post/api/v1/admin/products/servers/test-connection
Products/TestServerConnection admin hiçbir şey yazmaz

Verilen bağlantı bilgileriyle sunucuya ulaşılıp ulaşılmadığını denemekle kalır.

Gövde 13
typestringzorunluSunucu modülünün adı.
namestringzorunluSunucu adı.
ipstringzorunluSunucunun adresi.
usernamestringzorunluBağlantı kullanıcı adı.
passwordstringParola. Parola ya da erişim anahtarından biri gerekir; şifreli saklanır.
access_hashstringErişim anahtarı. Parolanın yerini tutar.
portintBağlantı portu.
secureboolBağlantıyı şifreler.
max_accountsintKurulabilecek en çok hesap sayısı. Varsayılan 200.
full_alertintDoluluk uyarısının verileceği eşik.
nameserversstring[]Ad sunucuları. En çok dört tane.
costobjectSunucunun size maliyeti.
pricefloatSunucunun size maliyeti.
currency_idintPara birimi kimliği.
fieldsobjectModüle özgü ayarlar.
Dönen alanlar data — 2
connectedboolSunucuya ulaşıldı mı.
auto_fillobjectModülün sunucudan okuyup önerdiği ayarlar. Her modül döndürmez.
Hatalar 4
type_required422Sunucu tipi boş.
ip_required422Adres boş.
invalid_type422Sunucu modülü bulunamadı.
test_failed422Bağlantı kurulamadı.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/products/servers/test-connection' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"type":"cPanel","ip":"192.0.2.10","username":"root","password":"secret","port":2087}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/servers/test-connection', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    type: 'cPanel',
    ip: '192.0.2.10',
    username: 'root',
    password: secret,
    port: 2087,
  }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/servers/test-connection');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'type'     => 'cPanel',
        'ip'       => '192.0.2.10',
        'username' => 'root',
        'password' => $secret,
        'port'     => 2087,
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Test var olan bir sunucuyu DENEMEZ; govdedeki bilgileri dener.
// Kayitli bir sunucuyu sinamak icin bilgilerini yeniden gonderirsiniz.
$test = Api::Products()->TestServerConnection([
    'type'     => 'cPanel',
    'ip'       => '192.0.2.10',
    'username' => 'root',
    'password' => $secret,
]);

Panel Özelliklerini Kapatma

patch/api/v1/admin/products/servers/{id}/preferences
Products/SetServerPreferences admin

Bu sunucudaki hizmetlerde müşteriye gösterilmeyecek araç ve kartları belirler.

Gövde 1
disabled_featuresobjectzorunluKapatılacaklar: tools araç adları, cards kart adları, card_items kart başına gizlenecek satırlar.
Dönen alanlar data — 2
idintSunucu kimliği.
disabled_featuresobjectKaydedilen ayar.
Hatalar 2
not_found404Sunucu bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PATCH 'https://panel.ornek.com/api/v1/admin/products/servers/34/preferences' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"disabled_features":{"tools":["backup"],"cards":[],"card_items":{}}}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/servers/34/preferences', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    disabled_features: { tools: ['backup'], cards: [], card_items: {} },
  }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/servers/34/preferences');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PATCH',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'disabled_features' => [
            'tools'      => ['backup'],
            'cards'      => [],
            'card_items' => new stdClass(),
        ],
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Products()->SetServerPreferences([
    'id'                => 34,
    'disabled_features' => [
        'tools'      => ['backup'],
        'cards'      => [],
        'card_items' => [],
    ],
]);

Sunucu Paneline Giriş

post/api/v1/admin/products/servers/{id}/sso
Products/GetServerSso admin modüle bağlı

Sunucunun yönetim paneline giriş bağlantısı üretir.

Gövde —
——Gövde gerekmez, boş gönderin. Sunucuyu adres belirler, kimlik bilgileri de kayıtlı sunucu kaydından gelir.
Dönen alanlar data — 1
login_urlstringOturum bilgisini taşıyan giriş bağlantısı.
Hatalar 4
not_found404Sunucu bulunamadı.
not_supported422Modül panel girişini desteklemiyor.
sso_failed422Giriş bağlantısı üretilemedi.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/products/servers/34/sso' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/servers/34/sso', {
  method: 'POST',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/servers/34/sso');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Baglanti sunucunun YONETIM paneline acilir, bir musteri hesabina degil.
$response = Api::Products()->GetServerSso(['id' => 34]);
$url      = $response['data']['login_url'] ?? null;

İçe Aktarılabilir Hesapları Listeleme

get/api/v1/admin/products/servers/{id}/importable
Products/GetServerImportable admin şema modülden gelir

Sunucuda var olan ama WISECP'de karşılığı olmayan hesapları döndürür.

Sorgu parametreleri 3
searchstringHesaplarda arar.
pageintSayfa. Yalnız sayfalayabilen modüllerde işler.
limitintSayfa boyutu. En çok 200.
Dönen alanlar data[]
data[]objectHer satır, modülün sunucudan okuduğu ham hesap kaydıdır. Alanlar modüle göre değişir; içe aktarırken bu nesneyi olduğu gibi geri gönderirsiniz.
Meta 4
totalintBulunan hesap sayısı.
methodstringModülün kullandığı listeleme yöntemi.
pageintBulunduğunuz sayfa. Sayfalanabilen yöntemde döner.
limitintSayfa boyutu.
Hatalar 5
not_found404Sunucu bulunamadı.
module_not_found422Sunucu modülü bulunamadı.
import_not_supported422Modül hesap listeleyemiyor.
list_failed422Hesaplar listelenemedi.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -G 'https://panel.ornek.com/api/v1/admin/products/servers/34/importable' \
  -H "Authorization: Bearer $API_KEY" \
  -d limit=200
const url = new URL('https://panel.ornek.com/api/v1/admin/products/servers/34/importable');
url.searchParams.set('limit', '200');

const res  = await fetch(url, { headers: { Authorization: `Bearer ${apiKey}` } });
const body = await res.json();
$url = 'https://panel.ornek.com/api/v1/admin/products/servers/34/importable?' . http_build_query(['limit' => 200]);

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$accounts = Api::Products()->GetServerImportable(['id' => 34], ['limit' => 200]);

// 'method' hangi listeleme yolunun kullanildigini soyler; sayfalama ona bagli.
$paged = ($accounts['meta']['method'] ?? '') === 'list';

Hesapları İçe Aktarma

post/api/v1/admin/products/servers/{id}/import
Products/ImportServerAccounts admin 201

Sunucudaki hesapları WISECP hizmetlerine dönüştürür. Her satır bir müşteri ve ürüne bağlanır.

Gövde 1
itemsobject[]zorunluİçe aktarılacak satırlar. Her satır listeleme ucundan aldığınız ham hesap kaydını, müşteri kimliğini, ürün kimliğini, fiyat kimliğini ve başlangıç tarihini taşır; bitiş tarihi isteğe bağlıdır.
Dönen alanlar data — 1
importedobject[]Oluşturulan hizmetler. Her eleman hizmet kimliği ve adını taşır.
Hatalar 5
not_found404Sunucu bulunamadı.
items_required422items boş.
no_valid_items422Hiçbir satırda eşleme tamamlanmadı. Eksik müşteri, ürün ya da fiyat kimliği olan satırlar sessizce elenir.
import_failed422İçe aktarma reddedildi.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/products/servers/34/import' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "items": [
      {
        "info": { "username": "acct1", "domain": "client-domain.example" },
        "user_id": 42,
        "product_id": 15,
        "price_id": 88,
        "start": "2026-01-01 00:00:00"
      }
    ]
  }'
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/servers/34/import', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    items: [
      {
        info: account,
        user_id: 42,
        product_id: 15,
        price_id: 88,
        start: '2026-01-01 00:00:00',
      },
    ],
  }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/servers/34/import');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'items' => [[
            'info'       => $account,
            'user_id'    => 42,
            'product_id' => 15,
            'price_id'   => 88,
            'start'      => '2026-01-01 00:00:00',
        ]],
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// 'info' listeleme ucundan geldigi gibi gonderilir; degistirmeyin.
$accounts = Api::Products()->GetServerImportable(['id' => 34])['data'];

$items = [];
foreach ($accounts as $account)
    $items[] = [
        'info'       => $account,
        'user_id'    => 42,
        'product_id' => 15,
        'price_id'   => 88,
        'start'      => '2026-01-01 00:00:00',
    ];

$done = Api::Products()->ImportServerAccounts(['id' => 34, 'items' => $items]);

// Gonderilen ile olusan sayiyi karsilastirin: eksik eslemeli satirlar elenmistir.
$dropped = count($items) - count($done['data']['imported']);

Tuzaklar

Gizli veri geri okunamaz

Parola ve erişim anahtarı hiçbir yanıtta yer almaz; detayda yalnız tanımlı olup olmadıkları görünür. Modülün gizli işaretli alanları da yıldızlarla maskelenir. Bu maskeyi güncellemede geri göndermek zararsızdır: mevcut değer korunur, maske kaydedilmez.

Bağlantı testi kayıtlı sunucuyu denemez

Test ucu gövdede verdiğiniz bilgileri dener ve hiçbir şey yazmaz. Kayıtlı bir sunucunun hâlâ çalışıp çalışmadığını sınamak isterseniz bilgilerini yeniden göndermeniz gerekir; parolayı geri okuyamayacağınız için o parolayı kendi tarafınızda tutuyor olmalısınız.

Toplu işlem yarım kalmaz

Toplu durum değiştirme önce listenin tamamını doğrular, sonra yazar. Bir sunucu hâlâ bir ürüne ya da aktif bir hizmete bağlıysa istek reddedilir ve hiçbir sunucu değişmez. Hata ayrıntısı hangi sunucunun ve hangi bağın engellediğini söyler.

İçe aktarmada eksik satır sessizce elenir

Müşteri, ürün ya da fiyat kimliği eksik olan satırlar atlanır ve yanıtta yer almaz. Hepsi eksikse no_valid_items alırsınız, ama bazıları eksikse istek başarılı görünür. Gönderdiğiniz satır sayısıyla dönen hizmet sayısını karşılaştırın.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.