Vitamin API arayışı

VPN hesablarını və virtual serverləri öz saytınızdan, botunuzdan və ya skriptinizdən satın və idarə edin.

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

Açarlar panelinizdə verilir. Bölməni görmürsünüzsə, hesabınız üçün API girişinin açılmasını dəstəkdən istəyin.

1

Panelinizdə API açarı yaradın və hər çağırışda onu bearer token kimi göndərin.

2

Açarın işlədiyini sübut etmək üçün Ping çağırın, sonra qiymətlərinizi ListPlansGetVPSStorefront ilə götürün.

3

FUNDING_AUTO ilə satın: balansınız yetirsə o ödəyir, yetmirsə müştəriniz ödəniş keçidi alır.

Autentifikasiya

Hər sorğu açarınızı bearer token kimi daşıyır. Bu hostda kuki yoxdur və götürüləsi CSRF tokeni də yoxdur — açar tək başına bütöv etimadnamədir.

Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Açarlar panelinizdə API bölməsində yaradılır. Gizli dəyər yaradılan anda yalnız bir dəfə göstərilir: biz onun yalnız heşini saxlayırıq, ona görə itirilsə, həll yolu açarı rotasiya etməkdir — bu, yeni gizli dəyər verir və köhnəsini bir gün də işlək saxlayır, beləliklə fasiləsiz yerləşdirmə edə bilərsiniz.

Açar müəyyən mənbə ünvanları ilə məhdudlaşdırıla, öz dəqiqəlik sürət limitinə sahib ola və ondan ayrı-ayrı əməliyyatlar əsirgənə bilər. Bunları operatorlarımız tənzimləyir — məsələn, ala bilən, amma heç bir xidməti silə bilməyən açar lazımdırsa, dəstəklə danışın.

Test açarları

sk_test_ ilə başlayan açar real məlumatları oxuyur, ancaq pul xərcləyən və ya real maşına toxunan heç nəyi qəbul etmir; beləliklə inteqrasiyanızı heç bir xərcə düşmədən qurub yoxlaya bilərsiniz.

Xəta necə görünür

Naməlum açar və API girişi olmayan hesabın açarı eyni 401 cavabını verir, söz-söz: cavab açarın mövcud olub-olmadığını heç vaxt təsdiqləmir. Rotasiya keçid müddətini yaşamış öz açarınız istisnadır — o, api key expired deyir, çünki həmin açarın real olduğunu siz onsuz da bilirsiniz və nəyə görə dayandığını bilməlisiniz. Bir ünvandan gələn təkrar uğursuzluqlar məhdudlaşdırılır — sürət limitlərinə baxın.

Ödəniş üsulları

Aldığınız hər şey — VPN hesabı, uzatma, server, yeniləmə, təkmilləşdirmə — tək bir müqavilədən keçir. Ödənişin necə olacağını siz seçirsiniz:

fundingNə baş verir
FUNDING_AUTOTövsiyə olunur. Balansınız yetirsə oradan tutulur; yetmirsə çağırış yenə də uğurla başa çatır və sizə ödəniş keçidi verir. Tək çağırış, şərh ediləsi xəta yoxdur.
FUNDING_BALANCEYalnız balans. Balans çatmırsa, çağırış insufficient_balance ilə UĞURSUZ olur (xəta yenə də ödəniləsi keçid daşıyır).
FUNDING_INVOICEBalansınız yetsə belə, həmişə ödəniş keçidi qaytarır.

FUNDING_AUTO ilə tək bir sahəyə baxırsı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 pulun alındığını və çatdırılmanın başladığını bildirir — statusu delivered olana qədər GetOrder çağırışını yoxlayın. payment_required isə müştərinizi pay_url ünvanına yönləndirin; faktura ödəniləndə çatdırılma öz-özünə başlayır.

Qiymətlər həmişə bizimdir. Zəmanət kimi expected_total_usd göndərə bilərsiniz: bizim təzə hesablamamız fərqlidirsə, satış price_changed və yeni məbləğlə rədd edilir — müştərinizin heç görmədiyi bir məbləğ tutulmur.

Təhlükəsiz təkrar cəhd

Pul xərcləyən hər çağırışda Idempotency-Key başlığı göndərin. Cavab sizə heç çatmasa — vaxt aşımı, qopan bağlantı, yenidən yerləşdirilən işçi proses — EYNİ sorğunu EYNİ açarla təkrar göndərin: ikinci bir tutulma əvəzinə ilk nəticəni geri alırsınız.

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

Hər müştəri əməliyyatı üçün təzə açar işlədin (UUID idealdır). Eyni açarı fərqli gövdə ilə təkrar işlətmək idempotency_conflict ilə rədd edilir — bu birləşmə səhv deməkdir və hansı sorğunu nəzərdə tutduğunuzu təxmin etmək, bunu sizə deməkdən daha pis olardı.

Sürət limitləri

Hər autentifikasiya olunmuş cavab açarınızın harada dayandığını bildirir:

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

Limit açar başına və dəqiqə başınadır, hesabınız üçün tənzimlənir — susmaya görə dəyər bir mağazaya uyğundur; məşğul bot susmaya görə dəyərlə özünü ləngitmək əvəzinə artırım istəməlidir. Limiti aşmaq Retry-After ilə birlikdə 429 cavabı verir.

Bir ünvandan çoxlu sorğu autentifikasiyadan keçmirsə də 429 görünür. Bu, sizin kvotanız deyil, kobud güc hücumundan qorunmadır: özü-özünə keçir (başlıq nə vaxt olduğunu deyir) və işlək açar heç vaxt onu işə salmır.

Açar olmayan cavablar da daxil olmaqla, hər cavabda X-Ratelimit-* ailəsini də görəcəksiniz. O, sizin açarınızın büdcəsi deyil, bütün API-nin qarşısındakı kobud ÜNVAN başına əyləcdir — RateLimit-Remaining göstəricisinə görə tempinizi tənzimləyin və X- başlıqlarını başqasının işi kimi qəbul edin.

Xətalar

Uğursuzluqlar HTTP statusu və JSON gövdəsi kimi geri qayıdır. Yuxarı səviyyəli code nəqliyyat kateqoriyasıdır; yuxarı səviyyəli message isə sabit maşın kodunu daşıyır. Tam təfərrüat — həmin maşın kodu, təhlükəsiz bir cümlə və hər hansı faydalı əlavə — details daxilində debug altında gəlir:

{"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"}}]}

Xəta kanalının kod yazmağa dəyən iki özəlliyi var: value base64 protobuf-dur (nəzərə almayın — debug oxuyun) və debug daxilində əlavə sahələr lowerCamelCase-dir — payUrl, orderId, totalUsd, retryAfterSeconds — bu, hər yerdəki snake_case-dən fərqli olaraq bir Connect qaydasıdır. Yuxarı səviyyəli message və ya debug.code üzərində budaqlanın; heç vaxt cümlə üzərində yox.

Sorğunuz avtorizasiyadan keçməzdən əvvəlki imtinalar

İşləyiciyə heç çatmayan sorğu — açar yoxdur və ya səhvdir (401), açarın icazə vermədiyi mənbə ünvanı (403), sürət limiti (429), autentifikasiya kəsintisi (503) — giriş qapısında rədd edilir və giriş qapısı DAHA QISA gövdə qaytarır: nəqliyyat code dəyəri və sadə bir cümlə, details olmadan və maşın kodu olmadan.

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

Ona görə bunlarda HTTP STATUSUNA görə budaqlanın (və 429 zamanı Retry-After başlığına əməl edin); aşağıdakı maşın kodları isə işləyiciyə qədər gedə bilmiş çağırışlara aiddir. Ünvan başına kobud əyləc daha köhnədir və {"error":"rate_limited"} cavabı verir — açarı code deyil, error-dur.

KodMənasıNə etməli
forbidden_scopeAçarda bu çağırış üçün əhatə dairəsi yoxdur, ya da bu əməliyyat ondan əsirgənib.Açarın səlahiyyətini genişləndirməyi dəstəkdən istəyin.
not_foundBu hesab üçün belə obyekt yoxdur.Id-ni yoxlayın. Yad id də bu cavabı verir — bu, qəsdəndir.
invalid_requestSahələrdən biri düzgün formatda deyil.Düzəldib yenidən göndərin; dəyişdirmədən təkrar cəhd kömək etməyəcək.
insufficient_balanceYalnız balansla ödəniş məbləği qarşılaya bilmədi.Təfərrüatdakı payUrl ünvanını işlədin, ya da FUNDING_AUTO üsuluna keçin.
price_changedexpected_total_usd dəyəriniz artıq uyğun gəlmir.Yenidən qiymət alın və yeni məbləği müştərinizlə təsdiqləyin.
idempotency_conflictHəmin açar fərqli bir gövdə ilə işlədilib.Hər əməliyyat üçün təzə açar işlədin.
sandbox_unavailablesk_test_ açarı pul xərcləməyə və ya real maşına toxunmağa cəhd etdi.Gözlənilən haldır — həmin çağırış üçün canlı açar işlədin. Test açarları oxuyur, heç vaxt almır.
unpriceableİstədiyiniz konfiqurasiya satıla bilməz — qiyməti təyin edilməmiş plan yaxud node, ya da heç bir modelin əhatə etmədiyi bir səbət.Almazdan əvvəl vitrini yenidən oxuyun və qiymət alın; qiymət hesablaması da eyni səbəti rədd edir.
upstream_unavailableAsılı olduğumuz müstəvilərdən biri işləmir.Geriləmə ilə təkrar cəhd edin; oxunuşlar qısa müddət köhnə ola bilər.
order_failedÖdənişdən sonra çatdırılma baş tutmadı.Yenidən almayın. GetOrder çağırışını yoxlayın; biz bunları avtomatik bərpa edirik və dəstək də bunu görür.
internalBizim tərəfdə təsnif etmədiyimiz nəsə sındı.Geriləmə ilə bir dəfə təkrar cəhd edin; təkrarlanırsa, X-Request-Id dəyərini dəstəyə bildirin.

