Social
client.social ile markaları yönetin, sosyal hesapları bağlayın ve Facebook, Instagram, X, LinkedIn ve Pinterest'te gönderi yayımlayın veya planlayın.
Tüm Social metotları client.social altında, dört ad alanı ve bir üst düzey çağrı olarak gruplandırılmıştır:
Kimlikler, platformlar ve durumlar
Marka, gönderi ve bağlantı kimlikleri düz UUID dizeleridir. Konum kimliklerinden farklı olarak hiçbir zaman Base64 ile kodlanmazlar ve SDK bunları dönüştürmez.
Platformlar, büyük harfli enum değerleri olan FACEBOOK, INSTAGRAM, TWITTER (X), LINKEDIN ve PINTEREST ile belirtilir. Gönderi durumları DRAFT, PENDING, SCHEDULED, PUBLISHED, FAILED, ARCHIVED ve REJECTED; kanal başına durumlar ise SCHEDULED, SUCCESS, ERROR ve ARCHIVED şeklindedir.
Her yazma işlemi bir success bayrağı döndürür
Social yazma işlemleri, doğrulama hatalarını bir 200 yanıtının içinde, nedeni error alanında olacak şekilde success: false olarak bildirir. SDK, aktarım hatalarında ve tanıdığı hata yanıtı gövdelerinde istisna fırlatır, ancak success değerini kendiniz kontrol etmeyi alışkanlık haline getirmeniz önerilir:
result = client.social.brands.create(profile_name="Jenny Home", timezone=tz)if not result.success: raise RuntimeError(result.error.message)Yayımlama asenkron olarak gerçekleşir
action="PUBLISH", gönderiyi kabul eder ve kimliğini döndürür. social.posts.retrieve() çağrısını düzenli aralıklarla tekrarlayın ve kanal başına status, liveLink ve error değerleri için connectedChannels[] alanını okuyun; aynı çağrıda bir gönderi bir platformda başarıyla yayımlanırken başka bir platformda başarısız olabilir.
social.brands.create
Bir marka oluşturun. Yalnızca profile_name ve timezone zorunludur.
client.social.brands.create( *, profile_name: str, timezone: dict, business_intent: str | None = None, categories: list[str] | None = None, site_url: str | None = None, logo: str | None = None, country_iso: str | None = None, bio: str | None = None, brand_hashtags: list[str] | None = None, competitor_hashtags: list[str] | None = None, content_preferred_language: str | None = None,) -> APIObjectresult = client.social.brands.create( profile_name="Jenny Home", timezone={ "label": "(GMT-05:00) Eastern Time", "tzCode": "America/New_York", "name": "Eastern Standard Time", "utc": "-05:00", }, business_intent="A family-run home furnishings store selling handmade furniture.", categories=["Furniture Store"], site_url="https://jennyhome.example",)brand_id = result.socialProfile.id # a plain UUID stringAPI planlarında marka sayısı sınırsızdır, dolayısıyla bu işlem hiçbir zaman bir sınır nedeniyle başarısız olmaz. Kullanımı ölçülen öğe bağlantılardır; social.limits() kontrolünü marka oluşturmadan önce değil, bağlantı URL'si oluşturmadan önce yapın.
social.brands.list
Markaları ofset tabanlı sayfalama ile listeleyin. Bir filtre gönderdiğinizde filtrenin içinde statuses bulunması zorunludur.
client.social.brands.list( *, statuses: list[str] | None = None, profile_name: str | None = None, page: int | None = None, size: int | None = None,) -> APIObjectresult = client.social.brands.list(page=1, size=25)for brand in result.profiles: print(brand.id, brand.profileName, brand.connectedChannelCount)print(result.pageInfo.total, result.pageInfo.hasNextPage)social.brands.retrieve
Bir markayı UUID'si ile alın.
client.social.brands.retrieve(brand_id: str) -> APIObjectbrand = client.social.brands.retrieve("6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902")print(brand.profileName, brand.timezone.tzCode)social.brands.update
Bir markayı güncelleyin. Yalnızca profile_id zorunludur; sadece değiştirdiğiniz alanları gönderin.
client.social.brands.update( profile_id: str, *, profile_name: str | None = None, timezone: dict | None = None, business_intent: str | None = None, categories: list[str] | None = None, site_url: str | None = None, logo: str | None = None, country_iso: str | None = None, bio: str | None = None, brand_hashtags: list[str] | None = None, competitor_hashtags: list[str] | None = None, content_preferred_language: str | None = None,) -> APIObjectcategories, brand_hashtags ve competitor_hashtags gönderildiğinde kayıtlı listenin yerine geçer; [] geçirilmesi listeyi temizler.
client.social.brands.update( "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", profile_name="Jenny Home & Co.",)social.brands.archive
Bir markayı ve bağlantılarını arşivleyin. Markanın oluşturulmasından bu yana en az 90 gün geçmiş olmalıdır.
client.social.brands.archive(social_profile_id: str) -> APIObjectresult = client.social.brands.archive("6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902")print(result.status) # ARCHIVED or TENURE_NOT_METOluşturulmasından bu yana 90 gün geçmemiş bir marka için success: False ve status: "TENURE_NOT_MET" döndürülür ve hiçbir şey değişmez. Gerekli süre dolduğunda arşivleme hemen gerçekleşir: marka ve ona bağlı tüm bağlantılar aynı çağrıda arşivlenir ve yayımlama işlemleri anında durur, ancak bağlantı kapasiteleri, tıpkı elle bağlantı kesme işleminde olduğu gibi, faturalandırma döneminin sonuna kadar kullanımda kalır.
social.connections.link
Son kullanıcıyı bir platformu bir markaya bağlama adımlarından geçiren, barındırılan bir sayfa için kısa ömürlü bir URL oluşturun. Kullanıcıyı url adresine yönlendirin.
client.social.connections.link( brand_id: str, *, channel: str, redirect_url: str, error_url: str | None = None, state: str | None = None,) -> APIObjectlink = client.social.connections.link( "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", channel="INSTAGRAM", redirect_url="https://app.example.com/social/connected", error_url="https://app.example.com/social/connect-failed", state="sess_9f2c1e64",)print(link.url, link.expiresIn)Kullanıcı, status, brandId, platform, sizin state değeriniz ve işlem başarılıysa connectedAccountId eklenmiş olarak redirect_url adresine döner. Bağlantı kısa bir süre sonra oluşturulur; bu nedenle ilk boş okuma sonucunu başarısızlık olarak değerlendirmek yerine birkaç saniye boyunca social.connections.list() çağrısını düzenli aralıklarla tekrarlayın. Instagram, bir Facebook Sayfasına bağlı İşletme veya İçerik Üretici hesabı gerektirir.
social.connections.list
Bir markaya bağlı sosyal medya hesaplarını listeleyin.
client.social.connections.list(brand_id: str) -> APIObjectresult = client.social.connections.list("6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902")for channel in result.socialConnected: print(channel.id, channel.platform, channel.displayName)print(result.channelCount)channel.id, diğer tüm çağrıların istediği bağlantı UUID'sidir; referenceId ise platformun kendi hesap tanımlayıcısıdır ve hiçbir zaman girdi olarak kabul edilmez.
social.connections.disconnect
Bir bağlantıyı kaldırın. Bu işlem geri alınamaz: bağlantıyı geri yüklemek için yeni bir social.connections.link() gerekir.
client.social.connections.disconnect(social_profile_connected_channel_id: str) -> APIObjectclient.social.connections.disconnect("b81d5b3c-4a90-4f6a-9c11-71e0dd2fa4a7")Kanalı hedefleyen zamanlanmış gönderiler iptal edilmez; yayımlama zamanı geldiğinde SY95045 ile başarısız olurlar. Önce bunları social.posts.cancel() ile iptal edin.
social.posts.create
Bir marka için bağlı kanallarında yayımlanacak tek bir gönderi oluşturun.
client.social.posts.create( *, social_profile_id: str, name: str, platforms: list[str], content: str, action: str, media_urls: list[str] | None = None, video_urls: list[str] | None = None, link: str | None = None, scheduled_at: str | None = None, schedule_date: str | None = None, schedule_time: str | None = None, connected_channel_ids: list[str] | None = None, client_reference: str | None = None,) -> APIObjectaction="SCHEDULE" için tam olarak bir zamanlama biçimi gerekir: scheduled_at veya schedule_date + schedule_time. Her ikisinin gönderilmesi SY95046 ile reddedilir.
result = client.social.posts.create( social_profile_id="6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", name="Autumn collection launch", platforms=["INSTAGRAM", "FACEBOOK"], content="Our autumn collection lands today. Solid oak, hand-finished.", media_urls=["https://cdn.example.com/social/autumn.jpg"], action="SCHEDULE", schedule_date="2026-10-02", schedule_time="09:30",)print(result.success, result.socialPostId)social.posts.retrieve
Bir gönderiyi kanal başına yayımlanma durumuyla birlikte alın. Oluşturma işleminden sonra bu çağrıyı düzenli aralıklarla tekrarlayın.
client.social.posts.retrieve(post_id: str) -> APIObjectpost = client.social.posts.retrieve("c47a1e58-2b93-4f10-a6d7-58e0c9b12345")print(post.status)for channel in post.connectedChannels: print(channel.platform, channel.status, channel.liveLink, channel.error)social.posts.list
Bir markanın gönderilerini filtrelerle ve ofset tabanlı sayfalama ile listeleyin.
client.social.posts.list( brand_id: str, *, filters: dict | None = None, page: int | None = None, size: int | None = None, fetch_post_content: bool | None = None,) -> APIObjectfilters; name, platforms, status, start_date, end_date, social_connected_channel_id, approval_state, view_mode ve filter_by_user kabul eder.
result = client.social.posts.list( "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", filters={"status": ["SCHEDULED"], "startDate": "2026-10-01", "endDate": "2026-10-31"}, page=1, size=50,)for post in result.socialPosts: print(post.socialPostId, post.name, post.status)print(result.pageInfo.total)social.posts.cancel
Zamanlanmış veya taslak durumundaki bir gönderiyi hiç yayımlanmaması için iptal edin.
client.social.posts.cancel(social_post_id: str) -> APIObjectclient.social.posts.cancel("c47a1e58-2b93-4f10-a6d7-58e0c9b12345")Önceden yayımlanmış gönderiler iptal edilemez ve hiçbir platformdan kaldırılmaz; çağrı bunlar için success: False döndürür.
social.posts.insights
Tek bir kanalda yayımlanmış tek bir gönderinin etkileşimleri ve yorumları. Her iki alan da platformun kendi yanıt gövdesini içeren JSON dizeleri olarak döndürülür.
client.social.posts.insights( post_id: str, *, social_connected_channel_id: str,) -> APIObjectimport json result = client.social.posts.insights( "c47a1e58-2b93-4f10-a6d7-58e0c9b12345", social_connected_channel_id="b81d5b3c-4a90-4f6a-9c11-71e0dd2fa4a7",)insights = json.loads(result.insights)comments = json.loads(result.comments)print(insights.get("impressions"), len(comments))İçlerindeki anahtarlar platforma aittir ve platformdan platforma değişir; bunları okurken beklenmedik değerleri veya eksik anahtarları hesaba katın.
social.bulk.create
Tek istekte en fazla 500 gönderiyi doğrulayın ve kuyruğa ekleyin. Satırlar farklı markaları hedefleyebilir.
client.social.bulk.create( posts: list[dict], *, name: str | None = None,) -> APIObjectHer satır, camelCase içinde social.posts.create ile aynı alanları alır. Herhangi bir satır geçersizse hiçbir şey oluşturulmaz: success değeri False olur, SY95050, error içinde döndürülür ve job.results[], her hatalı satırı 0 tabanlı index değeri ve clientReference ile belirtir.
result = client.social.bulk.create([ { "socialProfileId": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", "name": "Autumn week 1", "platforms": ["INSTAGRAM", "FACEBOOK"], "content": "Week one of the autumn collection.", "mediaUrls": ["https://cdn.example.com/social/autumn-w1.jpg"], "action": "SCHEDULE", "scheduleDate": "2026-10-02", "scheduleTime": "09:30", "clientReference": "campaign-4471-slot-01", },])if not result.success: for row in result.job.results: print(row.index, row.clientReference, row.errors)else: job_id = result.job.idsocial.bulk.retrieve
Toplu işin durumunu, son durumlardan birine ulaşana kadar düzenli aralıklarla sorgulayın.
client.social.bulk.retrieve(bulk_job_id: str) -> APIObjectjob = client.social.bulk.retrieve("9b3f18d0-7a26-4c51-8e94-1f0d5c6b7a82")print(job.status, job.processedCount, "/", job.totalCount)for row in job.results: print(row.clientReference, row.status, row.socialPostId)status değeri QUEUED, PROCESSING, COMPLETED, COMPLETED_WITH_ERRORS veya FAILED olur. Bir satırın CREATED durumuna ulaşması, gönderinin yayımlandığı değil, oluşturulduğu anlamına gelir: kanal başına sonucu almak için socialPostId değerini social.posts.retrieve() çağrısına iletin.
social.limits
Tek çağrıda bağlantı sınırı ve mevcut kullanım.
client.social.limits() -> APIObjectlimits = client.social.limits()print(limits.maxConnections, limits.usage.connections) # pool vs usedprint(limits.brands) # None — brands are unlimitedprint(limits.usage.brands) # brands that exist, uncappedBağlantılar, marka başına ayrılan bir kota değil, hesap genelinde ortak kullanılan bir kotadır: Social Launch planında 20, Social Growth planında 125 bağlantı ve aylık 25 $ tutarındaki her bağlantı paketi için 5 ek bağlantı. Kullanıcıya SY95042 göstermek yerine bir yükseltme seçeneği sunabilmek için bağlantı URL'si oluşturmadan önce bu kotayı kontrol edin. Her API planında limits.brands değeri None olur.
Ayrıca bakınız
- Planlar ve ek paketler: kademeler, ek paket fiyatları, bağlantı havuzu ve 90 günlük abonelik süresi kuralı
- Social REST referansı: bu metotların sarmaladığı ham endpoint'ler
- Gönderiler: konum düzeyindeki ürün, farklı bir abonelik
- Hata işleme: tür tanımlı istisnalar ve
successbayrağı