
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.
https://api.zenix.net.tr/v1/openapi.jsonTemel 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.
| Kapsam | Verdiği erişim |
|---|---|
| services:read | Hizmetleri listeleme; hizmet ayrıntısı, sunucu özeti ve canlı sunucu durumunu okuma. |
| servers:power | Sunucuyu başlatma, durdurma, yeniden başlatma ve gücünü kesme. services:read gerektirir. |
| domains:read | Alan adlarını listeleme. Transfer (EPP) kodları hiçbir zaman döndürülmez. |
| energy:read | Enerji tüketimini ve anlık yükü okuma (anlık yük yalnızca tüm hizmetleri kapsayan anahtarlarda). |
| invoices:read | Faturaları listeleme ve okuma. Hesabın tamamını kapsar. |
| tickets:read | Destek taleplerini listeleme ve okuma. Hesabın tamamını kapsar. |
| tickets:write | Destek talebi açma ve yanıtlama. tickets:read gerektirir. |
| bgp:read | ASN'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ç | Kapsam | Açıklama |
|---|---|---|
| GET /me | any | İsteği yapan anahtar: kapsamlar, kısıtlar, geçerlilik ve hesap. |
| GET /departments | any | Destek talebi açarken kullanılacak departman anahtarları. |
| GET /services | services:read | Hizmetleriniz, etkin olanlar önce. |
| GET /services/{id} | services:read | Tek bir hizmet; yönetilen sunucusu olup olmadığı dahil. |
| GET /services/{id}/server | services:read | Sunucu özeti: donanım, adresler, işletim sistemi ve kullanılabilir işlemler. |
| GET /services/{id}/server/status | services:read | Canlı güç durumu ve kaynak kullanımı. |
| POST /services/{id}/server/power | servers:power | Sunucuyu başlatma, durdurma, yeniden başlatma ya da gücünü kesme. |
| GET /invoices | invoices:read | Faturalarınız, en yenisi önce. |
| GET /invoices/{id} | invoices:read | Tek bir fatura; kalemleri ve resmi belge durumuyla. |
| GET /tickets | tickets:read | Destek talepleriniz. |
| GET /tickets/{id} | tickets:read | Tek bir destek talebi ve mesajları. |
| POST /tickets | tickets:write | Destek talebi açma. |
| POST /tickets/{id}/replies | tickets:write | Destek talebini yanıtlama (kapalı talebi yeniden açar). |
| GET /bgp/asns | bgp:read | ASN'leriniz ve doğrulama durumları. |
| GET /bgp/sessions | bgp:read | BGP oturumlarınız. |
| GET /bgp/prefixes | bgp:read | Prefix'leriniz; onay, RPKI/IRR ve upstream durumuyla. |
| GET /domains | domains:read | Alan adlarınız (salt okunur; transfer kodu hiçbir zaman döndürülmez). |
| GET /metrics/energy | energy:read | Sayaç bazında aylık enerji tüketimi. |
| GET /metrics/energy/series | energy:read | Saatlik, günlük ya da aylık seri olarak enerji tüketimi. |
| GET /metrics/energy/live | energy:read | Kabin 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-…" }
}| HTTP | Kod | Mesaj |
|---|---|---|
| 400 | invalid_path | The request path is not valid. |
| 400 | invalid_json | The request body is not valid UTF-8 JSON. |
| 400 | invalid_idempotency_key | Idempotency-Key must be 1-64 characters: letters, digits, '.', '_', ':' or '-', starting with a letter or digit. |
| 400 | invalid_request | The request could not be processed. |
| 401 | missing_api_key | Missing API key. Send it as 'Authorization: Bearer <key>'. |
| 401 | invalid_api_key | The API key is invalid, expired or revoked. |
| 403 | insufficient_scope | The API key does not have the scope required for this endpoint. |
| 403 | service_scope_restricted | This API key is limited to specific services and cannot access account-wide data. |
| 403 | ip_not_allowed | Requests from this IP address are not allowed for this API key. |
| 404 | not_found | The requested resource was not found. |
| 404 | service_not_found | Service not found. |
| 404 | server_not_found | This service has no managed server. |
| 404 | invoice_not_found | Invoice not found. |
| 404 | ticket_not_found | Ticket not found. |
| 404 | cabinet_not_found | Cabinet not found. |
| 405 | method_not_allowed | The HTTP method is not allowed for this endpoint. |
| 409 | server_busy | Another operation is in progress on this server. |
| 409 | server_not_ready | The server is not ready yet. |
| 409 | service_not_active | The service is not active. |
| 409 | server_management_unavailable | Power and status operations are not available for this server. |
| 409 | idempotency_key_in_use | A request with this Idempotency-Key is still being processed. Retry shortly with the same key. |
| 413 | payload_too_large | The request body is too large. |
| 415 | unsupported_media_type | The request body must be application/json. |
| 422 | validation_failed | The request contains invalid parameters. |
| 422 | idempotency_key_reused | This Idempotency-Key was already used with a different request. |
| 429 | rate_limit_exceeded | Too many requests. Retry after the time in the Retry-After header. |
| 429 | server_rate_limited | Too many server operations right now. Retry after the time in the Retry-After header. |
| 500 | internal_error | An internal error occurred. |
| 502 | server_operation_failed | The server operation could not be completed. |
| 502 | upstream_error | The service returned an invalid response. |
| 503 | api_disabled | The API is temporarily disabled. |
| 503 | service_unavailable | The service is temporarily unavailable. |
| 503 | server_operations_unavailable | Server operations are temporarily unavailable. |
| 504 | upstream_timeout | The 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.

