Vitamin API referansı

Kendi sitenizden, botunuzdan veya betiğinizden VPN hesapları ve sanal sunucular satıp yönetin.

Temel URLhttps://apiservice.vitamindata.net/api/v1

Anahtarlar panelinizde oluşturulur. Bölümü göremiyorsanız, hesabınız için API erişiminin açılmasını destekten isteyin.

1

Panelinizde bir API anahtarı oluşturun ve her çağrıda bearer token olarak gönderin.

2

Anahtarı kanıtlamak için Ping çağırın; ardından ListPlans ve GetVPSStorefront ile fiyatlarınızı çekin.

3

FUNDING_AUTO ile satış yapın: bakiyeniz yetiyorsa ödemeyi bakiye karşılar, yetmiyorsa müşteriniz bir ödeme bağlantısı alır.

Kimlik doğrulama

Her istek anahtarınızı bearer token olarak taşır. Bu sunucuda çerez yoktur ve alınacak bir CSRF token'ı da yoktur — anahtar tek başına kimlik bilgisidir.

Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Anahtarlar panelinizde API bölümünde oluşturulur. Gizli değer yalnızca bir kez, oluşturma anında gösterilir: biz yalnızca özetini (hash) saklarız. Kaybolursa çözüm anahtarı döndürmektir — bu yeni bir gizli değer üretir ve eskisini bir gün daha çalışır tutar, böylece kesinti olmadan dağıtım yapabilirsiniz.

Bir anahtar belirli kaynak adreslerine kısıtlanabilir, kendi dakikalık hız sınırına sahip olabilir ve belirli işlemler ondan esirgenebilir. Bunları operatörlerimiz ayarlar — örneğin satın alabilen ama hiçbir hizmeti silemeyen bir anahtar gerekiyorsa destekle görüşün.

Test anahtarları

sk_test_ ile başlayan bir anahtar gerçek verileri okur, ancak para harcayan ya da gerçek bir makineye dokunan hiçbir şeyi kabul etmez; böylece entegrasyonunuzu size hiçbir maliyeti olmadan kurup doğrulayabilirsiniz.

Bir hata nasıl görünür

Bilinmeyen bir anahtar ve API erişimi olmayan bir hesabın anahtarı, kelimesi kelimesine aynı 401 yanıtını alır: yanıt bir anahtarın var olup olmadığını asla doğrulamaz. İstisna, döndürmedeki örtüşme süresini aşmış kendi anahtarınızdır — bilerek api key expired der, çünkü o anahtarın gerçek olduğunu zaten biliyorsunuzdur ve neden durduğunu bilmeniz gerekir. Aynı adresten gelen tekrarlanan hatalar kısıtlanır — hız sınırlarına bakın.

Ödeme yapmak

Satın aldığınız her şey — bir VPN hesabı, bir uzatma, bir sunucu, bir yenileme, bir yükseltme — tek bir sözleşmeden geçer. Ödemenin nasıl yapılacağını siz seçersiniz:

fundingNe olur
FUNDING_AUTOÖnerilir. Bakiyeniz yetiyorsa oradan düşer; yetmiyorsa çağrı yine başarılı olur ve size bir ödeme bağlantısı verir. Tek çağrı, yorumlanacak hata yok.
FUNDING_BALANCEYalnızca bakiye. Bakiye yetersizse çağrı insufficient_balance ile BAŞARISIZ olur (hata yine ödenebilir bir bağlantı taşır).
FUNDING_INVOICEBakiyeniz yetecek olsa bile her zaman bir ödeme bağlantısı döndürür.

FUNDING_AUTO ile tek bir alana bakarsınız:

{"order": {...}, "paid": true,  "status": "completed"}
{"order": {...}, "status": "payment_required",
 "invoice": {"invoice_id": "inv_9m2r4t",
             "pay_url": "https://pay.example.com/i/inv_9m2r4t",
             "price_usd": "11.90", "expires_at": "1785499200"}}

completed, paranın alındığı ve teslimin başladığı anlamına gelir — durumu delivered olana kadar GetOrder çağrısını yoklayın. payment_required ise müşterinizi pay_url adresine yönlendirin; fatura ödendiğinde teslim kendiliğinden başlar.

Fiyatlar her zaman bizimdir. Güvence olarak expected_total_usd gönderebilirsiniz: güncel teklifimiz farklıysa satış price_changed ve yeni tutarla reddedilir; müşterinizin hiç görmediği bir tutar tahsil edilmez.

Güvenli yeniden deneme

Para harcayan her çağrıda bir Idempotency-Key başlığı gönderin. Yanıt size hiç ulaşmazsa — zaman aşımı, kopan bağlantı, yeniden dağıtılan bir süreç — AYNI isteği AYNI anahtarla yeniden gönderin; ikinci bir tahsilat yerine ilk sonucu geri alırsınız.

Idempotency-Key: 8f14e45f-ea6d-4b3a-9c1b-2f0d5a7e91c3

Her müşteri işlemi için yeni bir anahtar kullanın (UUID idealdir). Aynı anahtarı farklı bir gövdeyle yeniden kullanmak idempotency_conflict ile reddedilir — bu birleşim bir hata anlamına gelir ve hangi isteği kastettiğinizi tahmin etmek, size söylemekten daha kötü olurdu.

Hız sınırları

Kimliği doğrulanmış her yanıt, anahtarınızın nerede olduğunu söyler:

RateLimit-Limit: 6000
RateLimit-Remaining: 5987
RateLimit-Policy: 6000;w=60

Sınır anahtar başına ve dakika başınadır, hesabınız için ayarlanır — varsayılan bir mağazaya uygundur; yoğun bir bot varsayılanla kendini yavaşlatmak yerine artırım istemelidir. Aşıldığında Retry-After ile 429 döner.

Tek bir adresten gelen çok sayıda istek kimlik doğrulamada başarısız olursa da 429 görülür. Bu kotanız değil, kaba kuvvet korumasıdır: kendiliğinden temizlenir (başlık ne zaman olduğunu söyler) ve çalışan bir anahtar bunu asla tetiklemez.

Her yanıtta, anahtarsız olanlar dahil, bir de X-Ratelimit-* ailesi görürsünüz. Bu, tüm API'nin önünde duran, ADRES başına kaba bir frendir; anahtarınızın bütçesi değildir — hızınızı RateLimit-Remaining değerine göre ayarlayın ve X- başlıklarını sizi ilgilendirmeyen bir şey sayın.

Hatalar

Hatalar bir HTTP durum kodu ve bir JSON gövdesi olarak döner. Üst düzey code taşıma kategorisidir; üst düzey message kararlı makine kodunu taşır. Tam ayrıntı — aynı makine kodu, güvenli bir cümle ve işe yarar ek alanlar — details içinde debug altında gelir:

{"code": "failed_precondition",
 "message": "insufficient_balance",
 "details": [{"type": "neopay.seller.publicapi.v1.ErrorInfo",
              "value": "CgptZXNzYWdl…",
              "debug": {"code": "insufficient_balance",
                        "message": "insufficient balance",
                        "payUrl": "https://pay.example.com/i/inv_9m2r4t",
                        "orderId": "ord_8c3d1e",
                        "totalUsd": "11.90"}}]}

Hata kanalının, ikisi de kodda hesaba katmaya değer iki tuhaflığı vardır: value base64 protobuf'tır (yok sayın — debug okuyun) ve debug içindeki ek alanlar lowerCamelCase yazılır — payUrl, orderId, totalUsd, retryAfterSeconds — bu bir Connect geleneğidir, diğer her yerdeki snake_case'in aksine. Üst düzey message alanına veya debug.code değerine göre dallanın; asla cümleye göre değil.

İsteğiniz yetkilendirilmeden önce gelen retler

Bir işleyiciye hiç ulaşmayan istek — anahtar yok ya da geçersiz (401), anahtarın izin vermediği bir kaynak adresi (403), bir hız sınırı (429), bir kimlik doğrulama kesintisi (503) — ön kapıda reddedilir ve ön kapı DAHA KISA bir gövde döner: bir taşıma code değeri ve düz bir cümle; details yok, makine kodu yok.

{"code": "unauthenticated", "message": "invalid api key"}

Bu yüzden bunlarda HTTP DURUM KODUNA göre dallanın (ve Retry-After başlığına uyun — 429 yanıtlarında gelir); aşağıdaki makine kodları, bir işleyiciye kadar ulaşabilmiş çağrılara aittir. Adres başına uygulanan kaba fren daha da eskidir ve {"error":"rate_limited"} döner — error anahtarıyla, code ile değil.

KodAnlamıNe yapmalı
forbidden_scopeAnahtar bu çağrı için gereken kapsama sahip değil ya da bu işlem ondan esirgenmiş.Anahtarın kapsamını genişletmesi için destekle görüşün.
not_foundBu hesap için böyle bir nesne yok.Kimliği kontrol edin. Başka bir hesabın kimliği de bu yanıtı alır — tasarım gereği.
invalid_requestBir alan bozuk.Düzeltip yeniden gönderin; değiştirmeden yeniden denemek işe yaramaz.
insufficient_balanceYalnızca bakiyeyle ödeme yetersiz kaldı.Ayrıntıdaki payUrl değerini kullanın veya FUNDING_AUTO moduna geçin.
price_changedexpected_total_usd değeriniz artık uyuşmuyor.Yeniden teklif alın ve yeni tutarı müşterinizle onaylayın.
idempotency_conflictO anahtar farklı bir gövdeyle kullanılmış.Her işlem için yeni bir anahtar kullanın.
sandbox_unavailableBir sk_test_ anahtarı para harcamayı ya da gerçek bir makineye dokunmayı denedi.Beklenen durum — o çağrı için canlı bir anahtar kullanın. Test anahtarları okur, asla satın almaz.
unpriceableİstediğiniz yapılandırma satılamaz — fiyatlanmamış bir plan ya da düğüm veya hiçbir modelin kapsamadığı bir sepet.Satın almadan önce mağazayı yeniden okuyup teklif alın; aynı sepeti bir teklif de reddeder.
upstream_unavailableBağlı olduğumuz bir sistem katmanı çalışmıyor.Artan aralıklarla (backoff) yeniden deneyin; okumalar kısa süreliğine eski olabilir.
order_failedÖdemeden sonra teslim başarısız oldu.Yeniden satın almayın. GetOrder çağrısını yoklayın; bunları otomatik olarak kurtarıyoruz ve destek durumu görebilir.
internalBizim tarafımızda, sınıflandırmadığımız bir şey bozuldu.Artan aralıkla (backoff) bir kez yeniden deneyin; tekrarlıyorsa X-Request-Id değerini destekle paylaşın.

Kurallar

  • Taşıma. Her çağrı, JSON gövdeli bir POST {base}/{Method} isteğidir — POST /api/v1/CreateVPNOrder. Başka bir şey yoktur: diğer her HTTP metodu 405 döner, REST fiil eşlemesi yoktur ve yol parametresi yoktur.
  • Para bir metindir. "19.99", asla 19.99 değil: JSON sayısı çoğu dilde kayan noktalıdır ve bir kuruşu tam olarak tutamaz.
  • 64-bit tamsayılar metin olarak gelir. Her bayt sayısı ve her unix zaman damgası 64 bittir ve hat üzerinde tırnak içinde taşınır — "remaining_bytes": "96636764160". Bunları tamsayı olarak ayrıştırın; isteklerde iki biçimi de gönderebilirsiniz.
  • Sıfır atlanır. Değeri 0, false veya boş olan bir alan yanıtta hiç görünmez. Eksik alanı sıfır sayın — ve unutmayın, 0 günlük sınır "0 GB" değil, sınır YOK demektir.
  • Zamanlar unix saniyedir; tek istisna, RFC3339 veya YYYY-MM-DD alıp döndüren işlem penceresidir.
  • Trafik bayt cinsindendir, hiçbir rakamda asla gigabayt değil.
  • Kimlikler opaktır. acc_…, ord_…, vpn_…. Hiçbirini ayrıştırmayın veya kendiniz üretmeyin, sıralı olduklarını da varsaymayın.
  • Sayfalama opak imleçle yapılır: önceki yanıtın next_cursor değerini geri gönderin. Boş bir next_cursor her şeyi aldığınız anlamına gelir.
  • Alan tabloları kısa tip belirteçleri kullanır. money — tam bir ondalık metin; unix — unix saniyesi (64 bit, dolayısıyla metin); bytes — bayt sayısı (64 bit, dolayısıyla metin); int64 — diğer her 64-bit değer (metin); int — 32 bit, düz sayı; cursor — opak bir sayfalama tutamacı; enum — listelenen değerlerden tam olarak biri.
  • Yeni alanlar önceden haber verilmeden eklenir ve var olanların anlamı değişmez. Tanımadığınızı yok sayın.

