Sahiplik Transferi

1.6k görüntülenme Markdown

Bir hizmetin sahibini başka bir müşteriye taşıyan devir taleplerini yöneten dört uç.

Genel Bakış

Bir müşteri hizmetini başka bir müşteriye devredebilir. Bu dört uç o talepleri okur ve karara bağlar; onay, hizmetin sahibini hedef müşteriye taşır.

Adreslerde geçen kimlik talebin kimliğidir, hizmetin değil. Talepler olay kayıtlarında tutulduğu için hizmetten bağımsız bir numara taşırlar.

Bu lisans transferi değildir. Lisansın bir kurulumdan diğerine taşınması ayrı bir sistemdir ve kendi uçları vardır.

Referans

Talepleri Listeleme

get/api/v1/admin/services/transfer-requests
Services/GetTransferRequests admin sayfalı

Hizmet devir taleplerini döndürür. Bekleyenler listenin başında gelir.

Sorgu parametreleri 7
searchstringİki taraftaki müşterinin adında, e-postasında, firmasında ve hizmet adında arar.
statusstringpending ya da approved.
from_idintDevreden müşteriye göre süzer.
to_idintDevralan müşteriye göre süzer.
service_idintHizmete göre süzer.
pageintVarsayılan 1.
limitintVarsayılan 25, en çok 100.
Dönen alanlar data[] — 8
idintTalebin kimliği. Bu bir olay kimliğidir, hizmet kimliği değildir; diğer uçlar bunu bekler.
service_idintDevredilen hizmetin kimliği.
statusstringpending bekliyor, approved onaylanmış.
reasonstringTalebin gerekçesi.
created_atstringTalebin açıldığı zaman.
serviceobjectDevredilen hizmetin özeti.
idintHizmet kimliği.
namestringHizmet adı.
typestringHizmet tipi.
fromobjectDevreden müşteri.
idintMüşteri kimliği.
full_namestringAd ve soyad.
company_namestringFirma adı.
emailstringE-posta adresi.
toobjectDevralan müşteri.
idintMüşteri kimliği.
full_namestringAd ve soyad.
company_namestringFirma adı.
emailstringE-posta adresi.
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/services/transfer-requests' \
  -H "Authorization: Bearer $API_KEY" \
  -d status=pending
const url = new URL('https://panel.ornek.com/api/v1/admin/services/transfer-requests');
url.searchParams.set('status', 'pending');

const res  = await fetch(url, { headers: { Authorization: `Bearer ${apiKey}` } });
const body = await res.json();
$url = 'https://panel.ornek.com/api/v1/admin/services/transfer-requests?' . http_build_query(['status' => 'pending']);

$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::Services()->GetTransferRequests([], ['status' => 'pending']);
Yanıt
{
  "data": [
    {
      "id": 7382,
      "service_id": 558,
      "status": "pending",
      "reason": "Sold to another account",
      "created_at": "2026-06-21 18:00:00",
      "service": { "id": 558, "name": "example.com", "type": "hosting" },
      "from": {
        "id": 88,
        "full_name": "John Doe",
        "company_name": "",
        "email": "[email protected]"
      },
      "to": {
        "id": 89,
        "full_name": "Jane Doe",
        "company_name": "",
        "email": "[email protected]"
      }
    }
  ],
  "meta": { "total": 1, "page": 1, "limit": 25, "next_page": 0 }
}

Talep Detayı

get/api/v1/admin/services/transfer-requests/{eid}
Services/GetTransferRequest admin talep kimliği

Tek bir devir talebini, onaylandıysa onay bilgisiyle birlikte döndürür.

Dönen alanlar data — 9
idintTalebin kimliği. Bu bir olay kimliğidir, hizmet kimliği değildir; diğer uçlar bunu bekler.
service_idintDevredilen hizmetin kimliği.
statusstringpending bekliyor, approved onaylanmış.
reasonstringTalebin gerekçesi.
created_atstringTalebin açıldığı zaman.
serviceobjectDevredilen hizmetin özeti.
idintHizmet kimliği.
namestringHizmet adı.
typestringHizmet tipi.
fromobjectDevreden müşteri.
idintMüşteri kimliği.
full_namestringAd ve soyad.
company_namestringFirma adı.
emailstringE-posta adresi.
toobjectDevralan müşteri.
idintMüşteri kimliği.
full_namestringAd ve soyad.
company_namestringFirma adı.
emailstringE-posta adresi.
approvedobject | nullOnay bilgisi: onaylayanın kimliği, adı ve onay zamanı. Talep beklerken boş döner.
Hatalar 2
not_found404Transfer talebi bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/services/transfer-requests/7382' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/services/transfer-requests/7382', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/transfer-requests/7382');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Adresteki kimlik TALEBIN kimligidir; hizmet kimligini vermek 404 dondurur.
$response = Api::Services()->GetTransferRequest(['eid' => 7382]);

