Sahip Olunan Hizmetler

1.6k görüntülenme Markdown

Sahip olunan hizmeti okuyan, ayarlayan, yenileyen ve iptalini isteyen on bir uç.

Genel Bakış

Hizmet, müşterinin sahip olduğu şeydir: bir barındırma paketi, bir sunucu, bir yazılım lisansı. Bu on bir uç o kaydı okur, ayarlarını değiştirir, yeniler ve iptalini ister.

Yenileme iki adımdır: bu uçlar fatura keser, ödeme fatura uçlarında yapılır. Otomatik yenileme ise hesap düzeyinde ve hizmet düzeyinde iki ayrı anahtarla yönetilir.

Bazı ürünler kullanıma göre de ücretlenir. Ölçümler açılıp kapatılabilir, ama ödenmemiş bir kullanım faturası yeniden açmayı kilitler.

Referans

Hizmetleri Listeleme

get/api/v1/client/services
Services/GetServices anahtarın sahibi

Hesabın sahip olduğu hizmetleri döndürür.

Sorgu 5
pageintKaçıncı sayfa.
limitintSayfa başına satır. En çok 100.
statusstringDurum süzgeci. Rozet gruplarını alır: bekleyen hem kurulumdakini hem işlemdekini kapsar, iptal ise tamamlananı da içerir.
typestringÜrün türü süzgeci.
searchstringHizmet adında ve bağlı alan adında arar.
Dönen alanlar data[] — 10 + meta — 4
idintHizmetin numarası.
typestringÜrün türü.
namestringHizmetin adı. Sipariş anındaki ürün adının kopyasıdır.
statusstringHam durum.
hoststringBağlı alan adı ya da sunucu adı.
product_idintSipariş edilen ürünün numarası.
auto_renewboolHizmet bazlı otomatik yenileme açık mı.
priceobjectDönemsel tutar.
cyclestringFaturalama döngüsü.
created_atstringKurulduğu gün.
due_datestringBir sonraki ödeme günü.
totalintToplam hizmet. Meta altında döner.
pageintBulunulan sayfa.
limitintSayfa boyutu.
next_pageintSonraki sayfa.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/client/services?status=active' \
  -H "Authorization: Bearer $CLIENT_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/client/services?status=active', {
  headers: { Authorization: `Bearer ${clientKey}` },
});

const { data } = await res.json();
const soon = data.filter((s) => s.due_date && s.due_date < horizon);
$ch = curl_init('https://panel.ornek.com/api/v1/client/services?status=active');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Suzgec ROZET GRUBU alir, ham durum degil: bekleyen iki ham durumu birden kapsar.
$rows = Kernel::internal('client:Services/GetServices',
    ['owner_id' => $uid, 'status' => 'pending'])['data'];

Hizmeti Okuma

get/api/v1/client/services/{id}
Services/GetService anahtarın sahibi

Hizmetin ayarlarını, erişim bilgilerini ve yenileme durumunu döndürür.

Dönen alanlar data — 16
idintHizmetin numarası.
typestringÜrün türü.
namestringHizmetin adı.
statusstringHam durum.
productobjectÜrün planı. Numara ve ad taşır.
hoststringBağlı alan adı ya da sunucu adı.
order_idintHizmeti doğuran siparişin numarası.
managedboolBir panel modülü yönetiyor mu. Doğruysa araç ve tek oturum uçları çalışır.
auto_renewboolHizmet bazlı otomatik yenileme.
auto_renew_lockedboolHesap geneli otomatik ödeme açık mı. Açıkken hizmet bazlı anahtar değiştirilemez.
billing_profile_idintAtanan fatura profili. Sıfır hesabın varsayılan adresi demektir.
priceobjectDönemsel tutar.
cyclestringFaturalama döngüsü.
accessobjectHizmete kayıtlı erişim bilgileri. Anahtarları hizmet türüne göre değişir ve boş değerler hiç gelmez. Hosting'de nameservers, hizmetin kendi ad sunucusu yoksa atandığı sunucunun NS1–NS4 değerlerini verir.
renewalobjectYenileme durumu.
availableboolYenileme faturası kesilebilir mi.
blocked_by_subscriptionboolBir abonelik yenilemeleri kendisi tahsil ediyor mu.
already_invoicedboolDönem zaten faturalanmış mı.
open_invoice_idintBağlanacak açık fatura.
cyclesarraySeçilebilecek yenileme döngüleri.
cancellationobjectAçık iptal talebi. Durum, aciliyet, gerekçe, not ve istek anını taşır.
has_metricsboolKullanıma göre ücretlenen ölçüm tanımlı mı.
Hatalar 2
not_found404Böyle bir hizmet yok ya da başka bir müşteriye ait.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/client/services/622' \
  -H "Authorization: Bearer $CLIENT_KEY"
