Kara Liste ve Mükerrer Hesap

1.6k görüntülenme Markdown

Bir müşteriyi kara listeye alan, kaydı düzenleyen, listeden çıkaran ve onunla aynı kişi olabilecek hesapları bulan beş uç.

Genel Bakış

Bu uçlar iki işi birlikte yapar: bir müşteriyi kara listeye almak ve onunla aynı kişi olabilecek başka hesapları bulmak. İkisi aynı kararın parçasıdır — kara listeye alınan biri genellikle ikinci bir hesapla geri döner.

Kara liste tek başına bir işaret değildir: hangi kısıtlamaların açılacağını siz seçersiniz. Hiçbirini açmazsanız müşteri yalnız işaretlenmiş olur.

Referans

Kara Liste Durumu

get/api/v1/admin/clients/{id}/blacklist
Clients/GetClientBlacklist admin

Müşterinin kara listede olup olmadığını, nedenini ve hangi kısıtlamaların açık olduğunu döndürür.

Dönen alanlar data — 6
blacklistedboolKara listede mi.
reasonstringNeden. Değerler: payment_fraud · chargeback · abuse · spam · tos_violation · false_info · other
notesstringSerbest not.
restrictionsobjectAçık kısıtlamalar.
block_new_ordersboolYeni sipariş vermeyi engeller.
block_renewalsboolYenilemeleri engeller.
block_ticketsboolMüşterinin destek talebi açması engelli mi. Yürürlükteki engeli gösterir: hesabın kendi talep engeli açıkken de açıktır.
suspend_servicesboolHizmetleri askıya alır.
blacklisted_bystringKara listeye alan yöneticinin adı.
blacklisted_atstringKara listeye alınma zamanı.
Hatalar 2
not_found404Müşteri bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/clients/42/blacklist' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/blacklist', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/blacklist');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Clients()->GetClientBlacklist(['id' => 42]);

if ($response['data']['blacklisted'] ?? false) {
    $reason = $response['data']['reason'];
}

Kara Listeye Alma

post/api/v1/admin/clients/{id}/blacklist
Clients/CreateClientBlacklist admin hizmetleri askıya alabilir

Müşteriyi kara listeye alır ve seçtiğiniz kısıtlamaları uygular.

Gövde 3
reasonstringzorunluNeden. Değerler: payment_fraud · chargeback · abuse · spam · tos_violation · false_info · other
notesstringSerbest not. Kararı açıklamak için.
restrictionsobjectHangi kısıtlamaların açılacağı. Gönderilmezse hiçbiri açılmaz; müşteri yalnız işaretlenir.
block_new_ordersboolYeni sipariş vermeyi engeller.
block_renewalsboolYenilemeleri engeller.
block_ticketsboolDestek talebi açmayı engeller. Gönderilmezse hesabın mevcut engeli korunur. true engeli açar, açıkça gönderilen false kapatır.
suspend_servicesboolHizmetleri askıya alır.
Dönen alanlar data
dataobjectOluşan kara liste kaydı, 201 ile döner. Yukarıdaki durum ucuyla aynı şekilde gelir.
Hatalar 4
not_found404Müşteri bulunamadı.
reason_invalid422Neden, izin verilen değerlerden biri değil.
blocked_by_gate422Bir kanca (gate:user.blacklist_add) işlemi veto etti.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/clients/42/blacklist' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"reason":"chargeback","notes":"Iki ters ibraz","restrictions":{"block_new_orders":true,"suspend_services":true}}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/blacklist', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({"reason":"chargeback","notes":"Iki ters ibraz","restrictions":{"block_new_orders":true,"suspend_services":true}}),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/blacklist');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'reason'       => 'chargeback',
        'notes'        => 'Iki ters ibraz',
        'restrictions' => [
            'block_new_orders' => true,
            'suspend_services' => true,
        ],
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Clients()->CreateClientBlacklist([
    'id'           => 42,
    'reason'       => 'chargeback',
    'notes'        => 'Iki ters ibraz',
    'restrictions' => [
        'block_new_orders' => true,
        'suspend_services' => true,
    ],
]);

Kara Liste Kaydını Düzenleme

put/api/v1/admin/clients/{id}/blacklist
Clients/UpdateClientBlacklist admin hizmetleri askıya alabilir

Mevcut kaydın nedenini, notunu ve kısıtlamalarını değiştirir. Müşteriyi kara listeye alan kişi ve tarih olduğu gibi kalır.

Gövde 4
reasonstringzorunluYeni neden. Değerler kara listeye alırkenkiyle aynıdır.
notesstringYeni not. Kayıtlı notun yerine geçer; silmek için boş metin gönderin.
restrictionsobjectKısıtlamaların tamamı; alanlar kara listeye alırkenki dört alandır. Göndermediğiniz alan kapatılır, block_tickets dahil.
reactivate_servicesboolYalnız suspend_services açıktan kapalıya geçerken okunur: kara liste yüzünden askıya alınan hizmetleri yeniden açar.
Dönen alanlar data
dataobjectGüncellenen kayıt, 200 ile döner. Yukarıdaki durum ucuyla aynı biçimdedir.
Hatalar 5
not_found404Müşteri yok.
not_blacklisted422Müşteri kara listede değil.
reason_invalid422Neden izin verilen değerlerden biri değil.
blocked_by_gate422gate:user.blacklist_update kancasını dinleyen bir kod işlemi engelledi.
insufficient_scope403Anahtarın gerekli izni yok.
İstek
curl -X PUT 'https://panel.example.com/api/v1/admin/clients/42/blacklist' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"reason":"tos_violation","notes":"Reviewed with legal","restrictions":{"block_new_orders":true,"block_tickets":true}}'
const res = await fetch('https://panel.example.com/api/v1/admin/clients/42/blacklist', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({"reason":"tos_violation","notes":"Reviewed with legal","restrictions":{"block_new_orders":true,"block_tickets":true}}),
});

