# Alan Adı Fiyatlama ve Ayarları

https://dev.wisecp.com/tr/alan-adi-fiyatlama

Alan adı satışının genel kurallarını belirleyen yedi uç: kurtarma, eklenti ücretleri, otomatik fiyatlama ve premium.

## Genel Bakış

Bu uçlar tek bir uzantıya değil, alan adı satışının **genel kurallarına** bakar: süresi dolan bir alan adı ne kadar süreyle ve ne ücretle kurtarılabilir, DNS yönetimi ya da kayıt gizliliği ne kadar, fiyatlar otomatik mi belirleniyor, premium alan adları satılıyor mu.

Bir uzantının kendi fiyatı ve özellikleri ayrı bir yerdedir; buradaki ayarlar onların üstünde çalışır. Tek istisna kurtarma ücretidir: uzantı adı verilirse yalnız o uzantıya yazılır.

## Referans

### WHOIS Sorgusu

get/api/v1/admin/products/domain/whois

`Products/GetDomainWhois` admin dışarıya çıkar

Bir alan adı için WHOIS sorgusu çalıştırır ve ham çıktıyı döndürür.

Sorgu parametreleri 1

domainstringzorunluSorgulanacak alan adı, uzantısıyla birlikte.

Dönen alanlar data — 3

domainstringSorgulanan alan adı.

availableboolAlan adı boşta mı.

outputstringTescil kuruluşundan gelen ham metin. Biçim kuruluştan kuruluşa değişir; ayrıştırmaya güvenmeyin.

Hatalar 4

domain_required422`domain` boş.

invalid_domain422Alan adı çözümlenemedi.

whois_failed422WHOIS verisi alınamadı. Uzak sunucu ulaşılamaz ya da hız sınırında olabilir.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

```bash
curl -G 'https://panel.ornek.com/api/v1/admin/products/domain/whois' \
  -H "Authorization: Bearer $API_KEY" \
  -d domain=example.com
```

```javascript
const url = new URL('https://panel.ornek.com/api/v1/admin/products/domain/whois');
url.searchParams.set('domain', 'example.com');

const res  = await fetch(url, { headers: { Authorization: `Bearer ${apiKey}` } });
const body = await res.json();
```

```php
$url = 'https://panel.ornek.com/api/v1/admin/products/domain/whois?' . http_build_query(['domain' => 'example.com']);

$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);
```

```php
// Sorgu uzak sunucuya cikar: yavas olabilir, hiz sinirina takilabilir.
$response = Api::Products()->GetDomainWhois([], ['domain' => 'example.com']);

$free = $response['data']['available'] ?? false;
```

### Gecikme ve Kurtarma Ücretleri

put/api/v1/admin/products/domain/grace-redemption

`Products/SetDomainGraceRedemption` admin genel ya da uzantıya özel

Süresi dolan alan adının kurtarılma süresini ve ücretini belirler.

Gövde 3

extensionstringUzantı. Boş bırakırsanız ayar tüm uzantılar için varsayılan olur.

graceobject 2 alanGecikme dönemi: süre ve para birimi başına ücret. Alan adı henüz serbest bırakılmadan geri alınabildiği dönem.

durationintSürenin gün sayısı.

feesobject 2 alanPara birimi kodundan ücret nesnesine eşleme.

feefloatÜcret tutarı.

statusboolÜcret uygulanıyor mu. Kapalıyken tutar saklanır ama alınmaz.

redemptionobject 2 alanKurtarma dönemi: süre ve para birimi başına ücret. Gecikme dönemi bittikten sonraki, genelde pahalı olan dönem.

durationintSürenin gün sayısı.

feesobject 2 alanPara birimi kodundan ücret nesnesine eşleme.

feefloatÜcret tutarı.

statusboolÜcret uygulanıyor mu. Kapalıyken tutar saklanır ama alınmaz.

Dönen alanlar data — 1

extensionstring | nullAyarın uygulandığı uzantı. Genel varsayılanda boş döner.

Hatalar 2

not_found404Verilen uzantı bulunamadı.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

