Alt Kullanıcılar

10 görüntülenme Markdown

Bir müşterinin paneline sınırlı izinlerle giren alt hesapları yöneten beş uç.

Genel Bakış

Alt kullanıcı, bir müşterinin paneline sınırlı izinlerle giren ikinci bir kişidir: muhasebeci yalnız faturaları, teknik ekip yalnız hizmetleri görür.

İzin kümesi sabittir ve on değerden oluşur. Hesap sahibinin profili, fatura iletişim kişileri ve e-posta geçmişi devredilemez; bunlar yalnız hesabın kendisine açıktır.

Referans

Alt Kullanıcıları Listeleme

get/api/v1/admin/clients/{id}/subusers
Clients/GetClientSubusers admin

Müşterinin tüm alt kullanıcılarını döndürür.

Dönen alanlar data[] — 12
idintAlt kullanıcı kimliği.
emailstringE-posta adresi.
labelstring | nullEtiket. Departman ya da rol adı için.
statusstringpending davet bekliyor, active etkin, inactive pasif.
permissionsarrayVerilen izinler.
view_servicesizinHizmetleri görür.
view_passwordsizinHizmet şifrelerini görür.
allow_ssoizinHizmet paneline tek tıkla girer.
view_domainsizinAlan adlarını görür.
manage_domainsizinAlan adlarını yönetir.
view_invoicesizinFaturaları görür.
view_ticketsizinDestek taleplerini görür.
view_affiliateizinSatış ortaklığı sayfasını görür.
view_resellerizinBayi sayfasını görür.
new_ordersizinYeni sipariş verir.
email_notificationsintE-posta bildirim tercihi. Bit maskesi.
sms_notificationsintSMS bildirim tercihi. Bit maskesi.
linked_user_idintBağlandığı gerçek müşteri hesabının kimliği. Bağlı değilse 0.
linked_user_namestring | nullBağlı hesabın adı.
invited_atstring | nullDavetin gönderildiği zaman.
accepted_atstring | nullDavetin kabul edildiği zaman.
created_atstring | nullKaydın oluşturulma zamanı.
Hatalar 2
not_found404Müşteri ya da alt kullanıcı bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/clients/42/subusers' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/subusers', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/subusers');
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()->GetClientSubusers(['id' => 42]);
Yanıt
{
  "data": [
    {
      "id": 4,
      "email": "[email protected]",
      "label": "Accounting",
      "status": "active",
      "permissions": ["view_invoices", "view_services"],
      "email_notifications": 0,
      "sms_notifications": 0,
      "linked_user_id": 31,
      "linked_user_name": "John Doe",
      "invited_at": "2026-06-01 10:00:00",
      "accepted_at": "2026-06-02 09:12:00",
      "created_at": "2026-06-01 10:00:00"
    }
  ]
}

Alt Kullanıcı Ekleme

post/api/v1/admin/clients/{id}/subusers
Clients/CreateClientSubuser admin 201

Müşteriye alt kullanıcı ekler. Kayıt pending durumunda başlar.

Gövde 6
emailstringzorunluE-posta adresi. Hesap sahibinden farklı ve daha önce eklenmemiş olmalı.
labelstringEtiket.
permissionsarrayVerilecek izinler. Tanınmayan anahtar sessizce atılır.
view_servicesizinHizmetleri görür.
view_passwordsizinHizmet şifrelerini görür.
allow_ssoizinHizmet paneline tek tıkla girer.
view_domainsizinAlan adlarını görür.
manage_domainsizinAlan adlarını yönetir.
view_invoicesizinFaturaları görür.
view_ticketsizinDestek taleplerini görür.
view_affiliateizinSatış ortaklığı sayfasını görür.
view_resellerizinBayi sayfasını görür.
new_ordersizinYeni sipariş verir.
email_notificationsintE-posta bildirim tercihi. Varsayılan 0.
sms_notificationsintSMS bildirim tercihi. Varsayılan 0.
send_inviteboolDavet e-postasını gönderir. Varsayılan açık.
Dönen alanlar 201 — data
dataobjectOluşan alt kullanıcı. Listeleme ucuyla aynı şekildedir.
Hatalar 6
not_found404Müşteri ya da alt kullanıcı bulunamadı.
email_invalid422E-posta geçerli değil.
email_is_owner422E-posta hesap sahibininkiyle aynı.
email_exists422Bu e-postayla bir alt kullanıcı zaten var.
subuser_add_failed500Ekleme başarısız oldu.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/clients/42/subusers' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"email":"[email protected]","label":"Accounting","permissions":["view_invoices","view_services"]}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/subusers', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    email: '[email protected]',
    label: 'Accounting',
    permissions: ['view_invoices', 'view_services'],
    send_invite: true,
  }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/subusers');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'email'       => '[email protected]',
        'label'       => 'Accounting',
        'permissions' => ['view_invoices', 'view_services'],
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Clients()->CreateClientSubuser([
    'id'          => 42,
    'email'       => '[email protected]',
    'permissions' => ['view_invoices', 'view_services'],
]);

