Dokümanlar

Fermag CDN, Discord depolamasını kalıcı ve hızlı bir nesne CDN'i gibi sunar. API üç uçtan oluşur: yükleme, kalıcı adres çözme ve panel.

Giriş

Tüm istekler https://cdn.fermag.com.tr tabanına gider. JSON gövde bekleyen uçlar application/json; yükleme uçları ham ikili gövde kabul eder.

Kimlik doğrulama

Programatik erişim API anahtarıyla yapılır. Anahtarı panelden üretirsin; yalnız bir kez gösterilir.

header·her istekte
x-api-key: fcdn_9f2c…

Panel oturumu ayrı çalışır: POST /api/auth/login HttpOnly çerez bırakır. Aynı hesap için birden çok anahtar üretilebilir; anahtar silindiğinde o anahtarla gelen istekler anında 401 alır.

Dosya yükleme

UçYöntemAçıklama
/api/v1/uploadPOSTHam gövde + x-filename başlığı
/api/filesPOSTPanel oturumu, multipart file alanı
curl·görsel
curl -X POST https://cdn.fermag.com.tr/api/v1/upload \
  -H "x-api-key: $FCDN_KEY" \
  -H "x-filename: kapak.jpg" \
  --data-binary @kapak.jpg

Yanıt:

200·application/json
{
  "ok": true,
  "id": "k3f9-x2mQ",
  "kind": "image",
  "url": "https://cdn.fermag.com.tr/i/k3f9-x2mQ",
  "size": 184320,
  "dedupe": false
}

Aynı içerik ikinci kez yüklenirse dedupe: true döner ve mevcut nesnenin kimliği verilir; yeni depolama harcanmaz.

Kalıcı adresler

YolDavranış
/i/<id>Görsel — 302 taze imzalı adrese
/v/<id>Video oynatıcı sayfası
/v/<id>/master.m3u8HLS manifest
/v/<id>/poster.jpgPoster karesi
/f/<id>Ham dosya — 302
/l/<id>Hafif yönlendirme (sm önizleme)

Bu adresler hiç değişmez. İmza yenilemesi arka planda yapılır; istemci hiçbir şey yapmaz.

Video / HLS

Video yüklendiğinde sunucu dosyayı 6 saniyelik segmentlere böler, poster üretir ve manifesti yazar. Segmentler kenardan video/mp2t MIME'ı ve CORS başlığıyla geçer — Discord'un ham yanıtı tarayıcıda oynamaz.

hls.js·tarayıcı
const hls = new Hls();
hls.loadSource('https://cdn.fermag.com.tr/v/k3f9-x2mQ/master.m3u8');
hls.attachMedia(video);

Panel uçları

Çerez oturumu gerektirir. Tümü JSON döner.

UçAçıklama
POST /api/auth/loginE-posta + parola
GET /api/sessionOturum durumu (401 yerine 200)
GET /api/filesKendi nesnelerin + kota
DELETE /api/files/:idNesneyi ve depolama mesajını sil
GET /api/keysAPI anahtarları
POST /api/keysYeni anahtar (yalnız bir kez gösterilir)
GET /api/public/recentSon nesneler (herkese açık)

Hata kodları

KodAnlam
400Geçersiz gövde veya eksik başlık
401Anahtar yok, iptal edilmiş veya oturum düşmüş
403Bu nesne başka bir hesaba ait
404Nesne yok, silinmiş veya ölü işaretlenmiş
413Dosya 25 MB sınırını aşıyor
429Depolama düğümü rate-limit; birkaç saniye sonra tekrar dene
507Kota doldu

Sınırlar