Social

Semua endpoint Social: merek, tautan koneksi terhosting, publikasi tunggal dan massal, penjadwalan, wawasan, serta batas koneksi untuk semuanya.

Social API memublikasikan postingan ke Facebook, Instagram, X, LinkedIn, dan Pinterest. Seluruh model ini bertumpu pada dua objek. Merek adalah identitas yang Anda gunakan untuk memublikasikan postingan: nama, zona waktu, dan akun media sosial yang terhubung dengannya. Koneksi adalah satu akun media sosial yang telah diotorisasi pada satu merek di satu platform. Jumlah merek tidak dibatasi dalam paket API dan tidak dikenai biaya. Paket menghitung penggunaan berdasarkan jumlah koneksi, jadi batas koneksi adalah kendala yang perlu Anda perhitungkan dalam desain.

Menghubungkan akun tidak dapat dilakukan dari server Anda. Pengguna akhir harus memberikan otorisasi di platform tersebut, jadi Anda meminta tautan yang dihosting lalu mengarahkan mereka ke tautan itu. Publikasi bersifat asinkron: setiap panggilan pembuatan langsung mengembalikan respons begitu postingan diterima, dan Anda melakukan polling untuk mendapatkan hasil per kanal.

Sekilas tentang endpoint

MetodePathFungsiReferensi
POST/social/brandsMembuat merek.Membuat merek
GET/social/brandsSatu halaman daftar merek pada akun.Mencantumkan merek
GET/social/brands/{brandId}Satu merek beserta detail lengkapnya.Mendapatkan merek
POST/social/brands/updateMengubah field pada merek yang sudah ada.Memperbarui merek
POST/social/brands/archiveMengarsipkan merek beserta koneksinya.Mengarsipkan merek
POST/social/brands/{brandId}/connections/linkURL yang dihosting untuk menghubungkan satu platform.Mendapatkan tautan koneksi
GET/social/brands/{brandId}/connectionsAkun yang terhubung ke suatu merek.Mencantumkan koneksi suatu merek
POST/social/connections/disconnectMenghapus satu koneksi.Memutuskan koneksi
POST/social/postsMembuat draf, menjadwalkan, atau memublikasikan satu postingan.Membuat postingan media sosial
GET/social/posts/{postId}Satu postingan beserta status publikasi per kanal.Mendapatkan postingan media sosial
GET/social/brands/{brandId}/postsSatu halaman daftar postingan suatu merek.Mencantumkan postingan suatu merek
POST/social/posts/cancelMembatalkan postingan yang belum dipublikasikan.Membatalkan postingan terjadwal
GET/social/posts/{postId}/insightsJumlah interaksi dan komentar untuk satu kanal.Mendapatkan insight dan komentar postingan
POST/social/bulk-postsHingga 500 postingan dalam satu permintaan.Membuat postingan secara massal
GET/social/bulk-posts/{bulkJobId}Status tugas massal dan hasil per baris.Mendapatkan tugas postingan massal
GET/social/limitsBatas koneksi dan penggunaan yang dihitung terhadap batas tersebut.Mendapatkan batas dan penggunaan paket Social

Nilai yang akan Anda gunakan di seluruh endpoint

FieldNilai yang diterima
platforms[] dan channelFACEBOOK, INSTAGRAM, TWITTER (X), LINKEDIN, PINTEREST
actionDRAFT, SCHEDULE, PUBLISH

Nilai platform berupa nama enum dalam huruf kapital. Pengiriman "instagram" akan ditolak. TWITTER adalah X; nama enum tidak berubah ketika nama produknya berubah.

Membuat merek

POST /social/brands

profileName dan timezone wajib diisi. Zona waktu berupa objek, dan tzCode adalah field yang menentukan: field ini berisi pengenal IANA yang digunakan untuk menafsirkan setiap scheduleDate dan scheduleTime pada postingan merek ini. Tiga key lainnya adalah label tampilan.

Shell
curl -X POST https://listingsapi.com/api/v4/social/brands \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H "Content-Type: application/json" \  -d '{    "input": {      "profileName": "Jenny Home",      "timezone": {        "label": "(GMT-05:00) Eastern Time",        "tzCode": "America/New_York",        "name": "Eastern Standard Time",        "utc": "-05:00"      },      "categories": ["Furniture Store"],      "siteUrl": "https://jennyhome.example"    }  }'

Simpan ID merek yang dikembalikan. ID ini merupakan token path brandId pada setiap endpoint merek lainnya, dan field body socialProfileId saat Anda memublikasikan postingan.

