Skip to Content
API ReferansıPostlar

Postlar

Sosyal medya gönderilerinizi oluşturun, planlayın, taslak olarak saklayın ve tüm platformlarda yayınlayın. Platform bazlı içerik özelleştirmesi, toplu işlemler ve anlık yayın desteği sunar.


Gönderi Oluştur / Planla

POST/v1/posts

Yeni bir gönderi oluşturur. scheduling.publishAt verilirse belirlenen zamanda yayınlanır. Verilmezse isDraft: true ile taslak, isDraft: false ile anlık yayın başlar.

İstek Gövdesi

AlanTipZorunluVarsayılanAçıklama
platformsstring[]EvetPlatform listesi: instagram facebook linkedin tiktok twitter youtube
accountIdsstring[]EvetGönderi yapılacak hesap ID’leri
content.textstringEvetGönderi metni (maks. 63.206 karakter)
content.mediaobject[]HayırMedya eklentileri
content.media[].mediaIdstringEvet*/media/upload ile alınan medya ID’si
content.media[].orderintegerHayır0Gösterim sırası
content.platformOverridesobjectHayırPlatform bazlı içerik özelleştirmeleri (bkz. aşağı)
scheduling.publishAtstringHayırYayın zamanı — ISO 8601
scheduling.timezonestringHayırEurope/IstanbulZaman dilimi
titlestringHayırİç başlık (maks. 255 karakter, dashboardda görünür)
tagsstring[]Hayır[]İç etiketler (filtreleme için)
isDraftbooleanHayırfalsetrue ise taslak olarak kaydeder, yayınlamaz

Platform Özelleştirmeleri (content.platformOverrides)

Her platform için farklı metin veya medya seti belirtebilirsiniz:

"platformOverrides": { "instagram": { "text": "Instagram'a özel metin #instagram", "media": [{ "mediaId": "media_01XYZ", "order": 0 }] }, "linkedin": { "text": "LinkedIn için daha profesyonel bir metin." } }

Kod Örnekleri

post-olustur.js
const response = 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', 'linkedin'], accountIds: ['acc_01HZGK9P3QXYZ'], title: 'Ürün Lansmanı - Haziran 2025', tags: ['lansman', 'instagram'], content: { text: 'Yeni ürünümüzü tanıtmaktan mutluluk duyuyoruz! 🚀 #sosyalkopru', platformOverrides: { linkedin: { text: 'Yeni ürünümüzü resmi olarak tanıtmaktan büyük memnuniyet duyuyoruz.', }, }, }, scheduling: { publishAt: '2025-06-15T10:00:00Z', timezone: 'Europe/Istanbul', }, }), }) const { data } = await response.json() console.log('Gönderi planlandı:', data.id, '|', data.status)

Başarılı Yanıtlar

Planlı gönderi (201 Created):

{ "success": true, "data": { "id": "post_01HZGK9P3QABC", "status": "SCHEDULED", "title": "Ürün Lansmanı - Haziran 2025", "tags": ["lansman"], "scheduledAt": "2025-06-15T07:00:00.000Z", "createdAt": "2025-06-10T12:00:00.000Z" }, "meta": { "requestId": "req_01XYZ", "timestamp": "...", "version": "1" } }

Anlık yayınpublishing durumunda BullMQ kuyruğuna eklenir (201 Created):

{ "success": true, "data": { "id": "post_01HZGK9P3QABC", "status": "publishing", "message": "Gönderi yayın kuyruğuna eklendi.", "createdAt": "2025-06-10T12:00:00.000Z" }, "meta": { "requestId": "req_01XYZ", "timestamp": "...", "version": "1" } }

Taslak (isDraft: true, 201 Created):

{ "success": true, "data": { "id": "post_01HZGK9P3QABC", "status": "DRAFT", "createdAt": "2025-06-10T12:00:00.000Z" }, "meta": { "requestId": "req_01XYZ", "timestamp": "...", "version": "1" } }

Anlık yayın isteklerinde gönderi hemen PUBLISHED dönmez — yayın işlemi asenkron olarak BullMQ worker tarafından işlenir. Durumu takip etmek için GET /posts/{id}/status endpoint’ini polling ile kullanın.


Gönderileri Listele

GET/v1/posts

Kullanıcının gönderilerini sayfalandırılmış olarak döner.

Query Parametreleri

ParametreTipVarsayılanAçıklama
pageinteger1Sayfa numarası
perPageinteger20Sayfa başına kayıt (maks: 100)
statusstringdraft scheduled publishing published failed cancelled
platformstringPlatform filtresi
workspaceIdstringWorkspace filtresi
startDatestringISO 8601 başlangıç
endDatestringISO 8601 bitiş
tagstringİç etiket filtresi

Kod Örnekleri