Başlarken

İlk yapılacak çağrı: anahtarın çalıştığını kanıtlar ve hangi hesaba ait olduğunu söyler.

POST

Ping

her anahtar
https://apiservice.vitamindata.net/api/v1/Ping

Hesap kimliğinizi, anahtarın canlı mı test mi olduğunu ve saatimizi döner.

İstek

Parametre yok — boş bir nesne gönderin: {}.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/Ping \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{}'
Yanıt200 · application/json
account_idstring

Anahtarın hesabı — anahtarın çözümlendiğinin kanıtı.

modeenum

Ne tür bir anahtar gönderdiğiniz.

Şunlardan biri:livetest
server_timeunix

Saatimiz — saat kaymasını, imzaları veya pencereleri bozmadan önce fark etmek için yararlı.

Örnek yanıt
{
  "account_id": "acc_9f3k2m7q",
  "mode": "live",
  "server_time": "1785412800"
}

Hesap ve bakiye

POST

GetAccount

read
https://apiservice.vitamindata.net/api/v1/GetAccount

Hesabınızın e-postası, durumu, dili ve adresin doğrulanmış olup olmadığı.

İstek

Parametre yok — boş bir nesne gönderin: {}.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/GetAccount \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{}'
Yanıt200 · application/json
accountobject

Hesabınız.

account.account_idstring

Genel kimlik (acc_…).

account.emailstring

Oturum açma adresi.

account.statusstring

Hesap kısıtlanmadıkça active.

account.localestring

Hesabın dili — kart adları ve bildirimler bu dile yerelleştirilir.

account.email_verifiedbool

Adres doğrulanmış.

account.created_atunix

Hesabın oluşturulduğu an.

Örnek yanıt
{
  "account": {
    "account_id": "acc_9f3k2m7q",
    "email": "dev@example.com",
    "status": "active",
    "locale": "en",
    "email_verified": true,
    "created_at": "1769000000"
  }
}
POST

GetBalance

read
https://apiservice.vitamindata.net/api/v1/GetBalance

Defter bakiyeniz ve bir satın almanın gerçekten kullanabileceği tutar.

available_usd, satın almadan önce bakılacak sayıdır — devam eden bir siparişin kilitlediği tutarı içermez.

İstek

Parametre yok — boş bir nesne gönderin: {}.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/GetBalance \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{}'
Yanıt200 · application/json
balance_usdmoney

Tam defter bakiyesi.

available_usdmoney

Bakiye eksi kilitler — bir satın almanın şu anda harcayabileceği tutar.

as_ofstring

Rakamların defterdeki zaman damgası, RFC3339.

Örnek yanıt
{
  "balance_usd": "72.60",
  "available_usd": "60.70",
  "as_of": "2026-07-29T12:00:00Z"
}
POST

ListTransactions

read
https://apiservice.vitamindata.net/api/v1/ListTransactions

Defteriniz, en yeni önce.

Varsayılan olarak son üç ay. 92 günden geniş bir pencere daraltılır ve yanıt gerçekte kullandığı pencereyi söyler — böylece kısa bir yanıt asla belirsiz olmaz.

İstek
limitintisteğe bağlı

Sayfa boyutu. Varsayılan 25, en çok 100.

cursorcursoristeğe bağlı

Önceki yanıtın next_cursor değeri. İlk sayfa için atlayın.

kindstringisteğe bağlı

Aşağıdaki kind değerleri üzerinde isteğe bağlı, virgülle ayrılmış filtre.

fromstringisteğe bağlı

Pencere başlangıcı, RFC3339 veya YYYY-MM-DD.

tostringisteğe bağlı

Pencere sonu. Yalnızca tarih içeren bir to o günün tamamını kapsar.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/ListTransactions \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"limit":25,"cursor":"","kind":"topup_credit,invoice_debit_reserved","from":"2026-05-01","to":"2026-07-30"}'
Yanıt200 · application/json
transactionsarray

Defter satırları.

transactions[].idstring

Defter satırının kimliği.

transactions[].tsstring

Ne zaman, RFC3339.

transactions[].kindenum

Parayı neyin hareket ettirdiği. topup_credit ödenmiş bir bakiye yüklemesidir; iki invoice_debit_* türü satın almalardır. Devam eden bir siparişin içerideki kilitleme ve serbest bırakma hareketleri bu akışın parçası değildir.

Şunlardan biri:topup_creditexternal_creditinvoice_debit_reservedinvoice_debit_externaloverpay_creditmanual_creditmanual_debitspend_debitspend_refundautomated_correction
transactions[].amount_usdmoney

İşaretli — borç kayıtlarında negatif.

transactions[].balance_after_usdmoney

Bu satırdan sonraki yürüyen bakiye.

transactions[].ref_invoice_idstring

Hareketin arkasındaki fatura — tüm hikâye için GetInvoice çağrısına verin.

transactions[].descriptionstring

Kısa, insan için bir etiket. Yalnızca görüntülemek için; asla buna göre dallanmayın.

next_cursorcursor

Sonraki sayfa için cursor olarak geri gönderin. Yok/boş = her şey elinizde.

has_morebool

Bu sayfanın ötesinde başka satırlar var.

fromstring

GERÇEKTE uygulanan pencere (RFC3339). İstediğinizden darsa ⇒ 92 günlük sınıra takıldınız.

tostring

Uygulanan pencerenin sonu.

Örnek yanıt
{
  "transactions": [
    {"id": "tx_01j9zq", "ts": "2026-07-28T09:14:03Z", "kind": "invoice_debit_reserved",
     "amount_usd": "-11.90", "balance_after_usd": "72.60",
     "ref_invoice_id": "inv_5k8p2q", "description": "order ord_7b2c9d"},
    {"id": "tx_01j8xw", "ts": "2026-07-25T18:40:11Z", "kind": "topup_credit",
     "amount_usd": "50.00", "balance_after_usd": "84.50", "ref_invoice_id": "inv_3d1x8n"}
  ],
  "from": "2026-04-30T00:00:00Z",
  "to": "2026-07-29T23:59:59Z"
}
POST

CreateTopup

buyIdempotency-Key
https://apiservice.vitamindata.net/api/v1/CreateTopup

Bakiyenize para ekleyen, ödenebilir bir fatura oluşturur.

Müşterinizi (veya kendinizi) invoice.pay_url adresine yönlendirin. Bakiye, fatura ödendiğinde hareket eder.

İstek
amount_usdmoneyzorunlu

Ne kadar ekleneceği, ondalık metin olarak.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/CreateTopup \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"amount_usd":"50.00"}'
Yanıt200 · application/json
invoiceobject

Ödenebilir fatura.

invoice.invoice_idstring

Ödeme geçidinin fatura kimliği (inv_…).

invoice.statusenum

pending ödenebilir demektir. confirmed'dan delivered_redirected'a kadar her şey paranın geri dönülmez biçimde girdiği anlamına gelir — hepsini ÖDENDİ sayın. expired, bağlantının ödenmeden süresinin dolduğu anlamına gelir.

Şunlardan biri:pendingconfirmedsweepingsweptdeliveringdelivereddelivered_redirectedexpired
invoice.pay_urlstring

Barındırılan ödeme sayfası. Müşterinizi buraya gönderin; her ödeme yolu (koinler, zincirler, bakiye) bunun arkasındadır.

invoice.pay_telegram_urlstring

Aynı fatura, Telegram içinde ödenebilir hâlde: ödeme sağlayıcısının kendi botunu açar, bot tutarı gösterir ve ödemeyi orada alır. Uygulamadan çıkmak istemeyen müşteriler için pay_url ile birlikte sunun. Bulunmayabilir — yalnızca botu yapılandırılmış bir ödeme sağlayıcısında vardır, bu yüzden asla tek ödeme düğmeniz olmasın.

invoice.price_usdmoney

Faturanın tahsil ettiği tutar.

invoice.expires_atunix

Ödeme penceresinin kapandığı an.

Örnek yanıt
{
  "invoice": {
    "invoice_id": "inv_3d1x8n",
    "status": "pending",
    "pay_url": "https://pay.example.com/i/inv_3d1x8n",
    "pay_telegram_url": "https://t.me/VitaminPayBot?start=3d1x8n",
    "price_usd": "50.00",
    "expires_at": "1785499200"
  }
}
POST

GetInvoice

read
https://apiservice.vitamindata.net/api/v1/GetInvoice

Bir ödemenin tüm ayrıntıları, zincirde görünenler dahil.

Bir defter satırının ref_invoice_id değeri birleştirme anahtarıdır. Yalnızca kendi hesabınızın oluşturduğu faturalar okunabilir.

İstek
invoice_idstringzorunlu

Bir defter satırının ref_invoice_id alanından, bir siparişten veya bir bakiye yüklemesinden.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/GetInvoice \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"invoice_id":"inv_5k8p2q"}'
Yanıt200 · application/json
invoiceobject

Faturanın kendisi.

invoice.invoice_idstring

Ödeme geçidinin fatura kimliği (inv_…).

invoice.statusenum

pending ödenebilir demektir. confirmed'dan delivered_redirected'a kadar her şey paranın geri dönülmez biçimde girdiği anlamına gelir — hepsini ÖDENDİ sayın. expired, bağlantının ödenmeden süresinin dolduğu anlamına gelir.

Şunlardan biri:pendingconfirmedsweepingsweptdeliveringdelivereddelivered_redirectedexpired
invoice.pay_urlstring

Barındırılan ödeme sayfası. Müşterinizi buraya gönderin; her ödeme yolu (koinler, zincirler, bakiye) bunun arkasındadır.

invoice.pay_telegram_urlstring

Aynı fatura, Telegram içinde ödenebilir hâlde: ödeme sağlayıcısının kendi botunu açar, bot tutarı gösterir ve ödemeyi orada alır. Uygulamadan çıkmak istemeyen müşteriler için pay_url ile birlikte sunun. Bulunmayabilir — yalnızca botu yapılandırılmış bir ödeme sağlayıcısında vardır, bu yüzden asla tek ödeme düğmeniz olmasın.

invoice.price_usdmoney

Faturanın tahsil ettiği tutar.

invoice.expires_atunix

Ödeme penceresinin kapandığı an.

paymentsarray

Zincirin gösterdikleri. Bakiyeden ödenen bir faturada (zincir işin içinde değildi) ve henüz kimsenin ödemediği bir faturada boştur — boş liste bir hata değildir.

payments[].chainstring

Ödemenin geldiği ağ (tron, bsc, …).

payments[].assetstring

Ne ile ödendiği (USDT, …).

payments[].amountmoney

Varlık miktarı, tam değer.

payments[].tx_hashstring

Zincir üstündeki işlem — müşterinizin ödeme kanıtı.

payments[].confirmedbool

Zincir işlemi kesinleştirdi.

payments[].seen_atunix

İlk gözlemlediğimiz an.

order_idstring

Faturanın ne satın aldığı. Hiçbir şey satın almayan bakiye yüklemesinde yoktur.

Örnek yanıt
{
  "invoice": {
    "invoice_id": "inv_5k8p2q",
    "status": "confirmed",
    "pay_url": "https://pay.example.com/i/inv_5k8p2q",
    "price_usd": "11.90",
    "expires_at": "1785499200"
  },
  "payments": [
    {"chain": "tron", "asset": "USDT", "amount": "11.90",
     "tx_hash": "c4a1f09e2b7d", "confirmed": true, "seen_at": "1785412920"}
  ],
  "order_id": "ord_7b2c9d"
}

Fiyatlar

Buradaki hiçbir şey bir kayıt oluşturmaz — müşteriniz karar vermeden önce istediğiniz kadar fiyat sorun.

POST

ListPlans

read
https://apiservice.vitamindata.net/api/v1/ListPlans