Mencantumkan dan membaca merek

GET /social/brands mengembalikan satu halaman daftar merek. GET /social/brands/{brandId} mengembalikan satu merek beserta detail lengkapnya.

Shell
curl -H "Authorization: API $LISTINGSAPI_KEY" \  "https://listingsapi.com/api/v4/social/brands?page=1&size=25"

ID yang menghasilkan SY95043 berarti merek tersebut tidak ada pada akun ini atau sudah diarsipkan.

Memperbarui merek

POST /social/brands/update

ID merek ditempatkan dalam body sebagai input.profileId, bukan di path. Kirim hanya field yang Anda ubah; field yang Anda tidak sertakan tetap mempertahankan nilai saat ini.

Shell
curl -X POST https://listingsapi.com/api/v4/social/brands/update \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H "Content-Type: application/json" \  -d '{"input": {"profileId": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", "bio": "Handmade furniture for real homes."}}'

Mengarsipkan merek

POST /social/brands/archive

Merek harus sudah ada selama 90 hari sebelum dapat diarsipkan. Jika belum mencapai usia tersebut, panggilan ditolak dengan SY95051 dan tidak ada perubahan apa pun. Setelah merek cukup lama dibuat, pengarsipan langsung berlaku dan sekaligus mengarsipkan semua koneksi pada merek tersebut.

Koneksi tersebut langsung berhenti menerbitkan, tetapi slotnya tetap dihitung hingga akhir periode penagihan, sama persis seperti pemutusan koneksi secara manual. Pengarsipan bukan cara untuk mengosongkan kapasitas hari ini.

Shell
curl -X POST https://listingsapi.com/api/v4/social/brands/archive \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H "Content-Type: application/json" \  -d '{"input": {"socialProfileId": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902"}}'

POST /social/brands/{brandId}/connections/link

Ini adalah satu-satunya cara untuk menambahkan koneksi. Respons berisi url yang dihosting dan berlaku selama expiresIn detik. Arahkan pengguna akhir ke tautan tersebut, lalu mereka memberikan otorisasi di platform dan diarahkan kembali ke redirectUrl Anda dengan hasilnya di query string. Sertakan errorUrl untuk membedakan pembatalan dari keberhasilan, dan state untuk membawa nilai korelasi Anda sendiri sepanjang alur pengalihan pergi dan kembali.

Ingat bahwa body ini memiliki struktur datar, tanpa pembungkus input.

Shell
curl -X POST https://listingsapi.com/api/v4/social/brands/6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902/connections/link \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H "Content-Type: application/json" \  -d '{    "channel": "INSTAGRAM",    "redirectUrl": "https://app.example.com/social/connected",    "errorUrl": "https://app.example.com/social/failed"  }'
JSON
{  "data": {    "connectSocialAccount": {      "status": "success",      "url": "https://social.listingsapi.com/connect/start?token=bfac8e06-8d72-4810-9c50-ae7ee12a7b52",      "expiresIn": 900    }  }}

Periksa status sebelum mengarahkan pengguna. Respons failed tidak mengembalikan url dan menempatkan alasannya di title, paling sering karena batas jumlah koneksi (SY95042) atau platform yang tidak dimiliki akun (SY95044).

Menampilkan daftar koneksi merek

GET /social/brands/{brandId}/connections

Mengembalikan akun yang terhubung ke merek, masing-masing dengan id yang Anda perlukan untuk menerbitkan melalui koneksi tertentu atau memutuskan koneksi tersebut.

Shell
curl -H "Authorization: API $LISTINGSAPI_KEY" \  https://listingsapi.com/api/v4/social/brands/6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902/connections

Memutuskan koneksi

POST /social/connections/disconnect

Menggunakan id koneksi dari daftar di atas. Akun langsung berhenti menerbitkan, tetapi slot yang digunakannya tidak dikembalikan ke kumpulan slot yang tersedia hingga periode penagihan berakhir. Menghubungkan kembali akun yang sama ke merek yang sama dalam periode tersebut menggunakan kembali slot itu tanpa biaya; menghubungkannya ke merek yang berbeda menggunakan slot kedua.

Shell
curl -X POST https://listingsapi.com/api/v4/social/connections/disconnect \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H "Content-Type: application/json" \  -d '{"input": {"socialProfileConnectedChannelId": "b81d5b3c-4a90-4f6a-9c11-71e0dd2fa4a7"}}'

