API Dokümanı · v1

5 dakikada entegre et

netlike CDN API'si REST tabanlı, JSON döner, multipart upload destekler. Her dilden çağrılabilir — örnek kodları aşağıda.

Hızlı başlangıç

3 adımda canlıya al.

  1. 01
    Hesap aç
    Dashboard'dan ücretsiz hesap yarat
  2. 02
    API anahtarı üret
    Dashboard → API Anahtarları sayfasından yeni key oluştur. Sadece bir kez gösterilir.
  3. 03
    Klasör oluştur ve upload et
    Default main container'ında bir klasör aç. Aşağıdaki örnek kodla resim yükle.

Kimlik doğrulama

Her istek X-API-KEY header'ı ile yapılır.

curl https://api.netlike.net.tr/api/v1/usage \
  -H "X-API-KEY: gn_xxxxxxxxxxxxxxxxxxxx"
Anahtarını sızdırma
Anahtarını client-side JS'e gömme. Backend'inden çağır. Yanlışlıkla public oldu → dashboard'tan revoke et + yenisini üret.

Endpoint'ler

Base URL · production

https://api.netlike.net.tr
Container & Folder yapısı
Her hesap birden fazla container içerir (Free: 1, Pro: 5, Enterprise: ∞). Her container içinde ana klasör (top-level) sınırı paketine bağlıdır (Free: 5, Pro: 50). Her ana klasörün altında alt klasör (subfolder) sayısı SINIRSIZdır — istediğin kadar derin yapı kurabilirsin.

Container CRUD

GET/api/v1/containersContainer'ları listele

Hesabına ait tüm container'ları döner. Default container main register'da otomatik yaratılır.

200
[
  {
    "id": "cmq001",
    "name": "main",
    "slug": "main",
    "isDefault": true,
    "folderCount": 3
  }
]
POST/api/v1/containersContainer oluştur

Yeni container açar. Slug otomatik üretilir.

ParametreTipAçıklama
namestring · gerekliGörünen ad. Slug bundan türer.
{ "name": "Shop" }
200
{
  "id": "cmqXXX",
  "name": "Shop",
  "slug": "shop",
  "isDefault": false
}
DELETE/api/v1/containers/:idContainer sil

Container'a ait tüm klasörler ve resimler kaskad olarak silinir.

200
{
  "ok": true
}

Klasör CRUD

GET/api/v1/foldersKlasörleri listele

Filtreleme: container ve/veya parent ile.

ParametreTipAçıklama
containerstring · opsiyonelContainer slug'ı
parentstring · opsiyonel"root" → ana klasörler · folder slug → o klasörün direkt alt klasörleri
POST/api/v1/foldersKlasör veya alt klasör oluştur

parent verilmezse ana klasör yaratılır (paket limitine sayılır). parent verilirse alt klasör yaratılır (sınırsız).

ParametreTipAçıklama
namestring · gerekliGörünen ad
containerstring · gerekliContainer slug'ı
parentstring · opsiyonelÜst klasör slug'ı (yoksa = ana klasör)
{ "name": "Products", "container": "main" }
{ "name": "Winter 2026", "container": "main", "parent": "products" }
PATCH/api/v1/folders/:idKlasör adını değiştir

Slug ve tüm alt klasörlerin path'i otomatik güncellenir.

{ "name": "Winter 2027" }
DELETE/api/v1/folders/:idKlasör (ve alt klasörler + resimleri) sil

Klasörü ve tüm subtree'sini kaskad olarak siler.

200
{
  "ok": true
}
POST/api/v1/uploadResim yükle

Multipart/form-data ile tekli veya çoklu resim yükler. Otomatik WebP'ye dönüştürülür.

ParametreTipAçıklama
containerstring · opsiyonelContainer slug'ı
folderstring · gerekliHedef klasör slug'ı
filesfile[] · gerekliResim dosya(lar)ı. Max 25MB.
200
{
  "uploaded": [
    {
      "id": "cmqxxxx",
      "url": "https://cdn.netlike.net.tr/sukru/main/products/8f3...e1.webp",
      "width": 1920,
      "height": 1080,
      "sizeBytes": 124310
    }
  ]
}
GET/api/v1/imagesResimleri listele

Container ve klasör slug'ları ile filtreleme + cursor-based sayfalama.

GET/api/v1/images/:idTek resim detayı

Belirli bir resmin tüm meta verisi.

DELETE/api/v1/images/:idResim sil

Tek resmi siler. CDN'den de kaldırılır.

200
{
  "ok": true,
  "id": "img_a1b2c3"
}
POST/api/v1/images/batch-deleteÇoklu resim sil

Tek istekte en fazla 200 resmi siler. Body: { ids: ["img_a", "img_b", ...] }. Sahip olmadığın veya bulunmayan ID'ler atlanır — kalanı silinir. Response her ID için ayrıca durum (deleted: true/false) döner.

200
{
  "ok": true,
  "requested": 3,
  "deleted": 2,
  "skipped": 1,
  "bytesFreed": "491520",
  "results": [
    {
      "id": "img_a1b2c3",
      "deleted": true,
      "sizeBytes": 245760
    },
    {
      "id": "img_d4e5f6",
      "deleted": true,
      "sizeBytes": 245760
    },
    {
      "id": "img_unknown",
      "deleted": false,
      "reason": "not_found_or_not_owned"
    }
  ]
}
GET/api/v1/usageKullanım/kota

Anlık storage durumu ve planın.

200
{
  "storageUsedBytes": "124310",
  "storageQuotaMB": 500,
  "maxFileSizeMB": 5,
  "plan": "FREE"
}

Örnek kodlar

Aynı upload, 5 dilde.

KEY="gn_xxxxxxxxxxxxxxxxxxxx"

curl https://api.netlike.net.tr/api/v1/containers -H "X-API-KEY: $KEY"

curl -X POST https://api.netlike.net.tr/api/v1/folders -H "X-API-KEY: $KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Products","container":"main"}'

curl -X POST https://api.netlike.net.tr/api/v1/upload -H "X-API-KEY: $KEY" \
  -F "container=main" -F "folder=products" \
  -F "files=@/path/photo.jpg"

Hata kodları

HTTPerrorAçıklama
400ValidationErrorBody / query yanlış. issues[] dizisinde detay.
401UnauthorizedErrorX-API-KEY yok ya da revoke edilmiş.
402QuotaExceededStorage veya plan limiti aşıldı.
404NotFoundKlasör/dosya bulunamadı.
415UnsupportedMediaTypeYüklenen dosya resim değil (magic byte check).
429RateLimitExceededDakika başı çağrı limiti aşıldı.
502StorageUnavailableCDN storage'a SFTP push başarısız (geçici).

Limitler

  • Tek upload request'inde maks 10 dosya
  • Maks dosya boyutu paketine göre (Free: 5MB, Pro: 25MB, Enterprise: 100MB)
  • Rate limit: dakikada 60 upload, 600 list/delete per API key
  • Tek bir resim 1 yıl Cache-Control: public, max-age=31536000, immutable ile cache'lenir
  • İzin verilen MIME: image/jpeg, image/png, image/webp, image/avif, image/gif
netlike CDN — Modern image hosting & delivery API