Alan Adı Uzantıları

1.7k görüntülenme Markdown

Sattığınız alan adı uzantılarını, fiyatlarını ve kayıt belgelerini yöneten on uç.

Genel Bakış

Bu uçlar sattığınız alan adı uzantılarını yönetir: hangi uzantılar açık, hangi tescil kuruluşuna bağlı, ne kadara satılıyor ve kayıt sırasında hangi belgeler isteniyor.

Uzantı adres içinde kendi adıyla geçer, kimlikle değil. Fiyat tablosu üç kademelidir: önce işlem tipi, sonra yıl, sonra para birimi. Aynı uzantı beş yıllık kayıtta farklı, tek yıllık yenilemede farklı fiyatlanabilir.

Referans

Uzantıları Listeleme

get/api/v1/admin/products/domain/tlds
Products/GetDomainTlds admin sayfalı

Kurulumdaki alan adı uzantılarını döndürür.

Sorgu parametreleri 3
searchstringUzantıda arar.
pageintVarsayılan 1.
limitintVarsayılan 25, en çok 100.
Dönen alanlar data[] — 7
idintUzantı kaydının kimliği.
extensionstringUzantının kendisi. Diğer uçlarda adres parçası budur, kimlik değil.
statusstringactive ya da inactive.
rankintGörüntülenme sırası.
modulestringBağlı tescil modülü. Bağlı değilse none; o hâlde kayıt otomatik yapılamaz.
auto_pricingboolOtomatik fiyatlama açık mı.
featuresobjectUzantının desteklediği işlemler.
dns_manageboolMüşteri DNS kayıtlarını yönetebilir.
forwardingboolAlan adı yönlendirmesi açık.
whois_privacyboolKayıt sahibi bilgisi gizlenebilir.
epp_codeboolTransfer kodu alınabilir.
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 -G 'https://panel.ornek.com/api/v1/admin/products/domain/tlds' \
  -H "Authorization: Bearer $API_KEY" \
  -d limit=100
const url = new URL('https://panel.ornek.com/api/v1/admin/products/domain/tlds');
url.searchParams.set('limit', '100');

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

$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);
$response = Api::Products()->GetDomainTlds([], ['limit' => 100]);

Uzantı Detayı

get/api/v1/admin/products/domain/tlds/{tld}
Products/GetDomainTld admin uzantıyla adreslenir

Tek bir uzantıyı maliyetleri ve tüm fiyat tablosuyla döndürür.

Dönen alanlar data — 13
idintUzantı kaydının kimliği.
extensionstringUzantının kendisi.
statusstringactive ya da inactive.
rankintGörüntülenme sırası.
modulestringBağlı tescil modülü.
auto_pricingboolOtomatik fiyatlama açık mı.
featuresobjectUzantının desteklediği işlemler.
dns_manageboolMüşteri DNS kayıtlarını yönetebilir.
forwardingboolAlan adı yönlendirmesi açık.
whois_privacyboolKayıt sahibi bilgisi gizlenebilir.
epp_codeboolTransfer kodu alınabilir.
min_yearsintEn az kayıt süresi, yıl olarak.
max_yearsintEn çok kayıt süresi, yıl olarak.
register_costfloatTescil kuruluşuna ödenen kayıt maliyeti.
renewal_costfloatTescil kuruluşuna ödenen yenileme maliyeti.
transfer_costfloatTescil kuruluşuna ödenen transfer maliyeti.
pricingobjectÜç kademeli eşleme: işlem tipi, sonra yıl, sonra para birimi kodu. En içteki nesne amount, status, promotion ve promotion_status taşır.
Hatalar 2
not_found404Uzantı bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/products/domain/tlds/com' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/products/domain/tlds/com', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/domain/tlds/com');
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()->GetDomainTld(['tld' => 'com']);