Satabilecekleriniz: kaydırıcının sınırları ve mağazanız kullanıyorsa sabit fiyatlı kartlar.

Hangisi doluysa onu gösterin. Bir kart, bundle_id değeri sepete konarak satın alınır; kaydırıcı sepeti gb/ay/kullanıcı kullanır.

İstek

Parametre yok — boş bir nesne gönderin: {}.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/ListPlans \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{}'
Yanıt200 · application/json
model_namestring

Mağazanızın fiyatlandırma modeli.

model_typestring

Motor sürümü.

boundsobject

Yapılandırıcının kuralları — her teklif ve sipariş bunları sunucu tarafında yeniden denetler.

bounds.gb_minint

Bir sepetin isteyebileceği en küçük trafik.

bounds.gb_maxint

En büyüğü.

bounds.gb_stepint

Kaydırıcının adımı.

bounds.users_minint

En az eşzamanlı cihaz sayısı.

bounds.users_maxint

En fazlası.

bounds.months_minint

En kısa süre.

bounds.months_maxint

En uzunu.

bounds.new_accounts_maxint

Bir siparişin oluşturabileceği en fazla hesap sayısı.

bounds.extend_maxint

Bir siparişin uzatabileceği en fazla hesap sayısı.

bounds.default_gbint

Kaydırıcı için makul bir varsayılan.

bounds.default_usersint

Varsayılan cihaz sayısı.

bounds.default_monthsint

Varsayılan süre.

bundlesarray

Mağazanız bir kart kataloğuysa, sabit fiyatlı kartlar.

bundles[].bundle_idstring

cart.bundle_id alanına konacak tanıtıcı.

bundles[].namestring

Kartın adı, hesabın diline göre zaten yerelleştirilmiş.

bundles[].gbint

Dahil edilen trafik.

bundles[].monthsint

Geçerlilik süresi.

bundles[].online_usersint

Eşzamanlı cihaz sayısı.

bundles[].price_usdmoney

Fiyat. Fiyat BUDUR — bir kart için teklif gerekmez.

bundles[].highlightbool

Mağazanın öne çıkan kartı.

bundles[].daily_cap_gbint

GB olarak günlük üst sınır. Yoksa = sınır yok.

Örnek yanıt
{
  "model_name": "vpn_dynamic",
  "model_type": "dynamic_v2",
  "bounds": {
    "gb_min": 10, "gb_max": 500, "gb_step": 10,
    "users_min": 1, "users_max": 10,
    "months_min": 1, "months_max": 12,
    "new_accounts_max": 5, "extend_max": 10,
    "default_gb": 100, "default_users": 3, "default_months": 1
  },
  "bundles": [
    {"bundle_id": "card_100_1m", "name": "100 GB · 1 month", "gb": 100, "months": 1,
     "online_users": 3, "price_usd": "11.90", "highlight": true}
  ]
}
POST

Quote

read
https://apiservice.vitamindata.net/api/v1/Quote

Bir VPN sepetinin nihai fiyatı, kalem kalem. İndirimler zaten uygulanmıştır.

İstek
cartobjectzorunlu

Fiyatlanacak sepet.

cart.kindenumzorunlu

Yeni hesap satın alın ya da mevcutlara trafik ve süre ekleyin.

Şunlardan biri:newextend
cart.gbintisteğe bağlı

Hesap başına trafik, GB olarak, ListPlans'tan gelen sınırlar içinde.

cart.monthsintisteğe bağlı

Hesap başına geçerlilik, ay olarak.

cart.usersintisteğe bağlı

Hesap başına eşzamanlı cihaz sayısı.

cart.new_accountsintisteğe bağlı

Yalnızca kind:"new": kaç hesap oluşturulacağı. Kullanıcı adlarını sunucu üretir.

cart.extend_vpn_idsarrayisteğe bağlı

Yalnızca kind:"extend": uzatılacak hesaplar, genel kimlikleriyle.

cart.bundle_idstringisteğe bağlı

Yapılandırılmış bir sepet yerine ListPlans.bundles içinden sabit fiyatlı bir kart satın alır. Ayarlandığında gb/ay/kullanıcı yok sayılır — kartın kendi değerleri ve fiyatı geçerlidir.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/Quote \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"cart":{"kind":"new","gb":100,"months":1,"users":3,"new_accounts":2}}'
Bu isteğin diğer biçimleri
Halihazırda sahip olduğunuz hesapları uzatın
{"cart":{"kind":"extend","gb":50,"months":1,"users":3,"extend_vpn_ids":["vpn_6t2k9p","vpn_1a4b7c"]}}
Yapılandırılmış sepet yerine sabit fiyatlı bir kart alın
{"cart":{"kind":"new","bundle_id":"card_100_1m","new_accounts":1}}
Yanıt200 · application/json
quoteobject

Kalem kalem fiyat. Hiçbir şey oluşturulmaz ve hiçbir şey tahsil edilmez.

quote.model_namestring

Hangi fiyatlandırma modelinin yanıtladığı.

quote.model_typestring

Modelin motor sürümü.

quote.base_usdmoney

İndirimler ve ek ücretler öncesi fiyat.

quote.total_usdmoney

Nihai fiyat — bu sepetle yapılan bir satışın tahsil edeceği tutar.

quote.linesarray

Kalem dökümü, işaretli; toplamı tam olarak nihai tutarı verir.

quote.lines[].codestring

Bu satırın ne olduğu (base, bir indirim kodu, bir ek ücret…).

quote.lines[].kindstring

Satırın kategorisi, arayüzünüzde gruplamak için.

quote.lines[].amount_usdmoney

İşaretli. İndirimler negatiftir; satırların toplamı tam olarak total_usd eder.

quote.lines[].pctstring

Varsa, satırın arkasındaki yüzde.

quote.cappedbool

Toplam, modelin üst sınırına takıldı.

quote.floor_appliedbool

Toplam, modelin taban fiyatına yükseltildi.

quote.clampedenum

Bir sepet değeri fiyatlamadan önce sınırların içine çekildiğinde ayarlanır.

Şunlardan biri:minmax
quote.invalidstring

Boş değilse sepet fiyatlanamıyor demektir — gösterin ve böyle bir teklifi ASLA tahsil etmeyin.

quote.metamap

Model ekstraları, metin→metin (ör. bir yükseltmenin remaining_days değeri).

Örnek yanıt
{
  "quote": {
    "model_name": "vpn_dynamic",
    "model_type": "dynamic_v2",
    "base_usd": "14.00",
    "total_usd": "11.90",
    "lines": [
      {"code": "base", "kind": "base", "amount_usd": "14.00"},
      {"code": "loyalty", "kind": "discount", "amount_usd": "-2.10", "pct": "15"}
    ]
  }
}

VPN satışı

POST

CreateVPNOrder

buyIdempotency-Key
https://apiservice.vitamindata.net/api/v1/CreateVPNOrder

Yeni VPN hesapları satın alır veya mevcut olanları uzatır (extend_vpn_ids ile "kind":"extend").

Yanıtın alabileceği iki biçim için Ödeme yapmak bölümüne bakın.

İstek
cartobjectzorunlu

Ne satın alınacağı — Quote'un fiyatladığı biçimle aynı.

cart.kindenumzorunlu

Yeni hesap satın alın ya da mevcutlara trafik ve süre ekleyin.

Şunlardan biri:newextend
cart.gbintisteğe bağlı

Hesap başına trafik, GB olarak, ListPlans'tan gelen sınırlar içinde.

cart.monthsintisteğe bağlı

Hesap başına geçerlilik, ay olarak.

cart.usersintisteğe bağlı

Hesap başına eşzamanlı cihaz sayısı.

cart.new_accountsintisteğe bağlı

Yalnızca kind:"new": kaç hesap oluşturulacağı. Kullanıcı adlarını sunucu üretir.

cart.extend_vpn_idsarrayisteğe bağlı

Yalnızca kind:"extend": uzatılacak hesaplar, genel kimlikleriyle.

cart.bundle_idstringisteğe bağlı

Yapılandırılmış bir sepet yerine ListPlans.bundles içinden sabit fiyatlı bir kart satın alır. Ayarlandığında gb/ay/kullanıcı yok sayılır — kartın kendi değerleri ve fiyatı geçerlidir.

fundingenumzorunlu

Nasıl ödeneceği — bkz. Ödeme yapmak. Varsayılan yoktur: atlanırsa istek reddedilir.

Şunlardan biri:FUNDING_AUTOFUNDING_BALANCEFUNDING_INVOICE
expected_total_usdmoneyisteğe bağlı

Onay güvencesi. Ayarlıysa ve güncel teklifimiz farklıysa, müşterinizin hiç görmediği bir tutarı tahsil etmek yerine satış price_changed ile reddedilir.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/CreateVPNOrder \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"cart":{"kind":"new","gb":100,"months":1,"users":3,"new_accounts":1},"funding":"FUNDING_AUTO","expected_total_usd":"11.90"}'
Bu isteğin diğer biçimleri
Halihazırda sahip olduğunuz hesapları uzatın
{"cart":{"kind":"extend","gb":50,"months":1,"users":3,"extend_vpn_ids":["vpn_6t2k9p"]},"funding":"FUNDING_AUTO"}
Sabit fiyatlı bir kartı bakiyeden ödeyerek alın
{"cart":{"kind":"new","bundle_id":"card_100_1m","new_accounts":1},"funding":"FUNDING_BALANCE"}
Yanıt200 · application/json
orderobject

Sipariş — durumu delivered olana kadar GetOrder çağrısını yoklayın.

order.order_idstring

Siparişin genel kimliği (ord_…).

order.productenum

Ne satın alındığı.

Şunlardan biri:vpnvps
order.kindstring

Satın alma biçimi: new, extend, upgrade

order.statusenum

Yaşam döngüsü. Hedef delivered'dır; needs_operator, paranın alındığı ve teslimi bir insanın tamamlamakta olduğu anlamına gelir — yeniden satın almayın; expired, faturanın ödenmeden süresinin dolduğu anlamına gelir.

Şunlardan biri:createdinvoicedpaiddeliveringdeliveredneeds_operatorfailedrefund_pendingrefundedexpired
order.fundingenum

Ödemeyi gerçekte hangi yolun karşıladığı. FUNDING_AUTO bunlardan birine çözümlenir.

Şunlardan biri:invoicebalance
order.total_usdmoney

Siparişin tahsil ettiği tutar.

order.invoice_idstring

Arkasındaki fatura — hangi yol öderse ödesin, her siparişin bir faturası vardır.

order.itemsint

Siparişin kaç hak oluşturduğu veya uzattığı.

order.created_atunix

Siparişin verildiği an.

order.delivered_atunix

Teslimin bittiği an. O ana kadar yoktur.

order.breakdownobject

Müşterinin onayladığı teklif, olduğu gibi — Quote'un döndürdüğüyle aynı biçim.

invoiceobject

Siparişin arkasındaki fatura: payment_required iken ödenebilir, completed iken zaten kapanmıştır.

invoice.invoice_idstring

Ödeme geçidinin fatura kimliği (inv_…).

invoice.statusenum

pending ödenebilir demektir. confirmed'dan delivered_redirected'a kadar her şey paranın geri dönülmez biçimde girdiği anlamına gelir — hepsini ÖDENDİ sayın. expired, bağlantının ödenmeden süresinin dolduğu anlamına gelir.

Şunlardan biri:pendingconfirmedsweepingsweptdeliveringdelivereddelivered_redirectedexpired
invoice.pay_urlstring

Barındırılan ödeme sayfası. Müşterinizi buraya gönderin; her ödeme yolu (koinler, zincirler, bakiye) bunun arkasındadır.

invoice.pay_telegram_urlstring

Aynı fatura, Telegram içinde ödenebilir hâlde: ödeme sağlayıcısının kendi botunu açar, bot tutarı gösterir ve ödemeyi orada alır. Uygulamadan çıkmak istemeyen müşteriler için pay_url ile birlikte sunun. Bulunmayabilir — yalnızca botu yapılandırılmış bir ödeme sağlayıcısında vardır, bu yüzden asla tek ödeme düğmeniz olmasın.

invoice.price_usdmoney

Faturanın tahsil ettiği tutar.

invoice.expires_atunix

Ödeme penceresinin kapandığı an.

paidbool