Talebi Onaylama

post/api/v1/admin/services/transfer-requests/{eid}/approve
Services/ApproveTransferRequest admin geri alınamaz

Hizmetin sahipliğini hedef müşteriye taşır ve talebi onaylanmış olarak işaretler.

Gövde —
——Gövde gerekmez, boş gönderin. Hedef müşteri saklı talepte adı geçen müşteridir ve onay anında değiştirilemez.
Dönen alanlar data — 5
statusstringİşlem sonrası durum.
idintTalebin kimliği.
service_idintDevredilen hizmetin kimliği.
old_owner_idintÖnceki sahibin kimliği.
new_owner_idintYeni sahibin kimliği.
Hatalar 6
not_found404Talep ya da hizmet bulunamadı.
not_pending422Talep zaten onaylanmış.
invalid_target422Talepte hedef müşteri yok.
target_not_found422Hedef müşteri bulunamadı.
blocked_by_gate422gate:service.transfer_approve kancası işlemi veto etti. Kendi eklentiniz devri engelliyor olabilir.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/services/transfer-requests/7382/approve' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/admin/services/transfer-requests/7382/approve', {
  method: 'POST',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/transfer-requests/7382/approve');
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);
// Onay tek yonludur: geri almanin yolu ters yonde YENI bir talep acmaktir.
$response = Api::Services()->ApproveTransferRequest(['eid' => 7382]);

$movedFrom = $response['data']['old_owner_id'];
$movedTo   = $response['data']['new_owner_id'];
Yanıt
{
  "data": {
    "status": "approved",
    "id": 7382,
    "service_id": 558,
    "old_owner_id": 88,
    "new_owner_id": 89
  }
}
{
  "error": {
    "code": "not_pending",
    "message": "Transfer request is not pending."
  }
}

Talebi Silme

delete/api/v1/admin/services/transfer-requests/{eid}
Services/DeleteTransferRequest admin

Talep kaydını siler. Hizmetin sahipliğine dokunmaz.

Dönen alanlar data — 2
deletedboolSilme başarılı mı.
idintSilinen talebin kimliği.
Hatalar 2
not_found404Transfer talebi bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/services/transfer-requests/7382' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/admin/services/transfer-requests/7382', {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/transfer-requests/7382');
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);
// Onaylanmis bir talebi silmek sahipligi GERI ALMAZ; yalniz kayit gider.
$response = Api::Services()->DeleteTransferRequest(['eid' => 7382]);

Tuzaklar

Adresteki kimlik hizmetin değil

Bu uçlar talep kimliği bekler; hizmet kimliğini vermek 404 döndürür. İkisi de sayı olduğu için hata sessizce yanlış kayda gitmez, ama karışması kolaydır: listedeki id talebin, service_id hizmetindir.

Onay geri alınamaz

Onaylanmış bir talebi tekrar onaylamak not_pending döndürür ve silmek sahipliği geri getirmez — yalnız kayıt gider. Devri geri almanın tek yolu ters yönde yeni bir talep açmaktır.

Bir kanca devri engelleyebilir

blocked_by_gate hatası isteğinizin yanlış olduğunu değil, kurulumdaki bir eklentinin devri reddettiğini söyler. Devredilemeyen hizmet türleri böyle tanımlanır; kendi kancanızı yazdıysanız önce oraya bakın.

Lisans transferiyle karıştırmayın

Buradaki devir hizmetin sahibini değiştirir: hizmet aynı kalır, faturası başka müşteriye çıkmaya başlar. Lisansın bir sunucudan diğerine taşınması bambaşka bir iştir ve kendi uçlarında yaşar.

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.