const res = await fetch(`https://panel.ornek.com/api/v1/client/services/${id}`, {
  headers: { Authorization: `Bearer ${clientKey}` },
});

const { data } = await res.json();
if (data.renewal.available) showRenewButton(data.renewal.cycles);
$ch = curl_init('https://panel.ornek.com/api/v1/client/services/' . $id);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// ALAN ADI hizmetleri bu uctan OKUNMAZ: onlarin kendi uclari vardir, burada bulunamadi doner.
$s = Kernel::internal('client:Services/GetService', ['owner_id' => $uid, 'id' => $id])['data'];
$panel = $s['managed'];

Hizmet Tercihlerini Değiştirme

patch/api/v1/client/services/{id}
Services/UpdateService iki alan

Otomatik yenilemeyi ve fatura profilini değiştirir.

Gövde 2
auto_renewboolHizmet bazlı otomatik yenileme. Hesap geneli otomatik ödeme açıkken değiştirilemez.
billing_profile_idintFatura profilinin numarası. Sıfır hesabın varsayılanına döner.
Dönen alanlar data — 16
dataobjectGüncel hizmet. Okuma ucuyla aynı şekildedir.
Hatalar 6
not_found404Böyle bir hizmet yok ya da başka bir müşteriye ait.
nothing_to_update422Gövdede bilinen alan yok.
not_actionable422Hizmet etkin değilken otomatik yenileme gönderilmiş.
autorenew_locked422Hesap geneli otomatik ödeme açık.
no_auto_pay_source422Tahsil edilebilecek bir kaynak yokken açma denenmiş.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PATCH 'https://panel.ornek.com/api/v1/client/services/622' \
  -H "Authorization: Bearer $CLIENT_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"auto_renew":true,"billing_profile_id":3}'
const res = await fetch(`https://panel.ornek.com/api/v1/client/services/${id}`, {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${clientKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ auto_renew: true }),
});

if (res.status === 422) explainLock(await res.json());
$ch = curl_init('https://panel.ornek.com/api/v1/client/services/' . $id);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PATCH',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $clientKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['auto_renew' => true]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Hesap geneli otomatik odeme acikken hizmet anahtari KILITLIDIR; once cuzdan ayarina bakin.
$s = Kernel::internal('client:Services/GetService', ['owner_id' => $uid, 'id' => $id])['data'];
if (! $s['auto_renew_locked'])
    Kernel::internal('client:Services/UpdateService',
        ['owner_id' => $uid, 'id' => $id, 'auto_renew' => true]);

Yenileme Faturası Kesme

post/api/v1/client/services/{id}/renew
Services/RenewService fatura üretir

Hizmet için bir yenileme faturası keser.

Gövde 1
cyclestringYenileme döngüsü. Hizmet detayındaki döngü listesinden seçilir; verilmezse mevcut döngü kullanılır.
Dönen alanlar data — 8
invoice_idintYenileme faturasının numarası.
numberstringGörünen fatura numarası.
statusstringHam fatura durumu.
statestringMüşteriye gösterilen durum.
totalobjectFatura toplamı.
created_atstringKesim tarihi.
due_datestringVade tarihi.
existingboolZaten açık olan bir fatura mı döndü. Doğruysa yeni bir belge kesilmemiştir.
Hatalar 7
not_found404Böyle bir hizmet yok ya da başka bir müşteriye ait.
not_renewable422Hizmet etkin ya da süresi dolmuş değil.
renew_blocked_subscription422Bir abonelik yenilemeleri kendisi tahsil ediyor.
cycle_invalid422Döngü ürünün yenilenebilir fiyat satırlarından biri değil.
already_invoiced422Dönem faturalanmış ve bağlanacak açık fatura yok.
renew_disabled422Operatör bu hizmette yenilemeyi kapatmış.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/client/services/622/renew' \
  -H "Authorization: Bearer $CLIENT_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"cycle":"annually"}'
const res = await fetch(`https://panel.ornek.com/api/v1/client/services/${id}/renew`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${clientKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ cycle }),
});

const { data } = await res.json();
if (data.existing) note('An invoice was already open.');
$ch = curl_init('https://panel.ornek.com/api/v1/client/services/' . $id . '/renew');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $clientKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['cycle' => $cycle]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Fatura KESER, odeme YAPMAZ: donen numarayi fatura odeme ucuna vermeniz gerekir.
$inv = Kernel::internal('client:Services/RenewService',
    ['owner_id' => $uid, 'id' => $id])['data'];