Para tahsil edildi. payment_required ile birlikte yoktur (= false).

statusenum

Dallanılacak ASIL alan — bkz. Ödeme yapmak.

Şunlardan biri:completedpayment_required
Örnek yanıt
{
  "order": {
    "order_id": "ord_8c3d1e", "product": "vpn", "kind": "new",
    "status": "invoiced", "funding": "invoice", "total_usd": "11.90",
    "invoice_id": "inv_9m2r4t", "items": 1, "created_at": "1785412800"
  },
  "invoice": {
    "invoice_id": "inv_9m2r4t", "status": "pending",
    "pay_url": "https://pay.example.com/i/inv_9m2r4t",
    "pay_telegram_url": "https://t.me/VitaminPayBot?start=9m2r4t",
    "price_usd": "11.90", "expires_at": "1785499200"
  },
  "status": "payment_required"
}
POST

GetOrder

read
https://apiservice.vitamindata.net/api/v1/GetOrder

Satın aldıktan sonra bunu yoklayın: created → invoiced → paid → delivering → delivered.

İstek
order_idstringzorunlu

Verdiğiniz siparişten.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/GetOrder \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"order_id":"ord_7b2c9d"}'
Yanıt200 · application/json
orderobject

Sipariş, tam dökümüyle.

order.order_idstring

Siparişin genel kimliği (ord_…).

order.productenum

Ne satın alındığı.

Şunlardan biri:vpnvps
order.kindstring

Satın alma biçimi: new, extend, upgrade

order.statusenum

Yaşam döngüsü. Hedef delivered'dır; needs_operator, paranın alındığı ve teslimi bir insanın tamamlamakta olduğu anlamına gelir — yeniden satın almayın; expired, faturanın ödenmeden süresinin dolduğu anlamına gelir.

Şunlardan biri:createdinvoicedpaiddeliveringdeliveredneeds_operatorfailedrefund_pendingrefundedexpired
order.fundingenum

Ödemeyi gerçekte hangi yolun karşıladığı. FUNDING_AUTO bunlardan birine çözümlenir.

Şunlardan biri:invoicebalance
order.total_usdmoney

Siparişin tahsil ettiği tutar.

order.invoice_idstring

Arkasındaki fatura — hangi yol öderse ödesin, her siparişin bir faturası vardır.

order.itemsint

Siparişin kaç hak oluşturduğu veya uzattığı.

order.created_atunix

Siparişin verildiği an.

order.delivered_atunix

Teslimin bittiği an. O ana kadar yoktur.

order.breakdownobject

Müşterinin onayladığı teklif, olduğu gibi — Quote'un döndürdüğüyle aynı biçim.

invoiceobject

Yalnızca sipariş hâlâ ödeme beklerken doludur — her yerdekiyle aynı biçim.

Örnek yanıt
{
  "order": {
    "order_id": "ord_7b2c9d", "product": "vpn", "kind": "new",
    "status": "delivered", "funding": "balance", "total_usd": "11.90",
    "invoice_id": "inv_5k8p2q", "items": 1,
    "created_at": "1785230043", "delivered_at": "1785230103",
    "breakdown": {
    "model_name": "vpn_dynamic",
    "model_type": "dynamic_v2",
    "base_usd": "14.00",
    "total_usd": "11.90",
    "lines": [
      {"code": "base", "kind": "base", "amount_usd": "14.00"},
      {"code": "loyalty", "kind": "discount", "amount_usd": "-2.10", "pct": "15"}
    ]
  }
  }
}
POST

ListOrders

read
https://apiservice.vitamindata.net/api/v1/ListOrders

Sipariş geçmişiniz, en yeni önce.

İstek
limitintisteğe bağlı

Sayfa boyutu. Varsayılan 25, en çok 100.

cursorcursoristeğe bağlı

Önceki yanıtın next_cursor değeri. İlk sayfa için atlayın.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/ListOrders \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"limit":25,"cursor":""}'
Yanıt200 · application/json
ordersarray

Siparişler.

orders[].order_idstring

Siparişin genel kimliği (ord_…).

orders[].productenum

Ne satın alındığı.

Şunlardan biri:vpnvps
orders[].kindstring

Satın alma biçimi: new, extend, upgrade

orders[].statusenum

Yaşam döngüsü. Hedef delivered'dır; needs_operator, paranın alındığı ve teslimi bir insanın tamamlamakta olduğu anlamına gelir — yeniden satın almayın; expired, faturanın ödenmeden süresinin dolduğu anlamına gelir.

Şunlardan biri:createdinvoicedpaiddeliveringdeliveredneeds_operatorfailedrefund_pendingrefundedexpired
orders[].fundingenum

Ödemeyi gerçekte hangi yolun karşıladığı. FUNDING_AUTO bunlardan birine çözümlenir.

Şunlardan biri:invoicebalance
orders[].total_usdmoney

Siparişin tahsil ettiği tutar.

orders[].invoice_idstring

Arkasındaki fatura — hangi yol öderse ödesin, her siparişin bir faturası vardır.

orders[].itemsint

Siparişin kaç hak oluşturduğu veya uzattığı.

orders[].created_atunix

Siparişin verildiği an.

orders[].delivered_atunix

Teslimin bittiği an. O ana kadar yoktur.

orders[].breakdownobject

Müşterinin onayladığı teklif, olduğu gibi — Quote'un döndürdüğüyle aynı biçim.

next_cursorcursor

Sonraki sayfa için cursor olarak geri gönderin. Yok/boş = her şey elinizde.

Örnek yanıt
{
  "orders": [
    {"order_id": "ord_7b2c9d", "product": "vpn", "kind": "new", "status": "delivered",
     "funding": "balance", "total_usd": "11.90", "invoice_id": "inv_5k8p2q",
     "items": 1, "created_at": "1785230043", "delivered_at": "1785230103"}
  ]
}

VPN yönetimi

POST

ListVPN

read
https://apiservice.vitamindata.net/api/v1/ListVPN

Elinizdeki tüm VPN hesapları, kalan trafik ve bitiş tarihiyle.

İstek
limitintisteğe bağlı

Sayfa boyutu. Varsayılan 50, en çok 200.

cursorcursoristeğe bağlı

Önceki yanıtın next_cursor değeri. İlk sayfa için atlayın.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/ListVPN \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"limit":25,"cursor":""}'
Yanıt200 · application/json
vpnsarray

Hesaplarınız.

vpns[].vpn_idstring

Diğer tüm VPN fiillerinin aldığı genel kimlik.

vpns[].usernamestring

Uygulamalarda gösterilen kimlik bilgisi adı.

vpns[].statusstring

Hesabın panelde göründüğü hâliyle durumu — askıya alınmadıkça veya süresi dolmadıkça active.

vpns[].remaining_bytesbytes

Tüm paketlerinde kalan toplam trafik.

vpns[].total_downloadbytes

Tüm zamanların indirmesi, canlı VPN düzleminin bildirdiği gibi. ListVPN içinde her zaman 0'dır — liste, yön kırılımı olmayan önbellekten gelir. Liste için used_bytes, kırılım için GetVPN/GetVPNUsage kullanın.

vpns[].total_uploadbytes

Tüm zamanların yüklemesi. total_download ile aynı uyarı: ListVPN içinde 0.

vpns[].used_bytesbytes

Gerçekten harcanan tüm zamanların trafiği (indirme + yükleme). Bu değer her VPN için tutulur, bu yüzden ListVPN dahil tüm uç noktalarda doğrudur.

vpns[].expires_atunix

Hesabın sona erdiği an.

vpns[].max_onlineint

İzin verilen eşzamanlı cihaz sayısı.

vpns[].daily_limit_bytesbytes

Bugünün üst sınırı. Yok/0 = günlük sınır YOK.

vpns[].daily_used_bytesbytes

Bugünün üst sınırından harcanan.

vpns[].daily_reset_unixunix

Günlük sayacın sıfırlandığı an.

vpns[].allowed_protocolsint

Uygulamalarımızın kullandığı bir protokol bit maskesi. Opak kabul edin.

vpns[].cache_atunix

Rakamların tazeliği: live ayarlı değilse bu zaman damgası kadar eskidirler.

vpns[].created_atunix

Hesabın oluşturulduğu an.

vpns[].livebool

Rakamlar önbellekten değil, az önce ağdan geldi.

next_cursorcursor

Sonraki sayfa için cursor olarak geri gönderin. Yok/boş = her şey elinizde.

Örnek yanıt
{
  "vpns": [{
    "vpn_id": "vpn_6t2k9p",
    "username": "u482913",
    "status": "active",
    "remaining_bytes": "96636764160",
    "total_download": "10737418240",
    "used_bytes": "11811160064",
    "total_upload": "1073741824",
    "expires_at": "1793188800",
    "max_online": 3,
    "cache_at": "1785412700",
    "created_at": "1785000000"
  }],
  "next_cursor": "vpn_6t2k9p"
}
POST

GetVPN

read
https://apiservice.vitamindata.net/api/v1/GetVPN

Bir hesabın ayrıntıları. live:true, sayıların şu anda ağdan geldiği anlamına gelir.

İstek
vpn_idstringzorunlu

Hesabın genel kimliği (vpn_…), ListVPN'den veya bir siparişin tesliminden.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/GetVPN \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"vpn_id":"vpn_6t2k9p"}'
Yanıt200 · application/json
vpnobject

Hesap.

vpn.vpn_idstring

Diğer tüm VPN fiillerinin aldığı genel kimlik.

vpn.usernamestring

Uygulamalarda gösterilen kimlik bilgisi adı.

vpn.statusstring

Hesabın panelde göründüğü hâliyle durumu — askıya alınmadıkça veya süresi dolmadıkça active.

vpn.remaining_bytesbytes

Tüm paketlerinde kalan toplam trafik.

vpn.total_downloadbytes

Tüm zamanların indirmesi, canlı VPN düzleminin bildirdiği gibi. ListVPN içinde her zaman 0'dır — liste, yön kırılımı olmayan önbellekten gelir. Liste için used_bytes, kırılım için GetVPN/GetVPNUsage kullanın.

vpn.total_uploadbytes

Tüm zamanların yüklemesi. total_download ile aynı uyarı: ListVPN içinde 0.

vpn.used_bytesbytes

Gerçekten harcanan tüm zamanların trafiği (indirme + yükleme). Bu değer her VPN için tutulur, bu yüzden ListVPN dahil tüm uç noktalarda doğrudur.

vpn.expires_atunix

Hesabın sona erdiği an.

vpn.max_onlineint

İzin verilen eşzamanlı cihaz sayısı.

vpn.daily_limit_bytesbytes

Bugünün üst sınırı. Yok/0 = günlük sınır YOK.

vpn.daily_used_bytesbytes

Bugünün üst sınırından harcanan.

vpn.daily_reset_unixunix

Günlük sayacın sıfırlandığı an.

vpn.allowed_protocolsint

Uygulamalarımızın kullandığı bir protokol bit maskesi. Opak kabul edin.

vpn.cache_atunix

Rakamların tazeliği: live ayarlı değilse bu zaman damgası kadar eskidirler.

vpn.created_atunix

Hesabın oluşturulduğu an.

vpn.livebool

Rakamlar önbellekten değil, az önce ağdan geldi.

livebool

Ağdan taze. Yok = okuma modelinden sunuldu, cache_at kadar eski.

Örnek yanıt
{
  "vpn": {
    "vpn_id": "vpn_6t2k9p",
    "username": "u482913",
    "status": "active",
    "remaining_bytes": "96636764160",
    "total_download": "10737418240",
    "used_bytes": "11811160064",
    "total_upload": "1073741824",
    "expires_at": "1793188800",
    "max_online": 3,
    "cache_at": "1785412700",
    "created_at": "1785000000"
  },
  "live": true
}
POST

GetVPNUsage

read
https://apiservice.vitamindata.net/api/v1/GetVPNUsage

Kullanılan ve kalan trafik, varsa bugünün üst sınırı.

İstek
vpn_idstringzorunlu

Hesabın genel kimliği (vpn_…), ListVPN'den veya bir siparişin tesliminden.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/GetVPNUsage \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"vpn_id":"vpn_6t2k9p"}'
Yanıt200 · application/json
vpn_idstring

Aynen geri döner.

remaining_bytesbytes

