imgpile API
Görselleri ve videoları programatik olarak yükleyin, paylaşın ve yönetin.
https://imgpile.com/api/v1 — tüm uç noktalar
https://cdn.imgpile.com/api/v1/media — yalnızca dosya yüklemeleri (şuna bakın aşağıda)
Kavramlar
imgpile'ın iki temel nesnesi var. Farkı anlamak zaman kazandırır.
Medya
Tek bir dosya (görsel veya video). Doğrudan bir CDN URL'si var; hotlinking, yerleştirme veya paylaşım için ideal.
Gönderi
Bir veya daha fazla medya öğesi içeren, paylaşılabilir bir sayfa. Başlık, açıklama, oylama, yorumlar ve etiketler içerir.
/media. Kullan urls.original yanıttan. Bitti.
/posts medya kimlikleriyle.
Hızlı Başlangıç
Tek bir dosya yükleyin ve doğrudan bir CDN URL'si alın. ShareX, Discord botları veya sadece bir görseli barındırması gereken herhangi bir betik için ideal.
Not: yüklemeler şuraya gider: cdn.imgpile.com, değil imgpile.com.
curl -X POST https://cdn.imgpile.com/api/v1/media \
-H "Authorization: Bearer YOUR_TOKEN" \
-F "[email protected]"Yanıt:
{
"message": "Media created successfully",
"media": {
"slug": "abc1234",
"type": "image/jpeg",
"urls": {
"original": "https://cdn.imgpile.com/f/abc1234.jpg",
...
}
}
}Birden fazla dosya yükleyin, ardından bunları meta veriler, oylama ve yorumlarla birlikte bir gönderi halinde gruplandırın.
1. Her dosyayı şuraya yükleyin: cdn.imgpile.com ve dönen medya ID'sini saklayın:
curl -X POST https://cdn.imgpile.com/api/v1/media \
-H "Authorization: Bearer YOUR_TOKEN" \
-F "[email protected]"
# Returns: { "media": { "id": 12345, ... } }2. Bu ID'lerle bir gönderi oluşturun:
curl -X POST https://imgpile.com/api/v1/posts \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"media_ids": [12345, 12346]}'
# Returns: { "post": { "slug": "xyz789", ... } }3. (İsteğe bağlı) Bir başlık ve açıklama ekleyin:
curl -X PATCH https://imgpile.com/api/v1/posts/xyz789 \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title": "My post", "description": "Summer 2026"}'Gönderiniz artık şu adreste yayında: https://imgpile.com/p/xyz789
Bir tarayıcıdan veya Node.js ile görsel yükleyin:
const formData = new FormData();
formData.append('file', fileInput.files[0]);
const response = await fetch('https://cdn.imgpile.com/api/v1/media', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_TOKEN',
},
body: formData,
});
const { media } = await response.json();
console.log(media.urls.original); // https://cdn.imgpile.com/f/abc1234.jpgKimlik Doğrulama
Okuma uçları (GET) şunlardır: genel ve kimlik doğrulama gerektirmez. Diğer tüm uç noktalar bir bearer token gerektirir.
curl https://imgpile.com/api/v1/postsKimlik doğrulamalı istekler için token'ınızı şu alana iletin: Authorization başlık:
curl -H "Authorization: Bearer YOUR_TOKEN" https://cdn.imgpile.com/api/v1/media -F "[email protected]"Dosya yükleme hedefi cdn.imgpile.com; gör Medya → Yükle ayrıntılar için.
Token'ı şurada oluşturun: Giriş yukarıdaki bölümde.
Hatalar
API standart HTTP durum kodları döndürür. Hata yanıtları, neyin yanlış gittiğini açıklayan bir message (veya error) alan içeren bir JSON gövdesi içerir.
Durum kodları
| Kod | Anlam |
|---|---|
200 | OK — istek başarılı |
201 | Created — kaynak oluşturuldu |
400 | Bad Request — hatalı biçimlendirilmiş istek |
401 | Unauthenticated — eksik veya geçersiz token |
403 | Yasaklandı — bu işlem için iznin yok |
404 | Bulunamadı — kaynak mevcut değil |
422 | Validation failed — istek gövdesinde geçersiz alanlar var |
429 | Rate Limited — çok fazla istek, yavaşlayın |
451 | Unavailable for Legal Reasons — dosya yasaklı bir hash ile eşleşti |
500 | Server Error — tarafımızda bir şeyler ters gitti |
Örnek hata yanıtları
401 Unauthenticated
{ "message": "Unauthenticated." }403 Forbidden
{ "message": "This action is unauthorized." }422 Validation failed
{
"message": "The file field is required.",
"errors": {
"file": ["The file field is required."]
}
}429 Rate limited
{ "message": "Too Many Attempts." }Şunu kontrol edin Retry-After limit sıfırlanana kadar geçen saniyeler için yanıt başlığını.
451 Yasaklı içerik
{ "error": "This file is not allowed." }API Sayfalama
Uç noktaları listele (GET /posts, GET /media) sayfalı sonuçlar döndürür. Varsayılan sayfa boyutu 10'dur; şununla birlikte en fazla 250 isteyebilirsiniz: ?limit=N.
Kullan ?page=N sayfalar arasında gezinmek için. Yanıt, sayfalama meta verilerini içerir:
{
"data": [ ... ],
"links": {
"first": "https://imgpile.com/api/v1/posts?page=1",
"last": "https://imgpile.com/api/v1/posts?page=42",
"prev": null,
"next": "https://imgpile.com/api/v1/posts?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"to": 10,
"per_page": 10,
"total": 421,
"last_page": 42
}
}Tekrarlarken şunu izleyin: links.next şuna kadar: null, veya şunu kontrol edin meta.current_page karşı meta.last_page.
İçerik Filtreleme
Varsayılan olarak, uç noktaları listele (GET /posts, GET /media) yalnızca güvenli içerik döndürür (moderasyon durumu approved). Yetişkin içeriği de dahil etmek için (nsfw), geç ?nsfw=1:
curl https://imgpile.com/api/v1/posts?nsfw=1Yasaklı içerik (rejected, yani spam veya taciz) hiçbir zaman, şu ne olursa olsun, genel besleme uç noktalarına döndürülmez: ?nsfw bayrağı.
Her gönderi ve medya yanıtı bir moderation_status alanı içerir; böylece istemcinizde işaretlenen öğeleri uyarabilir, bulanıklaştırabilir veya gizleyebilirsiniz:
{
"moderation_status": "approved" | "pending" | "nsfw" | "rejected",
...
}approved— tüm kitleler için güvenlidir.pending— otomatik moderasyon bekleniyor.nsfw— yetişkin içerik; yalnızca genel uç noktalardan şu durumda döndürülür:?nsfw=1.rejected— spam/taciz; asla genel uç noktalara döndürülmez.
Gizli gönderiler slug'larıyla erişilebilir ama asla akışlarda görünmez. Özel gönderiler bir ?key=xxx sorgu parametresi (sahibi bunu gönderinin paylaşım bağlantısında bulabilir).
Hız Sınırları
- Genel istekler (token yok): IP başına dakikada 30 istek
- Kimlik doğrulanmış istekler: kullanıcı başına dakikada 120 istek
- Dosya yüklemeleri: kullanıcı/IP başına günde 1.000 dosya
- Maksimum dosya boyutu: 100 MB
- Kabul edilen türler: image/* ve video/*
Oran sınırlama (rate limit) başlıkları her yanıtta bulunur (X-RateLimit-Limit, X-RateLimit-Remaining).
Media nesnesi
Medya uç noktaları tarafından döndürülür ve gönderi yanıtlarının içine gömülür.
| Alan | Tür | Açıklama |
|---|---|---|
| slug | string | Tekil 7 karakterlik tanımlayıcı. URL'lerde kullanılır. |
| filename | string | Depolama dosya adı (slug ile aynı). |
| title | string|null | Kullanıcı tarafından sağlanan başlık. |
| description | string|null | Kullanıcı tarafından sağlanan açıklama. |
| type | string | MIME türü — örn. image/jpeg, video/mp4. |
| width | integer | Piksel cinsinden genişlik. |
| height | integer | Piksel cinsinden yükseklik. |
| moderation_status | enum | Şunlardan biri: approved, pending, nsfw, veya rejected. Şuna bakın İçerik Filtreleme. |
| processed | boolean | false boyut varyantları oluşturulurken; true hazır olduğunda. |
| created_at | timestamp | ISO 8601 zaman damgası. |
| urls | object | mevcut her boyutta CDN URL'leri — şuraya bakın Doğrudan Görsel URL'leri. |
| user | object|null | Yükleyen (kullanıcı adı, avatar). Misafir yüklemelerinde null. |
Post nesnesi
Bir veya daha fazla medya öğesi için paylaşılabilir bir kapsayıcı.
| Alan | Tür | Açıklama |
|---|---|---|
| id | integer | Sayısal ID. Şunu kullanın slug URL'ler için. |
| slug | string | Tekil 7 karakterlik tanımlayıcı. URL'lerde kullanılır. |
| title | string|null | Gönderi başlığı. |
| description | string|null | Gönderi açıklaması. |
| score | integer | Net oy skoru (artı oylar eksi eksi oylar). |
| view_count | integer | Toplam sayfa görüntüleme. |
| media_count | integer | Bu gönderideki medya öğesi sayısı. |
| moderation_status | enum | Şunlardan biri: approved, pending, nsfw, veya rejected. Şuna bakın İçerik Filtreleme. |
| isUpvotedByUser | boolean | Kimliği doğrulanmış kullanıcının bu gönderiye artı oy verip vermediği. |
| isDownvotedByUser | boolean | Kimliği doğrulanmış kullanıcının bu gönderiye eksi oy verip vermediği. |
| created_at | timestamp | ISO 8601 zaman damgası. |
| user | object|null | Yazar (kullanıcı adı, avatar). Misafir gönderilerinde null. |
| media | array | Şunun dizisi: Medya nesneleri. Yalnızca tek-gönderi isteklerinde dahil edilir. |
| first_media | object|null | İlk medya (önizleme). Yalnızca akış yanıtlarında dahil edilir. |
| Sadece sahibi için alanlar (yalnızca gönderi sahibine döner): | ||
| visibility | enum | public, hidden, veya private. |
| access_key | string|null | Özel bir gönderiyi görüntülemek için gerekli. Şöyle ekleyin ?key=xxx. |
Media uç noktaları
Tekil dosyalar (resimler veya videolar). Her medya öğesinin, istediğiniz yerde hotlink veya embed edebileceğiniz doğrudan bir CDN URL'si vardır.
Yüklemeleri şuraya gönder https://cdn.imgpile.com/api/v1/media — değil imgpile.com. Dosyalar özel bir origin'de saklanır; ana host'a POST atmak başarısız olur.
Diğer tüm uç noktalar şunu kullanır imgpile.com/api/v1 her zamanki gibi.
Bir resim veya video yükleyin. Şöyle gönderin multipart/form-data.
| Parametre | Açıklama |
|---|---|
| filegerekli | Yüklenecek dosya. En fazla 100 MB. image/* ve video/* kabul eder. |
| post_idopsiyonel | Mevcut bir gönderiye ekle. |
curl -X POST https://cdn.imgpile.com/api/v1/media \
-H "Authorization: Bearer YOUR_TOKEN" \
-F "[email protected]"{
"message": "Media created successfully",
"media": {
"slug": "abc1234",
"filename": "abc1234",
"type": "image/jpeg",
"width": 1920,
"height": 1080,
"moderation_status": "approved",
"urls": {
"original": "https://cdn.imgpile.com/f/abc1234.jpg",
...
}
}
}Filtreleme ve sayfalama ile medya öğelerini listeleyin.
| Parametre | Açıklama |
|---|---|
| tag | Etiket adına göre filtrele |
| sort | latest (varsayılan) veya random |
| period | day, week, month, year, all |
| limit | Sayfa başına sonuç (maks 250, varsayılan 10) |
| username | Kullanıcı adına göre filtrele |
| nsfw | Şuna ayarla 1 NSFW içeriği dahil etmek için. Varsayılan: Yalnızca SFW. |
curl https://imgpile.com/api/v1/media?limit=20{
"data": [
{
"slug": "abc1234",
"type": "image/jpeg",
"width": 1920,
"height": 1080,
"moderation_status": "approved",
"urls": { ... }
},
...
],
"links": { ... },
"meta": { "current_page": 1, "total": 421 }
}Slug'ına göre tek bir medya öğesi alın.
curl https://imgpile.com/api/v1/media/abc1234{
"data": {
"slug": "abc1234",
"type": "image/jpeg",
"width": 1920,
"height": 1080,
"moderation_status": "approved",
"urls": { ... }
}
}Sahip olduğunuz medyayı güncelleyin.
| Parametre | Açıklama |
|---|---|
| title | Medya başlığı |
| description | Medya açıklaması |
curl -X PATCH https://imgpile.com/api/v1/media/abc1234 \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title": "New title"}'{
"message": "Media updated successfully"
}Sahip olduğunuz medyayı silin.
curl -X DELETE https://imgpile.com/api/v1/media/abc1234 \
-H "Authorization: Bearer YOUR_TOKEN"{
"message": "Media deleted successfully."
}Post uç noktaları
Bir veya daha fazla medya öğesi içeren paylaşılabilir sayfalar. Bir başlık, açıklama, oylama, yorumlar ve etiketler içerir.
Filtreleme ve sayfalama ile herkese açık gönderileri listeleyin.
| Parametre | Açıklama |
|---|---|
| tag | Etiket adına göre filtrele |
| sort | latest (varsayılan) veya random |
| period | day, week, month, year, all |
| limit | Sayfa başına sonuç (maks 250, varsayılan 10) |
| username | Kullanıcı adına göre filtrele |
| nsfw | Şuna ayarla 1 NSFW içeriği dahil etmek için. Varsayılan: Yalnızca SFW. |
curl https://imgpile.com/api/v1/posts?sort=latest{
"data": [
{
"id": 30713,
"slug": "MSGhYqy",
"title": "Sunset photos",
"score": 12,
"view_count": 245,
"media_count": 3,
"moderation_status": "approved",
"user": { "username": "alice", ... },
"first_media": { ... }
},
...
]
}Sayfalı medya ile tek bir gönderi al.
| Parametre | Açıklama |
|---|---|
| mediaPage | Medya için sayfa numarası (varsayılan 1) |
| perPage | Sayfa başına medya öğesi (varsayılan 10) |
| key | Özel gönderiler için gerekli. Sahibi bunu paylaşım bağlantısında bulabilir. |
curl https://imgpile.com/api/v1/posts/MSGhYqy
# Private post with key:
curl "https://imgpile.com/api/v1/posts/xyz789?key=ab12cd34ef"{
"data": {
"id": 30713,
"slug": "MSGhYqy",
"title": "Sunset photos",
"description": "...",
"score": 12,
"view_count": 245,
"moderation_status": "approved",
"user": { "username": "alice", ... },
"media": [ ... ]
}
}Yüklenen medyadan yeni bir gönderi oluştur.
| Parametre | Açıklama |
|---|---|
| media_idsgerekli | Gönderiye eklenecek medya ID'lerinin dizisi |
curl -X POST https://imgpile.com/api/v1/posts \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"media_ids": [12345, 12346]}'{
"message": "Post created successfully",
"post": {
"id": 30720,
"slug": "rtWJdHr"
}
}Sahip olduğun bir gönderiyi güncelle.
| Parametre | Açıklama |
|---|---|
| title | Gönderi başlığı (en fazla 255) |
| description | Gönderi açıklaması |
| visibility | public, hidden, veya private. Şu ayara private şunu otomatik olarak oluşturur: access_key. |
| is_nsfw | Boole. Gönderiyi yetişkin içerik olarak işaretle; böylece izleyicinin NSFW anahtarı arkasında kalsın. Ayarlandıktan sonra gönderi, aşağıda otomatik olarak çözülmez: nsfw. |
| media_order | İstenen sırada medya slug'larının dizisi |
curl -X PATCH https://imgpile.com/api/v1/posts/rtWJdHr \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title": "Updated title", "visibility": "private"}'{
"message": "Post updated successfully",
"visibility": "private",
"access_key": "ab12cd34ef"
}Sahip olduğun bir gönderiyi sil.
curl -X DELETE https://imgpile.com/api/v1/posts/rtWJdHr \
-H "Authorization: Bearer YOUR_TOKEN"{
"message": "Post deleted successfully"
}Kullanıcılar
Bir kullanıcının gönderilerini al.
curl https://imgpile.com/api/v1/users/alice/posts{
"data": [
{
"id": 30713,
"slug": "MSGhYqy",
"title": "Sunset photos",
"score": 12,
"moderation_status": "approved",
"first_media": { ... }
},
...
]
}Bir kullanıcının medyasını al.
curl https://imgpile.com/api/v1/users/alice/media{
"data": [
{
"slug": "abc1234",
"type": "image/jpeg",
"moderation_status": "approved",
"urls": { ... }
},
...
]
}Bir kullanıcının yorumlarını al (sayfalı).
curl https://imgpile.com/api/v1/users/alice/commentsBir kullanıcının takipçilerini al (sayfalı).
curl https://imgpile.com/api/v1/users/alice/followersBu kullanıcının takip ettikleri kullanıcıları al (sayfalı).
curl https://imgpile.com/api/v1/users/alice/followingBir kullanıcıyı takip et.
curl -X POST https://imgpile.com/api/v1/users/alice/follow \
-H "Authorization: Bearer YOUR_TOKEN"{
"message": "User followed."
}Bir kullanıcıyı takipten çıkar.
curl -X DELETE https://imgpile.com/api/v1/users/alice/follow \
-H "Authorization: Bearer YOUR_TOKEN"{
"message": "User unfollowed."
}Oylama
Bir gönderiyi beğen (oy ver). Tekrar çağırmak beğeniyi kaldırır.
curl -X POST https://imgpile.com/api/v1/posts/123/upvote \
-H "Authorization: Bearer YOUR_TOKEN"{
"message": "Post upvoted successfully",
"score": 13
}Bir gönderiyi beğenme (eksi oy ver). Tekrar çağırmak eksi oyu kaldırır.
curl -X POST https://imgpile.com/api/v1/posts/123/downvote \
-H "Authorization: Bearer YOUR_TOKEN"{
"message": "Post downvoted successfully",
"score": 11
}Bir yorumu beğen (oy ver). Tekrar çağırmak beğeniyi kaldırır.
curl -X POST https://imgpile.com/api/v1/comments/456/upvote \
-H "Authorization: Bearer YOUR_TOKEN"Bir yorumu beğenme (eksi oy ver). Tekrar çağırmak eksi oyu kaldırır.
curl -X POST https://imgpile.com/api/v1/comments/456/downvote \
-H "Authorization: Bearer YOUR_TOKEN"Doğrudan Görsel URL'leri
Yüklenen her dosya CDN üzerinden sunulur. Medya yanıtı şunları içerir: urls tüm mevcut boyutlarla birlikte bir
https://cdn.imgpile.com/f/{filename}.{ext} — Original
https://cdn.imgpile.com/f/{filename}_xs.{ext} — Extra small
https://cdn.imgpile.com/f/{filename}_sm.{ext} — Small
https://cdn.imgpile.com/f/{filename}_md.{ext} — Medium
https://cdn.imgpile.com/f/{filename}_lg.{ext} — Large
https://cdn.imgpile.com/f/{filename}_xl.{ext} — Extra large
https://cdn.imgpile.com/f/{filename}_thumb.jpg — Thumbnail (videos)
Yorumlar
Bir gönderiye yorum ekle.
curl -X POST https://imgpile.com/api/v1/posts/MSGhYqy/comments \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"content": "Nice shot!"}'{ "success": true, "comment": { "id": 456, "content": "Nice shot!", "user_id": 1, "post_id": 12345 } }Sahip olduğun bir yorumu sil.
curl -X DELETE https://imgpile.com/api/v1/comments/123 \ -H "Authorization: Bearer YOUR_TOKEN"{ "success": true, "message": "Comment deleted successfully" }