Menerbitkan postingan

POST /social/posts

Satu panggilan menerbitkan konten yang sama ke setiap platform dalam platforms. Setiap platform tersebut harus sudah memiliki koneksi pada merek, atau panggilan akan mengembalikan SY95045. Instagram dan Pinterest memerlukan setidaknya satu entri dalam mediaUrls.

Jadwalkan postingan dengan salah satu dari dua cara, jangan pernah menggunakan keduanya sekaligus. scheduledAt adalah timestamp ISO-8601 dengan offset. scheduleDate dan scheduleTime dikirim bersama dan ditafsirkan menurut zona waktu merek. Mengirim keduanya, atau jadwal di masa lalu, akan mengembalikan SY95046.

Shell
curl -X POST https://listingsapi.com/api/v4/social/posts \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H "Content-Type: application/json" \  -d '{    "input": {      "socialProfileId": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902",      "name": "Autumn collection launch",      "platforms": ["INSTAGRAM", "FACEBOOK"],      "content": "Our autumn collection lands today.",      "mediaUrls": ["https://cdn.example.com/social/autumn-collection.jpg"],      "action": "SCHEDULE",      "scheduleDate": "2026-10-02",      "scheduleTime": "09:30",      "clientReference": "campaign-4471-slot-01"    }  }'

Tetapkan clientReference ke pengenal Anda sendiri. Pengenal ini disimpan dan dikembalikan, sehingga Anda dapat mencocokkan postingan dengan catatan Anda tanpa menyimpan UUID.

Membaca satu postingan

GET /social/posts/{postId}

Inilah cara Anda mengetahui apakah penerbitan berhasil. status pada postingan itu sendiri merupakan ringkasan; hasil sebenarnya tersedia per kanal dalam connectedChannels, dengan setiap entri memuat status masing-masing, liveLink setelah platform menerimanya, serta reason atau error jika platform tidak menerimanya.

JSON
{  "connectedChannels": [    {      "platform": "INSTAGRAM",      "status": "SUCCESS",      "liveLink": "https://www.instagram.com/p/CxYz1234abc/",      "error": null    }  ]}

Lakukan polling pada endpoint ini setelah menerima PUBLISH. Satu kanal dapat gagal sementara kanal lainnya berhasil, jadi periksa setiap entri, bukan hanya status di tingkat teratas.

Cantumkan postingan merek

GET /social/brands/{brandId}/posts

Satu halaman postingan merek, dengan filter untuk mempersempit hasil berdasarkan status. Gunakan ini untuk melakukan rekonsiliasi secara massal alih-alih melakukan polling id satu per satu.

Shell
curl -H "Authorization: API $LISTINGSAPI_KEY" \  "https://listingsapi.com/api/v4/social/brands/6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902/posts?page=1&size=25"

Batalkan postingan terjadwal

POST /social/posts/cancel

Membatalkan postingan yang belum dipublikasikan. Postingan yang sudah tayang di suatu platform tidak dapat ditarik kembali melalui endpoint ini.

Shell
curl -X POST https://listingsapi.com/api/v4/social/posts/cancel \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H "Content-Type: application/json" \  -d '{"input": {"socialPostId": "a3f81c62-9d4e-4a17-b5c0-2e7f6d8a9b10"}}'

Baca wawasan dan komentar

GET /social/posts/{postId}/insights

Jumlah interaksi dan komentar untuk satu postingan di satu kanal. Kanal wajib ditentukan, karena postingan yang dipublikasikan ke tiga platform memiliki tiga kumpulan angka yang terpisah.

Shell
curl -H "Authorization: API $LISTINGSAPI_KEY" \  "https://listingsapi.com/api/v4/social/posts/a3f81c62-9d4e-4a17-b5c0-2e7f6d8a9b10/insights?socialConnectedChannelId=b81d5b3c-4a90-4f6a-9c11-71e0dd2fa4a7"

Buat postingan secara massal

POST /social/bulk-posts

Menerima 1 hingga 500 baris dalam input.posts. Setiap baris adalah objek yang sama dengan yang diterima POST /social/posts sebagai input, dan baris-baris tersebut dapat menargetkan merek yang berbeda dalam permintaan yang sama.

Seluruh batch divalidasi sebelum apa pun dibuat. Jika ada baris yang gagal, Anda mendapatkan SY95050 dengan kesalahan per baris dan tidak ada yang dimasukkan ke antrean, jadi perbaiki dan kirim ulang. Lebih dari 500 baris akan mengembalikan SY95048, dan dalam hal ini pun tidak ada yang dibuat. Batch yang valid mengembalikan tugas yang dapat dipantau melalui polling.

