Medya
Sosyal medya gönderilerinize ekleyeceğiniz görsel ve video dosyalarını yükleyin, yönetin ve medya kütüphanenizi sorgulayın.
Desteklenen Formatlar
| Tür | Formatlar | Maks. Boyut |
|---|---|---|
| Görsel | JPG, PNG, GIF, WEBP | 30 MB |
| Video | MP4, MOV | 500 MB |
Medya Kütüphanesini Listele
GET/v1/media
Kullanıcının medya kütüphanesini sayfalandırılmış olarak döner.
Query Parametreleri
| Parametre | Tip | Varsayılan | Açıklama |
|---|---|---|---|
page | integer | 1 | Sayfa numarası |
perPage | integer | 20 | Sayfa başına kayıt (maks: 100) |
type | string | — | IMAGE veya VIDEO |
search | string | — | Dosya adı veya açıklama araması |
workspaceId | string | — | Workspace filtresi |
Kod Örnekleri
Node.js
medya-listele.js
const params = new URLSearchParams({ page: '1', perPage: '20', type: 'IMAGE' })
const response = await fetch(
`https://api.sosyalkopru.com/v1/media?${params}`,
{ headers: { 'Authorization': `Bearer ${process.env.SOSYALKOPRU_API_KEY}` } }
)
const { data, pagination } = await response.json()
console.log(`${pagination.total} medya dosyası`)
data.forEach(m => console.log(`${m.id} ${m.type} ${m.filename}`))Başarılı Yanıt
{
"success": true,
"data": [
{
"id": "media_01HZGK9P3QABC",
"type": "IMAGE",
"filename": "urun-gorseli.jpg",
"url": "https://cdn.sosyalkopru.com/media/api-img/.../urun-gorseli.jpg",
"size": 524288,
"mimeType": "image/jpeg",
"width": 1080,
"height": 1080,
"altText": null,
"description": null,
"usageCount": 3,
"createdAt": "2025-06-10T12:00:00.000Z"
}
],
"meta": { "requestId": "req_01XYZ", "timestamp": "...", "version": "1" },
"pagination": {
"page": 1,
"perPage": 20,
"total": 48,
"totalPages": 3,
"hasNextPage": true,
"hasPrevPage": false
}
}Medya Yükle
POST/v1/media/upload
multipart/form-data formatında dosya yükler ve CDN URL’i döner.
İstek
| Form Alanı | Tip | Zorunlu | Açıklama |
|---|---|---|---|
file | binary | Evet | Yüklenecek dosya |
altText | string | Hayır | Erişilebilirlik metni (maks. 255 karakter) |
description | string | Hayır | Medya açıklaması (maks. 1000 karakter) |
Content-Type: multipart/form-data başlığını manuel olarak set etmeyin. Fetch/axios/requests kütüphaneleri bunu otomatik olarak doğru boundary ile ayarlar.
Kod Örnekleri
Node.js
medya-yukle.js
import { readFileSync } from 'fs'
import { basename } from 'path'
async function medyaYukle(dosyaYolu, altText = '') {
const form = new FormData()
form.append('file', new Blob([readFileSync(dosyaYolu)]), basename(dosyaYolu))
if (altText) form.append('altText', altText)
const response = await fetch('https://api.sosyalkopru.com/v1/media/upload', {
method: 'POST',
headers: { 'Authorization': `Bearer ${process.env.SOSYALKOPRU_API_KEY}` },
body: form,
})
if (!response.ok) {
const { error } = await response.json()
throw new Error(`${error.code}: ${error.message}`)
}
const { data } = await response.json()
console.log('Yüklendi:', data.mediaId)
console.log('URL:', data.url)
return data
}
const medya = await medyaYukle('./urun-gorseli.jpg', 'Ürün fotoğrafı')Başarılı Yanıt (201 Created)
{
"success": true,
"data": {
"mediaId": "media_01HZGK9P3QABC",
"url": "https://cdn.sosyalkopru.com/media/api-img/ws123/usr456/urun-gorseli.jpg",
"type": "IMAGE",
"size": 524288,
"mimeType": "image/jpeg",
"filename": "urun-gorseli.jpg",
"altText": "Ürün fotoğrafı",
"description": null
},
"meta": { "requestId": "req_01XYZ", "timestamp": "...", "version": "1" }
}Gönderi Oluşturmada Kullanım
Yükleme sonrası dönen mediaId ile gönderi oluşturun:
const medya = await medyaYukle('./urun.jpg')
await fetch('https://api.sosyalkopru.com/v1/posts', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.SOSYALKOPRU_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
platforms: ['instagram'],
content: {
text: 'Yeni ürün! 🎉',
media: [{ mediaId: medya.mediaId, order: 0 }],
},
accountIds: ['acc_01HZGK9P3QXYZ'],
}),
})Medya Bilgisi
GET/v1/media/{id}
Yüklenmiş bir medya dosyasının metadata bilgilerini döner.
Path Parametresi
| Parametre | Açıklama |
|---|---|
id | Medya ID’si (media_...) |
Kod Örnekleri
Node.js
medya-bilgi.js
const response = await fetch(
`https://api.sosyalkopru.com/v1/media/${mediaId}`,
{ headers: { 'Authorization': `Bearer ${process.env.SOSYALKOPRU_API_KEY}` } }
)
const { data } = await response.json()
console.log(`${data.type}: ${data.url}`)
console.log(`Boyut: ${(data.size / 1024 / 1024).toFixed(1)} MB`)
console.log(`Kullanım sayısı: ${data.usageCount} gönderide`)Başarılı Yanıt
{
"success": true,
"data": {
"id": "media_01HZGK9P3QABC",
"url": "https://cdn.sosyalkopru.com/media/api-img/.../urun.jpg",
"type": "IMAGE",
"size": 524288,
"mimeType": "image/jpeg",
"filename": "urun.jpg",
"altText": "Ürün fotoğrafı",
"description": null,
"width": 1080,
"height": 1080,
"duration": null,
"usageCount": 3,
"createdAt": "2025-06-10T12:00:00.000Z"
},
"meta": { "requestId": "req_01XYZ", "timestamp": "...", "version": "1" }
}Medya Sil
DELETE/v1/media/{id}
Dosyayı CDN ve veritabanından kalıcı olarak siler.
Aktif gönderilerde kullanılan medya dosyaları silinemez (409 Conflict). Önce ilgili gönderileri iptal edin veya silin.
Kod Örnekleri
Node.js
medya-sil.js
const response = await fetch(
`https://api.sosyalkopru.com/v1/media/${mediaId}`,
{
method: 'DELETE',
headers: { 'Authorization': `Bearer ${process.env.SOSYALKOPRU_API_KEY}` },
}
)
if (response.status === 409) {
console.error('Bu medya aktif gönderilerde kullanılıyor, önce gönderileri silin.')
process.exit(1)
}
const { data } = await response.json()
console.log('Silindi:', data.id)Başarılı Yanıt
{
"success": true,
"data": {
"id": "media_01HZGK9P3QABC",
"deleted": true
},
"meta": { "requestId": "req_01XYZ", "timestamp": "...", "version": "1" }
}Last updated on