Ana içeriğe geç

Hizmetlerinizi, sunucularınızı, faturalarınızı ve destek taleplerinizi kendi yazılımınızdan yönetin.

Zenix API

Zenix API, HTTPS üzerinden çalışan bir JSON REST API'sidir. Her istek, hesap sahibinin müşteri panelinde oluşturduğu bir API anahtarıyla doğrulanır. API ödeme, sipariş ya da hesap güvenliği işlemlerini hiçbir zaman sunmaz.

OpenAPI 3.1 belirtimi (openapi.json)

Tam referans: tüm uçlar; parametreleri, istek gövdeleri, yanıt şemaları, gereken kapsam, örnekler ve hata kodlarıyla tek bir dosyada. Postman, Insomnia ya da Swagger Editor'e aktarabilir, openapi-generator ile istemci kütüphanesi üretebilirsiniz.

openapi.json'u açhttps://api.zenix.net.tr/v1/openapi.json

Temel adres

https://api.zenix.net.tr/v1

Tüm uçlar bu adrese göredir. Düz HTTP istekleri reddedilir.

Kimlik doğrulama

Anahtarları hesap sahibi müşteri panelindeki API anahtarları bölümünden, şifresi ve iki adımlı doğrulama koduyla onaylayarak oluşturur. Anahtar yalnızca bir kez gösterilir; şifre gibi saklayın ve her istekte gönderin:

Authorization: Bearer zxc_live_...

Anahtarı hiçbir zaman URL'ye koymayın. Geçerli anahtar olmadan gelen istekler 401 alır; aynı adresten tekrarlanan hatalı denemeler sınırlandırılır. Bir anahtar oluşturulduğunda ya da iptal edildiğinde hesap sahibine e-posta gider; hesap sahibi anahtarı istediği an iptal edebilir.

Kapsamlar

Anahtar yalnızca oluşturulduğu kapsamlarla çalışır. Kapsam ve hizmetler değiştirilemez: değiştirmek için anahtarı iptal edip yenisini oluşturun. İzinli IP adresleri müşteri panelinden istediğiniz zaman düzenlenebilir.

KapsamVerdiği erişim
services:readHizmetleri listeleme; hizmet ayrıntısı, sunucu özeti ve canlı sunucu durumunu okuma.
servers:powerSunucuyu başlatma, durdurma, yeniden başlatma ve gücünü kesme. services:read gerektirir.
domains:readAlan adlarını listeleme. Transfer (EPP) kodları hiçbir zaman döndürülmez.
energy:readEnerji tüketimini ve anlık yükü okuma (anlık yük yalnızca tüm hizmetleri kapsayan anahtarlarda).
invoices:readFaturaları listeleme ve okuma. Hesabın tamamını kapsar.
tickets:readDestek taleplerini listeleme ve okuma. Hesabın tamamını kapsar.
tickets:writeDestek talebi açma ve yanıtlama. tickets:read gerektirir.
bgp:readASN'leri, BGP oturumlarını ve prefix'leri okuma. Hesabın tamamını kapsar.

Hizmet ve IP kısıtları

Anahtar seçili hizmetlerle sınırlandırılabilir: listeler yalnızca o hizmetleri içerir ve hesap geneli kapsamlar (fatura, destek talebi, BGP) verilemez. Anahtar ayrıca IP adresleri ya da CIDR bloklarıyla sınırlandırılabilir; başka adreslerden gelen istekler 403 ip_not_allowed alır. Anahtarların süresi 30, 90 ya da 365 gün sonra dolabilir ya da süresiz olabilir.

Hız sınırları

Anahtar başına dakikada 120 okuma ve 20 yazma isteği. Bir hesabın tüm anahtarları birlikte dakikada 300 okuma ve 40 yazma isteği. Yanıtlar X-RateLimit-Limit, X-RateLimit-Remaining ve X-RateLimit-Reset başlıklarını taşır; sınır aşılırsa Retry-After ile 429 döner.

Sunucu durumu, özeti ve güç işlemleri diğer müşterilerle ortak bir kapasiteyi de kullanır ve 429 server_rate_limited dönebilir. Durum 10 saniye, sunucu özeti 60 saniye önbelleklenir; daha sık sorgulamak daha güncel veri vermez.

İstekler ve yanıtlar

  • Yanıtlar JSON'dur: başarılı yanıtlarda success, data ve meta.request_id; hatalarda success false, error.code, error.message ve gerektiğinde error.details bulunur. Desteğe başvururken request_id değerini iletin.
  • Listeler limit (1-100, varsayılan 25) ve offset alır; meta.pagination içinde limit, offset, total ve has_more döner. Bilinmeyen ya da tekrarlanan sorgu parametreleri 422 ile reddedilir.
  • Tutarlar ve diğer ondalık değerler metin olarak gelir (örneğin 24.00), hiçbir zaman kayan noktalı sayı olarak değil. Tutarların para birimi ayrı bir alandadır.
  • Zamanlar ofsetli ISO 8601 biçimindedir (UTC için Z; randevu saatleri +03:00). Takvim günleri YYYY-MM-DD biçimindedir. Enerji günleri ve ayları UTC'dir.
  • Alan adları snake_case'tir. Durum alanlarına v1 içinde yeni değerler eklenebilir; bilinmeyen değerleri tolere edin.
{
  "success": true,
  "data": [ { "id": 123, "product_name": "VDS 4", "status": "active", "recurring_amount": "24.00", "currency": "USD" } ],
  "meta": {
    "request_id": "7f3c9a2e-…",
    "pagination": { "limit": 10, "offset": 0, "total": 1, "has_more": false }
  }
}

Tekrar deneme ve idempotency

