# Hizmet Araçları

https://dev.wisecp.com/tr/hizmet-araclari

Hizmetin sağlayıcı panelindeki araçları çalıştıran, modül metodu çağıran ve giriş bağlantısı üreten beş uç.

## Genel Bakış

Araçlar, hizmetin sağlayıcı panelindeki işleri API üzerinden yapmanızı sağlar: veritabanı açmak, e-posta hesabı eklemek, dosyalara bakmak. Panelin gördüğü verinin aynısını, HTML yerine **ham hâlde** alırsınız.

Araçlar yalnız barındırma ve sunucu hizmetlerinde vardır. Alan adı hizmetlerinin kendi uçları, özel ürünlerin ise araç sistemi yerine **modül metodu** yolu vardır — güç işlemleri, konsol bilgisi ve benzeri şeyler oradan çağrılır.

## Referans

### Araçları Listeleme

get/api/v1/admin/services/{id}/tools

`Services/GetServiceTools` admin barındırma ve sunucu

Hizmetin modülünün sunduğu araçları ve her birinin hangi işlemleri kabul ettiğini döndürür.

Dönen alanlar data[] — 5

keystringAracın anahtarı. Diğer uçlar bunu adreste kullanır.

groupstringAracın grubu.

labelstringGörünen etiket.

iconstringİkon sınıfı.

capabilitiesstring[]Aracın kabul ettiği işlemler. Listede olmayan bir işlemi çağırmak reddedilir.

Hatalar 3

not_found404Hizmet bulunamadı.

tools_not_supported422Bu hizmet tipi araç sunmuyor. Alan adı ve özel ürünlerde araç yoktur.