post-listele.js
const params = new URLSearchParams({ page: '1', perPage: '20', status: 'scheduled', }) const response = await fetch( `https://api.sosyalkopru.com/v1/posts?${params}`, { headers: { 'Authorization': `Bearer ${process.env.SOSYALKOPRU_API_KEY}` } } ) const { data, pagination } = await response.json() console.log(`${pagination.total} gönderi — ${pagination.totalPages} sayfa`) data.forEach(p => console.log(p.id, p.status, p.scheduledAt ?? ''))

Başarılı Yanıt

{ "success": true, "data": [ { "id": "post_01HZGK9P3QABC", "title": "Ürün Lansmanı", "tags": ["lansman"], "content": { "text": "Gönderi metni..." }, "status": "SCHEDULED", "scheduledAt": "2025-06-15T07:00:00.000Z", "publishedAt": null, "platforms": ["instagram", "linkedin"], "createdAt": "2025-06-10T12:00:00.000Z" } ], "meta": { "requestId": "req_01XYZ", "timestamp": "...", "version": "1" }, "pagination": { "page": 1, "perPage": 20, "total": 47, "totalPages": 3, "hasNextPage": true, "hasPrevPage": false } }

Gönderi Detayı

GET/v1/posts/{id}

Tek bir gönderinin tüm detaylarını, platform bazlı durumları ve metrikleriyle döner.

Path Parametresi

ParametreAçıklama
idGönderi ID’si (post_...)

Kod Örnekleri

post-detay.js
const response = await fetch( `https://api.sosyalkopru.com/v1/posts/${postId}`, { headers: { 'Authorization': `Bearer ${process.env.SOSYALKOPRU_API_KEY}` } } ) const { data } = await response.json() console.log('Durum:', data.status) data.platforms.forEach(p => { console.log(` [${p.platform}] ${p.status}`) if (p.metrics) { console.log(` Beğeni: ${p.metrics.likes} | Yorum: ${p.metrics.comments}`) } })

Başarılı Yanıt

{ "success": true, "data": { "id": "post_01HZGK9P3QABC", "title": "Ürün Lansmanı", "tags": ["lansman"], "content": { "text": "Gönderi metni...", "media": [] }, "status": "PUBLISHED", "scheduledAt": null, "publishedAt": "2025-06-10T12:00:00.000Z", "platforms": [ { "platform": "instagram", "username": "@sosyalkopru", "status": "PUBLISHED", "platformPostId": "17862...", "platformPostUrl": "https://instagram.com/p/ABC123", "errorMessage": null, "metrics": { "likes": 142, "comments": 18, "shares": 5, "reach": 2300, "impressions": 3100 } } ], "createdAt": "2025-06-10T11:55:00.000Z", "updatedAt": "2025-06-10T12:00:05.000Z" }, "meta": { "requestId": "req_01XYZ", "timestamp": "...", "version": "1" } }

Gönderi Güncelle

PATCH/v1/posts/{id}

Yalnızca SCHEDULED veya DRAFT statüsündeki gönderileri güncelleyebilirsiniz.

İstek Gövdesi

AlanTipAçıklama
content.textstringYeni gönderi metni
content.platformOverridesobjectPlatform bazlı özelleştirmeler
scheduling.publishAtstringYeni yayın zamanı (ISO 8601)
titlestringYeni iç başlık
tagsstring[]Yeni etiket listesi
isDraftbooleanfalse ile taslağı yayına alabilirsiniz

Kod Örnekleri