Kalan trafik.

total_downloadbytes

Ömür boyu indirme.

total_uploadbytes

Ömür boyu yükleme.

expires_atunix

Hesabın sona erdiği an.

daily_limit_bytesbytes

Bugünün üst sınırı. Yoksa = sınır yok.

daily_used_bytesbytes

Bugünün üst sınırından harcanan.

daily_reset_unixunix

Günlük sayacın sıfırlandığı an.

cache_atunix

Canlı değilken rakamların tazeliği.

livebool

Az önce ağdan, taze.

seriesarray

Geçmiş kullanım serisi için ayrılmıştır — bugün boş.

series[].tunix

Dilimin başlangıcı.

series[].rxbytes

Dilimde indirilen.

series[].txbytes

Dilimde yüklenen.

Örnek yanıt
{
  "vpn_id": "vpn_6t2k9p",
  "remaining_bytes": "96636764160",
  "total_download": "10737418240",
  "total_upload": "1073741824",
  "expires_at": "1793188800",
  "daily_limit_bytes": "53687091200",
  "daily_used_bytes": "1273741824",
  "daily_reset_unix": "1785456000",
  "cache_at": "1785412700",
  "live": true
}
POST

ListVPNBundles

read
https://apiservice.vitamindata.net/api/v1/ListVPNBundles

Bir hesabın arkasındaki trafik cüzdanları, tükenecekleri sırayla.

"Müşterimin ücretsiz trafiği varken ücretli trafiği neden azaldı?" sorusunu böyle yanıtlarsınız — sırada tükenecek olan queue_position 1'dir. live:false okuyamadığımız anlamına gelir; hiç olmamasıyla aynı şey değildir.

İstek
vpn_idstringzorunlu

Hesabın genel kimliği (vpn_…), ListVPN'den veya bir siparişin tesliminden.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/ListVPNBundles \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"vpn_id":"vpn_6t2k9p"}'
Yanıt200 · application/json
bundlesarray

Cüzdanlar, tüketim sırasıyla.

bundles[].bundle_idstring

Cüzdanın kimliği.

bundles[].freebool

Satın alınmak yerine ücretsiz katman tarafından verilmiş.

bundles[].sourceenum

Cüzdanın nereden geldiği.

Şunlardan biri:buyextendmigratedfree_tier
bundles[].granted_bytesbytes

Verildiği andaki tam boyutu.

bundles[].remaining_bytesbytes

İçinde ne kaldığı.

bundles[].granted_atunix

Ne zaman verildiği.

bundles[].expires_atunix

Harcansın ya da harcanmasın ne zaman sona ereceği.

bundles[].daily_limit_bytesbytes

Kendi günlük üst sınırı. Yoksa = sınır yok.

bundles[].statusenum

Rakamla değil, yazıyla — böylece 2'nin tükenmiş demek olduğunu asla öğrenmek zorunda kalmazsınız.

Şunlardan biri:activedisabledexhausted
bundles[].queue_positionint

KULLANILABİLİR cüzdanlar üzerinde, tüketim sırasına göre 1 tabanlı — sırada tükenecek olan 1'dir. 0/yok, kuyruğun dışında demektir (harcanmış, süresi dolmuş veya devre dışı).

bundles[].plan_gbint

Satıldığı boyut, GB olarak.

bundles[].plan_daysint

Satıldığı geçerlilik süresi, gün olarak.

bundles[].invoice_idstring

Geldiği satın alma. Ücretsiz bir tahsiste yoktur.

livebool

Yok/false = hak katmanına ulaşılamadı; bu yüzden liste yanlış olmak yerine BOŞ. "Okuyamadık" ile "hiç yok" farklı cümlelerdir.

Örnek yanıt
{
  "bundles": [
    {"bundle_id": "bnd_2m8x", "source": "buy",
     "granted_bytes": "107374182400", "remaining_bytes": "96636764160",
     "granted_at": "1785000000", "expires_at": "1793188800",
     "status": "active", "queue_position": 1, "plan_gb": 100, "plan_days": 30,
     "invoice_id": "inv_5k8p2q"},
    {"bundle_id": "bnd_9k1f", "free": true, "source": "free_tier",
     "granted_bytes": "5368709120", "remaining_bytes": "5368709120",
     "granted_at": "1784000000", "expires_at": "1793188800",
     "status": "active", "queue_position": 2, "plan_gb": 5, "plan_days": 30}
  ],
  "live": true
}
POST

SetVPNPassword

credentials
https://apiservice.vitamindata.net/api/v1/SetVPNPassword

Bir hesabın şifresini değiştirir.

Ayrı credentials kapsamını gerektirir — manage bunu asla kapsamaz.

İstek
vpn_idstringzorunlu

Hesabın genel kimliği (vpn_…), ListVPN'den veya bir siparişin tesliminden.

new_passwordstringzorunlu

Ayarlanacak şifre.

credentialstringisteğe bağlı

Çok kimlik bilgili hesaplarda hangi kimlik bilgisi. Boş = birincil olan.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/SetVPNPassword \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"vpn_id":"vpn_6t2k9p","new_password":"s3cr3t-Enough","credential":""}'
Yanıt200 · application/json
usernamestring

Değişikliğin uygulandığı kimlik bilgisi.

Örnek yanıt
{"username": "u482913"}
POST

SetVPNState

manage
https://apiservice.vitamindata.net/api/v1/SetVPNState

Bir hesabı askıya alır veya devam ettirir.

İstek
vpn_idstringzorunlu

Hesabın genel kimliği (vpn_…), ListVPN'den veya bir siparişin tesliminden.

stateenumzorunlu

Ne yapılacağı.

Şunlardan biri:suspendresume
Örnek istek
curl https://apiservice.vitamindata.net/api/v1/SetVPNState \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"vpn_id":"vpn_6t2k9p","state":"suspend"}'
Yanıt200 · application/json
statusenum

Hesabın vardığı durum.

Şunlardan biri:suspendedactive
Örnek yanıt
{"status": "suspended"}
POST

DeleteVPN

manage
https://apiservice.vitamindata.net/api/v1/DeleteVPN

Bir hesabı siler. Geri alma ve iade yoktur.

İstek
vpn_idstringzorunlu

Hesabın genel kimliği (vpn_…), ListVPN'den veya bir siparişin tesliminden.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/DeleteVPN \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"vpn_id":"vpn_6t2k9p"}'
Yanıt200 · application/json
statusenum

Başarı durumunda her zaman deleted.

Şunlardan biri:deleted
Örnek yanıt
{"status": "deleted"}

Sunucu satışı

Bir VPS satışı, VPN satışıyla aynı ödeme sözleşmesidir — yalnızca sepet farklıdır.

POST

GetVPSStorefront

read
https://apiservice.vitamindata.net/api/v1/GetVPSStorefront

Konumlar, her birinde fiyatlanan planlar ve önyüklenebilir imajlar.

available:false olan bir düğümün kapasitesi kalmamıştır — gösterin, ama satışa sunmayın.

İstek

Parametre yok — boş bir nesne gönderin: {}.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/GetVPSStorefront \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{}'
Yanıt200 · application/json
nodesarray

Konumlar, her biri kendi fiyatlı planlarıyla.

nodes[].node_idstring

Sepetin node_id alanının aldığı değer.

nodes[].labelstring

Görünen ad (Frankfurt).

nodes[].regionstring

Gruplama için kaba bölge kodu.

nodes[].countrystring

Bayraklar için ISO ülke kodu.

nodes[].availablebool

Yok/false = kapasite kalmamış: gösterin, ama satışa sunmayın.

nodes[].plansarray

Burada satılabilenler, fiyatlarıyla.

nodes[].plans[].plan_codestring

Sepetin plan_code alanının aldığı değer.

nodes[].plans[].namestring

Görünen ad.

nodes[].plans[].vcpuint

Çekirdek sayısı.

nodes[].plans[].ram_mbint

MB olarak bellek.

nodes[].plans[].disk_gbint

GB olarak disk.

nodes[].plans[].traffic_bytesbytes

Dahil edilen aylık trafik.

nodes[].plans[].price_usd_monthmoney

BU DÜĞÜMDEKİ aylık fiyat — aynı plan başka yerde farklı fiyatlanabilir.

imagesarray

Önyüklenebilir veya kurulabilir her şey.

images[].shastring

İmajın TEK tanımlayıcısı — sepetler, yeniden kurulumlar ve ISO takma işlemlerinin hepsi bunu alır.

images[].namestring

İnsan tarafından okunur ad (Debian 13).

images[].kindenum

Bir disk imajı doğrudan kurulur; iso ise kendisinden önyüklediğiniz bir kurucudur.

Şunlardan biri:diskiso
images[].os_familyenum

Arayüzünüzdeki gruplama ve simgeler için.

Şunlardan biri:linuxwindowsmikrotik
images[].min_disk_gbint

Daha küçük bir diske yeniden kurulum reddedilir — önce diski büyütün.

months_minint

Yeni bir VM'in satın alınabileceği en kısa süre.

months_maxint

En uzunu.

Örnek yanıt
{
  "nodes": [
    {"node_id": "de1", "label": "Frankfurt", "region": "eu", "country": "DE", "available": true,
     "plans": [
       {"plan_code": "s2", "name": "S2", "vcpu": 2, "ram_mb": 4096, "disk_gb": 40,
        "traffic_bytes": "2199023255552", "price_usd_month": "8.00"}
     ]}
  ],
  "images": [
    {"sha": "9a1b8c2d7e6f", "name": "Debian 13", "kind": "disk", "os_family": "linux", "min_disk_gb": 10}
  ],
  "months_min": 1,
  "months_max": 12
}
POST

ListVPSImages

read
https://apiservice.vitamindata.net/api/v1/ListVPSImages

Önyükleyebileceğiniz veya kurabileceğiniz her imaj, sha ile.

Bir sepet, bir yeniden kurulum ve bir ISO takma işleminin hepsi bu sha'yı alır. Bir imajı başka hiçbir şey tanımlamaz.

İstek

Parametre yok — boş bir nesne gönderin: {}.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/ListVPSImages \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{}'
Yanıt200 · application/json
imagesarray

Katalog.

images[].shastring

İmajın TEK tanımlayıcısı — sepetler, yeniden kurulumlar ve ISO takma işlemlerinin hepsi bunu alır.

images[].namestring

İnsan tarafından okunur ad (Debian 13).

images[].kindenum

Bir disk imajı doğrudan kurulur; iso ise kendisinden önyüklediğiniz bir kurucudur.

Şunlardan biri:diskiso
images[].os_familyenum

Arayüzünüzdeki gruplama ve simgeler için.

Şunlardan biri:linuxwindowsmikrotik
images[].min_disk_gbint

Daha küçük bir diske yeniden kurulum reddedilir — önce diski büyütün.

Örnek yanıt
{
  "images": [
    {"sha": "9a1b8c2d7e6f", "name": "Debian 13", "kind": "disk", "os_family": "linux", "min_disk_gb": 10},
    {"sha": "3f4e5d6c7b8a", "name": "Windows Server 2025 installer", "kind": "iso",
     "os_family": "windows", "min_disk_gb": 40}
  ]
}
POST

QuoteVPS

read
https://apiservice.vitamindata.net/api/v1/QuoteVPS

Yeni bir sunucunun fiyatı, kalem kalem.

İstek
cartobjectzorunlu

Fiyatlanacak sunucu.

cart.node_idstringzorunlu

VM'in nerede oluşturulacağı, mağazanın düğümlerinden.

cart.placementstringayrılmış — göndermeyin

Ayrılmıştır. Bu API'de sunucunun nerede oluşturulacağına her zaman node_id karar verir — onu gönderin ve düğümü mağazadan kendiniz seçin.

Şunlardan biri:auto
cart.plan_codestringzorunlu

Plan, seçilen düğümün kendi fiyat listesinden — planlar ve fiyatlar düğüme göre değişir.

cart.image_shastringzorunlu

Neyin önyükleneceği veya kurulacağı, sha ile. Disk imajları doğrudan kurulur; bir kurucu ISO ise takılı gelir ve VM ondan önyüklenecek şekilde ayarlanır.

cart.namestringzorunlu

VM'in ana bilgisayar adı / etiketi.

cart.monthsintzorunlu

