Sahiplik Transferi
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
Hizmet devir taleplerini döndürür. Bekleyenler listenin başında gelir.
pending ya da approved.pending bekliyor, approved onaylanmış.curl -G 'https://panel.ornek.com/api/v1/admin/services/transfer-requests' \
-H "Authorization: Bearer $API_KEY" \
-d status=pendingconst 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']);{
"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ı
Tek bir devir talebini, onaylandıysa onay bilgisiyle birlikte döndürür.
pending bekliyor, approved onaylanmış.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
Hizmetin sahipliğini hedef müşteriye taşır ve talebi onaylanmış olarak işaretler.
gate:service.transfer_approve kancası işlemi veto etti. Kendi eklentiniz devri engelliyor olabilir.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'];{
"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
Talep kaydını siler. Hizmetin sahipliğine dokunmaz.
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
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.
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.
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.
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.
İlgili Makaleler
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.