// Fiyat tablosu uc kademelidir: tip, yil, para birimi.
$oneYear = $response['data']['pricing']['register']['1']['USD']['amount'] ?? null;
Yanıt
{
  "data": {
    "id": 3,
    "extension": "com",
    "status": "active",
    "module": "Enom",
    "auto_pricing": false,
    "features": {
      "dns_manage": true,
      "forwarding": false,
      "whois_privacy": true,
      "epp_code": true
    },
    "min_years": 1,
    "max_years": 10,
    "register_cost": 8.5,
    "renewal_cost": 9,
    "transfer_cost": 8.5,
    "pricing": {
      "register": {
        "1": {
          "USD": {
            "amount": 12,
            "status": true,
            "promotion": 0,
            "promotion_status": false
          }
        }
      }
    }
  }
}

Uzantı Ekleme

post/api/v1/admin/products/domain/tlds
Products/CreateDomainTld admin 201

Yeni bir uzantı ekler. İsterseniz başlangıç fiyatlarını ve logoyu aynı istekte verirsiniz.

Gövde 7
extensionstringzorunluUzantı. Baştaki nokta atılır.
registrarstringTescil modülünün adı. Varsayılan bağlı değil.
statusstringactive ya da inactive.
display_orderintGörüntülenme sırası.
featuresobjectUzantının desteklediği işlemler.
dns_manageboolMüşteri DNS kayıtlarını yönetebilir.
forwardingboolAlan adı yönlendirmesi açık.
whois_privacyboolKayıt sahibi bilgisi gizlenebilir.
epp_codeboolTransfer kodu alınabilir.
pricingobjectPara birimi kodundan {register, transfer, renewal} nesnesine eşleme. Burada yıl kırılımı yoktur; ayrıntılı tablo fiyatlama ucundan girilir.
logostringUzantı logosu. base64 veri adresi ya da indirilebilir bir bağlantı.
Dönen alanlar data — 13
dataobjectOluşan uzantı. Detay ucuyla aynı şekildedir, ancak yeni uzantı henüz fiyat taşımaz, bu yüzden pricing boş döner.
Hatalar 4
extension_required422extension boş.
extension_exists422Bu uzantı zaten kayıtlı.
create_failed422Ekleme başarısız oldu.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/products/domain/tlds' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"extension":"com","registrar":"Enom","status":"active","features":{"dns_manage":true,"whois_privacy":true},"pricing":{"USD":{"register":12,"transfer":12,"renewal":14}}}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/domain/tlds', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    extension: 'com',
    registrar: 'Enom',
    status: 'active',
    features: { dns_manage: true, whois_privacy: true },
    pricing: { USD: { register: 12, transfer: 12, renewal: 14 } },
  }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/domain/tlds');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'extension' => 'com',
        'registrar' => 'Enom',
        'status'    => 'active',
        'features'  => ['dns_manage' => true, 'whois_privacy' => true],
        'pricing'   => ['USD' => ['register' => 12, 'transfer' => 12, 'renewal' => 14]],
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Buradaki fiyat tek yillik baslangictir; yil kirilimi icin fiyatlama ucunu kullanin.
$response = Api::Products()->CreateDomainTld([
    'extension' => 'com',
    'registrar' => 'Enom',
    'pricing'   => ['USD' => ['register' => 12, 'renewal' => 14]],
]);

Uzantıyı Silme

delete/api/v1/admin/products/domain/tlds/{tld}
Products/DeleteDomainTld admin fiyatlar da gider

Uzantıyı ve fiyatlarını siler.

Dönen alanlar data — 2
deletedboolSilme başarılı mı.
extensionstringSilinen uzantı.
Hatalar 3
not_found404Uzantı bulunamadı.
blocked_by_gate422gate:domain.tld_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/domain/tlds/com' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/domain/tlds/com', {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/domain/tlds/com');
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()->DeleteDomainTld(['tld' => 'com']);

Toplu İşlem

post/api/v1/admin/products/domain/tlds/bulk
Products/BulkDomainTlds admin iki farklı gövde

Birden çok uzantıyı açar, kapatır, siler ya da ayarlarını değiştirir.

Gövde 3
actionstringzorunluİşlem: enable, disable, delete ya da change.
extensionsstring[]Etkilenecek uzantılar. İlk üç işlemde gerekir.
changesobject[]Uzantı başına değişiklik listesi. Her eleman extension ve değiştirilecek alanları taşır: özellikler, modül, durum, sıra. Yalnız change işleminde.
Dönen alanlar data — 2
actionstringUygulanan işlem.
appliedstring[]İşlemin gerçekten uygulandığı uzantılar.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/products/domain/tlds/bulk' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"action":"disable","extensions":["net","org"]}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/domain/tlds/bulk', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ action: 'disable', extensions: ['net', 'org'] }),
});

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

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// 'change' islemi uzantilar degil degisiklikler listesi ister.
$response = Api::Products()->BulkDomainTlds([
    'action'  => 'change',
    'changes' => [
        ['extension' => 'net', 'whois_privacy' => true],
        ['extension' => 'org', 'status' => 'inactive'],
    ],
]);