Başlangıç süresi, mağazanın ay sınırları içinde.

cart.extra_disk_gbintisteğe bağlı

Planınkinin üzerine ek disk, GB olarak.

cart.extra_ipsintisteğe bağlı

Ek genel IPv4 adresleri.

cart.extra_traffic_tbmoneyisteğe bağlı

TB olarak ek aylık trafik, ondalık metin olarak ("0.5").

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/QuoteVPS \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"cart":{"node_id":"de1","plan_code":"s2","image_sha":"9a1b8c2d7e6f","months":2,"name":"web-1","extra_disk_gb":20,"extra_ips":1,"extra_traffic_tb":"0.5"}}'
Yanıt200 · application/json
quoteobject

Kalem kalem fiyat. Hiçbir şey oluşturulmaz ve hiçbir şey tahsil edilmez.

quote.model_namestring

Hangi fiyatlandırma modelinin yanıtladığı.

quote.model_typestring

Modelin motor sürümü.

quote.base_usdmoney

İndirimler ve ek ücretler öncesi fiyat.

quote.total_usdmoney

Nihai fiyat — bu sepetle yapılan bir satışın tahsil edeceği tutar.

quote.linesarray

Kalem dökümü, işaretli; toplamı tam olarak nihai tutarı verir.

quote.lines[].codestring

Bu satırın ne olduğu (base, bir indirim kodu, bir ek ücret…).

quote.lines[].kindstring

Satırın kategorisi, arayüzünüzde gruplamak için.

quote.lines[].amount_usdmoney

İşaretli. İndirimler negatiftir; satırların toplamı tam olarak total_usd eder.

quote.lines[].pctstring

Varsa, satırın arkasındaki yüzde.

quote.cappedbool

Toplam, modelin üst sınırına takıldı.

quote.floor_appliedbool

Toplam, modelin taban fiyatına yükseltildi.

quote.clampedenum

Bir sepet değeri fiyatlamadan önce sınırların içine çekildiğinde ayarlanır.

Şunlardan biri:minmax
quote.invalidstring

Boş değilse sepet fiyatlanamıyor demektir — gösterin ve böyle bir teklifi ASLA tahsil etmeyin.

quote.metamap

Model ekstraları, metin→metin (ör. bir yükseltmenin remaining_days değeri).

Örnek yanıt
{
  "quote": {
    "model_name": "vps_plan",
    "model_type": "vps_plan_v1",
    "base_usd": "16.00",
    "total_usd": "16.00",
    "lines": [
      {"code": "plan_s2", "kind": "base", "amount_usd": "16.00"}
    ],
    "meta": {"months": "2"}
  }
}
POST

CreateVPSOrder

buyIdempotency-Key
https://apiservice.vitamindata.net/api/v1/CreateVPSOrder

Bir sunucu satın alır ve kurar.

Teslim için GetOrder, ardından makine için GetVPS çağrısını yoklayın.

İstek
cartobjectzorunlu

Ne oluşturulacağı — QuoteVPS'in fiyatladığı biçimle aynı.

cart.node_idstringzorunlu

VM'in nerede oluşturulacağı, mağazanın düğümlerinden.

cart.placementstringayrılmış — göndermeyin

Ayrılmıştır. Bu API'de sunucunun nerede oluşturulacağına her zaman node_id karar verir — onu gönderin ve düğümü mağazadan kendiniz seçin.

Şunlardan biri:auto
cart.plan_codestringzorunlu

Plan, seçilen düğümün kendi fiyat listesinden — planlar ve fiyatlar düğüme göre değişir.

cart.image_shastringzorunlu

Neyin önyükleneceği veya kurulacağı, sha ile. Disk imajları doğrudan kurulur; bir kurucu ISO ise takılı gelir ve VM ondan önyüklenecek şekilde ayarlanır.

cart.namestringzorunlu

VM'in ana bilgisayar adı / etiketi.

cart.monthsintzorunlu

Başlangıç süresi, mağazanın ay sınırları içinde.

cart.extra_disk_gbintisteğe bağlı

Planınkinin üzerine ek disk, GB olarak.

cart.extra_ipsintisteğe bağlı

Ek genel IPv4 adresleri.

cart.extra_traffic_tbmoneyisteğe bağlı

TB olarak ek aylık trafik, ondalık metin olarak ("0.5").

fundingenumzorunlu

Nasıl ödeneceği — bkz. Ödeme yapmak. Varsayılan yoktur: atlanırsa istek reddedilir.

Şunlardan biri:FUNDING_AUTOFUNDING_BALANCEFUNDING_INVOICE
expected_total_usdmoneyisteğe bağlı

Onay güvencesi. Ayarlıysa ve güncel teklifimiz farklıysa, müşterinizin hiç görmediği bir tutarı tahsil etmek yerine satış price_changed ile reddedilir.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/CreateVPSOrder \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"cart":{"node_id":"de1","plan_code":"s2","image_sha":"9a1b8c2d7e6f","months":2,"name":"web-1","extra_disk_gb":20,"extra_ips":1,"extra_traffic_tb":"0.5"},"funding":"FUNDING_AUTO","expected_total_usd":"36.00"}'
Yanıt200 · application/json
orderobject

Sipariş — durumu delivered olana kadar GetOrder çağrısını yoklayın.

order.order_idstring

Siparişin genel kimliği (ord_…).

order.productenum

Ne satın alındığı.

Şunlardan biri:vpnvps
order.kindstring

Satın alma biçimi: new, extend, upgrade

order.statusenum

Yaşam döngüsü. Hedef delivered'dır; needs_operator, paranın alındığı ve teslimi bir insanın tamamlamakta olduğu anlamına gelir — yeniden satın almayın; expired, faturanın ödenmeden süresinin dolduğu anlamına gelir.

Şunlardan biri:createdinvoicedpaiddeliveringdeliveredneeds_operatorfailedrefund_pendingrefundedexpired
order.fundingenum

Ödemeyi gerçekte hangi yolun karşıladığı. FUNDING_AUTO bunlardan birine çözümlenir.

Şunlardan biri:invoicebalance
order.total_usdmoney

Siparişin tahsil ettiği tutar.

order.invoice_idstring

Arkasındaki fatura — hangi yol öderse ödesin, her siparişin bir faturası vardır.

order.itemsint

Siparişin kaç hak oluşturduğu veya uzattığı.

order.created_atunix

Siparişin verildiği an.

order.delivered_atunix

Teslimin bittiği an. O ana kadar yoktur.

order.breakdownobject

Müşterinin onayladığı teklif, olduğu gibi — Quote'un döndürdüğüyle aynı biçim.

invoiceobject

Siparişin arkasındaki fatura: payment_required iken ödenebilir, completed iken zaten kapanmıştır.

invoice.invoice_idstring

Ödeme geçidinin fatura kimliği (inv_…).

invoice.statusenum

pending ödenebilir demektir. confirmed'dan delivered_redirected'a kadar her şey paranın geri dönülmez biçimde girdiği anlamına gelir — hepsini ÖDENDİ sayın. expired, bağlantının ödenmeden süresinin dolduğu anlamına gelir.

Şunlardan biri:pendingconfirmedsweepingsweptdeliveringdelivereddelivered_redirectedexpired
invoice.pay_urlstring

Barındırılan ödeme sayfası. Müşterinizi buraya gönderin; her ödeme yolu (koinler, zincirler, bakiye) bunun arkasındadır.

invoice.pay_telegram_urlstring

Aynı fatura, Telegram içinde ödenebilir hâlde: ödeme sağlayıcısının kendi botunu açar, bot tutarı gösterir ve ödemeyi orada alır. Uygulamadan çıkmak istemeyen müşteriler için pay_url ile birlikte sunun. Bulunmayabilir — yalnızca botu yapılandırılmış bir ödeme sağlayıcısında vardır, bu yüzden asla tek ödeme düğmeniz olmasın.

invoice.price_usdmoney

Faturanın tahsil ettiği tutar.

invoice.expires_atunix

Ödeme penceresinin kapandığı an.

paidbool

Para tahsil edildi. payment_required ile birlikte yoktur (= false).

statusenum

Dallanılacak ASIL alan — bkz. Ödeme yapmak.

Şunlardan biri:completedpayment_required
Örnek yanıt
{
  "order": {
    "order_id": "ord_2f8k3j", "product": "vps", "kind": "new",
    "status": "invoiced", "funding": "invoice", "total_usd": "16.00",
    "invoice_id": "inv_7h4w9s", "items": 1, "created_at": "1785412800"
  },
  "invoice": {
    "invoice_id": "inv_7h4w9s", "status": "pending",
    "pay_url": "https://pay.example.com/i/inv_7h4w9s",
    "price_usd": "16.00", "expires_at": "1785499200"
  },
  "status": "payment_required"
}
POST

QuoteVPSExtend

read
https://apiservice.vitamindata.net/api/v1/QuoteVPSExtend

Bir sunucuyu yenilemenin maliyeti.

İstek
vps_idstringzorunlu

Sunucunun kimliği, ListVPS'ten.

monthsintzorunlu

Kaç ay ekleneceği. Mağazanın months_minmonths_max değerleri arayüzünüzün sunması gerekenlerdir, ama bir yenileme bunların içine ÇEKİLMEZ — makul bir sayı gönderin, çünkü ne gönderirseniz fiyatlanan ve tahsil edilen o olur.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/QuoteVPSExtend \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"vps_id":"vm_7q3k1n","months":1}'
Yanıt200 · application/json
quoteobject

Kalem kalem fiyat. Hiçbir şey oluşturulmaz ve hiçbir şey tahsil edilmez.

quote.model_namestring

Hangi fiyatlandırma modelinin yanıtladığı.

quote.model_typestring

Modelin motor sürümü.

quote.base_usdmoney

İndirimler ve ek ücretler öncesi fiyat.

quote.total_usdmoney

Nihai fiyat — bu sepetle yapılan bir satışın tahsil edeceği tutar.

quote.linesarray

Kalem dökümü, işaretli; toplamı tam olarak nihai tutarı verir.

quote.lines[].codestring

Bu satırın ne olduğu (base, bir indirim kodu, bir ek ücret…).

quote.lines[].kindstring

Satırın kategorisi, arayüzünüzde gruplamak için.

quote.lines[].amount_usdmoney

İşaretli. İndirimler negatiftir; satırların toplamı tam olarak total_usd eder.

quote.lines[].pctstring

Varsa, satırın arkasındaki yüzde.

quote.cappedbool

Toplam, modelin üst sınırına takıldı.

quote.floor_appliedbool

Toplam, modelin taban fiyatına yükseltildi.

quote.clampedenum

Bir sepet değeri fiyatlamadan önce sınırların içine çekildiğinde ayarlanır.

Şunlardan biri:minmax
quote.invalidstring

Boş değilse sepet fiyatlanamıyor demektir — gösterin ve böyle bir teklifi ASLA tahsil etmeyin.

quote.metamap

Model ekstraları, metin→metin (ör. bir yükseltmenin remaining_days değeri).

Örnek yanıt
{
  "quote": {
    "model_name": "vps_plan",
    "model_type": "vps_plan_v1",
    "base_usd": "16.00",
    "total_usd": "16.00",
    "lines": [
      {"code": "plan_s2", "kind": "base", "amount_usd": "16.00"}
    ],
    "meta": {"months": "2"}
  }
}
POST

ExtendVPS

buyIdempotency-Key
https://apiservice.vitamindata.net/api/v1/ExtendVPS

Bir sunucuyu yeniler.

Erken yenilemek ekstra maliyet getirmez: yeni bitiş tarihi bugünden değil, mevcut bitiş tarihinden ölçülür.

İstek
vps_idstringzorunlu

Sunucunun kimliği, ListVPS'ten.

monthsintzorunlu

Kaç ay ekleneceği. Mağazanın months_minmonths_max değerleri arayüzünüzün sunması gerekenlerdir, ama bir yenileme bunların içine ÇEKİLMEZ — makul bir sayı gönderin, çünkü ne gönderirseniz fiyatlanan ve tahsil edilen o olur.

fundingenumzorunlu

Nasıl ödeneceği — bkz. Ödeme yapmak. Varsayılan yoktur: atlanırsa istek reddedilir.

Şunlardan biri:FUNDING_AUTOFUNDING_BALANCEFUNDING_INVOICE
expected_total_usdmoneyisteğe bağlı