// Yazilan izinleri yanittan okuyun: taninmayan anahtar sessizce dusurulur.
$granted = $response['data']['permissions'];

Alt Kullanıcıyı Güncelleme

patch/api/v1/admin/clients/{id}/subusers/{subuser_id}
Clients/UpdateClientSubuser admin hesaba bağlayabilir

Gönderdiğiniz alanları günceller, geri kalanına dokunmaz.

Gövde 5
labelstringEtiket.
statusstringYeni durum. Tanınmayan değer mevcut durumu korur.
permissionsarrayİzin listesi. Gönderirseniz liste bütün olarak yazılır.
view_servicesizinHizmetleri görür.
view_passwordsizinHizmet şifrelerini görür.
allow_ssoizinHizmet paneline tek tıkla girer.
view_domainsizinAlan adlarını görür.
manage_domainsizinAlan adlarını yönetir.
view_invoicesizinFaturaları görür.
view_ticketsizinDestek taleplerini görür.
view_affiliateizinSatış ortaklığı sayfasını görür.
view_resellerizinBayi sayfasını görür.
new_ordersizinYeni sipariş verir.
email_notificationsintE-posta bildirim tercihi.
sms_notificationsintSMS bildirim tercihi.
Dönen alanlar data
dataobjectGüncel alt kullanıcı. Listeleme ucuyla aynı şekildedir.
Hatalar 2
not_found404Müşteri ya da alt kullanıcı bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PATCH 'https://panel.ornek.com/api/v1/admin/clients/42/subusers/5' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"status":"active"}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/subusers/5', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ status: 'active' }),
});

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

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Clients()->UpdateClientSubuser([
    'id'         => 42,
    'subuser_id' => 5,
    'status'     => 'active',
]);

// Ilk kez aktif yapmak, e-posta eslesiyorsa gercek bir hesaba baglar.
$linkedTo = $response['data']['linked_user_id'];

Daveti Yeniden Gönderme

post/api/v1/admin/clients/{id}/subusers/{subuser_id}/resend-invite
Clients/ResendClientSubuserInvite admin yalnız pending

Daveti bekleyen bir alt kullanıcıya daveti tekrar gönderir.

Gövde
Gövde gerekmez, boş gönderin. Davet, kayıtta duran adrese gider; buradan başka bir adrese yönlendirilemez.
Dönen alanlar data — 2
resentboolDavet yeniden gönderildi mi.
idintAlt kullanıcı kimliği.
Hatalar 3
not_found404Müşteri ya da alt kullanıcı bulunamadı.
not_pending422Alt kullanıcı davet beklemiyor. Etkin ya da pasif bir kayda davet gönderilemez.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/clients/42/subusers/5/resend-invite' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/subusers/5/resend-invite', {
  method: 'POST',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/subusers/5/resend-invite');
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);
$response = Api::Clients()->ResendClientSubuserInvite([
    'id'         => 42,
    'subuser_id' => 5,
]);

Alt Kullanıcıyı Silme

delete/api/v1/admin/clients/{id}/subusers/{subuser_id}
Clients/DeleteClientSubuser admin

Alt kullanıcıyı siler. Bağlı olduğu gerçek müşteri hesabı bundan etkilenmez.

Dönen alanlar data — 2
deletedboolSilme başarılı mı.
idintSilinen alt kullanıcının kimliği.
Hatalar 2
not_found404Müşteri ya da alt kullanıcı bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/clients/42/subusers/5' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/subusers/5', {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/subusers/5');
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::Clients()->DeleteClientSubuser([
    'id'         => 42,
    'subuser_id' => 5,
]);

Tuzaklar

Tanınmayan izin sessizce düşer

İzin listesi kapalı bir kümedir. Onda olmayan bir anahtar gönderirseniz hata almazsınız; anahtar atılır ve kayıt eksik izinle yazılır. Yazma isteğinden dönen permissions alanını okuyup ne verildiğini doğrulayın.

Aktif yapmak hesap bağlayabilir

Bir alt kullanıcı ilk kez active yapıldığında, e-postası mevcut bir müşteri hesabıyla eşleşiyorsa o hesaba bağlanır. Bu, bir kişinin kendi hesabıyla girip başka bir müşterinin paneline geçebilmesi demektir; durumu değiştirmeden önce e-postanın kime ait olduğunu bilin.

Davet yalnız bekleyene gider

Yeniden gönderme ucu yalnız pending durumundaki kayıtlarda çalışır. Etkin bir alt kullanıcıya davet göndermek istiyorsanız önce durumu geri çevirmeniz gerekir.

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.