module_init_failed500Hizmetin modülü başlatılamadı. Mesaj sebebi taşır; yollar kuruluma göreli verilir.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl 'https://panel.ornek.com/api/v1/admin/services/506/tools' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res  = await fetch('https://panel.ornek.com/api/v1/admin/services/506/tools', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/506/tools');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Islemi denemeden once yetenegi okuyun: her modul her araci ayni olcude desteklemez.
$tools = Api::Services()->GetServiceTools(['id' => 506])['data'];

foreach ($tools as $tool) {
    $canCreate = in_array('create', $tool['capabilities'], true);
}
```

Yanıt 200 422

```json
{
  "data": [
    {
      "key": "databases",
      "group": "databases",
      "label": "Databases",
      "icon": "bi bi-database",
      "capabilities": ["list", "create", "delete"]
    },
    {
      "key": "email-accounts",
      "group": "email",
      "label": "Email Accounts",
      "icon": "bi bi-envelope",
      "capabilities": ["list", "create", "edit", "delete"]
    }
  ]
}
```

```json
{
  "error": {
    "code": "tools_not_supported",
    "message": "This service type does not expose tools."
  }
}
```

### Araç Verisini Okuma

get/api/v1/admin/services/{id}/tools/{tool}

`Services/GetServiceToolData` admin şekil modülden gelir

Aracın sağlayıcıdan okuduğu veriyi ham hâliyle döndürür.

Sorgu parametreleri 2

actionstringModüle iletilecek alt işlem. Varsayılan, aracın giriş görünümüdür.

*mixedVerdiğiniz diğer tüm sorgu parametreleri olduğu gibi modüle geçer.

Dönen alanlar data

datamixedAracın kendi verisi. Şekli tamamen modüle ve araca bağlıdır; sabit bir şema yoktur.

Hatalar 5

not_found404Araç bulunamadı ya da desteklenmiyor.

tools_not_supported422Bu hizmet tipi araç sunmuyor. Alan adı ve özel ürünlerde araç yoktur.

module_init_failed500Hizmetin modülü başlatılamadı. Mesaj sebebi taşır; yollar kuruluma göreli verilir.

tool_required422Araç anahtarı boş.

tool_data_failed500Modül veriyi getiremedi.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl 'https://panel.ornek.com/api/v1/admin/services/506/tools/databases' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res  = await fetch('https://panel.ornek.com/api/v1/admin/services/506/tools/databases', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/506/tools/databases');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Panel HTML render eder, API HAM veri dondurur: sekil moduller arasinda degisir.
$response = Api::Services()->GetServiceToolData(
    ['id' => 506, 'tool' => 'databases'],
);
```

Yanıt 200

```json
{
  "data": {
    "databases": [
      {
        "name": "user_app",
        "size": 50855321,
        "tables": 42,
        "users": ["user_admin"]
      }
    ],
    "users": ["user_admin"],
    "prefix": "user_"
  }
}
```

### Araç İşlemi Çalıştırma

post/api/v1/admin/services/{id}/tools/{tool}/{action}

`Services/RunServiceToolAction` admin sunucuda çalışır

Araç üzerinde bir işlem çalıştırır. Gövde alanlarını modülün kendi doğrulaması denetler. DNS kaydı düzenlemesi (`dns-zone-editor/edit`) yalnız gönderdiğinizi değiştirir: gönderilmeyen ad, TTL ya da öncelik kaydın mevcut değerini korur.

Gövde *

*mixedİşlemin beklediği alanlar. Ne gerektiğini modül belirler; alanlar temizlenir, doğrulanır ve geçmişe yazılır.

Dönen alanlar data

datamixedModülün işlem sonucu. Genellikle bir durum ve bir mesaj taşır.

Hatalar 4

not_found404Araç bulunamadı ya da desteklenmiyor.

tools_not_supported422Bu hizmet tipi araç sunmuyor. Alan adı ve özel ürünlerde araç yoktur.

module_init_failed500Hizmetin modülü başlatılamadı. Mesaj sebebi taşır; yollar kuruluma göreli verilir.

tool_action_failed500Modül işlemi tamamlayamadı.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X POST 'https://panel.ornek.com/api/v1/admin/services/506/tools/databases/create' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"name":"user_app"}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/services/506/tools/databases/create', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ name: 'user_app' }),
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/506/tools/databases/create');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['name' => 'user_app']),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Islem gercekten SUNUCUDA calisir: silme cagrilari geri alinamaz.
$response = Api::Services()->RunServiceToolAction(
    ['id' => 506, 'tool' => 'databases', 'action' => 'create'],
    [],
    ['name' => 'user_app'],
);
```

### Modül Metodu Çağırma

post/api/v1/admin/services/{id}/module-method

`Services/UseServiceModuleMethod` admin izin listesine bağlı

Modülün izin verdiği bir metodu çağırır. Araç sistemi olmayan hizmet tiplerinin yolu budur.

Gövde 2

methodstringzorunluÇağrılacak metodun adı. Yalnız modülün çağrılabilir listesinde olan ya da karşılığı bulunan metotlar çalışır.

*mixedVerdiğiniz diğer alanlar metoda parametre olarak geçer.

Dönen alanlar data — 4

methodstringÇağrılan metot.

redirect_urlstring | nullMetot bir yönlendirme ürettiyse adresi.

resultmixed | nullMetodun dönüş değeri. Yalnız dizi ya da metin dönerse dolar.

outputstring | nullMetodun bastığı çıktı.

Hatalar 5

not_found404Hizmet bulunamadı.

method_required422Metot adı verilmedi.

invalid_method422Metot modülde çağrılabilir değil.

no_module422Hizmete bağlı modül yok.

module_init_failed500Hizmetin modülü başlatılamadı. Mesaj sebebi taşır; yollar kuruluma göreli verilir.

module_method_failed500Metot hata fırlattı.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X POST 'https://panel.ornek.com/api/v1/admin/services/506/module-method' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"method":"vnc_info"}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/services/506/module-method', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ method: 'vnc_info' }),
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/506/module-method');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['method' => 'vnc_info']),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Sonuc uc ayri alanda gelebilir: donus degeri, basilan cikti ya da yonlendirme.
$response = Api::Services()->UseServiceModuleMethod([
    'id'     => 506,
    'method' => 'vnc_info',
]);

$data = $response['data']['result']
    ?? $response['data']['output']
    ?? $response['data']['redirect_url'];
```