post-guncelle.js
const response = await fetch( `https://api.sosyalkopru.com/v1/posts/${postId}`, { method: 'PATCH', headers: { 'Authorization': `Bearer ${process.env.SOSYALKOPRU_API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ content: { text: 'Güncellenmiş gönderi metni #sosyalkopru' }, scheduling: { publishAt: '2025-06-16T10:00:00Z' }, tags: ['lansman', 'guncellendi'], }), } ) const { data } = await response.json() console.log('Güncellendi:', data.scheduledAt)

PUBLISHED, PUBLISHING veya FAILED durumundaki gönderiler güncellenemez — 422 Unprocessable Entity hatası döner.


Gönderi İptal Et / Sil

DELETE/v1/posts/{id}

Planlanmış veya taslak bir gönderiyi iptal eder. PUBLISHED veya PUBLISHING durumundaki gönderiler silinemez.

Kod Örnekleri

post-iptal.js
const response = await fetch( `https://api.sosyalkopru.com/v1/posts/${postId}`, { method: 'DELETE', headers: { 'Authorization': `Bearer ${process.env.SOSYALKOPRU_API_KEY}` }, } ) const { data } = await response.json() console.log('İptal edildi:', data.id)

Yayın Durumu

GET/v1/posts/{id}/status

Bir gönderinin platform bazlı anlık yayın durumunu ve BullMQ iş bilgisini döner.

Kod Örnekleri

post-durum.js
const poll = async (postId) => { while (true) { const response = await fetch( `https://api.sosyalkopru.com/v1/posts/${postId}/status`, { headers: { 'Authorization': `Bearer ${process.env.SOSYALKOPRU_API_KEY}` } } ) const { data } = await response.json() if (['PUBLISHED', 'PARTIAL', 'FAILED'].includes(data.overallStatus)) { console.log('Tamamlandı:', data.overallStatus) return data } console.log('Bekleniyor:', data.overallStatus, '— 3 saniye sonra tekrar...') await new Promise(r => setTimeout(r, 3000)) } } await poll('post_01HZGK9P3QABC')

Başarılı Yanıt

{ "success": true, "data": { "postId": "post_01HZGK9P3QABC", "overallStatus": "PARTIAL", "job": { "id": "job_01XYZ", "state": "completed", "progress": 100, "attemptsMade": 1 }, "platforms": [ { "platform": "instagram", "username": "@sosyalkopru", "status": "PUBLISHED", "publishedAt": "2025-06-10T12:00:05.000Z", "platformPostId": "17862...", "platformPostUrl": "https://instagram.com/p/ABC123", "errorMessage": null }, { "platform": "facebook", "username": "Sosyal Köprü", "status": "FAILED", "publishedAt": null, "platformPostId": null, "platformPostUrl": null, "errorMessage": "Oturum süresi doldu, hesabı yeniden bağlayın" } ] }, "meta": { "requestId": "req_01XYZ", "timestamp": "...", "version": "1" } }

Gönderi Kopyala

POST/v1/posts/{id}/duplicate

Bir gönderiyi taslak olarak kopyalar. Tüm içerik, medya ve platform ayarları kopyalanır; scheduledAt temizlenir.

Kod Örnekleri

post-kopyala.js
const response = await fetch( `https://api.sosyalkopru.com/v1/posts/${postId}/duplicate`, { method: 'POST', headers: { 'Authorization': `Bearer ${process.env.SOSYALKOPRU_API_KEY}` }, } ) const { data } = await response.json() console.log('Kopyalandı. Yeni taslak ID:', data.id)

Başarılı Yanıt

{ "success": true, "data": { "id": "post_01HZGK9P3QNEW", "status": "DRAFT", "originalPostId": "post_01HZGK9P3QABC", "createdAt": "2025-06-10T13:00:00.000Z" }, "meta": { "requestId": "req_01XYZ", "timestamp": "...", "version": "1" } }

Toplu İşlemler

POST/v1/posts/bulk

Birden fazla gönderi üzerinde aynı anda delete, cancel veya reschedule işlemi yapar. Tek seferde en fazla 50 gönderi işlenebilir.

İstek Gövdesi

AlanTipZorunluAçıklama
actionstringEvetdelete cancel reschedule
postIdsstring[]Evetİşlenecek gönderi ID’leri (maks. 50)
publishAtstringreschedule içinYeni yayın zamanı (ISO 8601)

Kod Örnekleri

post-bulk.js
// Toplu iptal const cancelResponse = await fetch('https://api.sosyalkopru.com/v1/posts/bulk', { method: 'POST', headers: { 'Authorization': `Bearer ${process.env.SOSYALKOPRU_API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ action: 'cancel', postIds: [ 'post_01HZGK9P3QABC', 'post_01HZGK9P3QDEF', 'post_01HZGK9P3QGHI', ], }), }) const { data } = await cancelResponse.json() console.log(`Başarılı: ${data.succeeded} | Başarısız: ${data.failed}`) // Toplu yeniden planlama const rescheduleResponse = await fetch('https://api.sosyalkopru.com/v1/posts/bulk', { method: 'POST', headers: { 'Authorization': `Bearer ${process.env.SOSYALKOPRU_API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ action: 'reschedule', postIds: ['post_01HZGK9P3QABC', 'post_01HZGK9P3QDEF'], publishAt: '2025-06-20T09:00:00Z', }), })

Başarılı Yanıt

{ "success": true, "data": { "action": "cancel", "processed": 3, "succeeded": 2, "failed": 1, "errors": [ { "id": "post_01HZGK9P3QGHI", "reason": "PUBLISHED gönderiler iptal edilemez" } ] }, "meta": { "requestId": "req_01XYZ", "timestamp": "...", "version": "1" } }

Gönderi Statüleri

StatüAçıklama
DRAFTTaslak — henüz planlanmamış
SCHEDULEDGelecek bir zamana planlandı
PUBLISHINGBullMQ kuyruğunda işleniyor
PUBLISHEDTüm platformlarda başarıyla yayınlandı
PARTIALBazı platformlarda başarılı, bazılarında başarısız
FAILEDTüm platformlarda başarısız
CANCELLEDİptal edildi

Desteklenen Platformlar

DeğerPlatform
instagramInstagram
facebookFacebook
linkedinLinkedIn
tiktokTikTok
twitterTwitter / X
youtubeYouTube
Last updated on