Onay güvencesi. Ayarlıysa ve güncel teklifimiz farklıysa, müşterinizin hiç görmediği bir tutarı tahsil etmek yerine satış price_changed ile reddedilir.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/ExtendVPS \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"vps_id":"vm_7q3k1n","months":1,"funding":"FUNDING_AUTO","expected_total_usd":"8.00"}'
Yanıt200 · application/json
orderobject

Sipariş — durumu delivered olana kadar GetOrder çağrısını yoklayın.

order.order_idstring

Siparişin genel kimliği (ord_…).

order.productenum

Ne satın alındığı.

Şunlardan biri:vpnvps
order.kindstring

Satın alma biçimi: new, extend, upgrade

order.statusenum

Yaşam döngüsü. Hedef delivered'dır; needs_operator, paranın alındığı ve teslimi bir insanın tamamlamakta olduğu anlamına gelir — yeniden satın almayın; expired, faturanın ödenmeden süresinin dolduğu anlamına gelir.

Şunlardan biri:createdinvoicedpaiddeliveringdeliveredneeds_operatorfailedrefund_pendingrefundedexpired
order.fundingenum

Ödemeyi gerçekte hangi yolun karşıladığı. FUNDING_AUTO bunlardan birine çözümlenir.

Şunlardan biri:invoicebalance
order.total_usdmoney

Siparişin tahsil ettiği tutar.

order.invoice_idstring

Arkasındaki fatura — hangi yol öderse ödesin, her siparişin bir faturası vardır.

order.itemsint

Siparişin kaç hak oluşturduğu veya uzattığı.

order.created_atunix

Siparişin verildiği an.

order.delivered_atunix

Teslimin bittiği an. O ana kadar yoktur.

order.breakdownobject

Müşterinin onayladığı teklif, olduğu gibi — Quote'un döndürdüğüyle aynı biçim.

invoiceobject

Siparişin arkasındaki fatura: payment_required iken ödenebilir, completed iken zaten kapanmıştır.

invoice.invoice_idstring

Ödeme geçidinin fatura kimliği (inv_…).

invoice.statusenum

pending ödenebilir demektir. confirmed'dan delivered_redirected'a kadar her şey paranın geri dönülmez biçimde girdiği anlamına gelir — hepsini ÖDENDİ sayın. expired, bağlantının ödenmeden süresinin dolduğu anlamına gelir.

Şunlardan biri:pendingconfirmedsweepingsweptdeliveringdelivereddelivered_redirectedexpired
invoice.pay_urlstring

Barındırılan ödeme sayfası. Müşterinizi buraya gönderin; her ödeme yolu (koinler, zincirler, bakiye) bunun arkasındadır.

invoice.pay_telegram_urlstring

Aynı fatura, Telegram içinde ödenebilir hâlde: ödeme sağlayıcısının kendi botunu açar, bot tutarı gösterir ve ödemeyi orada alır. Uygulamadan çıkmak istemeyen müşteriler için pay_url ile birlikte sunun. Bulunmayabilir — yalnızca botu yapılandırılmış bir ödeme sağlayıcısında vardır, bu yüzden asla tek ödeme düğmeniz olmasın.

invoice.price_usdmoney

Faturanın tahsil ettiği tutar.

invoice.expires_atunix

Ödeme penceresinin kapandığı an.

paidbool

Para tahsil edildi. payment_required ile birlikte yoktur (= false).

statusenum

Dallanılacak ASIL alan — bkz. Ödeme yapmak.

Şunlardan biri:completedpayment_required
Örnek yanıt
{
  "order": {
    "order_id": "ord_5d1p8m", "product": "vps", "kind": "extend",
    "status": "paid", "funding": "balance", "total_usd": "8.00",
    "invoice_id": "inv_1c6v3z", "items": 1, "created_at": "1785412800"
  },
  "invoice": {
    "invoice_id": "inv_1c6v3z", "status": "confirmed", "price_usd": "8.00"
  },
  "paid": true,
  "status": "completed"
}
POST

QuoteVPSUpgrade

read
https://apiservice.vitamindata.net/api/v1/QuoteVPSUpgrade

Daha büyük bir yapılandırmanın maliyeti, ödenmiş süreye oranlanmış olarak.

İstek
vps_idstringzorunlu

Sunucunun kimliği, ListVPS'ten.

specobjectzorunlu

HEDEF yapılandırma. Atlanan/sıfır alanlar mevcut değerini korur.

spec.vcpuintisteğe bağlı

Hedef çekirdek sayısı. 0 mevcut değeri korur.

spec.ram_mbintisteğe bağlı

MB olarak hedef bellek. 0 mevcut değeri korur.

spec.disk_gbintisteğe bağlı

GB olarak hedef disk. Disk yalnızca büyür — daha küçük bir değer reddedilir, çünkü işletim sistemi altındaki bir dosya sistemini küçültmek veri kaybı demektir.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/QuoteVPSUpgrade \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"vps_id":"vm_7q3k1n","spec":{"vcpu":4,"ram_mb":8192,"disk_gb":80}}'
Yanıt200 · application/json
quoteobject

Kalem kalem fiyat. Hiçbir şey oluşturulmaz ve hiçbir şey tahsil edilmez.

quote.model_namestring

Hangi fiyatlandırma modelinin yanıtladığı.

quote.model_typestring

Modelin motor sürümü.

quote.base_usdmoney

İndirimler ve ek ücretler öncesi fiyat.

quote.total_usdmoney

Nihai fiyat — bu sepetle yapılan bir satışın tahsil edeceği tutar.

quote.linesarray

Kalem dökümü, işaretli; toplamı tam olarak nihai tutarı verir.

quote.lines[].codestring

Bu satırın ne olduğu (base, bir indirim kodu, bir ek ücret…).

quote.lines[].kindstring

Satırın kategorisi, arayüzünüzde gruplamak için.

quote.lines[].amount_usdmoney

İşaretli. İndirimler negatiftir; satırların toplamı tam olarak total_usd eder.

quote.lines[].pctstring

Varsa, satırın arkasındaki yüzde.

quote.cappedbool

Toplam, modelin üst sınırına takıldı.

quote.floor_appliedbool

Toplam, modelin taban fiyatına yükseltildi.

quote.clampedenum

Bir sepet değeri fiyatlamadan önce sınırların içine çekildiğinde ayarlanır.

Şunlardan biri:minmax
quote.invalidstring

Boş değilse sepet fiyatlanamıyor demektir — gösterin ve böyle bir teklifi ASLA tahsil etmeyin.

quote.metamap

Model ekstraları, metin→metin (ör. bir yükseltmenin remaining_days değeri).

restart_requiredbool

Bu yapılandırmayı uygulamak güç döngüsü gerektirir — müşteri bunu ödemeden ÖNCE öğrenmelidir.

monthly_before_usdmoney

Bugünkü dönemsel fiyat.

monthly_after_usdmoney

Yükseltme sonrası dönemsel fiyat — bundan böyle yenilemelerin maliyeti.

Örnek yanıt
{
  "quote": {
    "model_name": "vps_upgrade",
    "model_type": "vps_plan_v1",
    "base_usd": "4.20",
    "total_usd": "4.20",
    "lines": [
      {"code": "prorate_vcpu", "kind": "vps_upgrade", "amount_usd": "2.40"},
      {"code": "prorate_ram", "kind": "vps_upgrade", "amount_usd": "1.80"}
    ],
    "meta": {"remaining_days": "21", "monthly_delta_usd": "6.00", "quote_expires_at": "1785416400"}
  },
  "restart_required": true,
  "monthly_before_usd": "8.00",
  "monthly_after_usd": "14.00"
}
POST

UpgradeVPS

buyIdempotency-Key
https://apiservice.vitamindata.net/api/v1/UpgradeVPS

Daha büyük bir yapılandırmanın ödemesini alır ve uygular. Disk yalnızca büyüyebilir.

İstek
vps_idstringzorunlu

Sunucunun kimliği, ListVPS'ten.

specobjectzorunlu

HEDEF yapılandırma — önce teklif alın; teklif yeniden başlatma konusunda da bilgi verir.

spec.vcpuintisteğe bağlı

Hedef çekirdek sayısı. 0 mevcut değeri korur.

spec.ram_mbintisteğe bağlı

MB olarak hedef bellek. 0 mevcut değeri korur.

spec.disk_gbintisteğe bağlı

GB olarak hedef disk. Disk yalnızca büyür — daha küçük bir değer reddedilir, çünkü işletim sistemi altındaki bir dosya sistemini küçültmek veri kaybı demektir.

fundingenumzorunlu

Nasıl ödeneceği — bkz. Ödeme yapmak. Varsayılan yoktur: atlanırsa istek reddedilir.

Şunlardan biri:FUNDING_AUTOFUNDING_BALANCEFUNDING_INVOICE
expected_total_usdmoneyisteğe bağlı

Onay güvencesi. Ayarlıysa ve güncel teklifimiz farklıysa, müşterinizin hiç görmediği bir tutarı tahsil etmek yerine satış price_changed ile reddedilir.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/UpgradeVPS \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"vps_id":"vm_7q3k1n","spec":{"vcpu":4,"ram_mb":8192,"disk_gb":80},"funding":"FUNDING_AUTO","expected_total_usd":"4.20"}'
Yanıt200 · application/json
orderobject

Sipariş — durumu delivered olana kadar GetOrder çağrısını yoklayın.

order.order_idstring

Siparişin genel kimliği (ord_…).

order.productenum

Ne satın alındığı.

Şunlardan biri:vpnvps
order.kindstring

Satın alma biçimi: new, extend, upgrade

order.statusenum

Yaşam döngüsü. Hedef delivered'dır; needs_operator, paranın alındığı ve teslimi bir insanın tamamlamakta olduğu anlamına gelir — yeniden satın almayın; expired, faturanın ödenmeden süresinin dolduğu anlamına gelir.

Şunlardan biri:createdinvoicedpaiddeliveringdeliveredneeds_operatorfailedrefund_pendingrefundedexpired
order.fundingenum

Ödemeyi gerçekte hangi yolun karşıladığı. FUNDING_AUTO bunlardan birine çözümlenir.

Şunlardan biri:invoicebalance
order.total_usdmoney

Siparişin tahsil ettiği tutar.

order.invoice_idstring

Arkasındaki fatura — hangi yol öderse ödesin, her siparişin bir faturası vardır.

order.itemsint

Siparişin kaç hak oluşturduğu veya uzattığı.

order.created_atunix

Siparişin verildiği an.

order.delivered_atunix

Teslimin bittiği an. O ana kadar yoktur.

order.breakdownobject

Müşterinin onayladığı teklif, olduğu gibi — Quote'un döndürdüğüyle aynı biçim.

invoiceobject

Siparişin arkasındaki fatura: payment_required iken ödenebilir, completed iken zaten kapanmıştır.

invoice.invoice_idstring

Ödeme geçidinin fatura kimliği (inv_…).

invoice.statusenum

pending ödenebilir demektir. confirmed'dan delivered_redirected'a kadar her şey paranın geri dönülmez biçimde girdiği anlamına gelir — hepsini ÖDENDİ sayın. expired, bağlantının ödenmeden süresinin dolduğu anlamına gelir.

Şunlardan biri:pendingconfirmedsweepingsweptdeliveringdelivereddelivered_redirectedexpired
invoice.pay_urlstring

Barındırılan ödeme sayfası. Müşterinizi buraya gönderin; her ödeme yolu (koinler, zincirler, bakiye) bunun arkasındadır.

invoice.pay_telegram_urlstring

Aynı fatura, Telegram içinde ödenebilir hâlde: ödeme sağlayıcısının kendi botunu açar, bot tutarı gösterir ve ödemeyi orada alır. Uygulamadan çıkmak istemeyen müşteriler için pay_url ile birlikte sunun. Bulunmayabilir — yalnızca botu yapılandırılmış bir ödeme sağlayıcısında vardır, bu yüzden asla tek ödeme düğmeniz olmasın.

invoice.price_usdmoney

Faturanın tahsil ettiği tutar.

invoice.expires_atunix

Ödeme penceresinin kapandığı an.

paidbool

Para tahsil edildi. payment_required ile birlikte yoktur (= false).