```bash
curl -X PUT 'https://panel.ornek.com/api/v1/admin/products/domain/grace-redemption' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"grace":{"duration":30,"fees":{"USD":{"fee":0,"status":false}}},"redemption":{"duration":30,"fees":{"USD":{"fee":80,"status":true}}}}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/domain/grace-redemption', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    grace: { duration: 30, fees: { USD: { fee: 0, status: false } } },
    redemption: { duration: 30, fees: { USD: { fee: 80, status: true } } },
  }),
});

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

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/domain/grace-redemption');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'redemption' => [
            'duration' => 30,
            'fees'     => ['USD' => ['fee' => 80, 'status' => true]],
        ],
    ]),
]);

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

```php
// Uzanti vermek ayari YALNIZ o uzantiya yazar; genel varsayilan degismez.
Api::Products()->SetDomainGraceRedemption([
    'extension'  => 'com',
    'redemption' => [
        'duration' => 30,
        'fees'     => ['USD' => ['fee' => 80, 'status' => true]],
    ],
]);
```

### Alan Adı Eklentisi Ücretleri

put/api/v1/admin/products/domain/addon-pricing

`Products/SetDomainAddonPricing` admin tüm uzantılar

DNS yönetimi, yönlendirme, kayıt gizliliği ve transfer kodu için ücret belirler.

Gövde 2

typestringzorunluÜcretlendirilecek özellik: `dns_manage`, `forwarding`, `whois_privacy` ya da `epp_code`.

feesobjectzorunlu 2 alanPara birimi kodundan ücret nesnesine eşleme.

feefloatÜcret tutarı.

statusboolÜcret uygulanıyor mu. Kapalıyken tutar saklanır ama alınmaz.

Dönen alanlar data — 1

typestringÜcreti yazılan özellik.

Hatalar 2

invalid_type422Özellik dört değerden biri değil.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

```bash
curl -X PUT 'https://panel.ornek.com/api/v1/admin/products/domain/addon-pricing' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"type":"whois_privacy","fees":{"USD":{"fee":5,"status":true}}}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/domain/addon-pricing', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    type: 'whois_privacy',
    fees: { USD: { fee: 5, status: true } },
  }),
});

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

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/domain/addon-pricing');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'type' => 'whois_privacy',
        'fees' => ['USD' => ['fee' => 5, 'status' => true]],
    ]),
]);

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

```php
// Ucret her uzanti icin ayni; ozelligin hangi uzantida ACIK oldugu TLD kaydinda durur.
Api::Products()->SetDomainAddonPricing([
    'type' => 'whois_privacy',
    'fees' => ['USD' => ['fee' => 5, 'status' => true]],
]);
```

### Otomatik Fiyatlama Durumu

get/api/v1/admin/products/domain/auto-pricing

`Products/GetDomainAutoPricing` admin

Otomatik fiyatlamanın açık olup olmadığını ve kâr marjını döndürür.

Dönen alanlar data — 2

statusboolOtomatik fiyatlama açık mı.

profit_ratefloatMaliyetin üzerine eklenen kâr marjı, yüzde olarak.

Hatalar 1

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

```bash
curl 'https://panel.ornek.com/api/v1/admin/products/domain/auto-pricing' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res  = await fetch('https://panel.ornek.com/api/v1/admin/products/domain/auto-pricing', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/domain/auto-pricing');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

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

```php
$response = Api::Products()->GetDomainAutoPricing();
```

### Otomatik Fiyatlamayı Ayarlama

put/api/v1/admin/products/domain/auto-pricing

`Products/SetDomainAutoPricing` admin iki dal

Otomatik fiyatlamayı açıp kapatır ya da kâr marjını değiştirip fiyatları yeniden hesaplar.

Gövde 3

updatestringzorunluHangi dalın çalışacağı: `status` ya da `pricing`.

statusboolOtomatik fiyatlamayı açar ya da kapatır. Yalnız `status` dalında.

ratefloatKâr marjı, yüzde olarak. Yalnız `pricing` dalında; yazıldığı anda otomatik fiyatlı uzantılar yeniden fiyatlanır.

Dönen alanlar data — 2

dataobjectGüncel otomatik fiyatlama ayarları. Getirme ucuyla aynı şekildedir.

Hatalar 3

invalid_update422`update` iki değerden biri değil.

update_failed422Ayar kaydedilemedi.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

```bash
curl -X PUT 'https://panel.ornek.com/api/v1/admin/products/domain/auto-pricing' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"update":"pricing","rate":20}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/domain/auto-pricing', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ update: 'pricing', rate: 20 }),
});

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

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/domain/auto-pricing');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['update' => 'pricing', 'rate' => 20]),
]);

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

