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.
Yüklemeler nasıl çalışır
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:
PUT baytlarını doğrudan önceden imzalanmış URL(ler)e gönder. Baytlar sunucularımızdan geçmez.File kaydı oluşturur ve paylaşılabilir bir URL veririz.Aş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ış
expiry_days ile 7 güne kadarexpiry_days ile 7 güne kadarAylı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.
Sahipliği kanıtlama
/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’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.# veya bir Bearer oturumuyla birlikte
X-Owner-Token: <token>
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.
Hatalar
Hatalar tutarlı bir yapıda gelir: { "success": false, "error": "…" }
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.
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.
Yükle
8 uç noktaHer 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.
Bir 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. |
curl -X POST https://storage.to/api/upload/init \ -H "Content-Type: application/json" \ -H "X-Visitor-Token: abc123" \ -d '{ "filename": "report.pdf", "content_type": "application/pdf", "size": 2202009 }'
{ "success": true, "type": "single", "upload_url": "https://r2.cloudflarestorage.com/...signed...", "headers": { "Host": ["..."] }, "r2_key": "uuid-abc123" }
{ "success": true, "type": "multipart", "upload_id": "01HXYZ...", "r2_key": "uuid-abc123", "part_size": 33554432, "total_parts": 4, "initial_urls": { "1": "https://...", "2": "https://..." }, "owner_token": "owner_v1_..." }
Devam 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ı. |
curl -X POST https://storage.to/api/upload/parts \ -H "Content-Type: application/json" \ -d '{ "upload_id": "01HXYZ...", "part_numbers": [3, 4] }'
{ "success": true, "part_urls": [ { "partNumber": 3, "url": "https://..." }, { "partNumber": 4, "url": "https://..." } ] }
Tüm parçalar yüklendikten sonra 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ş: parça yükleme yanıtındaki { partNumber, etag }. |
curl -X POST https://storage.to/api/upload/complete-multipart \ -H "Content-Type: application/json" \ -d '{ "upload_id": "01HXYZ...", "parts": [ { "partNumber": 1, "etag": "\"abc...\"" }, { "partNumber": 2, "etag": "\"def...\"" } ] }'
{ "success": true }
Bir multipart yüklemeyi iptal et ve eksik verileri temizle.
İstek gövdesi
| Alan | Tür | Açıklama |
|---|---|---|
upload_id | string · required | İptal edilecek yükleme. |
curl -X POST https://storage.to/api/upload/abort \ -H "Content-Type: application/json" \ -d '{ "upload_id": "01HXYZ..." }'
Yü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. |
curl -X POST https://storage.to/api/upload/confirm \ -H "Content-Type: application/json" \ -H "X-Visitor-Token: abc123" \ -d '{ "filename": "report.pdf", "size": 2202009, "content_type": "application/pdf", "r2_key": "uuid-abc123" }'
{ "success": true, "file": { "id": "FQxyz1234", "url": "https://storage.to/FQxyz1234", "filename": "report.pdf", "size": 2202009, "human_size": "2.1 MB", "expires_at": "2026-04-15T12:00:00Z" }, "owner_token": "owner_v1_..." }
Dosya 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ü. |
curl -X POST https://storage.to/api/file/reserve \ -H "X-Visitor-Token: abc123"
{ "success": true, "file": { "id": "FQxyz1234", "url": "https://storage.to/FQxyz1234", "expires_at": "2026-04-12T18:00:00Z" }, "owner_token": "owner_v1_..." }
Web 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’un toplu karşılığı. Tek gidiş-dönüşte birçok dosyayı onaylar.
Koleksiyonlar
9 uç noktaBir koleksiyon, bir tek paylaşım URL’si (/c/{id}) altında birden fazla dosyayı gruplar. Toplamda en fazla 10.000 dosya ve 25 GB.
Yeni 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. |
curl -X POST https://storage.to/api/collection \ -H "Content-Type: application/json" \ -H "X-Visitor-Token: abc123" \ -d '{ "expected_file_count": 3 }'
{ "success": true, "collection": { "id": "ABC123xyz", "url": "https://storage.to/c/ABC123xyz", "expires_at": "2026-04-15T12:00:00Z" }, "owner_token": "owner_v1_..." }
Bir koleksiyonun durumunu yokla. Ayrıca beklenen tüm dosyalar onaylandıysa koleksiyonu otomatik olarak hazır işaretler.
curl https://storage.to/api/collection/ABC123xyz/status
{ "success": true, "files": [ /* file objects: id, url, filename, size, ... */ ], "is_uploading": false, "file_count": 3, "expected_file_count": 3, "total_size": 6291456, "human_total_size": "6 MB" }
Kolleksiyonu indirmeye hazır olarak işaretleyin. Genellikle gerekmez - expected_file_count değerine ulaşıldığında kolleksiyonlar otomatik olarak hazır olur.
Bir koleksiyonu ve tüm dosyalarını sil.
Koleksiyona bir parola belirle. 4–100 karakter gerekir.
İstek gövdesi
| Alan | Tür | Açıklama |
|---|---|---|
password | string · required | 4–100 karakter. |
curl -X POST https://storage.to/api/collection/ABC123xyz/password \ -H "X-Visitor-Token: abc123" \ -d '{ "password": "hunter22" }'
Koleksiyondaki parolayı kaldır.
Parolayı kontrol et. Başarılıysa 200, yanlışsa 401 döner.
İstek gövdesi
| Alan | Tür | Açıklama |
|---|---|---|
password | string · required |
Bir 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, ancak yüklemeden sonraki 7 günden (veya daha geçse mevcut sona erme tarihinden) daha geç olamaz. Kalıcı için boş bırakın veya null verin (yalnızca premium). |
Bir 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
8 uç noktaTüm dosya düzeyi ayarlar (parola, son kullanma, max-downloads) koleksiyon uç noktalarını yansıtır. Yalnızca sahip.
Bir dosyanın yüklenmeyi bekleyip beklemediğini kontrol et.
{ "pending": false }
Bir dosyayı hemen sil.
Bir 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. |
{ "success": true, "thumbnail_url": "https://..." }
Bir dosyaya parola belirle. 4–100 karakter gerekir.
Bir dosyanın parolasını kaldır.
Bir dosyanın parolasını doğrula.
Bir 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, ancak yüklemeden sonraki 7 günden (veya daha geçse mevcut sona erme tarihinden) daha geç olamaz. Kalıcı için boş bırakın veya null verin (yalnızca premium). |
Bir dosyanın toplam indirme sayısını sınırla. Eşiğe ulaşıldığında otomatik olarak silinir.
Masaüstü kimlik doğrulama
2 uç noktaBearer token'ı olan, oturum açmış istemciler için, örneğin masaüstü uygulaması.
Kimliği doğrulanmış kullanıcıyı döndür.
curl https://storage.to/api/user \ -H "Authorization: Bearer <token>"
{ "id": 42, "name": "Ada", "email": "ada@example.com", "is_premium": true }
Mevcut erişim belirtecini (access token) iptal et.
Diğer
5 uç noktaDurum, kotalar ve istemci telemetrisi.
Canlılık kontrolü. API worker hizmet verirken 200 ve { "status": "ok" } döner.
{ "status": "ok" }
Ana sayfadaki dünya için canlı etkinlik akışı. Kenarda önbelleğe alınır.
Ç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.
{ "success": true, "authenticated": false, "has_token": true, "limit_bytes": 107374182400, "limit_gb": 100, "used_bytes": 12345678, "used_gb": 0.01, "remaining_bytes": 107361836722, "remaining_gb": 99.99, "window_hours": 24 }
{ "success": true, "authenticated": true, "plan": "premium" }
CLI 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. |
CLI 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. |