statusenum

Dallanılacak ASIL alan — bkz. Ödeme yapmak.

Şunlardan biri:completedpayment_required
Örnek yanıt
{
  "order": {
    "order_id": "ord_5d1p8m", "product": "vps", "kind": "extend",
    "status": "paid", "funding": "balance", "total_usd": "8.00",
    "invoice_id": "inv_1c6v3z", "items": 1, "created_at": "1785412800"
  },
  "invoice": {
    "invoice_id": "inv_1c6v3z", "status": "confirmed", "price_usd": "8.00"
  },
  "paid": true,
  "status": "completed"
}

Sunucu yönetimi

Buradaki her fiil sunucuyu id ile alır — bu çağrılarda alanın adı gerçekten id'dir; para fiillerinin vps_id alanının aksine.

POST

ListVPS

read
https://apiservice.vitamindata.net/api/v1/ListVPS

Makineleriniz, güç durumu ve adresleriyle.

İstek
limitintisteğe bağlı

Sayfa boyutu. Varsayılan 50.

cursorcursoristeğe bağlı

Önceki yanıtın next_cursor değeri. İlk sayfa için atlayın.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/ListVPS \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"limit":50,"cursor":""}'
Yanıt200 · application/json
vpsarray

Makineleriniz.

vps[].idstring

Sunucunun kimliği — her yönetim fiilinin id ve her para fiilinin vps_id alanının aldığı değer.

vps[].namestring

Ana bilgisayar adı / etiketi.

vps[].node_idstring

Nerede çalıştığı.

vps[].lifecycleenum

0 kuruluyor · 1 etkin · 2 askıda · 3 siliniyor · 4 silindi.

Şunlardan biri:01234
vps[].provisionedbool

Makine, barındırıldığı fiziksel sunucuda mevcut.

vps[].power_desiredenum

Gücün ne OLMASI gerektiği: 1 açık, 0/yok kapalı. Canlı durum GetVPSStats.running alanındadır.

Şunlardan biri:01
vps[].vcpuint

Çekirdek sayısı.

vps[].mem_mbint

MB olarak bellek.

vps[].disk_gbint

GB olarak disk.

vps[].image_shastring

Neyden önyüklendiği veya kurulduğu.

vps[].expires_atunix

Sunucunun sona erdiği an — bundan önce ExtendVPS ile yenileyin.

vps[].created_atunix

Oluşturulduğu an.

vps[].ipsarray

Genel (public) adresleri.

vps[].private_ipstring

Planında varsa, özel (private) adresi.

next_cursorcursor

Sonraki sayfa için cursor olarak geri gönderin. Yok/boş = her şey elinizde.

Örnek yanıt
{
  "vps": [{
    "id": "vm_7q3k1n",
    "name": "web-1",
    "node_id": "de1",
    "lifecycle": 1,
    "provisioned": true,
    "power_desired": 1,
    "vcpu": 2,
    "mem_mb": 4096,
    "disk_gb": 40,
    "image_sha": "9a1b8c2d7e6f",
    "expires_at": "1793188800",
    "created_at": "1785000000",
    "ips": ["203.0.113.10"],
    "private_ip": "10.77.0.10"
  }]
}
POST

GetVPS

read
https://apiservice.vitamindata.net/api/v1/GetVPS

Bir makinenin ayrıntıları.

İstek
idstringzorunlu

Sunucunun kimliği, ListVPS'ten. Yönetim fiillerinde alanın adı id'dir — yalnızca para fiilleri vps_id yazar.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/GetVPS \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"id":"vm_7q3k1n"}'
Yanıt200 · application/json
vpsobject

Makine.

vps.idstring

Sunucunun kimliği — her yönetim fiilinin id ve her para fiilinin vps_id alanının aldığı değer.

vps.namestring

Ana bilgisayar adı / etiketi.

vps.node_idstring

Nerede çalıştığı.

vps.lifecycleenum

0 kuruluyor · 1 etkin · 2 askıda · 3 siliniyor · 4 silindi.

Şunlardan biri:01234
vps.provisionedbool

Makine, barındırıldığı fiziksel sunucuda mevcut.

vps.power_desiredenum

Gücün ne OLMASI gerektiği: 1 açık, 0/yok kapalı. Canlı durum GetVPSStats.running alanındadır.

Şunlardan biri:01
vps.vcpuint

Çekirdek sayısı.

vps.mem_mbint

MB olarak bellek.

vps.disk_gbint

GB olarak disk.

vps.image_shastring

Neyden önyüklendiği veya kurulduğu.

vps.expires_atunix

Sunucunun sona erdiği an — bundan önce ExtendVPS ile yenileyin.

vps.created_atunix

Oluşturulduğu an.

vps.ipsarray

Genel (public) adresleri.

vps.private_ipstring

Planında varsa, özel (private) adresi.

livebool

Az önce katmandan okundu.

Örnek yanıt
{
  "vps": {
    "id": "vm_7q3k1n",
    "name": "web-1",
    "node_id": "de1",
    "lifecycle": 1,
    "provisioned": true,
    "power_desired": 1,
    "vcpu": 2,
    "mem_mb": 4096,
    "disk_gb": 40,
    "image_sha": "9a1b8c2d7e6f",
    "expires_at": "1793188800",
    "created_at": "1785000000",
    "ips": ["203.0.113.10"],
    "private_ip": "10.77.0.10"
  },
  "live": true
}
POST

GetVPSStats

read
https://apiservice.vitamindata.net/api/v1/GetVPSStats

Canlı CPU, bellek, disk ve ağ.

İstek
idstringzorunlu

Sunucunun kimliği, ListVPS'ten. Yönetim fiillerinde alanın adı id'dir — yalnızca para fiilleri vps_id yazar.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/GetVPSStats \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"id":"vm_7q3k1n"}'
Yanıt200 · application/json
cpu_pctint

CPU yükü, yüzde.

mem_used_mbint

Kullanılan bellek, MB.

disk_used_mbint

Kullanılan disk, MB.

rx_bpsint64

Gelen, bit/saniye.

tx_bpsint64

Giden, bit/saniye.

runningbool

Makine şu anda açık.

updated_atunix

Bu rakamların örneklendiği an.

Örnek yanıt
{
  "cpu_pct": 12,
  "mem_used_mb": 1536,
  "disk_used_mb": 9216,
  "rx_bps": "1048576",
  "tx_bps": "524288",
  "running": true,
  "updated_at": "1785412790"
}
POST

GetVPSUsage

read
https://apiservice.vitamindata.net/api/v1/GetVPSUsage

Makinenin hakkından kullanılan trafik, paket paket.

İstek
idstringzorunlu

Sunucunun kimliği, ListVPS'ten. Yönetim fiillerinde alanın adı id'dir — yalnızca para fiilleri vps_id yazar.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/GetVPSUsage \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"id":"vm_7q3k1n"}'
Yanıt200 · application/json
total_downbytes

Ömür boyu indirme.

total_upbytes

Ömür boyu yükleme.

bundlesarray

Trafik paketleri; şu anda tükenmekte olanı current işaretler.

bundles[].idint64

Trafik paketinin işlem katmanındaki kimliği.

bundles[].modeint

Katmanın muhasebe modu kodu. Opak kabul edin.

bundles[].bytes_totalbytes

Paketin toplam hakkı.

bundles[].used_dlbytes

Bu paketten indirilen.

bundles[].used_upbytes

Bu paketten yüklenen.

bundles[].stateint

Katmanın durum kodu. Opak kabul edin.

bundles[].currentbool

Şu anda tükenmekte olan paket budur.

bundles[].expires_atunix

Paketin sona erdiği an.

Örnek yanıt
{
  "total_down": "53687091200",
  "total_up": "10737418240",
  "bundles": [
    {"id": "41", "mode": 1, "bytes_total": "2199023255552",
     "used_dl": "53687091200", "used_up": "10737418240",
     "state": 1, "current": true, "expires_at": "1793188800"}
  ]
}
POST

VPSPower

manage
https://apiservice.vitamindata.net/api/v1/VPSPower

Güç kontrolü.

shutdown işletim sistemine sorar; force_stop fişi çeker. İlkini tercih edin.

İstek
idstringzorunlu

Sunucunun kimliği, ListVPS'ten. Yönetim fiillerinde alanın adı id'dir — yalnızca para fiilleri vps_id yazar.

actionenumzorunlu

shutdown/reboot nazik (graceful) yöntemlerdir; reset/force_stop güç düğmesidir.

Şunlardan biri:startshutdownrebootresetforce_stop
Örnek istek
curl https://apiservice.vitamindata.net/api/v1/VPSPower \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"id":"vm_7q3k1n","action":"reboot"}'
Yanıt200 · application/json
okbool

Katman eylemi kabul etti. Makinenin gerçek durumu için GetVPSStats izleyin.

Örnek yanıt
{"ok": true}
POST

ReinstallVPS

manage
https://apiservice.vitamindata.net/api/v1/ReinstallVPS

Diski siler ve yeni bir imaj kurar.

Yıkıcıdır ve yeniden denemek GÜVENLİ DEĞİLDİR — bir çağrı, bir yeniden kurulum. İmaj mevcut diske sığmalıdır; sığmıyorsa önce diski büyütün.

İstek
idstringzorunlu

Sunucunun kimliği, ListVPS'ten. Yönetim fiillerinde alanın adı id'dir — yalnızca para fiilleri vps_id yazar.

image_shastringzorunlu

İmaj, ListVPSImages'tan gelen sha ile. Bir imajı başka hiçbir şey adlandırmaz ve sunulmayan bir sha reddedilir.

reset_rootboolisteğe bağlı

Ayrıca yeni bir root şifresi de üretir.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/ReinstallVPS \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"id":"vm_7q3k1n","image_sha":"9a1b8c2d7e6f","reset_root":true}'
Yanıt200 · application/json
okbool

Katman eylemi kabul etti. Makinenin gerçek durumu için GetVPSStats izleyin.

Örnek yanıt
{"ok": true}
POST

AttachVPSISO

manage
https://apiservice.vitamindata.net/api/v1/AttachVPSISO

Bir kurulum ISO'su takar. Ondan önyüklemek için önyükleme sırasını 1 yapın.

İstek
idstringzorunlu

Sunucunun kimliği, ListVPS'ten. Yönetim fiillerinde alanın adı id'dir — yalnızca para fiilleri vps_id yazar.

image_shastringzorunlu

İmaj, ListVPSImages'tan gelen sha ile. Bir imajı başka hiçbir şey adlandırmaz ve sunulmayan bir sha reddedilir.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/AttachVPSISO \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"id":"vm_7q3k1n","image_sha":"3f4e5d6c7b8a"}'
Yanıt200 · application/json
okbool

Katman eylemi kabul etti. Makinenin gerçek durumu için GetVPSStats izleyin.

Örnek yanıt
{"ok": true}
POST

DetachVPSISO

manage
https://apiservice.vitamindata.net/api/v1/DetachVPSISO

ISO'yu kaldırır ve diskten önyüklemeye döner.

İstek
idstringzorunlu

Sunucunun kimliği, ListVPS'ten. Yönetim fiillerinde alanın adı id'dir — yalnızca para fiilleri vps_id yazar.

Örnek istek
curl https://apiservice.vitamindata.net/api/v1/DetachVPSISO \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"id":"vm_7q3k1n"}'
Yanıt200 · application/json
okbool

Katman eylemi kabul etti. Makinenin gerçek durumu için GetVPSStats izleyin.

Örnek yanıt
{"ok": true}
POST

SetVPSBootOrder

manage
https://apiservice.vitamindata.net/api/v1/SetVPSBootOrder

Hangi aygıtın önce önyükleneceği.

İstek
idstringzorunlu

Sunucunun kimliği, ListVPS'ten. Yönetim fiillerinde alanın adı id'dir — yalnızca para fiilleri vps_id yazar.

orderenumzorunlu

0 önce disk, 1 önce CD-ROM.

Şunlardan biri:01
Örnek istek
curl https://apiservice.vitamindata.net/api/v1/SetVPSBootOrder \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"id":"vm_7q3k1n","order":1}'
Yanıt200 · application/json
okbool

Katman eylemi kabul etti. Makinenin gerçek durumu için GetVPSStats izleyin.

Örnek yanıt
{"ok": true}