Shell
curl -X POST https://listingsapi.com/api/v4/social/bulk-posts \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H "Content-Type: application/json" \  -d '{    "input": {      "name": "October launch batch",      "posts": [        {          "socialProfileId": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902",          "name": "Launch day",          "platforms": ["FACEBOOK"],          "content": "Doors open at nine.",          "action": "SCHEDULE",          "scheduleDate": "2026-10-02",          "scheduleTime": "09:00"        }      ]    }  }'

Operasi massal dihitung sebagai satu permintaan terhadap batas laju Anda, sehingga menjadi cara yang efisien untuk batch besar.

Lakukan polling tugas massal

GET /social/bulk-posts/{bulkJobId}

Mengembalikan status tugas beserta hasil per baris, termasuk id postingan yang dibuat untuk setiap baris dan baris apa pun yang gagal setelah dimasukkan ke antrean. Tugas tidak disimpan selamanya; id yang masa penyimpanannya telah habis akan mengembalikan SY95047.

Shell
curl -H "Authorization: API $LISTINGSAPI_KEY" \  https://listingsapi.com/api/v4/social/bulk-posts/f47ac10b-58cc-4372-a567-0e02b2c3d479

Periksa batas dan penggunaan

GET /social/limits

Baca ini sebelum membuat koneksi, bukan setelah menerima SY95042. Bandingkan usage.connections dengan maxConnections: itulah jumlah yang dikenai biaya, yaitu yang saat ini terhubung ditambah yang telah dilepas sebelumnya dalam periode ini. usage.connectionsActive adalah jumlah yang aktif saat ini, dan usage.connectionsReleased adalah jumlah kapasitas yang kembali tersedia saat perpanjangan.

brands mengembalikan nilai null, yang berarti tanpa batas. Jumlah merek tidak dihitung sebagai penggunaan pada paket API.

Shell
curl -H "Authorization: API $LISTINGSAPI_KEY" \  https://listingsapi.com/api/v4/social/limits

Kesalahan yang akan Anda temui

KodeArtiTindakan yang perlu dilakukan
SY90001Tidak ada langganan Social pada akun.Tambahkan produk Social sebelum memanggil endpoint ini.
SY95042Batas koneksi untuk periode penagihan ini telah tercapai.Bandingkan usage.connections dengan maxConnections. Pemutusan koneksi baru-baru ini tidak mengatasi kondisi ini, karena slot tetap ditahan hingga akhir periode.
SY95043Merek tersebut tidak ada pada akun ini, atau telah diarsipkan.Baca kembali id dari Cantumkan merek.
SY95044Platform tidak diaktifkan untuk akun.Pilih platform yang tersedia pada akun, atau hubungi dukungan.
SY95045Merek tidak memiliki koneksi untuk platform tersebut.Arahkan pengguna melalui tautan koneksi, atau hapus platform dari platforms.
SY95046Jadwal atau zona waktu tidak valid.Kirim scheduledAt atau scheduleDate beserta scheduleTime, jangan pernah mengirim keduanya.
SY95047Tugas massal tersebut tidak ada.Baca kembali job.id dari respons pembuatan massal.
SY95048Lebih dari 500 baris.Bagi batch menjadi beberapa bagian. Tidak ada yang dibuat.
SY95049URL pengalihan tidak valid.redirectUrl dan errorUrl harus berupa URL https absolut.
SY95050Validasi massal gagal.Baca kesalahan per baris, perbaiki baris-baris tersebut, lalu kirim ulang batch.
SY95051Usia merek kurang dari 90 hari.Tunggu hingga usianya mencapai 90 hari, lalu arsipkan.

Daftar lengkap tersedia di referensi kode kesalahan.

Langkah berikutnya

Baca Paket dan add-on untuk mengetahui keterkaitan antara batas koneksi, paket berisi 5 koneksi, dan aturan pengarsipan 90 hari, serta Tanggapi peristiwa dengan webhook untuk menerima peristiwa social_post.* dan social_connection.* alih-alih melakukan polling.

Python SDK menyediakan endpoint ini sebagai client.social.brands, client.social.connections, client.social.posts, dan client.social.bulk; lihat Resource Social. Node SDK belum mendukung Social, jadi panggil endpoint REST langsung dari Node.