Netlen API v2
v2.0.0Sunucular'ınızı, Sanal Veri Merkezi'nizi, Alan Adları'nızı, Web Hosting'lerinizi, destek taleplerinizi ve hesabınızı RESTful API ile yönetin.
https://api.netlen.com.tr/v2Introduction
Netlen API v2, sunucu, VDC (sanal veri merkezi), domain, web hosting, destek ve hesap kaynaklarınızı programatik olarak yönetmenizi sağlar. RESTful, JSON tabanlı ve İngilizce-only bir arayüzdür.
https://api.netlen.com.tr/v2Authorization: Bearer <api_key>application/jsonAuthentication
Her istek `Authorization: Bearer <api_key>` header'ı ile gönderilmelidir. API anahtarları panelden oluşturulur, IP allowlist zorunludur. `?api_key=` query fallback'i v2'de kaldırıldı.
AUTH_REQUIREDToken gönderilmedi.
AUTH_INVALIDToken geçersiz veya iptal edilmiş.
AUTH_IP_NOT_ALLOWEDÇağıran IP anahtarın allowlist'inde değil.
ACCOUNT_INACTIVEHesap askıda/kapalı.
AUTH_SCOPE_INSUFFICIENTToken bu işlem için gerekli scope'a sahip değil.
curl -s "https://api.netlen.com.tr/v2/servers" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"Response envelope
Her başarılı yanıt data + meta, her hata error objesi ile döner. Üst seviye success flag'i v2'de yoktur — HTTP status kodu tek başına başarı sinyalidir.
{
"data": { "...": "..." },
"meta": { "request_id": "req_9f2c1a", "version": "2.0.0" }
}{
"data": [ { "...": "..." } ],
"meta": {
"request_id": "req_9f2c1a",
"version": "2.0.0",
"pagination": { "page": 1, "per_page": 25, "total": 1650, "total_pages": 66 }
}
}{
"error": {
"code": "LOCATION_INVALID",
"message": "The selected location is not available for this account.",
"errors": [
{ "field": "location_id", "code": "INVALID", "message": "Location 999 does not exist." }
],
"request_id": "req_9f2c1a",
"doc_url": "https://api.netlen.com.tr/v2/docs/errors#LOCATION_INVALID"
}
}Pagination
Liste endpoint'leri sayfa-tabanlı pagination kullanır. `page` ve `per_page` query parametreleri (`per_page` max 100). Response `meta.pagination` içinde `{page, per_page, total, total_pages}` döner.
GET /servers?page=1&per_page=25Idempotency
Ücretlendirme yapan `POST` istekleri (server create, domain register, web-hosting order) `Idempotency-Key: <uuid4>` header'ı desteklemelidir. Aynı anahtar + aynı body → orijinal response tekrar döner (çift ödeme yok). Farklı body → `409 IDEMPOTENCY_KEY_CONFLICT`.
Idempotency-Key: 6f1c2b90-8f7a-4e51-9c3f-1a2b3c4d5e6fAsync operations
Uzun süren işlemler (create, migrate, resize, reinstall, snapshot) 202 status ile birlikte bir `operation` objesi döner. `GET /operations/{id}` ile poll edip status'unu (`queued`/`running`/`completed`/`failed`) izleyebilirsiniz.
{
"data": {
"operation": {
"id": "op_9f2c...",
"type": "server.migrate",
"status": "running",
"resource": { "type": "server", "id": "NET10231" },
"progress_pct": 63,
"detail": "78/120 GB",
"created_at": "2026-07-13T14:40:12Z",
"updated_at": "2026-07-13T14:41:00Z"
}
},
"meta": { "request_id": "req_9f2c1a", "version": "2.0.0" }
}Rate limiting
Her response üç `RateLimit-*` header'ı taşır. Limit aşıldığında 429 `RATE_LIMITED` döner ve `Retry-After` header'ında beklenecek saniye yer alır.
RateLimit-Limit: 600
RateLimit-Remaining: 597
RateLimit-Reset: 42
Retry-After: 42 (yalnızca 429 yanıtında)Sandbox mode
Test API anahtarları (`is_test`) sandbox'a yönlendirilir. Bütün kontrat çalışır ama gerçek etki yoktur: bakiye çekilmez, provider'a çağrı gitmez, kayıt oluşmaz. Sandbox yanıtları `meta.sandbox: true` işaretini taşır. Validation çalışmaya devam eder (`422` üretilebilir).
Error catalog
Tüm hata yanıtları aynı zarfı taşır (error.code stabil ve makine-okunur; message İngilizce). Client'lar code üzerinde branch etmelidir.
REQUEST_MALFORMEDRequest body is not valid JSON.METHOD_NOT_ALLOWEDThis method is not allowed on this endpoint.ENDPOINT_NOT_FOUNDThe requested endpoint does not exist.UNSUPPORTED_MEDIA_TYPEContent-Type must be application/json.AUTH_REQUIREDAuthentication is required. Provide an "Authorization: Bearer <token>" header.AUTH_INVALIDThe API token is invalid or has been revoked.AUTH_IP_NOT_ALLOWEDThis IP address is not allowed for this API token.ACCOUNT_INACTIVEThis account is not active.AUTH_SCOPE_INSUFFICIENTThe API token does not have the required scope for this operation.RESOURCE_NOT_FOUNDThe requested resource was not found.STATE_CONFLICTThe resource is not in a state that allows this operation.IDEMPOTENCY_KEY_CONFLICTThis idempotency key was already used with a different request.VALIDATION_FAILEDOne or more request parameters are invalid.INSUFFICIENT_BALANCEAccount balance is insufficient for this operation.QUOTA_EXCEEDEDA resource quota or limit for this account has been exceeded.RATE_LIMITEDToo many requests. Please retry after the period in the Retry-After header.LOCATION_INVALIDThe selected location is not available for this account.OS_VERSION_INVALIDThe selected operating system version is invalid.INVALID_PASSWORDPassword must be at least 8 characters and include an uppercase letter, a lowercase letter, a digit and a symbol.HOSTNAME_IN_USEAn active server with this hostname already exists. Choose a different hostname.PLAN_NOT_FOUNDThe selected plan does not exist.CAPACITY_UNAVAILABLEThere is no capacity available to satisfy this request.NODE_INCOMPATIBLE_LIVE_MIGRATELive migration is not possible between these CPU vendors. Use a cold migration instead.SOURCE_NOT_FOUNDThe source snapshot or backup was not found.NOT_IMPLEMENTEDThis endpoint is not implemented yet.INTERNAL_ERRORAn unexpected error occurred. Contact support with the request_id.UPSTREAM_ERRORAn upstream provider failed to process the request.SERVICE_UNAVAILABLEThe service is temporarily unavailable. Please retry shortly.Servers
Fiziksel & sanal sunucularınızı yönetin. Listeleme, oluşturma (3 mod: package / custom / snapshot'tan), güncelleme, silme, power actions (start/stop/reboot/reset_password/reinstall/resize/clone) ve alt kaynaklar: snapshots, backups, firewall, IP'ler + rDNS, metrics/traffic, operations.
The server object
idstringnamestringstatusenumpower_stateenum | nullosstring | nullspecsobjectnetworkobjectplanobject | nullbillingobjectcreated_atstring | null{
"id": "NET10231",
"name": "web01",
"status": "active",
"power_state": "running",
"os": "ubuntu-24.04",
"location_id": 3,
"specs": { "cpu_cores": 6, "ram_mb": 16384, "storage_gb": 120 },
"network": {
"ipv4": { "address": "77.92.151.40", "gateway": "77.92.151.1", "netmask": "255.255.255.0", "subnet": "77.92.151.0/24" },
"ipv6": { "address": "2a01:f900:10::40", "gateway": null, "subnet": "2a01:f900:10::/48" },
"extra_ips": [ { "address": "77.92.151.41", "version": 4 } ]
},
"plan": { "id": 6, "name": "VPS-6" },
"billing": { "amount": "39.00", "currency": "USD", "cycle": "monthly", "next_billing_at": "2026-08-13T00:00:00Z" },
"created_at": "2026-07-13T14:40:12Z"
}List servers
Hesaba ait sunucuları döner (silinmişler hariç). Liste yanıtında `power_state` ve `os` performans için `null`; canlı değerler için detay endpoint'ini çağırın.
pageintoptionaldefault: 1Sayfa numarası.
per_pageintoptionaldefault: 25Sayfa başına öğe (max 100).
statusenumoptional`active` · `suspended` · `pending` · `cancelled`
AUTH_REQUIREDAUTH_INVALIDRATE_LIMITEDcurl -s "https://api.netlen.com.tr/v2/servers" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"{
"data": [
{ "id": "NET10231", "name": "web01", "status": "active", "power_state": null,
"specs": { "cpu_cores": 6, "ram_mb": 16384, "storage_gb": 120 },
"plan": { "id": 6, "name": "VPS-6" },
"billing": { "amount": "39.00", "currency": "USD", "cycle": "monthly", "next_billing_at": "2026-08-13T00:00:00Z" } }
],
"meta": { "request_id": "req_9f2c1a3b", "version": "2.0.0",
"pagination": { "page": 1, "per_page": 25, "total": 3, "total_pages": 1 } }
}Get server
Bir sunucunun tam detayını döner. `power_state`, `os` ve `specs` provider'dan canlı olarak alınır (best-effort).
idstringrequiredSunucu id (`NET10231`).
AUTH_REQUIREDRESOURCE_NOT_FOUNDRATE_LIMITEDcurl -s "https://api.netlen.com.tr/v2/servers/:id" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"{
"data": { /* the server object */ },
"meta": { "request_id": "req_9f2c1a3b", "version": "2.0.0" }
}Create server
Yeni bir sunucu oluşturur ve hesap bakiyesinden ücret keser. Üç mod: **package** (`plan_id` verin), **custom** (`cpu_cores`+`ram_mb`+`storage_gb`), **from source** (`source: {snapshot_id | backup_id}`).
namestringrequiredHostname.
location_idintrequiredKonum id (NetlenVM'e route olmalı).
plan_idintoptional`server_packages.id` (package mode).
cpu_coresintoptionalvCPU (custom mode).
ram_mbintoptionalRAM MB (custom mode).
storage_gbintoptionalDisk GB (custom mode).
os_version_idintrequiredOS versiyon id (package/custom modda zorunlu).
passwordstringrequired≥8 karakter, büyük+küçük+rakam+sembol.
sourceobjectoptional`{snapshot_id}` veya `{backup_id}` — from-source mode.
ipv4_countintoptionaldefault: 1Ek IPv4 adet.
ipv6_countintoptionaldefault: 1Ek IPv6 adet.
VALIDATION_FAILEDINSUFFICIENT_BALANCEPLAN_NOT_FOUNDLOCATION_INVALIDHOSTNAME_IN_USEIDEMPOTENCY_KEY_CONFLICTUPSTREAM_ERRORcurl -sX POST "https://api.netlen.com.tr/v2/servers" \
-H "Authorization: Bearer $NETLEN_API_TOKEN" \
-H "Content-Type: application/json"
-H "Idempotency-Key: 6f1c2b90-8f7a-4e51-9c3f-1a2b3c4d5e6f" \
-d '{ "name": "web01", "location_id": 3, "plan_id": 6, "os_version_id": 4, "password": "Str0ng!pw#9" }'{
"data": { /* full server object */ },
"meta": { "request_id": "req_9f2c1a3b", "version": "2.0.0" }
}Update server (rename)
Yalnızca hostname değişikliği desteklenir.
idstringrequiredSunucu id.
namestringrequiredYeni hostname.
VALIDATION_FAILEDRESOURCE_NOT_FOUNDcurl -sX PATCH "https://api.netlen.com.tr/v2/servers/:id" \
-H "Authorization: Bearer $NETLEN_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "name": "web-01-renamed" }'{ "data": { /* updated server object */ }, "meta": { "request_id": "..." } }Delete server
Sunucuyu siler ve kullanılmayan sürenin ücretini iade eder.
idstringrequiredSunucu id.
RESOURCE_NOT_FOUNDSTATE_CONFLICTcurl -sX DELETE "https://api.netlen.com.tr/v2/servers/:id" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"{
"data": {
"id": "NET10231",
"status": "deleted",
"refund": { "amount": "12.50", "currency": "USD" },
"balance": { "amount": "55.00", "currency": "USD" }
},
"meta": { "request_id": "req_9f2c1a3b", "version": "2.0.0" }
}Server actions (power / lifecycle)
`start` · `stop` · `reboot` · `reset_password` · `reinstall` · `resize` · `clone`. Async işlemler `202` + `operation` döner (poll edin).
idstringrequiredSunucu id.
verbenumrequiredİşlem adı.
passwordstringoptional`reset_password` için opsiyonel; verilmezse otomatik oluşturulur.
os_version_idintoptional`reinstall` için OS id.
cpuintoptional`resize` — yeni vCPU (custom sunucular).
ram_gbintoptional`resize` — yeni RAM.
disk_gbintoptional`resize` — yeni disk (sadece büyütme).
hostnamestringoptional`clone` — yeni sunucu için hostname.
RESOURCE_NOT_FOUNDSTATE_CONFLICTINSUFFICIENT_BALANCEUPSTREAM_ERRORcurl -sX POST "https://api.netlen.com.tr/v2/servers/:id/actions/:verb" \
-H "Authorization: Bearer $NETLEN_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ /* body */ }'{
"data": {
"operation": {
"id": "op_9f2c...",
"type": "server.reboot",
"status": "queued",
"resource": { "type": "server", "id": "NET10231" }
}
},
"meta": { "request_id": "req_9f2c1a3b", "version": "2.0.0" }
}List snapshots
Sunucuya ait snapshot'ları listeler.
idstringrequiredSunucu id.
curl -s "https://api.netlen.com.tr/v2/servers/:id/snapshots" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"{
"data": [
{ "id": 8123, "name": "pre-upgrade", "status": "available", "size_gb": 3.4, "created_at": "2026-07-01T09:00:00Z" }
],
"meta": { "request_id": "req_9f2c1a3b", "version": "2.0.0" }
}Create snapshot
Snapshot oluşturur — aylık koruma ücretinden ilk ay şimdi tahsil edilir. Silindiğinde faturalandırma durur.
idstringrequiredSunucu id.
namestringrequiredSnapshot adı.
VALIDATION_FAILEDINSUFFICIENT_BALANCESTATE_CONFLICTUPSTREAM_ERRORcurl -sX POST "https://api.netlen.com.tr/v2/servers/:id/snapshots" \
-H "Authorization: Bearer $NETLEN_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "name": "pre-upgrade" }'{ "data": { "id": 8124, "name": "pre-upgrade", "status": "creating", "created_at": "2026-07-13T12:00:00Z" }, "meta": { "request_id": "..." } }List firewall rules
Sunucunun stateful firewall kurallarını listeler (position asc sırada).
idstringrequiredSunucu id.
curl -s "https://api.netlen.com.tr/v2/servers/:id/firewall/rules" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"List server IPs
Sunucuya atanmış IPv4 ve IPv6 adreslerini listeler.
idstringrequiredSunucu id.
curl -s "https://api.netlen.com.tr/v2/servers/:id/ips" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"Purchase extra IP
Ek IP satın alır (billable). Body: `{version: 4|6}`. Aylık faturaya eklenir.
idstringrequiredSunucu id.
versionintrequired`4` veya `6`.
INSUFFICIENT_BALANCECAPACITY_UNAVAILABLEcurl -sX POST "https://api.netlen.com.tr/v2/servers/:id/ips" \
-H "Authorization: Bearer $NETLEN_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "version": 4 }'Get console URL (VNC)
Kısa ömürlü, tek kullanımlık VNC/console viewer URL'i döner. Ham provider WebSocket'i dışarıya açılmaz — broker üzerinden gelir.
idstringrequiredSunucu id.
RESOURCE_NOT_FOUNDSTATE_CONFLICTUPSTREAM_ERRORcurl -s "https://api.netlen.com.tr/v2/servers/:id/console" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"{
"data": {
"viewer_url": "https://console.netlen.com.tr/vnc/...",
"expires_at": "2026-07-13T15:00:00Z",
"expires_in": 300
},
"meta": { "request_id": "req_9f2c1a3b", "version": "2.0.0" }
}Server metrics
CPU / memory / disk utilization.
idstringrequiredSunucu id.
curl -s "https://api.netlen.com.tr/v2/servers/:id/metrics" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"Server traffic
Aylık in/out trafik bytes + kota bilgisi.
idstringrequiredSunucu id.
curl -s "https://api.netlen.com.tr/v2/servers/:id/traffic" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"Get operation
Async bir operation'ın durumunu döner. `status`: `queued` · `running` · `completed` · `failed`.
idstringrequiredOperation id (`op_...`).
curl -s "https://api.netlen.com.tr/v2/operations/:id" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"VDC (Virtual Data Center)
Bir **VDC**, satın aldığınız CPU/RAM/disk/IP/bandwidth kaynak havuzudur. Bu havuzdan bireysel VM'ler oluşturursunuz. Havuz durumu, VM listesi/detayı, actions (start/stop/reboot/reinstall/reset_password/resize), snapshots (ücretsiz).
The vdc_vm object
Objenin alan listesi için endpoint response örneklerine bakın.
{
"id": "VDC-00042",
"name": "app-node-1",
"status": "active",
"power_state": "running",
"os": "ubuntu-24.04",
"specs": { "cpu_cores": 4, "ram_mb": 8192, "storage_gb": 80 },
"primary_ip": "77.92.151.60",
"primary_ipv6": "2a01:f900:10::60",
"created_at": "2026-07-13T14:40:12Z"
}VDC resource pool
Havuzun toplam / kullanılan / kalan miktarlarını döner. Her kova `{total, used, available}`.
curl -s "https://api.netlen.com.tr/v2/vdc/resources" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"{
"data": {
"has_pool": true,
"cpu": { "total": 16, "used": 8, "available": 8 },
"ram_mb": { "total": 32768, "used": 16384,"available": 16384 },
"storage_gb": { "total": 500, "used": 240, "available": 260 },
"ipv4": { "total": 8, "used": 3, "available": 5 },
"ipv6": { "total": 4, "used": 1, "available": 3 },
"bandwidth_mbit": { "total": 1000, "used": 400, "available": 600 }
},
"meta": { "request_id": "req_9f2c1a3b", "version": "2.0.0" }
}List VDC VMs
Havuzdaki VM'leri sayfalı listeler.
pageintoptionaldefault: 1Sayfa numarası.
per_pageintoptionaldefault: 25Sayfa başına öğe (max 100).
curl -s "https://api.netlen.com.tr/v2/vdc/vms" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"Get VDC VM
Bir VM'nin detayı; NetlenVM VM'leri için `power_state`, `os`, `specs` canlı çekilir.
idstringrequiredVM id (`VDC-00042`).
curl -s "https://api.netlen.com.tr/v2/vdc/vms/:id" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"VDC VM usage
CPU, memory, disk utilization (son ölçüm).
idstringrequiredVM id.
curl -s "https://api.netlen.com.tr/v2/vdc/vms/:id/usage" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"VDC VM actions
`start` · `stop` · `reboot` · `reinstall` · `reset_password` · `resize`. Resize havuzdan delta kadar kaynak tüketir (per-VM ücret yok).
idstringrequiredVM id.
verbenumrequiredİşlem.
curl -sX POST "https://api.netlen.com.tr/v2/vdc/vms/:id/actions/:verb" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"VDC snapshots (free)
NetlenVM-backed VM'ler için snapshot listesi. VDC'de snapshot ücretsizdir.
idstringrequiredVM id.
curl -s "https://api.netlen.com.tr/v2/vdc/vms/:id/snapshots" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"Domains
Domain kayıt, transfer, yenileme, availability check, TLD pricing, nameserver yönetimi, transfer lock, WHOIS privacy, EPP/auth-code. Bulk register/transfer/renew desteği (max 100 domain/istek).
The domain object (detail)
Objenin alan listesi için endpoint response örneklerine bakın.
{
"id": "4821",
"domain": "example.com",
"status": "active",
"auto_renew": true,
"registered_at": "2025-03-11T00:00:00Z",
"expires_at": "2027-03-11T00:00:00Z",
"nameservers": ["ns1.netlen.com.tr", "ns2.netlen.com.tr"],
"tld": ".com",
"service_id": "DOM-A1B2C",
"registrar": "ResellerClub",
"transfer_lock": true,
"whois_privacy": false,
"registration_years": 2,
"billing": {
"register": { "amount": "12.00", "currency": "USD" },
"renewal": { "amount": "14.00", "currency": "USD" }
}
}List domains
Hesabınıza ait domainleri sayfalı listeler.
pageintoptionaldefault: 1Sayfa.
per_pageintoptionaldefault: 25Max 100.
statusstringoptional`active`, `transfer_pending`, `cancelled`, ...
curl -s "https://api.netlen.com.tr/v2/domains" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"Get domain
Bir domain'in tam detayı (nameservers, lock, WHOIS privacy, billing).
idstringrequiredDomain id.
curl -s "https://api.netlen.com.tr/v2/domains/:id" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"Check availability
Registrar'da bir domain'in müsaitliğini kontrol eder. Ücretsiz. IDN kabul, punycode'a normalize edilir.
domainstringrequiredDomain adı (`example.com`).
VALIDATION_FAILEDUPSTREAM_ERRORcurl -s "https://api.netlen.com.tr/v2/domains/check" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"{
"data": { "domain": "example.com", "tld": ".com", "available": true },
"meta": { "request_id": "req_9f2c1a3b", "version": "2.0.0" }
}TLD pricing catalog
TLD başına register/renew/transfer fiyatları. `tld` verirseniz tek TLD; vermezseniz sayfalı katalog.
tldstringoptionalÖrn. `com` veya `.com`.
pageintoptionaldefault: 1Katalog sayfası.
per_pageintoptionaldefault: 50Max 200.
curl -s "https://api.netlen.com.tr/v2/domains/pricing" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"{
"data": {
"tld": ".com",
"register": { "amount": "12.00", "currency": "USD" },
"renewal": { "amount": "14.00", "currency": "USD" },
"transfer": { "amount": "12.00", "currency": "USD" },
"supports_whois_privacy": true,
"years_min": 1,
"years_max": 10
},
"meta": { "request_id": "req_9f2c1a3b", "version": "2.0.0" }
}Register domain
Yeni domain kaydı. Balance yeterli olmalı. Bulk için `/domains/bulk/register` kullanın.
domainstringrequiredDomain adı.
yearsintrequiredKayıt süresi (yıl).
nameserversstring[]optionalEn az 2 hostname.
whois_privacybooloptionalWHOIS privacy açık/kapalı.
auto_renewbooloptionalOtomatik yenileme.
contactobjectoptionalContact info (bazı TLD'ler için gerekli).
VALIDATION_FAILEDINSUFFICIENT_BALANCEUPSTREAM_ERRORcurl -sX POST "https://api.netlen.com.tr/v2/domains" \
-H "Authorization: Bearer $NETLEN_API_TOKEN" \
-H "Content-Type: application/json"
-H "Idempotency-Key: 6f1c2b90-8f7a-4e51-9c3f-1a2b3c4d5e6f" \
-d '{ "domain": "example.com", "years": 1, "nameservers": ["ns1.netlen.com.tr", "ns2.netlen.com.tr"], "whois_privacy": true, "auto_renew": true }'Transfer domain
Başka registrardan transfer. `auth_code` (EPP kodu) zorunlu.
domainstringrequiredDomain adı.
auth_codestringrequiredEPP / auth kodu.
yearsintoptionalYenileme yılı (bazı TLD için opsiyonel).
curl -sX POST "https://api.netlen.com.tr/v2/domains/transfer" \
-H "Authorization: Bearer $NETLEN_API_TOKEN" \
-H "Content-Type: application/json"
-H "Idempotency-Key: 6f1c2b90-8f7a-4e51-9c3f-1a2b3c4d5e6f" \
-d '{ "domain": "example.com", "auth_code": "aBc123!xyz" }'Renew domain
Domain'i belirtilen yıl kadar yeniler.
idstringrequiredDomain id.
yearsintoptionaldefault: 1Yenileme yılı.
curl -sX POST "https://api.netlen.com.tr/v2/domains/:id/renew" \
-H "Authorization: Bearer $NETLEN_API_TOKEN" \
-H "Content-Type: application/json"
-H "Idempotency-Key: 6f1c2b90-8f7a-4e51-9c3f-1a2b3c4d5e6f" \
-d '{ /* body */ }'Bulk register / transfer / renew
Bulk işlem (max 100 domain/istek). `action`: `register` · `transfer` · `renew`. Response `{ok_count, fail_count, results[]}` — partial success.
actionenumrequired`register` · `transfer` · `renew`
domainsarrayrequiredDomain adları (string) veya obje listesi.
yearsintoptionalBody-level default (item'da yoksa).
curl -sX POST "https://api.netlen.com.tr/v2/domains/bulk/:action" \
-H "Authorization: Bearer $NETLEN_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ /* body */ }'Get nameservers
Domain'in kayıtlı NS'lerini döner.
idstringrequiredDomain id.
curl -s "https://api.netlen.com.tr/v2/domains/:id/nameservers" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"Set nameservers
NS'leri registrar'da günceller (tam set gönderilir; en az 2). Ücretsiz.
idstringrequiredDomain id.
nameserversstring[]required≥2 hostname.
curl -sX PUT "https://api.netlen.com.tr/v2/domains/:id/nameservers" \
-H "Authorization: Bearer $NETLEN_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "nameservers": ["ns1.netlen.com.tr", "ns2.netlen.com.tr"] }'Transfer lock
Registrar transfer lock (hırsızlık koruması).
idstringrequiredDomain id.
enabledboolrequired`true` = kilitle.
curl -sX PUT "https://api.netlen.com.tr/v2/domains/:id/lock" \
-H "Authorization: Bearer $NETLEN_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ /* body */ }'WHOIS privacy
WHOIS privacy'yi açar/kapatır (destekleyen TLD'ler).
idstringrequiredDomain id.
enabledboolrequired`true` = privacy açık.
curl -sX PUT "https://api.netlen.com.tr/v2/domains/:id/whois-privacy" \
-H "Authorization: Bearer $NETLEN_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ /* body */ }'Get EPP / auth code
Transfer için gerekli EPP kodunu döner (kayıtlı olan veya registrar'dan yeni istenmiş).
idstringrequiredDomain id.
curl -s "https://api.netlen.com.tr/v2/domains/:id/auth-code" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"{ "data": { "auth_code": "aBc123!xyz" }, "meta": { "request_id": "..." } }Web Hosting
cPanel bazlı web hosting hesaplarınızı yönetin: list, get, order, renew, cancel + tek kullanımlık cPanel SSO login.
The web_hosting object
Objenin alan listesi için endpoint response örneklerine bakın.
{
"id": "WH-1029",
"domain": "example.com",
"status": "active",
"plan": { "id": 5, "name": "Business" },
"server": { "hostname": "web12.netlen.com.tr" },
"disk_usage": { "used_mb": null, "quota_mb": 10240 },
"billing": {
"amount": "12.00",
"currency": "USD",
"cycle": "monthly",
"next_billing_at": "2026-08-13T00:00:00Z"
},
"created_at": "2026-07-13T09:20:11Z"
}List hosting accounts
Hesaba ait web hosting servislerini listeler.
pageintoptionaldefault: 1Sayfa.
per_pageintoptionaldefault: 25Max 100.
statusstringoptional`active` · `suspended` · `cancelled`
curl -s "https://api.netlen.com.tr/v2/web-hosting" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"Get hosting account
Bir hosting hesabının detayı.
idstringrequiredServis kodu (`WH-1029`).
curl -s "https://api.netlen.com.tr/v2/web-hosting/:id" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"Order hosting
Web hosting paketi satın alır ve cPanel hesabını provisiyon eder. Provision başarısız olursa bakiye çekilmez.
domainstringrequiredBirincil domain.
package_idintrequiredAktif `web_hosting_packages.id`.
billing_cycleenumoptional`monthly` (default) · `yearly`
VALIDATION_FAILEDSTATE_CONFLICTINSUFFICIENT_BALANCESERVICE_UNAVAILABLEUPSTREAM_ERRORcurl -sX POST "https://api.netlen.com.tr/v2/web-hosting" \
-H "Authorization: Bearer $NETLEN_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "domain": "example.com", "package_id": 5, "billing_cycle": "monthly" }'Renew hosting
Aktif hesabı bir döngü uzatır. Body opsiyonel.
idstringrequiredServis kodu.
RESOURCE_NOT_FOUNDSTATE_CONFLICTINSUFFICIENT_BALANCEcurl -sX POST "https://api.netlen.com.tr/v2/web-hosting/:id/renew" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"Cancel hosting
Hesabı iptal eder. `refund: true` isteğinde tam iade verilir.
idstringrequiredServis kodu.
refundbooloptionaldefault: falseİade verilsin mi.
send_emailbooloptionaldefault: falseİptal e-postası.
reasonstringoptionalİptal nedeni.
curl -sX POST "https://api.netlen.com.tr/v2/web-hosting/:id/cancel" \
-H "Authorization: Bearer $NETLEN_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ /* body */ }'cPanel SSO login
Kısa ömürlü, tek kullanımlık cPanel SSO URL'i döner.
idstringrequiredServis kodu.
curl -s "https://api.netlen.com.tr/v2/web-hosting/:id/login" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"{
"data": {
"id": "WH12345678",
"username": "example1",
"login_url": "https://web12.netlen.com.tr:2083/cpsess.../login/?session=...",
"note": "Short-lived, single-use cPanel SSO URL — redirect immediately."
},
"meta": { "request_id": "req_9f2c1a3b", "version": "2.0.0" }
}Catalog
Sipariş için gerekli katalog kaynakları: plans (server paketleri), packages (aynı katalog, sade view), operating systems, locations. Yalnızca okuma.
List plans
Server paketleri (`bandwidth_gb` dahil). `id`'yi `POST /servers`'a `plan_id` olarak verin.
pageintoptionaldefault: 1Sayfa.
per_pageintoptionaldefault: 25Max 100.
curl -s "https://api.netlen.com.tr/v2/plans" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"{
"data": [
{ "id": 6, "name": "VPS-6",
"specs": { "cpu_cores": 6, "ram_mb": 16384, "storage_gb": 120, "bandwidth_gb": 8000 },
"price": { "amount": "39.00", "currency": "USD" }, "available": true }
],
"meta": { "request_id": "req_9f2c1a3b", "version": "2.0.0" }
}Get plan
Tek bir server planının detayı.
idintrequiredPlan id.
curl -s "https://api.netlen.com.tr/v2/plans/:id" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"List packages
Plans ile aynı katalog, `bandwidth_gb` olmayan sade view.
curl -s "https://api.netlen.com.tr/v2/packages" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"List operating systems
Kurulabilir OS versiyonlarının flat listesi. `id` = `os_version_id`.
curl -s "https://api.netlen.com.tr/v2/operating-systems" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"List locations
Sunucu oluşturma için kullanılabilir lokasyonlar.
curl -s "https://api.netlen.com.tr/v2/locations" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"Billing
Hesap bakiyesi ve balance ledger sorgulama. Bakiye yükleme + fatura yönetimi panelden yapılır (`501 NOT_IMPLEMENTED`). Bütün para değerleri money objesi, USD.
Get balance
Hesabın güncel bakiyesi.
curl -s "https://api.netlen.com.tr/v2/billing/balance" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"{
"data": {
"balance": { "amount": "42.50", "currency": "USD" },
"currency": "USD"
},
"meta": { "request_id": "req_9f2c1a3b", "version": "2.0.0" }
}List transactions
Balance transaction'ları newest-first listeler.
pageintoptionaldefault: 1Sayfa.
per_pageintoptionaldefault: 25Max 100.
typestringoptional`deposit` · `withdraw` · `refund`
curl -s "https://api.netlen.com.tr/v2/billing/transactions" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"{
"data": [
{ "id": 5821, "type": "deposit",
"amount": { "amount": "50.00", "currency": "USD" },
"description": "Balance top-up (Stripe)",
"status": "success",
"created_at": "2026-07-13T14:40:12Z" }
],
"meta": { "request_id": "req_9f2c1a3b", "version": "2.0.0" }
}Account
Hesap profili, API anahtarları metadata'sı ve IP allowlist okuma. Yazma işlemleri panel-only (`501 NOT_IMPLEMENTED`). Secret'lar (key değeri, hash, token) döndürülmez.
Get profile
Kimlik doğrulanmış müşterinin profil bilgisi.
curl -s "https://api.netlen.com.tr/v2/account" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"{
"data": {
"id": "NET10231",
"email": "ada@example.com",
"name": "Ada Lovelace",
"company": "Analytical Engines Ltd.",
"phone": "+90 5551234567",
"country": "TR",
"status": "active",
"balance": { "amount": "42.50", "currency": "USD" },
"created_at": "2026-01-04T09:12:00Z"
},
"meta": { "request_id": "req_9f2c1a3b", "version": "2.0.0" }
}List API keys
API anahtarları metadata'sı (key değeri dönmez).
curl -s "https://api.netlen.com.tr/v2/account/api-keys" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"List IP allowlist
Çağıran API anahtarına ait IP allowlist.
curl -s "https://api.netlen.com.tr/v2/account/ip-allowlist" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"Support Tickets
Destek talepleri: liste, detay, oluşturma, yanıt ekleme, kapatma. `GET /departments` ile aktif departmanlar. Her talep customer'a scope'lu — yalnızca kendi taleplerinizi görürsünüz.
List tickets
Talepleri newest-first sayfalar. Silinmişler dahil değil.
pageintoptionaldefault: 1Sayfa.
per_pageintoptionaldefault: 25Max 100.
statusenumoptional`open` · `answered` · `customer_reply` · `in_progress` · `pending` · `closed`
curl -s "https://api.netlen.com.tr/v2/tickets" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"Get ticket
Ticket detayı + full mesaj thread'i (internal notlar hariç).
idstringrequiredTicket numarası (`T000123`).
curl -s "https://api.netlen.com.tr/v2/tickets/:id" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"Create ticket
Yeni destek talebi açar.
subjectstringrequiredEn az 1 harf içermeli.
messagestringrequiredEn az 25 karakter ve 15 harf.
department_idintoptionalAktif bir departman id'si.
priorityenumoptionaldefault: medium`low` · `medium` · `high` · `urgent`
VALIDATION_FAILEDcurl -sX POST "https://api.netlen.com.tr/v2/tickets" \
-H "Authorization: Bearer $NETLEN_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "subject": "Cannot reach my server over SSH", "department_id": 2, "priority": "high", "message": "My server stopped responding over SSH this morning and I cannot log in." }'Reply to ticket
Ticket'a customer yanıtı ekler. Status `customer_reply` olur.
idstringrequiredTicket numarası.
messagestringrequiredEn az 25 karakter ve 15 harf.
RESOURCE_NOT_FOUNDSTATE_CONFLICTVALIDATION_FAILEDcurl -sX POST "https://api.netlen.com.tr/v2/tickets/:id/replies" \
-H "Authorization: Bearer $NETLEN_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ /* body */ }'Close ticket
Ticket'ı kapatır. Zaten kapalı ise `409 STATE_CONFLICT`.
idstringrequiredTicket numarası.
curl -sX POST "https://api.netlen.com.tr/v2/tickets/:id/close" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"List departments
Aktif destek departmanları.
curl -s "https://api.netlen.com.tr/v2/departments" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"Sub-users
Hesabınıza bağlı ek loginler. Liste, detay, update (profile + status), delete, permission read/replace. Create (invite) panelden yapılır (`501 NOT_IMPLEMENTED`). Password/token döndürülmez.
List sub-users
Sub-user'ları sayfalı listeler.
pageintoptionaldefault: 1Sayfa.
per_pageintoptionaldefault: 25Max 100.
statusenumoptional`pending` · `active` · `inactive`
curl -s "https://api.netlen.com.tr/v2/sub-users" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"Get sub-user
Sub-user detayı + permission keys.
idintrequiredSub-user id.
curl -s "https://api.netlen.com.tr/v2/sub-users/:id" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"Update sub-user
Profile fields ve/veya status güncellemesi. `email`/`password` bu endpoint'te yazılamaz.
idintrequiredSub-user id.
first_namestringoptionalBoş olmayan.
last_namestringoptionalBoş olmayan.
phonestringoptionalBoş olmayan.
phone_country_codestringoptionalÖrn. `+1`.
statusenumoptional`active` · `inactive`
curl -sX PATCH "https://api.netlen.com.tr/v2/sub-users/:id" \
-H "Authorization: Bearer $NETLEN_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ /* body */ }'Delete sub-user
Sub-user'ı ve tüm permission atamalarını siler.
idintrequiredSub-user id.
curl -sX DELETE "https://api.netlen.com.tr/v2/sub-users/:id" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"Get permissions
Sub-user'ın permission key listesi.
idintrequiredSub-user id.
curl -s "https://api.netlen.com.tr/v2/sub-users/:id/permissions" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"Replace permissions
Permission setini tamamen değiştirir. `[]` göndererek tümünü kaldırabilirsiniz.
idintrequiredSub-user id.
permissionsstring[]requiredPermission key'leri.
curl -sX PUT "https://api.netlen.com.tr/v2/sub-users/:id/permissions" \
-H "Authorization: Bearer $NETLEN_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "permissions": ["servers.view", "servers.manage", "invoices.view"] }'SSH Keys
Hesap-wide SSH public key'leri. Sunucu oluştururken seçilirse yeni VM'e kurulur.
The ssh_key object
Objenin alan listesi için endpoint response örneklerine bakın.
{
"id": 12,
"name": "laptop",
"public_key": "ssh-ed25519 AAAA...",
"public_key_preview": "ssh-ed25519 AAAA...",
"created_at": "2026-07-13T14:40:12Z"
}List SSH keys
Hesabın tüm public key'lerini listeler.
curl -s "https://api.netlen.com.tr/v2/ssh-keys" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"Add SSH key
Hesaba yeni public key ekler.
namestringrequiredKey etiketi.
public_keystringrequiredPublic key (`ssh-ed25519 ...`).
curl -sX POST "https://api.netlen.com.tr/v2/ssh-keys" \
-H "Authorization: Bearer $NETLEN_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "name": "laptop", "public_key": "ssh-ed25519 AAAA..." }'Remove SSH key
Key'i panelden siler (daha önce kurulduğu sunuculardan silmez).
idintrequiredKey id.
curl -sX DELETE "https://api.netlen.com.tr/v2/ssh-keys/:id" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"Reseller
Bayi programı durumu ve indirim ladder'ı. Read-only — bayilik ve indirim yapılandırması admin tarafından yönetilir. Aktif server sayınıza göre indirim tier'ınız hesaplanır.
Get reseller status
Bayi statüsü, aktif indirim yüzdesi, aktif server sayısı ve mevcut tier.
curl -s "https://api.netlen.com.tr/v2/reseller" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"{
"data": {
"is_reseller": true,
"discount_percentage": 7.5,
"discount_type": "standard",
"active_server_count": 12,
"current_tier": {
"min_servers": 11,
"max_servers": 20,
"discount_percentage": 7.5
}
},
"meta": { "request_id": "req_9f2c1a3b", "version": "2.0.0" }
}Get tier ladder
Server sayısı bandına göre indirim ladder'ı. Müşterinin şu anki tier'ı `is_current: true`.
curl -s "https://api.netlen.com.tr/v2/reseller/tiers" \
-H "Authorization: Bearer $NETLEN_API_TOKEN"{
"data": {
"is_reseller": true,
"discount_type": "standard",
"active_server_count": 12,
"tiers": [
{ "min_servers": 1, "max_servers": 5, "discount_percentage": 2.5, "is_current": false },
{ "min_servers": 6, "max_servers": 10, "discount_percentage": 5, "is_current": false },
{ "min_servers": 11, "max_servers": 20, "discount_percentage": 7.5, "is_current": true },
{ "min_servers": 21, "max_servers": null, "discount_percentage": 10, "is_current": false }
]
},
"meta": { "request_id": "req_9f2c1a3b", "version": "2.0.0" }
}