REST API
HTTP üzerinden dosya yükleyin, koleksiyonlar oluşturun ve paylaşımları yönetin. Tüm yanıtlar JSON’dur; anonim yüklemeler için API anahtarı gerekmez.
Giriş
storage.to API, CLI, masaüstü uygulaması, web yükleyici ve oluşturmak istediğiniz herhangi bir üçüncü taraf istemciyi destekler.
Yükleme akışı üç adımdan oluşur:
- Başlat - bir dosya yüklemek istediğinizi söyleyin. Cloudflare R2’ye işaret eden bir veya daha fazla önceden imzalanmış URL döndürürüz.
- R2’ye yükle -
PUTbaytlarını doğrudan önceden imzalanmış URL(ler)e gönder. Baytlar sunucularımızdan geçmez. - Onayla - yüklemenin bittiğini bize bildirin. Bir
Filekaydı oluşturur ve paylaşılabilir bir URL veririz.
Temel URL
https://storage.to/apiAşağıdaki tüm uç noktalar bu temel adrese göredir. Örnek: POST /upload/init, POST https://storage.to/api/upload/init anlamına gelir.
Kimlik doğrulama
Anonim yüklemeler kimlik doğrulaması olmadan çalışır, ancak sıkı sınırlarla. Anahtarsız çağrılar cihaz veya IP başına 24 saatte 50 dosyayla sınırlıdır, ayrıca aşağıdaki bant genişliği kotaları uygulanır ve dosyalar 3 gün sonra sona erer.
Ücretsiz bir hesapla kimlik doğrulaması şunları açar:
- Günlük dosya sınırı yok
- Yükleme bant genişliği kotası yok
- Hesabınıza eklenen yüklemeler ( /dashboard bölümünde görünür )
- Premium özellikler (kalıcı dosyalar, daha büyük depolama)
- Ziyaretçi-token eşleşmesi gerektirmeden sahipliğe dayalı işlemler (silme, şifre belirleme, son kullanma tarihini değiştirme)
Limitlere genel bakış
| Sınır | Token yok (anonim) | Ücretsiz hesap tokenı | Ücretli hesap tokenı |
|---|---|---|---|
| Günlük dosya sayısı | 50 / 24 saat | Sınırsız | Sınırsız |
| Yükleme bant genişliği | 100 GB / 24 saat (500 GB IP başına) | Sınırsız | Sınırsız |
| Maksimum dosya boyutu | 25 GB | 25 GB | 100 GB |
| Dosya süresi | Varsayılan 3 gün, expiry_days ile 7 güne kadar | Varsayılan 3 gün, expiry_days ile 7 güne kadar | Asla (dosyalar kalıcıdır) |
| Depolama alanı | Yok (dosyaların süresi dolar) | Yok (dosyaların süresi dolar) | Plana göre kalıcı 100 GB - 1 TB |
Aylık kota yoktur - tüm limitler 24 saatlik kayan pencereler veya dakika başına hız limitleridir. Ücretsiz planda sabit bir depolama alanı yoktur: her dosyanın süresi kendiliğinden dolar, bu yüzden kotaya karşı hiçbir şey birikmez.
Kimlik doğrulamak için hesabınızdan kişisel bir API token’ı oluşturun ve her istekte bunu bearer token olarak gönderin:
Authorization: Bearer <token>Giriş yapmanız gerekiyor. Tam token yalnızca oluşturma sırasında bir kez gösterilir; bu yüzden güvenli bir yere kopyalayın. Aynı sayfadan herhangi bir zamanda bir token’ı iptal edebilirsiniz.
Ziyaretçi belirteci
Anonim istemcilerin, bir hesap olmadan kendi yüklemelerinin sahipliğini kanıtlaması için bir yol gerekir. ziyaretçi token’ı kullanıyoruz - istemcinin bir kez oluşturup yeniden kullandığı rastgele bir dize. Her istekte bunu gönderin:
X-Visitor-Token: <random-string>Web’de token otomatik olarak visitor_token cookie’sinde saklanır. CLI bunu ~/.config/storageto/token konumunda saklar (bkz. CLI dokümantasyonu).
Değişiklik (mutation) uç noktalarında (silme, şifre belirleme, son kullanma tarihini değiştirme) sahiplik, ya da ziyaretçi token’ı eşleşiyorsa veya isteğin dosyayı oluşturan aynı IP’den gelmesi durumunda doğrulanır. İkisi de kaybolabilir (çerezlerin temizlenmesi, ağ değişiklikleri). Bundan sonra tercih edilen kanıt sahip token’ı’dır.
Sahip belirteci
Kaynak oluşturan her uç nokta (/upload/init multipart, /upload/confirm, /file/reserve, /collection) yanıtında bir owner_token döndürür. Token, IP’nizden veya ziyaretçi token’ınızdan bağımsız olarak, o belirli kaynağa bağlı imzalı bir sahiplik kanıtıdır.
Token’ı kaynak kimliğiyle birlikte saklayın ve herhangi bir mutation işleminde şu şekilde gönderin:
Authorization: Owner <token>Ya da kimliği doğrulanmış bir oturum için zaten Authorization: Bearer kullanıyorsanız, şu şekilde gönderin:
X-Owner-Token: <token>Sunucu, eski ziyaretçi token’ı + IP yedeklemesine ek olarak owner token’ı geçerli bir sahiplik kanıtı olarak kabul eder - token’ı olan istemciler ağ değiştirince veya çerezleri temizleyince de çalışmaya devam eder; token’ı olmayan istemciler ise her şey aynen eskisi gibi çalışır.
Token’lar, kaynak ne kadar süre varsa o kadar yaşar; kalıcı olarak saklamak güvenlidir ve bağımsız olarak süresi dolmaz. Token’ı kaybetmek, o kaynağın kontrolünü kaybetmek demektir (dosya/kolleksiyon/yükleme) - onları yerel parolalar gibi düşünün.
Hatalar
Hatalar tutarlı bir yapıda gelir:
{
"success": false,
"error": "Human-readable message"
}Yaygın HTTP durum kodları:
| Kod | Anlam |
|---|---|
200 | Tamam. |
201 | Oluşturuldu. |
400 | Kötü istek (ör. koleksiyon boyutu sınırı aşıldı). |
401 | Şifre gerekli ya da hatalı. |
403 | Yetkilendirilmedi (kaynağın sahibi değilsiniz). |
404 | Kaynak bulunamadı veya süresi doldu. |
422 | Doğrulama başarısız oldu veya plan/kota kısıtlaması var. |
429 | Oran sınırına (rate limit) takıldı veya yükleme kotası aşıldı. |
500 | Sunucu hatası. durum değerini kontrol edin. |
Hız limitleri
Tüm oran sınırları (rate limit) IP başınadır. 429 yanıtı standart Retry-After, X-RateLimit-Limit ve X-RateLimit-Remaining başlıklarını içerir.
| Kapsam | Sınır |
|---|---|
| Yükleme başlat / onayla / iptal et | 60 / dakika |
| Multipart tamamlandı | 500 / dakika |
| Multipart parça URL’leri | 120 / dakika |
| Toplu başlat / onayla | 500 / dakika |
| Durum yoklamaları (dosya & koleksiyon) | 120 / dakika |
| Ayarlar (şifre, son kullanma, en fazla indirme) | 30 / dakika |
| Şifre doğrulama | 10 / dakika |
| Koleksiyon oluşturma | 30 / dakika |
| Yönet (hazırla, sil) | 60 / dakika |
| Küçük resim yükleme | 120 / dakika |
| ShareX yükleme | 20 / gün |
| Uygulama analitiği / hatalar | dakikada 120 ve 60 |
Yükleme kotası: Anonim istemcilerin paralel çalışan iki limiti vardır - ziyaretçi token’ı başına 100 GB / 24 sa ve IP başına 500 GB / 24 sa (IP başına 500 GB / 24 sa limiti token’sız trafiği ve paylaşılan ağları yakalar). Bunlardan biri aşılırsa ayrıntılarla birlikte bir 429 alırsınız. Bu yalnızca bir yükleme kotasıdır - indirmeler sınırsız ve hız kısıtlamasızdır (doğrudan R2 signed URL’lerden servis edilir).
Yükle
Her dosya için üç adımlı yükleme akışı; 5 GB’tan büyük dosyalar dahil (otomatik olarak multipart). Sadece hızlı bir ekran görüntüsü tarzı yükleme gerekiyorsa bunun yerine ShareX’e bakın.
/upload/init60/minBir yükleme başlatın. 50 MB’tan büyük dosyalarda yanıt multipart yüklemedir (type: "multipart" alanı); aksi halde tek bir presigned PUT.
İstek gövdesi
| Alan | Tür | Açıklama |
|---|---|---|
filename | string · required | Orijinal dosya adı. En fazla 255 karakter. |
content_type | string · required | MIME türü. |
size | integer · required | Dosya boyutu (bayt). En az 1. |
/upload/partsOwner only120/minDevam eden bir multipart yükleme için ek parça URL’leri iste. /init, sahip olduğun parça sayısından daha az URL döndürdüyse (veya URL’ler süresi dolduysa) kullanılır.
İstek gövdesi
| Alan | Tür | Açıklama |
|---|---|---|
upload_id | string · required | /init içinden gelen upload_id. |
part_numbers | array<int> · required | URL’leri alınacak parça numaraları. |
/upload/complete-multipartOwner only500/minTüm parçalar yüklendikten sonra R2 üzerinde multipart yüklemeyi tamamla.
İstek gövdesi
| Alan | Tür | Açıklama |
|---|---|---|
upload_id | string · required | /init içinden gelen upload_id. |
parts | array · required | Her giriş: R2 yanıtındaki { partNumber, etag }. |
/upload/abortOwner only60/minBir multipart yüklemeyi iptal et ve R2 üzerindeki eksik verileri temizle.
İstek gövdesi
| Alan | Tür | Açıklama |
|---|---|---|
upload_id | string · required | İptal edilecek yükleme. |
/upload/confirm60/minYüklemenin tamamlandığını onayla. Bu aşamada File kaydını oluşturur ve paylaşılabilir URL’yi döndürürüz.
İstek gövdesi
| Alan | Tür | Açıklama |
|---|---|---|
filename | string · required | Orijinal dosya adı. |
size | integer · required | Dosya boyutu (bayt). |
content_type | string · required | MIME türü. |
r2_key | string · required | /init içinden gelen r2_key. |
collection_id | string · optional | Bir koleksiyona ekle. |
crc32 | integer · optional | Bütünlük doğrulaması için CRC32 sağlama toplamı. |
file_id | string(9) · optional | Daha önceki ayrılmış dosya ID’sini yerine getir. |
/file/reserve60/minDosya ID’sini ve paylaşılabilir URL’yi baytlar hazır olmadan önce ayır. Önce bir bağlantı dağıtıp ardından yüklemeyi tamamlaman gerektiğinde işe yarar. Sahiplik, ziyaretçi token’ınız + IP’nize bağlıdır. Yüklemeyi daha sonra /upload/init + /upload/confirm ile bitir; onaylamak için file_id iletin.
İstek gövdesi
| Alan | Tür | Açıklama |
|---|---|---|
filename | string · optional | Yer tutucu dosya adı. Varsayılan: "Pending". |
content_type | string · optional | Yer tutucu MIME türü. |
/upload/init-batch500/minWeb yükleyici için optimize edilmiş /upload/init’in toplu karşılığı. Tek gidiş-dönüşte en fazla 250 dosya başlatır.
Web yükleyici tarafından dahili olarak kullanılır. Çoğu istemci tek dosyalık /upload/init’i tercih etmelidir.
/upload/confirm-batch500/min/upload/confirm’un toplu karşılığı. Tek gidiş-dönüşte birçok dosyayı onaylar.
Koleksiyonlar
Bir koleksiyon, bir tek paylaşım URL’si (/c/{id}) altında birden fazla dosyayı gruplar. Toplamda en fazla 10.000 dosya ve 25 GB.
/collection30/minYeni bir koleksiyon oluştur. Dosyaları daha sonra /upload/confirm üzerinde collection_id ile ileterek ekle.
İstek gövdesi
| Alan | Tür | Açıklama |
|---|---|---|
expected_file_count | integer · optional | Beklenen tüm dosyalar onaylandıktan sonra koleksiyonun otomatik olarak hazır işaretlenmesi için ipucu. |
/collection/{id}/status120/minBir koleksiyonun durumunu yokla. Ayrıca beklenen tüm dosyalar onaylandıysa koleksiyonu otomatik olarak hazır işaretler.
/collection/{id}/readyOwner only60/minKolleksiyonu indirmeye hazır olarak işaretleyin. Genellikle gerekmez - expected_file_count değerine ulaşıldığında kolleksiyonlar otomatik olarak hazır olur.
/collection/{id}Owner only60/minBir koleksiyonu ve tüm dosyalarını sil.
/collection/{id}/passwordOwner only30/minKoleksiyona bir parola belirle. 4–100 karakter gerekir.
İstek gövdesi
| Alan | Tür | Açıklama |
|---|---|---|
password | string · required | 4–100 karakter. |
/collection/{id}/passwordOwner only30/minKoleksiyondaki parolayı kaldır.
/collection/{id}/verify-password10/minParolayı kontrol et. Başarılıysa 200, yanlışsa 401 döner.
İstek gövdesi
| Alan | Tür | Açıklama |
|---|---|---|
password | string · required |
/collection/{id}/expiryOwner only30/minBir koleksiyonun son kullanma süresini değiştir.
İstek gövdesi
| Alan | Tür | Açıklama |
|---|---|---|
days | integer · optional | Şu andan itibaren 1–7 gün. Kalıcı için atla veya null kullan (yalnızca premium). |
/collection/{id}/max-downloadsOwner only30/minBir indirme limiti belirle (burn-after-N-downloads). Limite ulaşıldığında koleksiyon otomatik olarak silinir.
İstek gövdesi
| Alan | Tür | Açıklama |
|---|---|---|
max_downloads | integer · optional | 1–1000. Mevcut indirme sayısını aşmalı. Limiti kaldırmak için null. |
Dosyalar
Tüm dosya düzeyi ayarlar (parola, son kullanma, max-downloads) koleksiyon uç noktalarını yansıtır. Yalnızca sahip.
/file/{id}/status120/minBir dosyanın yüklenmeyi bekleyip beklemediğini kontrol et.
/file/{id}Owner only60/minBir dosyayı hemen sil.
/file/{id}/thumbnailOwner only120/minBir video ya da görsel dosya için küçük resim yükle (indirme sayfasında kullanılır). En fazla 2 MB.
İstek gövdesi
| Alan | Tür | Açıklama |
|---|---|---|
thumbnail | image · required | Multipart yükleme. En fazla 2 MB. |
/file/{id}/passwordOwner only30/minBir dosyaya parola belirle. 4–100 karakter gerekir.
/file/{id}/passwordOwner only30/minBir dosyanın parolasını kaldır.
/file/{id}/verify-password10/minBir dosyanın parolasını doğrula.
/file/{id}/expiryOwner only30/minBir dosyanın son kullanma süresini değiştir.
İstek gövdesi
| Alan | Tür | Açıklama |
|---|---|---|
days | integer · optional | Şu andan itibaren 1–7 gün. Kalıcı için atla veya null kullan (yalnızca premium). |
/file/{id}/max-downloadsOwner only30/minBir dosyanın toplam indirme sayısını sınırla. Eşiğe ulaşıldığında otomatik olarak silinir.
ShareX yükleme
Tek seferlik yükleme endpoint’i - multipart bir dosya gönderin, paylaşılabilir bir URL geri alın. Init/onay karmaşası yok. Ekran görüntüsü araçları için ideal. Tam kurulum rehberi: /docs/sharex.
Masaüstü kimlik doğrulama
Sanctum token’ı olan doğrulanmış istemciler için (ör. masaüstü uygulaması).
/userBearer tokenKimliği doğrulanmış kullanıcıyı döndür.
/auth/logoutBearer tokenMevcut erişim belirtecini (access token) iptal et.
Diğer
/healthCanlılık kontrolü. API worker hizmet verirken 200 ve { "status": "ok" } döner.
/activityAna sayfadaki dünya için canlı etkinlik akışı. Cloudflare kenarında önbelleğe alınır.
/bandwidth/status60/minÇağıran için mevcut yükleme kotası kullanımı - CLI ve masaüstü uygulaması kalan kapasiteyi göstermek için kullanır. Kimliği doğrulanmış kullanıcılar için yanıt biçimi farklıdır. URL adında geçmesine rağmen yalnızca yükleme baytlarını takip eder; indirmeler sayılmaz.
/app-analytics120/minCLI veya masaüstü uygulamasından bir kullanım olayı gönder.
İstek gövdesi
| Alan | Tür | Açıklama |
|---|---|---|
app | string · required | desktop, cli veya web. |
version | string · optional | İstemci sürümü. |
event | string · required | Olay adı, ör. upload_complete. |
context | object · optional | Ek meta veriler. |
/app-errors60/minCLI veya masaüstü uygulamasından hata raporu gönderin. Sunucu tarafında yinelenenler kaldırılır - aynı hatadan saatte en fazla 10.
İstek gövdesi
| Alan | Tür | Açıklama |
|---|---|---|
app | string · required | desktop, cli veya web. |
type | string · required | Hata sınıfı/türü. |
message | string · required | Hata mesajı. |
stack | string · optional | Stack trace. |
version, os, os_version, arch, context | various · optional | Tanılama meta verileri. |