Qaydalar

  • Nəqliyyat. Hər çağırış JSON gövdəsi ilə POST {base}/{Method} şəklindədir — POST /api/v1/CreateVPNOrder. Başqa heç nə yoxdur: istənilən digər HTTP metodu 405 cavabı verir, REST feil uyğunlaşdırması yoxdur və yol parametrləri yoxdur.
  • Pul sətirdir. "19.99", heç vaxt 19.99 deyil: JSON ədədi əksər dillərdə float-dur və qəpiyi dəqiq saxlaya bilmir.
  • 64 bitlik tam ədədlər sətir kimi gəlir. Hər bayt sayı və hər unix zaman möhürü 64 bitlikdir və şəbəkə onları dırnağa alır — "remaining_bytes": "96636764160". Onları tam ədəd kimi oxuyun; sorğularda hər iki formanı göndərə bilərsiniz.
  • Sıfır buraxılır. Dəyəri 0, false və ya boş olan sahə cavabda ümumiyyətlə görünmür. Yoxluğu sıfır kimi qəbul edin — və unutmayın ki, 0 gündəlik limit "0 GB" deyil, limitin OLMAMASI deməkdir.
  • Vaxtlar unix saniyəsidir, əməliyyat pəncərəsi istisna olmaqla — o, RFC3339 və ya YYYY-MM-DD qəbul edir və qaytarır.
  • Trafik baytdır, bütün göstəricilərdə, heç vaxt qigabayt deyil.
  • Id-lər qapalıdır. acc_…, ord_…, vpn_…. Heç vaxt onları ayırıb oxumayın və ya özünüz yaratmayın, ardıcıl olduqlarını da fərz etməyin.
  • Səhifələmə qapalı kursorla aparılır: əvvəlki cavabın next_cursor dəyərini geri göndərin. Boş next_cursor hər şeyi aldığınızı bildirir.
  • Sahə cədvəlləri qısa tip işarələri işlədir. money — dəqiq onluq sətir; unix — unix saniyəsi (64 bitlik, ona görə sətir); bytes — bayt sayı (64 bitlik, ona görə sətir); int64 — başqa hər hansı 64 bitlik dəyər (sətir); int — 32 bitlik, adi ədəd; cursor — qapalı səhifələmə tutacağı; enum — sadalanan dəyərlərdən düz biri.
  • Yeni sahələr xəbərdarlıqsız peyda olur və mövcud olanların mənası dəyişmir. Tanımadığınızı nəzərə almayın.

Başlanğıc

İlk edəcəyiniz tək çağırış: o, açarın işlədiyini sübut edir və hansı hesaba aid olduğunu bildirir.

POST

Ping

istənilən açar
https://apiservice.vitamindata.net/api/v1/Ping

Hesab id-nizi, açarın canlı yoxsa test olduğunu və bizim saatımızı qaytarır.

Sorğu

Parametr yoxdur — boş obyekt göndərin, {}.

Nümunə sorğu
curl https://apiservice.vitamindata.net/api/v1/Ping \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{}'
Cavab200 · application/json
account_idstring

Açarın hesabı — açarın tanındığının sübutu.

modeenum

Hansı növ açar göndərdiyiniz.

Bunlardan biri:livetest
server_timeunix

Bizim saatımız — imzaları və ya pəncərələri pozmazdan əvvəl sürüşməni aşkar etmək üçün faydalıdır.

Nümunə cavab
{
  "account_id": "acc_9f3k2m7q",
  "mode": "live",
  "server_time": "1785412800"
}

Hesab və balans

POST

GetAccount

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

Hesabınızın e-poçtu, statusu, dili və ünvanın təsdiqlənib-təsdiqlənmədiyi.

Sorğu

Parametr yoxdur — boş obyekt göndərin, {}.

Nümunə sorğu
curl https://apiservice.vitamindata.net/api/v1/GetAccount \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{}'
Cavab200 · application/json
accountobject

Hesabınız.

account.account_idstring

Açıq id (acc_…).

account.emailstring

Giriş ünvanı.

account.statusstring

Hesab məhdudlaşdırılmayıbsa active.

account.localestring

Hesabın dili — kart adları və bildirişlər ona uyğun tərcümə olunur.

account.email_verifiedbool

Ünvan təsdiqlənib.

account.created_atunix

Hesabın yaradıldığı vaxt.