Fiyatlamayı Ayarlama

put/api/v1/admin/products/domain/tlds/{tld}/pricing
Products/SetDomainTldPricing admin üç kademeli tablo

Uzantının kayıt, transfer ve yenileme fiyatlarını yıl ve para birimi kırılımıyla yazar.

Gövde 2
auto_pricingboolOtomatik fiyatlamayı açar ya da kapatır.
pricingobjectzorunluÜç kademeli eşleme: işlem tipi (register, transfer, renewal), sonra yıl, sonra para birimi kodu. En içteki nesne status, fee, promotion_status ve promotion taşır.
Dönen alanlar data — 13
dataobjectGüncel uzantı. Detay ucuyla aynı şekildedir: fiyatlar tip, yıl, para birimi sırasıyla iç içe döner, bu yüzden gönderdiğiniz şeklin korunduğunu varsaymak yerine pricing eşlemesinin tamamını okuyun.
Hatalar 3
not_found404Uzantı bulunamadı.
update_failed422Fiyatlama kaydedilemedi.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PUT 'https://panel.ornek.com/api/v1/admin/products/domain/tlds/com/pricing' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"auto_pricing":false,"pricing":{"register":{"1":{"USD":{"status":true,"fee":12,"promotion_status":false,"promotion":0}}}}}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/domain/tlds/com/pricing', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    auto_pricing: false,
    pricing: {
      register: {
        1: { USD: { status: true, fee: 12, promotion_status: false, promotion: 0 } },
      },
    },
  }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/domain/tlds/com/pricing');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'auto_pricing' => false,
        'pricing'      => [
            'register' => [
                1 => ['USD' => ['status' => true, 'fee' => 12]],
            ],
        ],
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Okurken alan adi 'amount', yazarken 'fee' — ikisi ayni degeri tasir.
$current = Api::Products()->GetDomainTld(['tld' => 'com'])['data']['pricing'];
$amount  = $current['register']['1']['USD']['amount'];

Api::Products()->SetDomainTldPricing([
    'tld'     => 'com',
    'pricing' => [
        'register' => [1 => ['USD' => ['status' => true, 'fee' => $amount + 1]]],
    ],
]);

Belge Seti Olan Uzantılar

get/api/v1/admin/products/domain/docs
Products/GetDomainDocsList admin

Kayıt sırasında belge isteyen uzantıları döndürür.

Sorgu parametreleri 1
searchstringUzantıda arar.
Dönen alanlar data[] — 1
tldstringUzantının kendisi.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/products/domain/docs' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/products/domain/docs', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/domain/docs');
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()->GetDomainDocsList();

Belge Setini Okuma

get/api/v1/admin/products/domain/tlds/{tld}/docs
Products/GetDomainTldDocs admin

Bir uzantının kayıt sırasında istediği belgeleri döndürür.

Dönen alanlar data — 3
tldstringUzantının kendisi.
descriptionobjectDil kodundan açıklamaya eşleme. Müşteriye belge setinin başında gösterilir.
docsobject[]İstenen belgeler.
idintBelge kimliği.
typestringtext, file ya da select.
sortnumintSıra numarası.
statusstringactive ya da inactive.
namesobjectDil kodundan belge adına eşleme.
optionsarraySeçim tipinde sunulan değerler.
Hatalar 2
not_found404Uzantı bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/products/domain/tlds/us/docs' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/products/domain/tlds/us/docs', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/domain/tlds/us/docs');
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()->GetDomainTldDocs(['tld' => 'us']);