Yazma uçları Idempotency-Key başlığını kabul eder (1-64 karakter: harf, rakam, '.', '_', ':' ya da '-'). Aynı anahtarla 24 saat içinde tekrarlanan istek işlemi yinelemez; ilk yanıtı Idempotent-Replayed: true başlığıyla döner. Aynı anahtar farklı bir gövdeyle kullanılırsa 422 idempotency_key_reused döner. Zaman aşımından (504) sonra işlem yine de tamamlanmış olabilir: yeni bir anahtarla değil, aynı anahtarla tekrar deneyin.

Uçlar

UçKapsamAçıklama
GET /meanyİsteği yapan anahtar: kapsamlar, kısıtlar, geçerlilik ve hesap.
GET /departmentsanyDestek talebi açarken kullanılacak departman anahtarları.
GET /servicesservices:readHizmetleriniz, etkin olanlar önce.
GET /services/{id}services:readTek bir hizmet; yönetilen sunucusu olup olmadığı dahil.
GET /services/{id}/serverservices:readSunucu özeti: donanım, adresler, işletim sistemi ve kullanılabilir işlemler.
GET /services/{id}/server/statusservices:readCanlı güç durumu ve kaynak kullanımı.
POST /services/{id}/server/powerservers:powerSunucuyu başlatma, durdurma, yeniden başlatma ya da gücünü kesme.
GET /invoicesinvoices:readFaturalarınız, en yenisi önce.
GET /invoices/{id}invoices:readTek bir fatura; kalemleri ve resmi belge durumuyla.
GET /ticketstickets:readDestek talepleriniz.
GET /tickets/{id}tickets:readTek bir destek talebi ve mesajları.
POST /ticketstickets:writeDestek talebi açma.
POST /tickets/{id}/repliestickets:writeDestek talebini yanıtlama (kapalı talebi yeniden açar).
GET /bgp/asnsbgp:readASN'leriniz ve doğrulama durumları.
GET /bgp/sessionsbgp:readBGP oturumlarınız.
GET /bgp/prefixesbgp:readPrefix'leriniz; onay, RPKI/IRR ve upstream durumuyla.
GET /domainsdomains:readAlan adlarınız (salt okunur; transfer kodu hiçbir zaman döndürülmez).
GET /metrics/energyenergy:readSayaç bazında aylık enerji tüketimi.
GET /metrics/energy/seriesenergy:readSaatlik, günlük ya da aylık seri olarak enerji tüketimi.
GET /metrics/energy/liveenergy:readKabin bazında anlık güç çekişi ve besleme dengesizliği uyarıları.

Örnekler

İlk on hizmeti listeleme:

curl https://api.zenix.net.tr/v1/services?limit=10 \
  -H "Authorization: Bearer $ZENIX_API_KEY"

Sunucuyu yeniden başlatma (güvenle tekrarlanabilir):

curl -X POST https://api.zenix.net.tr/v1/services/123/server/power \
  -H "Authorization: Bearer $ZENIX_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: restart-123-20261020" \
  -d '{"action":"restart"}'

Hatalar

Her hatanın değişmeyen, makinece okunabilir bir kodu vardır. Mesajlar sabit İngilizce metindir ve değişebilir; mantığınızı koda dayandırın.

{
  "success": false,
  "error": { "code": "insufficient_scope", "message": "…", "details": { "required_scope": "servers:power" } },
  "meta": { "request_id": "7f3c9a2e-…" }
}
HTTPKodMesaj
400invalid_pathThe request path is not valid.
400invalid_jsonThe request body is not valid UTF-8 JSON.
400invalid_idempotency_keyIdempotency-Key must be 1-64 characters: letters, digits, '.', '_', ':' or '-', starting with a letter or digit.
400invalid_requestThe request could not be processed.
401missing_api_keyMissing API key. Send it as 'Authorization: Bearer <key>'.
401invalid_api_keyThe API key is invalid, expired or revoked.
403insufficient_scopeThe API key does not have the scope required for this endpoint.
403service_scope_restrictedThis API key is limited to specific services and cannot access account-wide data.
403ip_not_allowedRequests from this IP address are not allowed for this API key.
404not_foundThe requested resource was not found.
404service_not_foundService not found.
404server_not_foundThis service has no managed server.
404invoice_not_foundInvoice not found.
404ticket_not_foundTicket not found.
404cabinet_not_foundCabinet not found.
405method_not_allowedThe HTTP method is not allowed for this endpoint.
409server_busyAnother operation is in progress on this server.
409server_not_readyThe server is not ready yet.
409service_not_activeThe service is not active.
409server_management_unavailablePower and status operations are not available for this server.
409idempotency_key_in_useA request with this Idempotency-Key is still being processed. Retry shortly with the same key.
413payload_too_largeThe request body is too large.
415unsupported_media_typeThe request body must be application/json.
422validation_failedThe request contains invalid parameters.
422idempotency_key_reusedThis Idempotency-Key was already used with a different request.
429rate_limit_exceededToo many requests. Retry after the time in the Retry-After header.
429server_rate_limitedToo many server operations right now. Retry after the time in the Retry-After header.
500internal_errorAn internal error occurred.
502server_operation_failedThe server operation could not be completed.
502upstream_errorThe service returned an invalid response.
503api_disabledThe API is temporarily disabled.
503service_unavailableThe service is temporarily unavailable.
503server_operations_unavailableServer operations are temporarily unavailable.
504upstream_timeoutThe request timed out. The operation may still complete; retry with the same Idempotency-Key.

Sürümleme

v1 içinde yeni alanlar ve durum değerleri eklenebilir; tanımadığınız alanları yok sayın. Geriye uyumsuz değişiklikler yeni bir sürüm yolunda yayımlanır.