Nümunə cavab
{
  "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

Mühasibat balansınız və alışın həqiqətən istifadə edə biləcəyi məbləğ.

available_usd almazdan əvvəl baxılası rəqəmdir — o, icrada olan sifariş tərəfindən artıq bloklanmış məbləği çıxarır.

Sorğu

Parametr yoxdur — boş obyekt göndərin, {}.

Nümunə sorğu
curl https://apiservice.vitamindata.net/api/v1/GetBalance \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{}'
Cavab200 · application/json
balance_usdmoney

Tam mühasibat balansı.

available_usdmoney

Balans mənfi bloklar — alışın indi xərcləyə biləcəyi məbləğ.

as_ofstring

Göstəricilərin mühasibat zaman möhürü, RFC3339.

Nümunə cavab
{
  "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

Mühasibat qeydləriniz, ən yenisi əvvəldə.

Susmaya görə son üç ay. 92 gündən geniş pəncərə daraldılır və cavab sizə həqiqətən tətbiq olunan pəncərəni bildirir — beləliklə qısa cavab heç vaxt qeyri-müəyyən olmur.

Sorğu
limitintkönüllü

Səhifə ölçüsü. Susmaya görə 25, maksimum 100.

cursorcursorkönüllü

Əvvəlki cavabın next_cursor dəyəri. İlk səhifə üçün onu buraxın.

kindstringkönüllü

Aşağıdakı kind dəyərləri üzrə könüllü, vergüllə ayrılmış filtr.

fromstringkönüllü

Pəncərənin başlanğıcı, RFC3339 və ya YYYY-MM-DD.

tostringkönüllü

Pəncərənin sonu. Yalnız tarixdən ibarət to həmin bütün günü əhatə edir.

Nümunə sorğu
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"}'
Cavab200 · application/json
transactionsarray

Mühasibat sətirləri.

transactions[].idstring

Mühasibat sətrinin id-si.

transactions[].tsstring

Nə vaxt, RFC3339.

transactions[].kindenum

Pulu nəyin hərəkət etdirdiyi. topup_credit ödənilmiş balans artırmadır; iki invoice_debit_* növü isə alışlardır. İcrada olan sifarişin daxili bloklaması və azad edilməsi bu axına daxil deyil.

Bunlardan biri:topup_creditexternal_creditinvoice_debit_reservedinvoice_debit_externaloverpay_creditmanual_creditmanual_debitspend_debitspend_refundautomated_correction
transactions[].amount_usdmoney

İşarəli — mədaxildə mənfi.

transactions[].balance_after_usdmoney

Bu sətirdən sonrakı cari balans.

transactions[].ref_invoice_idstring

Hərəkətin arxasındakı faktura — tam mənzərə üçün onu GetInvoice çağırışına verin.

transactions[].descriptionstring

Qısa, insan üçün etiket. Yalnız göstərmək üçündür; heç vaxt ona görə budaqlanmayın.

next_cursorcursor

Növbəti səhifə üçün onu cursor kimi geri göndərin. Yoxdursa/boşdursa — hər şeyi almısınız.

has_morebool

Bu səhifədən sonra daha sətirlər var.

fromstring

HƏQİQƏTƏN tətbiq olunan pəncərə (RFC3339). İstədiyinizdən dardırsa ⇒ 92 günlük limitə çatmısınız.

tostring

Tətbiq olunan pəncərənin sonu.

Nümunə cavab
{
  "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

Balansınıza vəsait əlavə edən, ödəniləsi faktura yaradır.

Müştərinizi (və ya özünüzü) invoice.pay_url ünvanına yönləndirin. Balans ödəniş edildikdə dəyişir.

Sorğu
amount_usdmoneyməcburi

Nə qədər əlavə ediləcəyi, onluq sətir kimi.

Nümunə sorğu
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"}'
Cavab200 · application/json
invoiceobject

Ödəniləsi faktura.

invoice.invoice_idstring

Şlüzün faktura id-si (inv_…).

invoice.statusenum

pending ödəniləndir. confirmed ilə delivered_redirected arasındakı hər şey pulun geri dönməz şəkildə daxil olduğunu bildirir — onların hamısını ÖDƏNİLMİŞ sayın. expired keçidin ödənilmədən müddətinin bitdiyini bildirir.

Bunlardan biri:pendingconfirmedsweepingsweptdeliveringdelivereddelivered_redirectedexpired
invoice.pay_urlstring

Hostlanan ödəniş səhifəsi. Müştərinizi bura göndərin; hər kanal (coin, zəncir, balans) onun arxasındadır.

invoice.pay_telegram_urlstring

Elə həmin faktura, Telegram daxilində ödəniləsi: o, ödəniş provayderinin öz botunu açır, bot məbləği göstərir və ödənişi orada qəbul edir. Tətbiqdən çıxmaq istəməyən müştərilər üçün onu pay_url ilə yan-yana təklif edin. Olmaya bilər — yalnız botu konfiqurasiya edilmiş ödəniş provayderində olur, ona görə onu heç vaxt yeganə ödəniş düyməniz etməyin.

invoice.price_usdmoney

Fakturanın topladığı məbləğ.

invoice.expires_atunix

Ödəniş pəncərəsinin bağlandığı vaxt.

Nümunə cavab
{
  "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 ödəniş tam təfərrüatı ilə, zəncirin göstərdikləri də daxil olmaqla.

Mühasibat sətrindəki ref_invoice_id birləşdirmə açarıdır. Yalnız öz hesabınızın yaratdığı fakturalar oxuna bilər.

Sorğu
invoice_idstringməcburi

Mühasibat sətrinin ref_invoice_id dəyərindən, sifarişdən və ya balans artırmadan.

Nümunə sorğu
curl https://apiservice.vitamindata.net/api/v1/GetInvoice \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"invoice_id":"inv_5k8p2q"}'
Cavab200 · application/json
invoiceobject

Fakturanın özü.

invoice.invoice_idstring

Şlüzün faktura id-si (inv_…).

invoice.statusenum

pending ödəniləndir. confirmed ilə delivered_redirected arasındakı hər şey pulun geri dönməz şəkildə daxil olduğunu bildirir — onların hamısını ÖDƏNİLMİŞ sayın. expired keçidin ödənilmədən müddətinin bitdiyini bildirir.

Bunlardan biri:pendingconfirmedsweepingsweptdeliveringdelivereddelivered_redirectedexpired
invoice.pay_urlstring

Hostlanan ödəniş səhifəsi. Müştərinizi bura göndərin; hər kanal (coin, zəncir, balans) onun arxasındadır.

invoice.pay_telegram_urlstring

Elə həmin faktura, Telegram daxilində ödəniləsi: o, ödəniş provayderinin öz botunu açır, bot məbləği göstərir və ödənişi orada qəbul edir. Tətbiqdən çıxmaq istəməyən müştərilər üçün onu pay_url ilə yan-yana təklif edin. Olmaya bilər — yalnız botu konfiqurasiya edilmiş ödəniş provayderində olur, ona görə onu heç vaxt yeganə ödəniş düyməniz etməyin.

invoice.price_usdmoney

Fakturanın topladığı məbləğ.

invoice.expires_atunix

Ödəniş pəncərəsinin bağlandığı vaxt.

paymentsarray

Zəncirin göstərdikləri. Balansdan ödənilmiş faktura üçün boşdur (zəncir iştirak etməyib) və hələ heç kim ödəməyibsə də boşdur — boş siyahı xəta deyil.

payments[].chainstring

Ödənişin gəldiyi şəbəkə (tron, bsc, …).

payments[].assetstring

Nə ödənilib (USDT, …).

payments[].amountmoney

Aktivin məbləği, dəqiq.

payments[].tx_hashstring

Zəncir üzərindəki əməliyyat — müştərinizin ödəniş sübutu.

payments[].confirmedbool

Zəncir onu yekunlaşdırıb.

payments[].seen_atunix

Onu ilk dəfə müşahidə etdiyimiz vaxt.

order_idstring

Fakturanın nə aldığı. Heç nə almayan balans artırmada yoxdur.

Nümunə cavab
{
  "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"
}

Qiymətlər

Burada heç nə yaradılmır — müştəriniz qərar verməzdən əvvəl istədiyiniz qədər qiymət ala bilərsiniz.

POST

ListPlans

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

Nə sata bilərsiniz: sürgünün hədləri və vitriniz onlardan istifadə edirsə, sabit qiymətli kartlar.

Hansı doludursa onu göstərin. Kart öz bundle_id dəyərini səbətə qoymaqla alınır; sürgülü səbət isə gb/months/users işlədir.

Sorğu

Parametr yoxdur — boş obyekt göndərin, {}.

Nümunə sorğu
curl https://apiservice.vitamindata.net/api/v1/ListPlans \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{}'
Cavab200 · application/json
model_namestring

Vitrinizin qiymət modeli.

model_typestring

Onun mühərrik versiyası.

boundsobject

Konfiqurasiya edicinin qaydaları — hər qiymət hesablaması və sifariş onları server tərəfdə yenidən yoxlayır.

bounds.gb_minint

Səbətin istəyə biləcəyi ən kiçik trafik.

bounds.gb_maxint

Ən böyüyü.

bounds.gb_stepint

Sürgünün addımı.

bounds.users_minint

Eyni anda ən az cihaz.

bounds.users_maxint

Ən çoxu.

bounds.months_minint

Ən qısa müddət.

bounds.months_maxint

Ən uzunu.

bounds.new_accounts_maxint

Bir sifarişin yarada biləcəyi ən çox hesab.

bounds.extend_maxint

Bir sifarişin uzada biləcəyi ən çox hesab.

bounds.default_gbint

Ağlabatan sürgü başlanğıcı.

bounds.default_usersint

Susmaya görə cihaz sayı.

bounds.default_monthsint

Susmaya görə müddət.

bundlesarray

Sabit qiymətli kartlar, vitriniz kart kataloqu olduqda.

bundles[].bundle_idstring

cart.bundle_id sahəsinə qoyulası tutacaq.

bundles[].namestring

Kartın adı, hesabın dilinə artıq uyğunlaşdırılmış halda.

bundles[].gbint

Daxil olan trafik.

bundles[].monthsint

Etibarlılıq müddəti.

bundles[].online_usersint

Eyni anda qoşulan cihaz sayı.

bundles[].price_usdmoney

Qiymət. Elə qiymət BUDUR — kart üçün ayrıca hesablama lazım deyil.

bundles[].highlightbool

Vitrinin önə çıxarılan kartı.

bundles[].daily_cap_gbint

GB ilə gündəlik limit. Yoxdursa — limit yoxdur.

Nümunə cavab
{
  "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

VPN səbətinin son qiyməti, maddələr üzrə. Endirimlər artıq tətbiq olunub.

Sorğu
cartobjectməcburi

Qiymətləndiriləcək səbət.

cart.kindenumməcburi

Yeni hesablar alın, ya da mövcudlara trafik və vaxt əlavə edin.

Bunlardan biri:newextend
cart.gbintkönüllü

Hesab başına trafik, GB ilə, ListPlans hədləri daxilində.

cart.monthsintkönüllü

Hesab başına etibarlılıq, ay ilə.

cart.usersintkönüllü

Hesab başına eyni anda qoşulan cihaz sayı.

cart.new_accountsintkönüllü

Yalnız kind:"new": neçə hesab yaradılacağı. İstifadəçi adları serverdə yaradılır.

cart.extend_vpn_idsarraykönüllü

Yalnız kind:"extend": uzadılacaq hesablar, açıq id ilə.

cart.bundle_idstringkönüllü

ListPlans.bundles siyahısından konfiqurasiya edilmiş səbət əvəzinə sabit qiymətli kart alır. Təyin ediləndə gb/months/users nəzərə alınmır — kartın öz dəyərləri və qiyməti tətbiq olunur.

Nümunə sorğu
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 sorğunun digər formaları
Artıq sahib olduğunuz hesabları uzadın
{"cart":{"kind":"extend","gb":50,"months":1,"users":3,"extend_vpn_ids":["vpn_6t2k9p","vpn_1a4b7c"]}}
Konfiqurasiya edilmiş səbət əvəzinə sabit qiymətli kart alın
{"cart":{"kind":"new","bundle_id":"card_100_1m","new_accounts":1}}
Cavab200 · application/json
quoteobject

Maddələr üzrə qiymət. Heç nə yaradılmır və heç nə tutulmur.

quote.model_namestring

Hansı qiymət modelinin cavab verdiyi.

quote.model_typestring

Modelin mühərrik versiyası.

quote.base_usdmoney

Endirim və əlavələrdən əvvəlki qiymət.

quote.total_usdmoney

Son qiymət — bu səbətlə satışın tutduğu məbləğ.

quote.linesarray

Maddələr üzrə bölgü, işarəli, cəmi dəqiq ümumi məbləği verir.

quote.lines[].codestring

Bu sətrin nə olduğu (base, endirim kodu, əlavə haqq…).

quote.lines[].kindstring

Sətrin kateqoriyası, interfeysinizdə qruplaşdırmaq üçün.

quote.lines[].amount_usdmoney

İşarəli. Endirimlər mənfidir; sətirlərin cəmi dəqiq total_usd dəyərini verir.

quote.lines[].pctstring

Sətrin arxasındakı faiz, varsa.

quote.cappedbool

Ümumi məbləğ modelin tavanına dəyib.

quote.floor_appliedbool

Ümumi məbləğ modelin döşəməsinə qaldırılıb.

quote.clampedenum

Səbətdəki dəyər qiymətləndirmədən əvvəl hədlərə sıxılanda təyin olunur.

Bunlardan biri:minmax
quote.invalidstring

Boş deyilsə, səbət qiymətləndirilə bilmir — bunu göstərin və belə qiymətlə HEÇ VAXT pul tutmayın.

quote.metamap

Model əlavələri, sətir→sətir (məsələn, təkmilləşdirmənin remaining_days dəyəri).

Nümunə cavab
{
  "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 hesabları alır, ya da mövcudları uzadır (extend_vpn_ids ilə "kind":"extend").

Cavabın ala biləcəyi iki forma üçün Ödəniş üsulları bölməsinə baxın.

Sorğu
cartobjectməcburi

Nə alınacağı — Quote qiymətləndirdiyi eyni forma.

cart.kindenumməcburi

Yeni hesablar alın, ya da mövcudlara trafik və vaxt əlavə edin.

Bunlardan biri:newextend
cart.gbintkönüllü

Hesab başına trafik, GB ilə, ListPlans hədləri daxilində.

cart.monthsintkönüllü

Hesab başına etibarlılıq, ay ilə.

cart.usersintkönüllü

Hesab başına eyni anda qoşulan cihaz sayı.

cart.new_accountsintkönüllü

Yalnız kind:"new": neçə hesab yaradılacağı. İstifadəçi adları serverdə yaradılır.

cart.extend_vpn_idsarraykönüllü

Yalnız kind:"extend": uzadılacaq hesablar, açıq id ilə.

cart.bundle_idstringkönüllü

ListPlans.bundles siyahısından konfiqurasiya edilmiş səbət əvəzinə sabit qiymətli kart alır. Təyin ediləndə gb/months/users nəzərə alınmır — kartın öz dəyərləri və qiyməti tətbiq olunur.

fundingenumməcburi

Necə ödəniləcəyi — Ödəniş üsulları bölməsinə baxın. Susmaya görə dəyər yoxdur: onu buraxmaq rədd edilir.

Bunlardan biri:FUNDING_AUTOFUNDING_BALANCEFUNDING_INVOICE
expected_total_usdmoneykönüllü

Təsdiq zəmanəti. Təyin edilibsə və bizim təzə hesablamamız fərqlidirsə, satış müştərinizin heç görmədiyi məbləği tutmaq əvəzinə price_changed ilə rədd edilir.

Nümunə sorğu
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 sorğunun digər formaları
Artıq sahib olduğunuz hesabları uzadın
{"cart":{"kind":"extend","gb":50,"months":1,"users":3,"extend_vpn_ids":["vpn_6t2k9p"]},"funding":"FUNDING_AUTO"}
Balansdan ödənilən sabit qiymətli kart alın
{"cart":{"kind":"new","bundle_id":"card_100_1m","new_accounts":1},"funding":"FUNDING_BALANCE"}
Cavab200 · application/json
orderobject

Sifariş — statusu delivered olana qədər GetOrder çağırışını yoxlayın.

order.order_idstring

Sifarişin açıq id-si (ord_…).

order.productenum

Nə alınıb.

Bunlardan biri:vpnvps
order.kindstring

Alışın forması: new, extend, upgrade

order.statusenum

Həyat dövrü. Məqsəd delivered-dir; needs_operator pulun daxil olduğunu və çatdırılmanı insanın tamamladığını bildirir — yenidən almayın; expired isə fakturanın ödənilmədən müddətinin bitdiyini bildirir.

Bunlardan biri:createdinvoicedpaiddeliveringdeliveredneeds_operatorfailedrefund_pendingrefundedexpired
order.fundingenum

Onu həqiqətən hansı kanalın ödədiyi. FUNDING_AUTO bunlardan birinə çevrilir.

Bunlardan biri:invoicebalance
order.total_usdmoney

Sifarişin tutduğu məbləğ.

order.invoice_idstring

Onun arxasındakı faktura — hansı kanalla ödənməsindən asılı olmayaraq hər sifarişin biri var.

order.itemsint

Sifarişin neçə səlahiyyət yaratdığı və ya uzatdığı.

order.created_atunix

Sifarişin verildiyi vaxt.

order.delivered_atunix

Çatdırılmanın bitdiyi vaxt. O ana qədər yoxdur.

order.breakdownobject

Müştərinin razılaşdığı qiymət, eynilə — Quote qaytardığı forma ilə eyni.

invoiceobject

Sifarişin arxasındakı faktura: payment_required olduqda ödəniləsi, completed olduqda artıq bağlanmış.

invoice.invoice_idstring

Şlüzün faktura id-si (inv_…).

invoice.statusenum

pending ödəniləndir. confirmed ilə delivered_redirected arasındakı hər şey pulun geri dönməz şəkildə daxil olduğunu bildirir — onların hamısını ÖDƏNİLMİŞ sayın. expired keçidin ödənilmədən müddətinin bitdiyini bildirir.

Bunlardan biri:pendingconfirmedsweepingsweptdeliveringdelivereddelivered_redirectedexpired
invoice.pay_urlstring

Hostlanan ödəniş səhifəsi. Müştərinizi bura göndərin; hər kanal (coin, zəncir, balans) onun arxasındadır.

invoice.pay_telegram_urlstring

Elə həmin faktura, Telegram daxilində ödəniləsi: o, ödəniş provayderinin öz botunu açır, bot məbləği göstərir və ödənişi orada qəbul edir. Tətbiqdən çıxmaq istəməyən müştərilər üçün onu pay_url ilə yan-yana təklif edin. Olmaya bilər — yalnız botu konfiqurasiya edilmiş ödəniş provayderində olur, ona görə onu heç vaxt yeganə ödəniş düyməniz etməyin.

invoice.price_usdmoney

Fakturanın topladığı məbləğ.

invoice.expires_atunix

Ödəniş pəncərəsinin bağlandığı vaxt.

paidbool

Pul tutulub. payment_required ilə birlikdə yoxdur (= false).

statusenum

Budaqlanacağınız ƏSAS sahə — Ödəniş üsulları bölməsinə baxın.

Bunlardan biri:completedpayment_required
Nümunə cavab
{
  "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

Aldıqdan sonra bunu yoxlayın: created → invoiced → paid → delivering → delivered.

Sorğu
order_idstringməcburi

Verdiyiniz sifarişdən.

Nümunə sorğu
curl https://apiservice.vitamindata.net/api/v1/GetOrder \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"order_id":"ord_7b2c9d"}'
Cavab200 · application/json
orderobject

Sifariş, tam təfərrüatı ilə.

order.order_idstring

Sifarişin açıq id-si (ord_…).

order.productenum

Nə alınıb.

Bunlardan biri:vpnvps
order.kindstring

Alışın forması: new, extend, upgrade

order.statusenum

Həyat dövrü. Məqsəd delivered-dir; needs_operator pulun daxil olduğunu və çatdırılmanı insanın tamamladığını bildirir — yenidən almayın; expired isə fakturanın ödənilmədən müddətinin bitdiyini bildirir.

Bunlardan biri:createdinvoicedpaiddeliveringdeliveredneeds_operatorfailedrefund_pendingrefundedexpired
order.fundingenum

Onu həqiqətən hansı kanalın ödədiyi. FUNDING_AUTO bunlardan birinə çevrilir.

Bunlardan biri:invoicebalance
order.total_usdmoney

Sifarişin tutduğu məbləğ.

order.invoice_idstring

Onun arxasındakı faktura — hansı kanalla ödənməsindən asılı olmayaraq hər sifarişin biri var.

order.itemsint

Sifarişin neçə səlahiyyət yaratdığı və ya uzatdığı.

order.created_atunix

Sifarişin verildiyi vaxt.

order.delivered_atunix

Çatdırılmanın bitdiyi vaxt. O ana qədər yoxdur.

order.breakdownobject

Müştərinin razılaşdığı qiymət, eynilə — Quote qaytardığı forma ilə eyni.

invoiceobject

Yalnız sifariş hələ ödəniş gözləyərkən doldurulur — hər yerdəki ilə eyni forma.

Nümunə cavab
{
  "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

Sifariş tarixçəniz, ən yenisi əvvəldə.

Sorğu
limitintkönüllü

Səhifə ölçüsü. Susmaya görə 25, maksimum 100.

cursorcursorkönüllü

Əvvəlki cavabın next_cursor dəyəri. İlk səhifə üçün onu buraxın.

Nümunə sorğu
curl https://apiservice.vitamindata.net/api/v1/ListOrders \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"limit":25,"cursor":""}'
Cavab200 · application/json
ordersarray

Sifarişlər.

orders[].order_idstring

Sifarişin açıq id-si (ord_…).

orders[].productenum

Nə alınıb.

Bunlardan biri:vpnvps
orders[].kindstring

Alışın forması: new, extend, upgrade

orders[].statusenum

Həyat dövrü. Məqsəd delivered-dir; needs_operator pulun daxil olduğunu və çatdırılmanı insanın tamamladığını bildirir — yenidən almayın; expired isə fakturanın ödənilmədən müddətinin bitdiyini bildirir.

Bunlardan biri:createdinvoicedpaiddeliveringdeliveredneeds_operatorfailedrefund_pendingrefundedexpired
orders[].fundingenum

Onu həqiqətən hansı kanalın ödədiyi. FUNDING_AUTO bunlardan birinə çevrilir.

Bunlardan biri:invoicebalance
orders[].total_usdmoney

Sifarişin tutduğu məbləğ.

orders[].invoice_idstring

Onun arxasındakı faktura — hansı kanalla ödənməsindən asılı olmayaraq hər sifarişin biri var.

orders[].itemsint

Sifarişin neçə səlahiyyət yaratdığı və ya uzatdığı.

orders[].created_atunix

Sifarişin verildiyi vaxt.

orders[].delivered_atunix

Çatdırılmanın bitdiyi vaxt. O ana qədər yoxdur.

orders[].breakdownobject

Müştərinin razılaşdığı qiymət, eynilə — Quote qaytardığı forma ilə eyni.

next_cursorcursor

Növbəti səhifə üçün onu cursor kimi geri göndərin. Yoxdursa/boşdursa — hər şeyi almısınız.

Nümunə cavab
{
  "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 idarəetməsi

POST

ListVPN

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

Sahib olduğunuz bütün VPN hesabları, qalan trafik və bitmə tarixi ilə.

Sorğu
limitintkönüllü

Səhifə ölçüsü. Susmaya görə 50, maksimum 200.

cursorcursorkönüllü

Əvvəlki cavabın next_cursor dəyəri. İlk səhifə üçün onu buraxın.

Nümunə sorğu
curl https://apiservice.vitamindata.net/api/v1/ListVPN \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"limit":25,"cursor":""}'
Cavab200 · application/json
vpnsarray

Hesablarınız.

vpns[].vpn_idstring

Bütün digər VPN feillərinin götürdüyü açıq id.

vpns[].usernamestring

Tətbiqlərdə göstərilən etimadnamə adı.

vpns[].statusstring

Hesabın panelin göstərdiyi vəziyyəti — dayandırılmayıbsa və müddəti bitməyibsə active.

vpns[].remaining_bytesbytes

Bütün paketləri üzrə qalan trafik.

vpns[].total_downloadbytes

Bütün dövr ərzində endirilən, VPN müstəvisinin canlı bildirdiyi kimi. ListVPN daxilində bu həmişə 0-dır — siyahı keşlənmiş oxu modelindən verilir və orada istiqamət üzrə göstərici yoxdur. Siyahı üçün used_bytes, bölgü üçün isə GetVPN/GetVPNUsage işlədin.

vpns[].total_uploadbytes

Bütün dövr ərzində yüklənən. total_download ilə eyni qeyd: ListVPN daxilində 0.

vpns[].used_bytesbytes

Bütün dövr ərzində həqiqətən xərclənən trafik (endirilən + yüklənən). Bu, mülkiyyət qeydinin hər VPN üçün saxladığı rəqəmdir, ona görə ListVPN daxil olmaqla hər son nöqtədə düzgündür.

vpns[].expires_atunix

Hesabın müddətinin bitdiyi vaxt.

vpns[].max_onlineint

İcazə verilən eyni anda qoşulan cihaz sayı.

vpns[].daily_limit_bytesbytes

Bugünkü limit. Yoxdursa/0 — gündəlik limit YOXDUR.

vpns[].daily_used_bytesbytes

Bugünkü limitə qarşı xərclənən.

vpns[].daily_reset_unixunix

Gündəlik sayğacın sıfırlandığı vaxt.

vpns[].allowed_protocolsint

Tətbiqlərimizin işlətdiyi protokol bit maskası. Onu qapalı sayın.

vpns[].cache_atunix

Göstəricilərin nə qədər təzə olduğu: live təyin edilməyibsə, onlar bu zaman möhürü qədər köhnədir.

vpns[].created_atunix

Hesabın yaradıldığı vaxt.

vpns[].livebool

Göstəricilər keşdən deyil, indicə şəbəkədən gəlib.

next_cursorcursor

Növbəti səhifə üçün onu cursor kimi geri göndərin. Yoxdursa/boşdursa — hər şeyi almısınız.

Nümunə cavab
{
  "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 təfərrüatı ilə. live:true göstəricilərin indicə şəbəkədən gəldiyini bildirir.

Sorğu
vpn_idstringməcburi

Hesabın açıq id-si (vpn_…), ListVPN siyahısından və ya sifarişin çatdırılmasından.

Nümunə sorğu
curl https://apiservice.vitamindata.net/api/v1/GetVPN \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"vpn_id":"vpn_6t2k9p"}'
Cavab200 · application/json
vpnobject

Hesab.

vpn.vpn_idstring

Bütün digər VPN feillərinin götürdüyü açıq id.

vpn.usernamestring

Tətbiqlərdə göstərilən etimadnamə adı.

vpn.statusstring

Hesabın panelin göstərdiyi vəziyyəti — dayandırılmayıbsa və müddəti bitməyibsə active.

vpn.remaining_bytesbytes

Bütün paketləri üzrə qalan trafik.

vpn.total_downloadbytes

Bütün dövr ərzində endirilən, VPN müstəvisinin canlı bildirdiyi kimi. ListVPN daxilində bu həmişə 0-dır — siyahı keşlənmiş oxu modelindən verilir və orada istiqamət üzrə göstərici yoxdur. Siyahı üçün used_bytes, bölgü üçün isə GetVPN/GetVPNUsage işlədin.

vpn.total_uploadbytes

Bütün dövr ərzində yüklənən. total_download ilə eyni qeyd: ListVPN daxilində 0.

vpn.used_bytesbytes

Bütün dövr ərzində həqiqətən xərclənən trafik (endirilən + yüklənən). Bu, mülkiyyət qeydinin hər VPN üçün saxladığı rəqəmdir, ona görə ListVPN daxil olmaqla hər son nöqtədə düzgündür.

vpn.expires_atunix

Hesabın müddətinin bitdiyi vaxt.

vpn.max_onlineint

İcazə verilən eyni anda qoşulan cihaz sayı.

vpn.daily_limit_bytesbytes

Bugünkü limit. Yoxdursa/0 — gündəlik limit YOXDUR.

vpn.daily_used_bytesbytes

Bugünkü limitə qarşı xərclənən.

vpn.daily_reset_unixunix

Gündəlik sayğacın sıfırlandığı vaxt.

vpn.allowed_protocolsint

Tətbiqlərimizin işlətdiyi protokol bit maskası. Onu qapalı sayın.

vpn.cache_atunix

Göstəricilərin nə qədər təzə olduğu: live təyin edilməyibsə, onlar bu zaman möhürü qədər köhnədir.

vpn.created_atunix

Hesabın yaradıldığı vaxt.

vpn.livebool

Göstəricilər keşdən deyil, indicə şəbəkədən gəlib.

livebool

İndicə şəbəkədən gəlib. Yoxdursa — oxu modelindən verilib və cache_at qədər köhnədir.

Nümunə cavab
{
  "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

İstifadə olunmuş və qalan trafik, tətbiq olunursa bugünkü limitlə birlikdə.

Sorğu
vpn_idstringməcburi

Hesabın açıq id-si (vpn_…), ListVPN siyahısından və ya sifarişin çatdırılmasından.

Nümunə sorğu
curl https://apiservice.vitamindata.net/api/v1/GetVPNUsage \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"vpn_id":"vpn_6t2k9p"}'
Cavab200 · application/json
vpn_idstring

Geri əks olunur.

remaining_bytesbytes

Qalan trafik.

total_downloadbytes

Bütün dövr ərzində endirilən.

total_uploadbytes

Bütün dövr ərzində yüklənən.

expires_atunix

Hesabın müddətinin bitdiyi vaxt.

daily_limit_bytesbytes

Bugünkü limit. Yoxdursa — limit yoxdur.

daily_used_bytesbytes

Bugünkü limitə qarşı xərclənən.

daily_reset_unixunix

Gündəlik sayğacın sıfırlandığı vaxt.

cache_atunix

Canlı olmayanda göstəricilərin təzəliyi.

livebool

İndicə şəbəkədən təzə gəlib.

seriesarray

Tarixi istifadə seriyası üçün ehtiyatda saxlanılıb — bu gün boşdur.

series[].tunix

Vaxt aralığının başlanğıcı.

series[].rxbytes

Aralıqda endirilən.

series[].txbytes

Aralıqda yüklənən.

Nümunə cavab
{
  "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 arxasındakı trafik cüzdanları, istifadə olunacaqları sıra ilə.

"Müştərimin pulsuz trafiki qalmışkən ödənişli trafiki niyə azaldı?" sualına belə cavab verirsiniz — queue_position 1 növbəti boşalacaq olandır. live:false onları oxuya bilmədiyimizi bildirir ki, bu da heç birinin olmaması ilə eyni şey deyil.

Sorğu
vpn_idstringməcburi

Hesabın açıq id-si (vpn_…), ListVPN siyahısından və ya sifarişin çatdırılmasından.

Nümunə sorğu
curl https://apiservice.vitamindata.net/api/v1/ListVPNBundles \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"vpn_id":"vpn_6t2k9p"}'
Cavab200 · application/json
bundlesarray

Cüzdanlar, istifadə sırası ilə.

bundles[].bundle_idstring

Cüzdanın id-si.

bundles[].freebool

Alınmayıb, pulsuz səviyyə tərəfindən verilib.

bundles[].sourceenum

Cüzdanın haradan gəldiyi.

Bunlardan biri:buyextendmigratedfree_tier
bundles[].granted_bytesbytes

Verildiyi andakı tam ölçüsü.

bundles[].remaining_bytesbytes

İçində qalan.

bundles[].granted_atunix

Verildiyi vaxt.

bundles[].expires_atunix

Xərclənib-xərclənməməsindən asılı olmayaraq müddətinin bitdiyi vaxt.

bundles[].daily_limit_bytesbytes

Onun öz gündəlik limiti. Yoxdursa — limit yoxdur.

bundles[].statusenum

Rəqəmlə deyil, sözlə yazılır ki, 2-nin "tükənib" demək olduğunu öyrənmək məcburiyyətində qalmayasınız.

Bunlardan biri:activedisabledexhausted
bundles[].queue_positionint

İSTİFADƏYƏ YARARLI cüzdanlar üzrə 1-dən başlayaraq, istifadə sırası ilə — 1 növbəti boşalır. 0/yoxluq onun növbədən çıxdığını bildirir (xərclənib, müddəti bitib və ya söndürülüb).

bundles[].plan_gbint

Satıldığı ölçü, GB ilə.

bundles[].plan_daysint

Satıldığı etibarlılıq müddəti, gün ilə.

bundles[].invoice_idstring

Gəldiyi alış. Pulsuz verilişdə yoxdur.

livebool

Yoxdursa/false — səlahiyyət müstəvisi əlçatmaz idi, ona görə siyahı səhv deyil, BOŞdur. "Onları oxuya bilmədik" ilə "heç biri yoxdur" fərqli cümlələrdir.

Nümunə cavab
{
  "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

Hesabın şifrəsini dəyişir.

Ayrıca credentials əhatə dairəsi tələb edir — o, heç vaxt manage tərəfindən nəzərdə tutulmur.

Sorğu
vpn_idstringməcburi

Hesabın açıq id-si (vpn_…), ListVPN siyahısından və ya sifarişin çatdırılmasından.

new_passwordstringməcburi

Təyin ediləcək şifrə.

credentialstringkönüllü

Çoxlu etimadnaməsi olan hesablarda hansı etimadnamə. Boş = əsas olan.

Nümunə sorğu
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":""}'
Cavab200 · application/json
usernamestring

Dəyişikliyin tətbiq olunduğu etimadnamə.

Nümunə cavab
{"username": "u482913"}
POST

SetVPNState

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

Hesabı dayandırır və ya bərpa edir.

Sorğu
vpn_idstringməcburi

Hesabın açıq id-si (vpn_…), ListVPN siyahısından və ya sifarişin çatdırılmasından.

stateenumməcburi

Nə ediləcəyi.

Bunlardan biri:suspendresume
Nümunə sorğu
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"}'
Cavab200 · application/json
statusenum

Hesabın oturduğu vəziyyət.

Bunlardan biri:suspendedactive
Nümunə cavab
{"status": "suspended"}
POST

DeleteVPN

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

Hesabı silir. Geri qaytarma yoxdur, geri ödəmə də yoxdur.

Sorğu
vpn_idstringməcburi

Hesabın açıq id-si (vpn_…), ListVPN siyahısından və ya sifarişin çatdırılmasından.

Nümunə sorğu
curl https://apiservice.vitamindata.net/api/v1/DeleteVPN \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"vpn_id":"vpn_6t2k9p"}'
Cavab200 · application/json
statusenum

Uğurlu halda həmişə deleted.

Bunlardan biri:deleted
Nümunə cavab
{"status": "deleted"}

Server satışı

VPS satışı VPN satışı ilə eyni ödəniş müqaviləsidir — yalnız səbət fərqlənir.

POST

GetVPSStorefront

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

Məkanlar, hər birində qiymətləndirilmiş planlar və yüklənə bilən imiclər.

available:false olan node tutumunu doldurub — onu göstərin, amma təklif etməyin.

Sorğu

Parametr yoxdur — boş obyekt göndərin, {}.

Nümunə sorğu
curl https://apiservice.vitamindata.net/api/v1/GetVPSStorefront \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{}'
Cavab200 · application/json
nodesarray

Məkanlar, hər biri öz qiymətləndirilmiş planları ilə.

nodes[].node_idstring

Səbətin node_id sahəsinin götürdüyü dəyər.

nodes[].labelstring

Göstərilən ad (Frankfurt).

nodes[].regionstring

Qruplaşdırma üçün kobud region kodu.

nodes[].countrystring

ISO ölkə kodu, bayraqlar üçün.

nodes[].availablebool

Yoxluq/false = tutum bitib: onu göstərin, amma təklif etməyin.

nodes[].plansarray

Burada nə satıla bilər, qiymətləri ilə.

nodes[].plans[].plan_codestring

Səbətin plan_code sahəsinin götürdüyü dəyər.

nodes[].plans[].namestring

Göstərilən ad.

nodes[].plans[].vcpuint

Nüvələr.

nodes[].plans[].ram_mbint

Yaddaş, MB ilə.

nodes[].plans[].disk_gbint

Disk, GB ilə.

nodes[].plans[].traffic_bytesbytes

Daxil olan aylıq trafik.

nodes[].plans[].price_usd_monthmoney

BU NODE-DAKI aylıq qiymət — eyni plan başqa yerdə fərqli qiymətə ola bilər.

imagesarray

Yüklənə və ya quraşdırıla bilən hər şey.

images[].shastring

İmicin YEGANƏ identifikatoru — səbətlər, yenidən quraşdırmalar və ISO qoşulmaları hamısı onu götürür.

images[].namestring

İnsan üçün ad (Debian 13).

images[].kindenum

disk imici birbaşa hazırlanır; iso isə yükləyib quraşdıracağınız quraşdırıcıdır.

Bunlardan biri:diskiso
images[].os_familyenum

İnterfeysinizdə qruplaşdırma və ikonlar üçün.

Bunlardan biri:linuxwindowsmikrotik
images[].min_disk_gbint

Daha kiçik diskə yenidən quraşdırma rədd edilir — əvvəlcə diski böyüdün.

months_minint

Yeni VM-in alına biləcəyi ən qısa müddət.

months_maxint

Ən uzunu.

Nümunə cavab
{
  "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

Yükləyə və ya quraşdıra biləcəyiniz bütün imiclər, sha üzrə.

Sha həm səbətin, həm yenidən quraşdırmanın, həm də ISO qoşulmasının götürdüyü dəyərdir. İmici başqa heç nə identifikasiya etmir.

Sorğu

Parametr yoxdur — boş obyekt göndərin, {}.

Nümunə sorğu
curl https://apiservice.vitamindata.net/api/v1/ListVPSImages \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{}'
Cavab200 · application/json
imagesarray

Kataloq.

images[].shastring

İmicin YEGANƏ identifikatoru — səbətlər, yenidən quraşdırmalar və ISO qoşulmaları hamısı onu götürür.

images[].namestring

İnsan üçün ad (Debian 13).

images[].kindenum

disk imici birbaşa hazırlanır; iso isə yükləyib quraşdıracağınız quraşdırıcıdır.

Bunlardan biri:diskiso
images[].os_familyenum

İnterfeysinizdə qruplaşdırma və ikonlar üçün.

Bunlardan biri:linuxwindowsmikrotik
images[].min_disk_gbint

Daha kiçik diskə yenidən quraşdırma rədd edilir — əvvəlcə diski böyüdün.

Nümunə cavab
{
  "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 serverin qiyməti, maddələr üzrə.

Sorğu
cartobjectməcburi

Qiymətləndiriləcək server.

cart.node_idstringməcburi

VM-in harada yaradılacağı, vitrinin node-larından.

cart.placementstringehtiyatda saxlanılıb — göndərməyin

Ehtiyatda saxlanılıb. Bu API-də serverin harada yaradılacağına həmişə node_id qərar verir — onu göndərin və node-u vitrindən özünüz seçin.

Bunlardan biri:auto
cart.plan_codestringməcburi

Plan, seçilmiş node-un öz qiymət siyahısından — planlar və qiymətlər node-dan node-a fərqlənir.

cart.image_shastringməcburi

Nəyin yüklənəcəyi və ya quraşdırılacağı, sha üzrə. Disk imicləri birbaşa hazırlanır; quraşdırıcı ISO isə VM ondan yüklənəcək şəkildə qoşulmuş gəlir.

cart.namestringməcburi

VM-in host adı / etiketi.

cart.monthsintməcburi

İlkin müddət, vitrinin ay hədləri daxilində.

cart.extra_disk_gbintkönüllü

Planınkindən əlavə disk, GB ilə.

cart.extra_ipsintkönüllü

Əlavə açıq IPv4 ünvanları.

cart.extra_traffic_tbmoneykönüllü

Aylıq əlavə trafik, TB ilə, onluq sətir kimi ("0.5").

Nümunə sorğu
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"}}'
Cavab200 · application/json
quoteobject

Maddələr üzrə qiymət. Heç nə yaradılmır və heç nə tutulmur.

quote.model_namestring

Hansı qiymət modelinin cavab verdiyi.

quote.model_typestring

Modelin mühərrik versiyası.

quote.base_usdmoney

Endirim və əlavələrdən əvvəlki qiymət.

quote.total_usdmoney

Son qiymət — bu səbətlə satışın tutduğu məbləğ.

quote.linesarray

Maddələr üzrə bölgü, işarəli, cəmi dəqiq ümumi məbləği verir.

quote.lines[].codestring

Bu sətrin nə olduğu (base, endirim kodu, əlavə haqq…).

quote.lines[].kindstring

Sətrin kateqoriyası, interfeysinizdə qruplaşdırmaq üçün.

quote.lines[].amount_usdmoney

İşarəli. Endirimlər mənfidir; sətirlərin cəmi dəqiq total_usd dəyərini verir.

quote.lines[].pctstring

Sətrin arxasındakı faiz, varsa.

quote.cappedbool

Ümumi məbləğ modelin tavanına dəyib.

quote.floor_appliedbool

Ümumi məbləğ modelin döşəməsinə qaldırılıb.

quote.clampedenum

Səbətdəki dəyər qiymətləndirmədən əvvəl hədlərə sıxılanda təyin olunur.

Bunlardan biri:minmax
quote.invalidstring

Boş deyilsə, səbət qiymətləndirilə bilmir — bunu göstərin və belə qiymətlə HEÇ VAXT pul tutmayın.

quote.metamap

Model əlavələri, sətir→sətir (məsələn, təkmilləşdirmənin remaining_days dəyəri).

Nümunə cavab
{
  "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

Serveri alır və hazırlayır.

Çatdırılma üçün GetOrder, maşının özü üçün isə GetVPS çağırışını yoxlayın.

Sorğu
cartobjectməcburi

Nəyin yaradılacağı — QuoteVPS qiymətləndirdiyi eyni forma.

cart.node_idstringməcburi

VM-in harada yaradılacağı, vitrinin node-larından.

cart.placementstringehtiyatda saxlanılıb — göndərməyin

Ehtiyatda saxlanılıb. Bu API-də serverin harada yaradılacağına həmişə node_id qərar verir — onu göndərin və node-u vitrindən özünüz seçin.

Bunlardan biri:auto
cart.plan_codestringməcburi

Plan, seçilmiş node-un öz qiymət siyahısından — planlar və qiymətlər node-dan node-a fərqlənir.

cart.image_shastringməcburi

Nəyin yüklənəcəyi və ya quraşdırılacağı, sha üzrə. Disk imicləri birbaşa hazırlanır; quraşdırıcı ISO isə VM ondan yüklənəcək şəkildə qoşulmuş gəlir.

cart.namestringməcburi

VM-in host adı / etiketi.

cart.monthsintməcburi

İlkin müddət, vitrinin ay hədləri daxilində.

cart.extra_disk_gbintkönüllü

Planınkindən əlavə disk, GB ilə.

cart.extra_ipsintkönüllü

Əlavə açıq IPv4 ünvanları.

cart.extra_traffic_tbmoneykönüllü

Aylıq əlavə trafik, TB ilə, onluq sətir kimi ("0.5").

fundingenumməcburi

Necə ödəniləcəyi — Ödəniş üsulları bölməsinə baxın. Susmaya görə dəyər yoxdur: onu buraxmaq rədd edilir.

Bunlardan biri:FUNDING_AUTOFUNDING_BALANCEFUNDING_INVOICE
expected_total_usdmoneykönüllü

Təsdiq zəmanəti. Təyin edilibsə və bizim təzə hesablamamız fərqlidirsə, satış müştərinizin heç görmədiyi məbləği tutmaq əvəzinə price_changed ilə rədd edilir.

Nümunə sorğu
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"}'
Cavab200 · application/json
orderobject

Sifariş — statusu delivered olana qədər GetOrder çağırışını yoxlayın.

order.order_idstring

Sifarişin açıq id-si (ord_…).

order.productenum

Nə alınıb.

Bunlardan biri:vpnvps
order.kindstring

Alışın forması: new, extend, upgrade

order.statusenum

Həyat dövrü. Məqsəd delivered-dir; needs_operator pulun daxil olduğunu və çatdırılmanı insanın tamamladığını bildirir — yenidən almayın; expired isə fakturanın ödənilmədən müddətinin bitdiyini bildirir.

Bunlardan biri:createdinvoicedpaiddeliveringdeliveredneeds_operatorfailedrefund_pendingrefundedexpired
order.fundingenum

Onu həqiqətən hansı kanalın ödədiyi. FUNDING_AUTO bunlardan birinə çevrilir.

Bunlardan biri:invoicebalance
order.total_usdmoney

Sifarişin tutduğu məbləğ.

order.invoice_idstring

Onun arxasındakı faktura — hansı kanalla ödənməsindən asılı olmayaraq hər sifarişin biri var.

order.itemsint

Sifarişin neçə səlahiyyət yaratdığı və ya uzatdığı.

order.created_atunix

Sifarişin verildiyi vaxt.

order.delivered_atunix

Çatdırılmanın bitdiyi vaxt. O ana qədər yoxdur.

order.breakdownobject

Müştərinin razılaşdığı qiymət, eynilə — Quote qaytardığı forma ilə eyni.

invoiceobject

Sifarişin arxasındakı faktura: payment_required olduqda ödəniləsi, completed olduqda artıq bağlanmış.

invoice.invoice_idstring

Şlüzün faktura id-si (inv_…).

invoice.statusenum

pending ödəniləndir. confirmed ilə delivered_redirected arasındakı hər şey pulun geri dönməz şəkildə daxil olduğunu bildirir — onların hamısını ÖDƏNİLMİŞ sayın. expired keçidin ödənilmədən müddətinin bitdiyini bildirir.

Bunlardan biri:pendingconfirmedsweepingsweptdeliveringdelivereddelivered_redirectedexpired
invoice.pay_urlstring

Hostlanan ödəniş səhifəsi. Müştərinizi bura göndərin; hər kanal (coin, zəncir, balans) onun arxasındadır.

invoice.pay_telegram_urlstring

Elə həmin faktura, Telegram daxilində ödəniləsi: o, ödəniş provayderinin öz botunu açır, bot məbləği göstərir və ödənişi orada qəbul edir. Tətbiqdən çıxmaq istəməyən müştərilər üçün onu pay_url ilə yan-yana təklif edin. Olmaya bilər — yalnız botu konfiqurasiya edilmiş ödəniş provayderində olur, ona görə onu heç vaxt yeganə ödəniş düyməniz etməyin.

invoice.price_usdmoney

Fakturanın topladığı məbləğ.

invoice.expires_atunix

Ödəniş pəncərəsinin bağlandığı vaxt.

paidbool

Pul tutulub. payment_required ilə birlikdə yoxdur (= false).

statusenum

Budaqlanacağınız ƏSAS sahə — Ödəniş üsulları bölməsinə baxın.

Bunlardan biri:completedpayment_required
Nümunə cavab
{
  "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

Serverin yenilənməsinin nəyə başa gəldiyi.

Sorğu
vps_idstringməcburi

Serverin id-si, ListVPS siyahısından.

monthsintməcburi

Neçə ay əlavə ediləcəyi. Vitrinin months_minmonths_max dəyərləri interfeysinizin təklif etməli olduqlarıdır, amma yeniləmə onlara SIXILMIR — ağlabatan bir rəqəm göndərin, çünki nə göndərsəniz, qiymətləndirilib tutulan da odur.

Nümunə sorğu
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}'
Cavab200 · application/json
quoteobject

Maddələr üzrə qiymət. Heç nə yaradılmır və heç nə tutulmur.

quote.model_namestring

Hansı qiymət modelinin cavab verdiyi.

quote.model_typestring

Modelin mühərrik versiyası.

quote.base_usdmoney

Endirim və əlavələrdən əvvəlki qiymət.

quote.total_usdmoney

Son qiymət — bu səbətlə satışın tutduğu məbləğ.

quote.linesarray

Maddələr üzrə bölgü, işarəli, cəmi dəqiq ümumi məbləği verir.

quote.lines[].codestring

Bu sətrin nə olduğu (base, endirim kodu, əlavə haqq…).

quote.lines[].kindstring

Sətrin kateqoriyası, interfeysinizdə qruplaşdırmaq üçün.

quote.lines[].amount_usdmoney

İşarəli. Endirimlər mənfidir; sətirlərin cəmi dəqiq total_usd dəyərini verir.

quote.lines[].pctstring

Sətrin arxasındakı faiz, varsa.

quote.cappedbool

Ümumi məbləğ modelin tavanına dəyib.

quote.floor_appliedbool

Ümumi məbləğ modelin döşəməsinə qaldırılıb.

quote.clampedenum

Səbətdəki dəyər qiymətləndirmədən əvvəl hədlərə sıxılanda təyin olunur.

Bunlardan biri:minmax
quote.invalidstring

Boş deyilsə, səbət qiymətləndirilə bilmir — bunu göstərin və belə qiymətlə HEÇ VAXT pul tutmayın.

quote.metamap

Model əlavələri, sətir→sətir (məsələn, təkmilləşdirmənin remaining_days dəyəri).

Nümunə cavab
{
  "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

Serveri yeniləyir.

Erkən yeniləmək əlavə xərcə düşmür: yeni bitmə tarixi bu gündən deyil, cari bitmə tarixindən ölçülür.

Sorğu
vps_idstringməcburi

Serverin id-si, ListVPS siyahısından.

monthsintməcburi

Neçə ay əlavə ediləcəyi. Vitrinin months_minmonths_max dəyərləri interfeysinizin təklif etməli olduqlarıdır, amma yeniləmə onlara SIXILMIR — ağlabatan bir rəqəm göndərin, çünki nə göndərsəniz, qiymətləndirilib tutulan da odur.

fundingenumməcburi

Necə ödəniləcəyi — Ödəniş üsulları bölməsinə baxın. Susmaya görə dəyər yoxdur: onu buraxmaq rədd edilir.

Bunlardan biri:FUNDING_AUTOFUNDING_BALANCEFUNDING_INVOICE
expected_total_usdmoneykönüllü

Təsdiq zəmanəti. Təyin edilibsə və bizim təzə hesablamamız fərqlidirsə, satış müştərinizin heç görmədiyi məbləği tutmaq əvəzinə price_changed ilə rədd edilir.

Nümunə sorğu
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"}'
Cavab200 · application/json
orderobject

Sifariş — statusu delivered olana qədər GetOrder çağırışını yoxlayın.

order.order_idstring

Sifarişin açıq id-si (ord_…).

order.productenum

Nə alınıb.

Bunlardan biri:vpnvps
order.kindstring

Alışın forması: new, extend, upgrade

order.statusenum

Həyat dövrü. Məqsəd delivered-dir; needs_operator pulun daxil olduğunu və çatdırılmanı insanın tamamladığını bildirir — yenidən almayın; expired isə fakturanın ödənilmədən müddətinin bitdiyini bildirir.

Bunlardan biri:createdinvoicedpaiddeliveringdeliveredneeds_operatorfailedrefund_pendingrefundedexpired
order.fundingenum

Onu həqiqətən hansı kanalın ödədiyi. FUNDING_AUTO bunlardan birinə çevrilir.

Bunlardan biri:invoicebalance
order.total_usdmoney

Sifarişin tutduğu məbləğ.

order.invoice_idstring

Onun arxasındakı faktura — hansı kanalla ödənməsindən asılı olmayaraq hər sifarişin biri var.

order.itemsint

Sifarişin neçə səlahiyyət yaratdığı və ya uzatdığı.

order.created_atunix

Sifarişin verildiyi vaxt.

order.delivered_atunix

Çatdırılmanın bitdiyi vaxt. O ana qədər yoxdur.

order.breakdownobject

Müştərinin razılaşdığı qiymət, eynilə — Quote qaytardığı forma ilə eyni.

invoiceobject

Sifarişin arxasındakı faktura: payment_required olduqda ödəniləsi, completed olduqda artıq bağlanmış.

invoice.invoice_idstring

Şlüzün faktura id-si (inv_…).

invoice.statusenum

pending ödəniləndir. confirmed ilə delivered_redirected arasındakı hər şey pulun geri dönməz şəkildə daxil olduğunu bildirir — onların hamısını ÖDƏNİLMİŞ sayın. expired keçidin ödənilmədən müddətinin bitdiyini bildirir.

Bunlardan biri:pendingconfirmedsweepingsweptdeliveringdelivereddelivered_redirectedexpired
invoice.pay_urlstring

Hostlanan ödəniş səhifəsi. Müştərinizi bura göndərin; hər kanal (coin, zəncir, balans) onun arxasındadır.

invoice.pay_telegram_urlstring

Elə həmin faktura, Telegram daxilində ödəniləsi: o, ödəniş provayderinin öz botunu açır, bot məbləği göstərir və ödənişi orada qəbul edir. Tətbiqdən çıxmaq istəməyən müştərilər üçün onu pay_url ilə yan-yana təklif edin. Olmaya bilər — yalnız botu konfiqurasiya edilmiş ödəniş provayderində olur, ona görə onu heç vaxt yeganə ödəniş düyməniz etməyin.

invoice.price_usdmoney

Fakturanın topladığı məbləğ.

invoice.expires_atunix

Ödəniş pəncərəsinin bağlandığı vaxt.

paidbool

Pul tutulub. payment_required ilə birlikdə yoxdur (= false).

statusenum

Budaqlanacağınız ƏSAS sahə — Ödəniş üsulları bölməsinə baxın.

Bunlardan biri:completedpayment_required
Nümunə cavab
{
  "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 konfiqurasiyanın qiyməti, artıq ödənilmiş vaxta mütənasib bölünmüş halda.

Sorğu
vps_idstringməcburi

Serverin id-si, ListVPS siyahısından.

specobjectməcburi

HƏDƏF konfiqurasiya. Buraxılmış və ya sıfır sahələr cari dəyərini saxlayır.

spec.vcpuintkönüllü

Hədəf nüvə sayı. 0 cari dəyəri saxlayır.

spec.ram_mbintkönüllü

Hədəf yaddaş, MB ilə. 0 cari dəyəri saxlayır.

spec.disk_gbintkönüllü

Hədəf disk, GB ilə. Disk yalnız böyüyür — kiçik dəyər rədd edilir, çünki əməliyyat sisteminin altındakı fayl sistemini kiçiltmək məlumat itkisidir.

Nümunə sorğu
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}}'
Cavab200 · application/json
quoteobject

Maddələr üzrə qiymət. Heç nə yaradılmır və heç nə tutulmur.

quote.model_namestring

Hansı qiymət modelinin cavab verdiyi.

quote.model_typestring

Modelin mühərrik versiyası.

quote.base_usdmoney

Endirim və əlavələrdən əvvəlki qiymət.

quote.total_usdmoney

Son qiymət — bu səbətlə satışın tutduğu məbləğ.

quote.linesarray

Maddələr üzrə bölgü, işarəli, cəmi dəqiq ümumi məbləği verir.

quote.lines[].codestring

Bu sətrin nə olduğu (base, endirim kodu, əlavə haqq…).

quote.lines[].kindstring

Sətrin kateqoriyası, interfeysinizdə qruplaşdırmaq üçün.

quote.lines[].amount_usdmoney

İşarəli. Endirimlər mənfidir; sətirlərin cəmi dəqiq total_usd dəyərini verir.

quote.lines[].pctstring

Sətrin arxasındakı faiz, varsa.

quote.cappedbool

Ümumi məbləğ modelin tavanına dəyib.

quote.floor_appliedbool

Ümumi məbləğ modelin döşəməsinə qaldırılıb.

quote.clampedenum

Səbətdəki dəyər qiymətləndirmədən əvvəl hədlərə sıxılanda təyin olunur.

Bunlardan biri:minmax
quote.invalidstring

Boş deyilsə, səbət qiymətləndirilə bilmir — bunu göstərin və belə qiymətlə HEÇ VAXT pul tutmayın.

quote.metamap

Model əlavələri, sətir→sətir (məsələn, təkmilləşdirmənin remaining_days dəyəri).

restart_requiredbool

Bu konfiqurasiyanın tətbiqi enerji dövrü tələb edir — müştəri bunu ÖDƏMƏZDƏN ƏVVƏL bilməlidir.

monthly_before_usdmoney

Bugünkü təkrarlanan qiymət.

monthly_after_usdmoney

Təkmilləşdirmədən sonrakı təkrarlanan qiymət — bundan sonra yeniləmələrin nəyə başa gələcəyi.

Nümunə cavab
{
  "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 konfiqurasiyanı ödəyir və tətbiq edir. Disk yalnız böyüyə bilər.

Sorğu
vps_idstringməcburi

Serverin id-si, ListVPS siyahısından.

specobjectməcburi

HƏDƏF konfiqurasiya — əvvəlcə qiymətini alın; qiymət hesablaması sizə yenidən başlatma barədə də deyir.

spec.vcpuintkönüllü

Hədəf nüvə sayı. 0 cari dəyəri saxlayır.

spec.ram_mbintkönüllü

Hədəf yaddaş, MB ilə. 0 cari dəyəri saxlayır.

spec.disk_gbintkönüllü

Hədəf disk, GB ilə. Disk yalnız böyüyür — kiçik dəyər rədd edilir, çünki əməliyyat sisteminin altındakı fayl sistemini kiçiltmək məlumat itkisidir.

fundingenumməcburi

Necə ödəniləcəyi — Ödəniş üsulları bölməsinə baxın. Susmaya görə dəyər yoxdur: onu buraxmaq rədd edilir.

Bunlardan biri:FUNDING_AUTOFUNDING_BALANCEFUNDING_INVOICE
expected_total_usdmoneykönüllü

Təsdiq zəmanəti. Təyin edilibsə və bizim təzə hesablamamız fərqlidirsə, satış müştərinizin heç görmədiyi məbləği tutmaq əvəzinə price_changed ilə rədd edilir.

Nümunə sorğu
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"}'
Cavab200 · application/json
orderobject

Sifariş — statusu delivered olana qədər GetOrder çağırışını yoxlayın.

order.order_idstring

Sifarişin açıq id-si (ord_…).

order.productenum

Nə alınıb.

Bunlardan biri:vpnvps
order.kindstring

Alışın forması: new, extend, upgrade

order.statusenum

Həyat dövrü. Məqsəd delivered-dir; needs_operator pulun daxil olduğunu və çatdırılmanı insanın tamamladığını bildirir — yenidən almayın; expired isə fakturanın ödənilmədən müddətinin bitdiyini bildirir.

Bunlardan biri:createdinvoicedpaiddeliveringdeliveredneeds_operatorfailedrefund_pendingrefundedexpired
order.fundingenum

Onu həqiqətən hansı kanalın ödədiyi. FUNDING_AUTO bunlardan birinə çevrilir.

Bunlardan biri:invoicebalance
order.total_usdmoney

Sifarişin tutduğu məbləğ.

order.invoice_idstring

Onun arxasındakı faktura — hansı kanalla ödənməsindən asılı olmayaraq hər sifarişin biri var.

order.itemsint

Sifarişin neçə səlahiyyət yaratdığı və ya uzatdığı.

order.created_atunix

Sifarişin verildiyi vaxt.

order.delivered_atunix

Çatdırılmanın bitdiyi vaxt. O ana qədər yoxdur.

order.breakdownobject

Müştərinin razılaşdığı qiymət, eynilə — Quote qaytardığı forma ilə eyni.

invoiceobject

Sifarişin arxasındakı faktura: payment_required olduqda ödəniləsi, completed olduqda artıq bağlanmış.

invoice.invoice_idstring

Şlüzün faktura id-si (inv_…).

invoice.statusenum

pending ödəniləndir. confirmed ilə delivered_redirected arasındakı hər şey pulun geri dönməz şəkildə daxil olduğunu bildirir — onların hamısını ÖDƏNİLMİŞ sayın. expired keçidin ödənilmədən müddətinin bitdiyini bildirir.

Bunlardan biri:pendingconfirmedsweepingsweptdeliveringdelivereddelivered_redirectedexpired
invoice.pay_urlstring

Hostlanan ödəniş səhifəsi. Müştərinizi bura göndərin; hər kanal (coin, zəncir, balans) onun arxasındadır.

invoice.pay_telegram_urlstring

Elə həmin faktura, Telegram daxilində ödəniləsi: o, ödəniş provayderinin öz botunu açır, bot məbləği göstərir və ödənişi orada qəbul edir. Tətbiqdən çıxmaq istəməyən müştərilər üçün onu pay_url ilə yan-yana təklif edin. Olmaya bilər — yalnız botu konfiqurasiya edilmiş ödəniş provayderində olur, ona görə onu heç vaxt yeganə ödəniş düyməniz etməyin.

invoice.price_usdmoney

Fakturanın topladığı məbləğ.

invoice.expires_atunix

Ödəniş pəncərəsinin bağlandığı vaxt.

paidbool

Pul tutulub. payment_required ilə birlikdə yoxdur (= false).

statusenum

Budaqlanacağınız ƏSAS sahə — Ödəniş üsulları bölməsinə baxın.

Bunlardan biri:completedpayment_required
Nümunə cavab
{
  "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"
}

Server idarəetməsi

Buradakı hər feil serveri id ilə götürür — bu çağırışlarda sahə hərfi mənada id adlanır, pul feillərindəki vps_id ilə fərqli olaraq.

POST

ListVPS

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

Maşınlarınız, enerji vəziyyəti və ünvanları ilə.

Sorğu
limitintkönüllü

Səhifə ölçüsü. Susmaya görə 50.

cursorcursorkönüllü

Əvvəlki cavabın next_cursor dəyəri. İlk səhifə üçün onu buraxın.

Nümunə sorğu
curl https://apiservice.vitamindata.net/api/v1/ListVPS \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"limit":50,"cursor":""}'
Cavab200 · application/json
vpsarray

Maşınlarınız.

vps[].idstring

Serverin id-si — hər idarəetmə feilinin id sahəsinin və hər pul feilinin vps_id sahəsinin götürdüyü dəyər.

vps[].namestring

Onun host adı / etiketi.

vps[].node_idstring

Harada işlədiyi.

vps[].lifecycleenum

0 hazırlanır · 1 aktiv · 2 dayandırılıb · 3 silinir · 4 silinib.

Bunlardan biri:01234
vps[].provisionedbool

Maşın öz hostunda mövcuddur.

vps[].power_desiredenum

Enerjinin NECƏ OLMALI olduğu: 1 açıq, 0/yoxluq bağlı. Canlı vəziyyət GetVPSStats.running sahəsindədir.

Bunlardan biri:01
vps[].vcpuint

Nüvələr.

vps[].mem_mbint

Yaddaş, MB ilə.

vps[].disk_gbint

Disk, GB ilə.

vps[].image_shastring

Nədən yükləndiyi və ya quraşdırıldığı.

vps[].expires_atunix

Serverin müddətinin bitdiyi vaxt — ondan əvvəl ExtendVPS ilə yeniləyin.

vps[].created_atunix

Yaradıldığı vaxt.

vps[].ipsarray

Onun açıq ünvanları.

vps[].private_ipstring

Plan onu nəzərdə tuturdursa, onun daxili ünvanı.

next_cursorcursor

Növbəti səhifə üçün onu cursor kimi geri göndərin. Yoxdursa/boşdursa — hər şeyi almısınız.

Nümunə cavab
{
  "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 maşın təfərrüatı ilə.

Sorğu
idstringməcburi

Serverin id-si, ListVPS siyahısından. Nəzərə alın ki, idarəetmə feillərində sahə id adlanır — yalnız pul feilləri onu vps_id yazır.

Nümunə sorğu
curl https://apiservice.vitamindata.net/api/v1/GetVPS \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"id":"vm_7q3k1n"}'
Cavab200 · application/json
vpsobject

Maşın.

vps.idstring

Serverin id-si — hər idarəetmə feilinin id sahəsinin və hər pul feilinin vps_id sahəsinin götürdüyü dəyər.

vps.namestring

Onun host adı / etiketi.

vps.node_idstring

Harada işlədiyi.

vps.lifecycleenum

0 hazırlanır · 1 aktiv · 2 dayandırılıb · 3 silinir · 4 silinib.

Bunlardan biri:01234
vps.provisionedbool

Maşın öz hostunda mövcuddur.

vps.power_desiredenum

Enerjinin NECƏ OLMALI olduğu: 1 açıq, 0/yoxluq bağlı. Canlı vəziyyət GetVPSStats.running sahəsindədir.

Bunlardan biri:01
vps.vcpuint

Nüvələr.

vps.mem_mbint

Yaddaş, MB ilə.

vps.disk_gbint

Disk, GB ilə.

vps.image_shastring

Nədən yükləndiyi və ya quraşdırıldığı.

vps.expires_atunix

Serverin müddətinin bitdiyi vaxt — ondan əvvəl ExtendVPS ilə yeniləyin.

vps.created_atunix

Yaradıldığı vaxt.

vps.ipsarray

Onun açıq ünvanları.

vps.private_ipstring

Plan onu nəzərdə tuturdursa, onun daxili ünvanı.

livebool

İndicə müstəvidən oxunub.

Nümunə cavab
{
  "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, yaddaş, disk və şəbəkə.

Sorğu
idstringməcburi

Serverin id-si, ListVPS siyahısından. Nəzərə alın ki, idarəetmə feillərində sahə id adlanır — yalnız pul feilləri onu vps_id yazır.

Nümunə sorğu
curl https://apiservice.vitamindata.net/api/v1/GetVPSStats \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"id":"vm_7q3k1n"}'
Cavab200 · application/json
cpu_pctint

CPU yükü, faizlə.

mem_used_mbint

İstifadədə olan yaddaş, MB.

disk_used_mbint

İstifadədə olan disk, MB.

rx_bpsint64

Daxil olan, saniyədə bit.

tx_bpsint64

Xaric olan, saniyədə bit.

runningbool

Maşın indi işə salınmış vəziyyətdədir.

updated_atunix

Bu göstəricilərin götürüldüyü vaxt.

Nümunə cavab
{
  "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

Maşının ayrılmış həcminə qarşı istifadə olunan trafik, paket üzrə.

Sorğu
idstringməcburi

Serverin id-si, ListVPS siyahısından. Nəzərə alın ki, idarəetmə feillərində sahə id adlanır — yalnız pul feilləri onu vps_id yazır.

Nümunə sorğu
curl https://apiservice.vitamindata.net/api/v1/GetVPSUsage \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"id":"vm_7q3k1n"}'
Cavab200 · application/json
total_downbytes

Bütün dövr ərzində endirilən.

total_upbytes

Bütün dövr ərzində yüklənən.

bundlesarray

Trafik paketləri, indi boşalanı current ilə işarələnmiş halda.

bundles[].idint64

Trafik paketinin hesablama müstəvisindəki id-si.

bundles[].modeint

Müstəvinin uçot rejimi kodu. Qapalı sayın.

bundles[].bytes_totalbytes

Paketin tam həcmi.

bundles[].used_dlbytes

Ona qarşı endirilən.

bundles[].used_upbytes

Ona qarşı yüklənən.

bundles[].stateint

Müstəvinin vəziyyət kodu. Qapalı sayın.

bundles[].currentbool

İndi boşalan paket elə budur.

bundles[].expires_atunix

Paketin müddətinin bitdiyi vaxt.

Nümunə cavab
{
  "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

Enerji idarəsi.

shutdown əməliyyat sistemindən xahiş edir; force_stop isə fişi çəkir. Birincisinə üstünlük verin.

Sorğu
idstringməcburi

Serverin id-si, ListVPS siyahısından. Nəzərə alın ki, idarəetmə feillərində sahə id adlanır — yalnız pul feilləri onu vps_id yazır.

actionenumməcburi

shutdown/reboot mülayimdir; reset/force_stop isə enerji düyməsidir.

Bunlardan biri:startshutdownrebootresetforce_stop
Nümunə sorğu
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"}'
Cavab200 · application/json
okbool

Müstəvi əməliyyatı qəbul etdi. Maşının həqiqi vəziyyəti üçün GetVPSStats izləyin.

Nümunə cavab
{"ok": true}
POST

ReinstallVPS

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

Diski silir və təzə imic quraşdırır.

Dağıdıcıdır və təkrar cəhdə DAVAMLI DEYİL — bir çağırış, bir yenidən quraşdırma. İmic cari diskə sığmalıdır; sığmırsa əvvəlcə diski böyüdün.

Sorğu
idstringməcburi

Serverin id-si, ListVPS siyahısından. Nəzərə alın ki, idarəetmə feillərində sahə id adlanır — yalnız pul feilləri onu vps_id yazır.

image_shastringməcburi

İmic, ListVPSImages siyahısındakı sha üzrə. İmici başqa heç nə adlandırmır və təklif olunmayan sha rədd edilir.

reset_rootboolkönüllü

Həmçinin təzə root şifrəsi yarat.

Nümunə sorğu
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}'
Cavab200 · application/json
okbool

Müstəvi əməliyyatı qəbul etdi. Maşının həqiqi vəziyyəti üçün GetVPSStats izləyin.

Nümunə cavab
{"ok": true}
POST

AttachVPSISO

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

Quraşdırıcı ISO qoşur. Ondan yükləmək üçün onu 1 yükləmə sırası ilə birlikdə işlədin.

Sorğu
idstringməcburi

Serverin id-si, ListVPS siyahısından. Nəzərə alın ki, idarəetmə feillərində sahə id adlanır — yalnız pul feilləri onu vps_id yazır.

image_shastringməcburi

İmic, ListVPSImages siyahısındakı sha üzrə. İmici başqa heç nə adlandırmır və təklif olunmayan sha rədd edilir.

Nümunə sorğu
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"}'
Cavab200 · application/json
okbool

Müstəvi əməliyyatı qəbul etdi. Maşının həqiqi vəziyyəti üçün GetVPSStats izləyin.

Nümunə cavab
{"ok": true}
POST

DetachVPSISO

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

ISO-nu çıxarır və diskdən yükləməyə qayıdır.

Sorğu
idstringməcburi

Serverin id-si, ListVPS siyahısından. Nəzərə alın ki, idarəetmə feillərində sahə id adlanır — yalnız pul feilləri onu vps_id yazır.

Nümunə sorğu
curl https://apiservice.vitamindata.net/api/v1/DetachVPSISO \
  -H "Authorization: Bearer $YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"id":"vm_7q3k1n"}'
Cavab200 · application/json
okbool

Müstəvi əməliyyatı qəbul etdi. Maşının həqiqi vəziyyəti üçün GetVPSStats izləyin.

Nümunə cavab
{"ok": true}
POST

SetVPSBootOrder

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

Hansı cihazın əvvəl yüklənəcəyi.

Sorğu
idstringməcburi

Serverin id-si, ListVPS siyahısından. Nəzərə alın ki, idarəetmə feillərində sahə id adlanır — yalnız pul feilləri onu vps_id yazır.

orderenumməcburi

0 əvvəl disk, 1 əvvəl CD-ROM.

Bunlardan biri:01
Nümunə sorğu
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}'
Cavab200 · application/json
okbool

Müstəvi əməliyyatı qəbul etdi. Maşının həqiqi vəziyyəti üçün GetVPSStats izləyin.

Nümunə cavab
{"ok": true}