```php
// Marj yazmak TUM otomatik fiyatli uzantilari o anda yeniden fiyatlar.
Api::Products()->SetDomainAutoPricing([
    'update' => 'pricing',
    'rate'   => 20,
]);
```

### Premium Alan Adı Ayarları

get/api/v1/admin/products/domain/premium

`Products/GetDomainPremium` admin

Premium alan adı satışının açık olup olmadığını ve fiyat katmanlarını döndürür.

Dönen alanlar data — 2

statusboolPremium alan adı satışı açık mı.

pricingobject[] 2 alanFiyat katmanları.

amountfloatKatmanın başladığı tutar.

markupfloatO katmana uygulanan kâr yüzdesi.

Hatalar 1

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

```bash
curl 'https://panel.ornek.com/api/v1/admin/products/domain/premium' \
  -H "Authorization: Bearer $API_KEY"
```

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

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

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

```php
$response = Api::Products()->GetDomainPremium();
```

### Premium Ayarlarını Yazma

put/api/v1/admin/products/domain/premium

`Products/SetDomainPremium` admin iki dal

Premium satışını açıp kapatır ya da fiyat katmanlarını yazar.

Gövde 3

updatestringzorunluHangi dalın çalışacağı: `status` ya da `pricing`.

statusboolPremium satışını açar ya da kapatır. Yalnız `status` dalında.

feesobject[] 2 alanFiyat katmanları. Yalnız `pricing` dalında; liste bütün olarak yazılır.

amountfloatKatmanın başladığı tutar.

markupfloatO katmana uygulanan kâr yüzdesi.

Dönen alanlar data — 2

dataobjectGüncel premium ayarları. Getirme ucuyla aynı şekildedir.

Hatalar 2

invalid_update422`update` iki değerden biri değil.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

```bash
curl -X PUT 'https://panel.ornek.com/api/v1/admin/products/domain/premium' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"update":"pricing","fees":[{"amount":100,"markup":10},{"amount":1000,"markup":5}]}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/domain/premium', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    update: 'pricing',
    fees: [
      { amount: 100, markup: 10 },
      { amount: 1000, markup: 5 },
    ],
  }),
});

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

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/domain/premium');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'update' => 'pricing',
        'fees'   => [
            ['amount' => 100,  'markup' => 10],
            ['amount' => 1000, 'markup' => 5],
        ],
    ]),
]);

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

```php
// Katman listesi butun olarak yazilir: eksik katman silinir.
Api::Products()->SetDomainPremium([
    'update' => 'pricing',
    'fees'   => [
        ['amount' => 100,  'markup' => 10],
        ['amount' => 1000, 'markup' => 5],
    ],
]);
```

## Tuzaklar

> **Marj yazmak fiyatları o anda değiştirir**
> 
> Kâr marjını yazmak yalnız bir ayarı kaydetmez: otomatik fiyatlaması açık olan **tüm uzantılar** aynı anda yeniden fiyatlanır. Değişiklik vitrine hemen yansır, cron beklemez. Marjı denemek için küçük bir adım atın ve sonucu uzantı detayından okuyun.

> **İki uç tek bir dal seçer**
> 
> Otomatik fiyatlama ve premium uçları `update` alanına göre tek bir dal çalıştırır. Yanlış dalda gönderilen alan sessizce yok sayılır: durum dalında marj göndermek marjı değiştirmez ve hata da vermez. Sonucu her zaman okuma ucundan doğrulayın.

> **Ücret ile sunum ayrı yerlerdedir**
> 
> Eklenti ücreti burada, tüm uzantılar için ortak yazılır. Bir uzantının o özelliği sunup sunmadığı ise kendi kaydındadır. Ücret koyduğunuz bir özellik hiçbir uzantıda açık değilse kimse ödemez; ikisini birlikte kontrol edin.

> **WHOIS sorgusu dışarı çıkar**
> 
> Sorgu uzak bir sunucuya gider: yavaş olabilir, hız sınırına takılabilir ve dönen metnin biçimi kuruluştan kuruluşa değişir. Toplu kontrol yazıyorsanız zaman aşımı koyun ve ham çıktıyı ayrıştırmak yerine `available` alanını kullanın.

## İlgili Makaleler

- [Alan Adı Uzantıları](https://dev.wisecp.com/tr/alan-adi-uzantilari)
- [Ürün Uçları](https://dev.wisecp.com/tr/urun-uclari)