Yanıt 200 422

```json
{
  "data": {
    "method": "vnc_info",
    "redirect_url": null,
    "result": { "host": "203.0.113.10", "port": 5901 },
    "output": null
  }
}
```

```json
{
  "error": {
    "code": "invalid_method",
    "message": "Module method is not callable."
  }
}
```

### Panele Giriş Bağlantısı

post/api/v1/admin/services/{id}/sso

`Services/GetServiceSso` admin tek tıkla giriş

Hizmetin paneline tek tıkla giriş bağlantısı üretir.

Gövde 1

rootboolYönetici girişi üretir. Varsayılan kapalı; kapalıyken müşterinin hesabına girilir.

Dönen alanlar data — 2

urlstringGiriş bağlantısı.

rootboolYönetici girişi istendi mi.

Hatalar 4

not_found404Hizmet bulunamadı.

sso_not_supported422Modül tek tıkla girişi desteklemiyor.

module_init_failed500Hizmetin modülü başlatılamadı. Mesaj sebebi taşır; yollar kuruluma göreli verilir.

sso_failed500Modül bağlantı üretemedi.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X POST 'https://panel.ornek.com/api/v1/admin/services/506/sso' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"root":false}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/services/506/sso', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ root: false }),
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/506/sso');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['root' => false]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
// Uretilen adres oturum tasir: log'a yazmayin, paylasmayin, kisa surede kullanin.
$response = Api::Services()->GetServiceSso(['id' => 506]);
$url      = $response['data']['url'];
```

## Tuzaklar

> **Araç işlemi gerçekten sunucuda çalışır**
> 
> Bu uçlar bir kaydı güncellemez; sağlayıcıya bağlanıp işi **orada** yaptırır. Silme işlemleri müşterinin verisini gerçekten siler ve geri alınamaz. Bir işlemi denemeden önce araç listesindeki yeteneklere bakın; desteklenmeyen bir işlemi çağırmak reddedilir.

> **Yanıtın şekli modüle bağlıdır**
> 
> Araç verisi ham gelir ve şekli modülden modüle değişir: bir barındırma paneli veritabanlarını başka anahtarlarla döndürür, bir diğeri başka. Tek bir modüle bakarak yazılmış ayrıştırma kodu ikinci modülde çalışmaz. Şemayı sabit varsaymayın.

> **Modül metodu bir izin listesine bağlıdır**
> 
> Metot adını serbestçe seçemezsiniz: yalnız modülün çağrılabilir olarak işaretlediği ya da bir karşılığı bulunan metotlar çalışır, kalanı `invalid_method` ile döner. Bu bir güvenlik sınırıdır; modülün her genel metodunu çağırabileceğinizi varsaymayın.

> **Müşteri kısıtlamaları API'de de geçerlidir**
> 
> Sunucu üzerinde müşteriye kapatılmış araçlar API çağrılarında da kapalıdır. Panelde yönetici olarak gördüğünüz bir araç, aynı anahtarla API'den erişilemeyebilir; sebebi yetki değil, sunucudaki kısıtlama ayarıdır.

> **Giriş bağlantısı bir oturum taşır**
> 
> Üretilen adres tıklandığında oturum açar. Log'a yazmak, bir yere kaydetmek ya da paylaşmak o hesaba erişimi paylaşmak demektir; bağlantıyı geçici bir kimlik bilgisi gibi tutun. Yönetici girişi isteyen çağrı ise **panelin kökünü** açar, tek bir müşteri hesabını değil.

## İlgili Makaleler

- [Hizmet Uçları](https://dev.wisecp.com/tr/hizmet-uclari)
- [Hizmet Ayarları ve Sunucu](https://dev.wisecp.com/tr/hizmet-ayarlari-ve-sunucu)
- [Sunucular](https://dev.wisecp.com/tr/sunucular)