Kernel::internal('client:Invoices/PayInvoice',
    ['owner_id' => $uid, 'id' => $inv['invoice_id'], 'payment' => ['method' => 'balance']]);

İptal Talebi Açma

post/api/v1/client/services/{id}/cancellation
Services/CreateCancellation aynı anda tek talep

Hizmetin iptali için bir talep açar.

Gövde 4
urgencystringreqNe zaman iptal edilsin: hemen ya da dönem sonunda.
reasonstringreqGerekçe. Beş değerden biri: gerek kalmadı, pahalı, başka yere geçiliyor, özellik eksik ya da diğer.
reason_detailstringSerbest açıklama. Gerekçe diğer ise zorunludur.
notestringOperatöre not.
Dönen alanlar data
dataobjectAçılan iptal talebi. Hizmet detayındaki iptal alanıyla aynı şekildedir.
Hatalar 5
not_found404Böyle bir hizmet yok ya da başka bir müşteriye ait.
not_actionable422Hizmet etkin değil.
cancellation_exists422Zaten açık bir talep var.
reason_detail_required422Gerekçe diğer iken açıklama boş ya da değerler geçersiz.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/client/services/622/cancellation' \
  -H "Authorization: Bearer $CLIENT_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"urgency":"period-ending","reason":"not-needed"}'
const res = await fetch(`https://panel.ornek.com/api/v1/client/services/${id}/cancellation`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${clientKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ urgency: 'period-ending', reason, note }),
});

const { data } = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/client/services/' . $id . '/cancellation');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $clientKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['urgency' => 'period-ending', 'reason' => $why]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// HEMEN secmek hizmeti o an kapatir: donem sonu secenegi kalan sureyi kullandirir.
Kernel::internal('client:Services/CreateCancellation',
    ['owner_id' => $uid, 'id' => $id, 'urgency' => 'period-ending', 'reason' => 'not-needed']);

İptal Talebini Geri Çekme

delete/api/v1/client/services/{id}/cancellation
Services/RevokeCancellation anahtarın sahibi

Açık bir iptal talebini geri çeker.

Dönen alanlar data — 2
revokedboolGeri çekme çalıştı mı.
service_idintHizmetin numarası.
Hatalar 2
not_found404Bu hizmette açık bir talep yok.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X DELETE 'https://panel.ornek.com/api/v1/client/services/622/cancellation' \
  -H "Authorization: Bearer $CLIENT_KEY"
