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.
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öntem | Açıklama |
|---|---|---|
/api/v1/upload | POST | Ham gövde + x-filename başlığı |
/api/files | POST | Panel oturumu, multipart file alanı |
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:
{ "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
| Yol | Davranış |
|---|---|
/i/<id> | Görsel — 302 taze imzalı adrese |
/v/<id> | Video oynatıcı sayfası |
/v/<id>/master.m3u8 | HLS manifest |
/v/<id>/poster.jpg | Poster 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.
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/login | E-posta + parola |
GET /api/session | Oturum durumu (401 yerine 200) |
GET /api/files | Kendi nesnelerin + kota |
DELETE /api/files/:id | Nesneyi ve depolama mesajını sil |
GET /api/keys | API anahtarları |
POST /api/keys | Yeni anahtar (yalnız bir kez gösterilir) |
GET /api/public/recent | Son nesneler (herkese açık) |
Hata kodları
| Kod | Anlam |
|---|---|
400 | Geçersiz gövde veya eksik başlık |
401 | Anahtar yok, iptal edilmiş veya oturum düşmüş |
403 | Bu nesne başka bir hesaba ait |
404 | Nesne yok, silinmiş veya ölü işaretlenmiş |
413 | Dosya 25 MB sınırını aşıyor |
429 | Depolama düğümü rate-limit; birkaç saniye sonra tekrar dene |
507 | Kota doldu |
Sınırlar
- Video: boyut sınırı yok — kaynak dosya HLS segmentlerine bölünür, Discord'a yalnız segmentler (her biri 25 MB altı) gider
- Görsel ve diğer dosyalar: 25 MB (Discord tier-0 tavanı)
- Görsel: JPEG, PNG, WebP, GIF, AVIF, SVG
- Video: MP4, WebM, MOV — HLS'e çevrilir
- Diğer türler ham dosya olarak (
/f/) - İmza ömrü ~24 saat; yenileme 45 dakika önce başlar
- Varsayılan kota 1 GB nesne; panelde görünür
- Tek istekte video üst sınırı 4 GB (disk güvenliği)