Belge Setini Yazma

put/api/v1/admin/products/domain/tlds/{tld}/docs
Products/SetDomainTldDocs admin tam değiştirme

Belge setini yazar. Gönderdiğiniz set yeni gerçektir; içinde olmayan belge silinir.

Gövde 2
descriptionobjectDil kodundan açıklamaya eşleme.
docsobjectzorunluBelge anahtarından belge nesnesine eşleme. Her belge tip, dil başına ad ve tipe göre ek kurallar taşır: izinli uzantılar, en büyük boyut, seçim değerleri. Yeni belgeye kendi uydurduğunuz bir anahtar verin; mevcut belgede kaydın kimliğini kullanın.
Dönen alanlar data — 3
dataobjectGüncel belge seti. Getirme ucuyla aynı şekildedir, yani uydurduğunuz anahtarlar kayıt kimliği olarak döner.
Hatalar 3
not_found404Uzantı bulunamadı.
update_failed422Set kaydedilemedi. Belge adı boş, uzantı yinelenmiş ya da değişiklik yok olabilir.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PUT 'https://panel.ornek.com/api/v1/admin/products/domain/tlds/us/docs' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"description":{"en":"Provide a valid ID."},"docs":{"n1":{"type":"text","name":{"en":"Registrant ID"}}}}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/domain/tlds/us/docs', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    description: { en: 'Provide a valid ID.' },
    docs: {
      n1: { type: 'text', name: { en: 'Registrant ID' } },
    },
  }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/domain/tlds/us/docs');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'description' => ['en' => 'Provide a valid ID.'],
        'docs'        => [
            'n1' => ['type' => 'text', 'name' => ['en' => 'Registrant ID']],
        ],
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Bir belge EKLEMEK icin mevcut seti de gonderin, yoksa oncekiler silinir.
$existing = Api::Products()->GetDomainTldDocs(['tld' => 'us'])['data']['docs'];

$docs = [];
foreach ($existing as $doc) $docs[$doc['id']] = ['type' => $doc['type'], 'name' => $doc['names']];
$docs['n1'] = ['type' => 'file', 'name' => ['en' => 'Passport scan']];

Api::Products()->SetDomainTldDocs(['tld' => 'us', 'docs' => $docs]);

Belge Setini Silme

delete/api/v1/admin/products/domain/tlds/{tld}/docs
Products/DeleteDomainTldDocs admin

Uzantının belge setinin tamamını siler.

Dönen alanlar data — 2
deletedboolSilme başarılı mı.
tldstringUzantının kendisi.
Hatalar 2
not_found404Bu uzantı için belge seti yok.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/products/domain/tlds/us/docs' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/domain/tlds/us/docs', {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/domain/tlds/us/docs');
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()->DeleteDomainTldDocs(['tld' => 'us']);

Tuzaklar

Okurken amount, yazarken fee

Fiyat tablosunda aynı değer okurken amount, yazarken fee adıyla geçer. Detaydan okuduğunuz tabloyu olduğu gibi geri göndermek bu yüzden çalışmaz; alan adını dönüştürmeniz gerekir.

Belge seti tam olarak değiştirilir

Belge yazma ucu birleştirme yapmaz. Bir belge eklemek için mevcut setin tamamını da göndermeniz gerekir; göndermezseniz eskiler silinir ve o uzantıda kayıt için istenen belgeler kaybolur. Yeni belgeye kendi uydurduğunuz bir anahtar verin, mevcut belgede kaydın kimliğini kullanın.

Toplu uç iki farklı gövde bekler

Açma, kapatma ve silme için uzantı listesi gönderilir; ayar değiştirme için uzantı başına değişiklik listesi. Yanlış alanı göndermek işlemi sessizce boş bırakır: dönen liste boş gelir ama hata da alınmaz. Uygulananları döndüğü listeden doğrulayın.

Modülsüz uzantı elle yürür

Tescil modülü bağlı değilse uzantı satılabilir ama kayıt, transfer ve yenileme otomatik çalışmaz; bu işleri operatör elle yapar. Uzantıyı açmadan önce modülün bağlı olduğunu doğrulayı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.