const body = await res.json();
$ch = curl_init('https://panel.example.com/api/v1/admin/clients/42/blacklist');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'reason'       => 'tos_violation',
        'notes'        => 'Reviewed with legal',
        'restrictions' => [
            'block_new_orders' => true,
            'block_tickets'    => true,
        ],
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$current = Api::Clients()->GetClientBlacklist(['id' => 42]);

$response = Api::Clients()->UpdateClientBlacklist([
    'id'           => 42,
    'reason'       => 'tos_violation',
    'notes'        => 'Reviewed with legal',
    'restrictions' => $current['data']['restrictions'] ?? [],
]);

Kara Listeden Çıkarma

delete/api/v1/admin/clients/{id}/blacklist
Clients/DeleteClientBlacklist admin

Kara liste kaydını kaldırır ve müşterinin destek talebi engelini de kapatır. Askıya alınan hizmetleri geri açmak ayrı bir tercihtir.

Gövde 1
reactivate_servicesboolKara liste yüzünden askıya alınan hizmetleri yeniden açar. Gönderilmezse hizmetler askıda kalır.
Dönen alanlar data
removedboolÇıkarma başarılı mı.
Hatalar 3
not_found404Müşteri bulunamadı.
not_blacklisted422Müşteri kara listede değil.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/clients/42/blacklist' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"reactivate_services":true}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/blacklist', {
  method: 'DELETE',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ reactivate_services: true }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/blacklist');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'DELETE',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['reactivate_services' => true]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Clients()->DeleteClientBlacklist([
    'id'                  => 42,
    'reactivate_services' => true,
]);

Mükerrer Hesap Taraması

get/api/v1/admin/clients/{id}/duplicates
Clients/GetClientDuplicates admin IP · ad · şirket

Müşteriyle aynı IP'yi, adı ya da şirket adını paylaşan diğer hesapları döndürür.

Dönen alanlar data — 2
currentobjectİncelenen müşterinin özeti: id, full_name, company_name, ip, created_at.
matchesobject[]Eşleşen hesaplar.
idintEşleşen müşterinin kimliği.
full_namestringAd soyad.
company_namestringŞirket adı.
ipstringHesabın kayıtlı IP'si; müşterinin her kendi girişinde güncellenir.
created_atstring | nullKayıt tarihi.
days_apartintİki hesabın kayıt tarihleri arasındaki gün farkı. Mutlak değer.
match_typesstring[]Neyin eşleştiği: ip, name, company.
matched_ipsstring[]ip eşleşmesini üreten adresler. Hesap yalnız ad ya da şirket adıyla eşleştiyse boş döner.
Hatalar 2
not_found404Müşteri bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/clients/42/duplicates' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/duplicates', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();

const sameIp = body.data.matches.filter((m) => m.match_types.includes('ip'));
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/duplicates');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Clients()->GetClientDuplicates(['id' => 42]);

foreach ($response['data']['matches'] as $match) {
    // Aynı IP ve birkaç gün arayla açılmış hesap, ada göre eşleşmeden daha güçlü bir işarettir.
    if (in_array('ip', $match['match_types'], true) && $match['days_apart'] < 7) {
        $suspects[] = $match['id'];
    }
}
Yanıt
{
  "data": {
    "current": {
      "id": 42,
      "full_name": "Ayse Yilmaz",
      "company_name": "",
      "ip": "203.0.113.10",
      "created_at": "2026-01-01 10:00:00"
    },
    "matches": [
      {
        "id": 57,
        "full_name": "A. Yilmaz",
        "company_name": "",
        "ip": "203.0.113.10",
        "created_at": "2026-01-03 09:20:00",
        "days_apart": 2,
        "match_types": ["ip", "name"],
        "matched_ips": ["203.0.113.10"]
      }
    ]
  }
}

Tuzaklar

Çıkarmak hizmetleri geri açmaz

Kara listeden çıkarmak askıya alınmış hizmetleri kendiliğinden açmaz. Açılmasını istiyorsanız reactivate_services gönderin; yoksa müşteri kara listeden çıkar ama hizmetleri askıda kalır.

Destek talebi engeli iki anahtarlı tek ayardır

Buradaki block_tickets ile destek ayarları ucundaki ticket_blocked birlikte yazılır. Kaydı kaldırmak ikisini de kapatır; block_tickets gönderilmeyen bir düzenleme de öyle.

Listeden çıkardığınız müşteride engelin kalmasını istiyorsanız PATCH /clients/{id}/support-settings ile yeniden açın. Kara listede olmayan müşteriye konan engel kendi başına kalır.

Eşleşme suç değildir

Aynı IP bir ev ya da ofis olabilir, aynı ad bir tesadüf. match_types ile days_apart birlikte okunur: aynı IP'den birkaç gün arayla açılmış iki hesap, yalnız ada göre eşleşen iki hesaptan çok daha güçlü bir işarettir.

Personel adresleri kanıt sayılmaz

IP kanıtı olarak kayıtlı IP ve müşterinin kendi giriş kayıtları kullanılır. Personelin çalıştığı adresler, Müşteri Paneline Giriş Yap ile açılan oturumlar dahil, dışarıda kalır. Eşleşmeyi hangi adresin ürettiğini matched_ips gösterir.

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.