const res = await fetch(`https://panel.ornek.com/api/v1/client/services/${id}/cancellation`, {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${clientKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/client/services/' . $id . '/cancellation');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'DELETE',
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Talep ONAYLANDIYSA geri cekmek hizmeti kurtarmayabilir; durumu detaydan okuyun.
$s = Kernel::internal('client:Services/GetService', ['owner_id' => $uid, 'id' => $id])['data'];
$pending = ($s['cancellation']['status'] ?? '') === 'pending';

Hizmet Eklentilerini Okuma

get/api/v1/client/services/{id}/addons
Services/GetServiceAddons anahtarın sahibi

Hizmete bağlı ek hizmetleri döndürür.

Dönen alanlar data[] — 11
idintEk hizmet kaydının numarası.
addon_idintEk hizmet tanımının numarası.
option_idintSeçilen seçeneğin numarası.
namestringEk hizmetin adı.
optionstringSeçeneğin adı.
quantityintAlınan adet.
statusstringEk hizmetin durumu.
priceobjectSatırın dönemsel toplamı.
cyclestringFaturalama döngüsü.
due_datestringBir sonraki ödeme günü.
unpaid_invoice_idintÖdenmemiş satın alma faturası. Ek hizmet beklerken dolar.
cancellation_requestedboolDönem sonunda iptal planlanmış mı.
Hatalar 2
not_found404Böyle bir hizmet yok ya da başka bir müşteriye ait.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/client/services/622/addons' \
  -H "Authorization: Bearer $CLIENT_KEY"
const res = await fetch(`https://panel.ornek.com/api/v1/client/services/${id}/addons`, {
  headers: { Authorization: `Bearer ${clientKey}` },
});

const { data } = await res.json();
const waiting = data.filter((a) => a.unpaid_invoice_id > 0);
$ch = curl_init('https://panel.ornek.com/api/v1/client/services/' . $id . '/addons');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Bekleyen ek hizmet FATURASI odenene kadar etkinlesmez; numarayi buradan alip odeyin.
$rows = Kernel::internal('client:Services/GetServiceAddons',
    ['owner_id' => $uid, 'id' => $id])['data'];
$due = array_filter(array_column($rows, 'unpaid_invoice_id'));

Hizmetin Faturalarını Okuma

get/api/v1/client/services/{id}/invoices
Services/GetServiceInvoices anahtarın sahibi

Bu hizmeti faturalayan belgeleri döndürür.

Sorgu 1
limitintEn çok satır. En çok 100.
Dönen alanlar data[] — 7
invoice_idintFaturanın numarası.
numberstringGörünen numara.
statusstringHam durum.
statestringMüşteriye gösterilen durum.
totalobjectBelge toplamı.
created_atstringKesim tarihi.
due_datestringVade tarihi.
Hatalar 2
not_found404Böyle bir hizmet yok ya da başka bir müşteriye ait.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/client/services/622/invoices' \
  -H "Authorization: Bearer $CLIENT_KEY"
const res = await fetch(`https://panel.ornek.com/api/v1/client/services/${id}/invoices`, {
  headers: { Authorization: `Bearer ${clientKey}` },
});

const { data } = await res.json();
const open = data.filter((i) => i.state !== 'paid');
$ch = curl_init('https://panel.ornek.com/api/v1/client/services/' . $id . '/invoices');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// SAYFALAMA YOKTUR, yalniz bir ust sinir vardir: uzun gecmis icin fatura listesini kullanin.
$rows = Kernel::internal('client:Services/GetServiceInvoices',
    ['owner_id' => $uid, 'id' => $id, 'limit' => 100])['data'];

Ölçümleri Okuma

get/api/v1/client/services/{id}/metrics
Services/GetServiceMetrics kullanıma göre ücret

Kullanıma göre ücretlenen ölçümleri ve tahmini bedeli döndürür.

Dönen alanlar data — 2
metricsobject[]Ölçümler.
keystringÖlçümün anahtarı. Açma kapama ucuna bu değer verilir.
labelstringGörünen adı.
unitstringBirimi.
enabledboolŞu an ölçülüyor mu.
includedfloatÜcretsiz dahil miktar.
usagefloatBu dönemin kullanımı.
overagefloatDahil miktarın üstündeki faturalanabilir kullanım.
estimated_chargeobjectAşım için öngörülen ücret.
unit_priceobjectİlk etkin kademenin birim fiyatı.
lockedboolÖdenmemiş bir kullanım faturası açmayı engelliyor mu.
locked_by_invoice_idintEngelleyen faturanın numarası.
auto_disabledboolÖdenmemiş fatura yüzünden kendiliğinden kapandı mı.
has_unpaidboolHizmetin herhangi bir kullanım faturası ödenmemiş mi. Hizmet geneli bir kilittir.
Hatalar 2
not_found404Böyle bir hizmet yok ya da başka bir müşteriye ait.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/client/services/622/metrics' \
  -H "Authorization: Bearer $CLIENT_KEY"
const res = await fetch(`https://panel.ornek.com/api/v1/client/services/${id}/metrics`, {
  headers: { Authorization: `Bearer ${clientKey}` },
});

const { data } = await res.json();
const bill = data.metrics.reduce((s, m) => s + (m.estimated_charge?.amount ?? 0), 0);
$ch = curl_init('https://panel.ornek.com/api/v1/client/services/' . $id . '/metrics');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Kapali bir olcumun O ANA KADARKI kullanimi yine faturalanir: kapatmak gecmisi silmez.
$m = Kernel::internal('client:Services/GetServiceMetrics',
    ['owner_id' => $uid, 'id' => $id])['data'];
$blocked = $m['has_unpaid'];

Ölçümü Açma ve Kapatma

patch/api/v1/client/services/{id}/metrics/{key}
Services/UpdateServiceMetric ödenmemiş fatura kilitler

Bir ölçümü açar ya da kapatır.

Gövde 1
enabledboolreqİstenen durum.
Dönen alanlar data
dataobjectÖlçümün güncel hâli.
Hatalar 7
not_found404Ölçüm anahtarı ya da hizmet bulunamadı.
enabled_invalid422Durum alanı gönderilmemiş ya da yanlış türde.
not_actionable422Hizmet etkin değil.
metric_not_priced422Etkin bir fiyat kademesi yok.
metric_unpaid_lock422Ödenmemiş bir kullanım faturası açmayı engelliyor.
metric_module_rejected422Panel modülü değişikliği reddetti.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PATCH 'https://panel.ornek.com/api/v1/client/services/622/metrics/storage' \
  -H "Authorization: Bearer $CLIENT_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"enabled":true}'
const res = await fetch(`https://panel.ornek.com/api/v1/client/services/${id}/metrics/${key}`, {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${clientKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ enabled: true }),
});

if (res.status === 422) explainLock(await res.json());
$ch = curl_init('https://panel.ornek.com/api/v1/client/services/' . $id . '/metrics/' . $key);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PATCH',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $clientKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['enabled' => true]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Kilidi acmanin tek yolu ENGELLEYEN FATURAYI odemektir; numarasi olcum kaydinda yazar.
$m = Kernel::internal('client:Services/GetServiceMetrics',
    ['owner_id' => $uid, 'id' => $id])['data'];
$blocker = array_column($m['metrics'], 'locked_by_invoice_id', 'key')[$key] ?? 0;

Kullanım Fatura Geçmişi

get/api/v1/client/services/{id}/metrics/billing
Services/GetServiceMetricBilling anahtarın sahibi

Ölçümlerin dönem dönem faturalanmış kullanımını döndürür.

Sorgu 3
pageintKaçıncı sayfa.
limitintSayfa başına satır. En çok 100.
metricstringTek bir ölçüme daraltır.
Dönen alanlar data[] — 9 + meta — 4
metricstringÖlçümün anahtarı.
labelstringGörünen adı.
unitstringBirimi.
period_startstringFaturalanan dönemin başı.
period_endstringDönemin sonu.
usagefloatDönemin toplam kullanımı.
overagefloatFaturalanan pay.
amountobjectTutar.
statestringSatırın durumu: bekliyor, ödenmemiş, ödenmiş ya da iptal.
invoice_idintKullanım faturası. Henüz faturalanmadıysa sıfırdır.
totalintToplam satır. Meta altında döner.
pageintBulunulan sayfa.
limitintSayfa boyutu.
next_pageintSonraki sayfa.
Hatalar 2
not_found404Böyle bir hizmet yok ya da başka bir müşteriye ait.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/client/services/622/metrics/billing?metric=storage' \
  -H "Authorization: Bearer $CLIENT_KEY"
const url = new URL(`https://panel.ornek.com/api/v1/client/services/${id}/metrics/billing`);
url.searchParams.set('metric', key);

const res = await fetch(url, { headers: { Authorization: `Bearer ${clientKey}` } });
const { data } = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/client/services/' . $id . '/metrics/billing');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// BEKLIYOR satiri henuz faturalanmamis donemdir: fatura numarasi sifirdir ve tutar degisebilir.
$rows = Kernel::internal('client:Services/GetServiceMetricBilling',
    ['owner_id' => $uid, 'id' => $id])['data'];
$open = array_filter($rows, fn ($r) => $r['state'] === 'pending');

Tuzaklar

Yenileme fatura keser, ödeme yapmaz

Yenileme ucu bir fatura üretir ve orada durur; hizmetin süresi ancak o fatura ödendiğinde uzar. Dönen yanıttaki bir alan, yeni bir belge kesilmediğini ve zaten açık olan bir faturanın döndüğünü söyler. Numarayı fatura ödeme ucuna verin.

İki otomatik yenileme anahtarı vardır

Hesap geneli otomatik ödeme açıkken hizmet bazlı anahtar kilitlenir ve değiştirme çağrısı reddedilir. Detaydaki kilit alanı bunu önceden söyler. Kilidi açmanın yolu hizmet ayarı değil, cüzdan ayarıdır.

Hemen iptal kalan süreyi yakar

İptal talebinde aciliyet iki değerden birini alır. Hemen seçmek hizmeti o anda kapatır ve ödenmiş kalan süre geri gelmez; dönem sonu seçmek kalan süreyi kullandırır. Müşteriye bu farkı gösterin.

Ölçümü kapatmak geçmiş kullanımı silmez

Bir ölçümü kapatmak o ana kadarki kullanımı faturalanmaktan kurtarmaz: dönem sonunda o kullanım yine belgeye girer. Ayrıca ödenmemiş bir kullanım faturası ölçümü yeniden açmayı kilitler ve kilit yalnız o fatura ödenerek açılır.

Alan adları bu uçlara ait değildir

Alan adı kayıtları hizmet gibi görünse de bu uçlarda bulunamadı yanıtı verir; kendi uçları vardır. Bir hizmet listesinde alan adı arayan kod boş döner ve bunu hata sanabilir. Alan adları için alan adı makalelerine bakın.

Hizmetin fatura listesi sayfalanmaz

Hizmetin faturalarını veren uç yalnız bir üst sınır alır; sayfalama yoktur. Uzun bir geçmiş için genel fatura listesini kullanın ve orada arayın. Aynı sınırlama ek hizmet listesinde de vardır.

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.