POST/api/v4/social/posts

Buat postingan media sosial

Membuat postingan draf, terjadwal, atau yang langsung dipublikasikan di akun Facebook, Instagram, X, LinkedIn, dan Pinterest yang terhubung ke suatu merek.

Memerlukan kunci API. Lihat Autentikasi untuk format header dan rotasi kunci.

Parameter

Body

NamaTipeWajibDeskripsi
inputobjectwajibWrapper object. Every field below is a property of `input`, the entire body must be nested under it.
input.socialProfileIdstringwajibUUID of the brand publishing the post, the same value used as the `brandId` path token elsewhere. Every platform in `platforms` must already have a connection on this brand.
input.namestringwajibInternal name for the post (not shown to the audience). Used to find it again in lists.
input.platformsarray of stringswajibPlatforms to publish to: `FACEBOOK`, `INSTAGRAM`, `TWITTER` (X), `LINKEDIN`, `PINTEREST`.
input.contentstringwajibThe post body, published to every platform in `platforms`.
input.actionstringwajib`DRAFT` to save without publishing, `SCHEDULE` to publish at a future time (requires a schedule), or `PUBLISH` to publish now.
input.mediaUrlsarray of stringsopsionalPublic https image URLs to attach. Instagram and Pinterest require at least one.
input.videoUrlsarray of stringsopsionalPublic https video URLs to attach.
input.linkstringopsionalLink to attach to the post where the platform supports one.
input.scheduledAtstringopsionalPublish time as an ISO-8601 timestamp with an offset, e.g. `2026-10-02T09:30:00-04:00`. Required when `action` is `SCHEDULE` unless you send `scheduleDate` + `scheduleTime`. Never send both forms.
input.scheduleDatestringopsionalPublish date as `YYYY-MM-DD`, interpreted in the **brand's** timezone. Must be sent together with `scheduleTime`.
input.scheduleTimestringopsionalPublish time as `HH:MM` (24-hour), interpreted in the **brand's** timezone. Must be sent together with `scheduleDate`.
input.connectedChannelIdsarray of stringsopsionalRestrict publishing to specific connections by their `id` from the connections list. Defaults to the brand's active connection for each platform in `platforms`.
input.clientReferencestringopsionalYour own identifier for this post, stored and echoed back. Use it to reconcile the post against your own records without holding onto the returned UUID.

Contoh permintaan

Body siap tempel. Ganti ID dan nilai placeholder dengan milik Anda.

Request body
{  "input": {    "socialProfileId": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902",    "name": "Autumn collection launch",    "platforms": ["INSTAGRAM", "FACEBOOK", "LINKEDIN"],    "content": "Our autumn collection lands today. Solid oak, hand-finished, made two blocks from the shop. Come see it in person this weekend.",    "mediaUrls": ["https://cdn.example.com/social/autumn-collection.jpg"],    "link": "https://jennyhome.example/autumn",    "action": "SCHEDULE",    "scheduleDate": "2026-10-02",    "scheduleTime": "09:30",    "clientReference": "campaign-4471-slot-01"  }}

Respons

200Post accepted. Publishing runs asynchronously, poll GET /social/posts/{postId} for per-channel status.
Response
{  "data": {    "createSimpleSocialMediaPost": {      "success": true,      "error": [],      "socialPostId": "c47a1e58-2b93-4f10-a6d7-58e0c9b12345",      "status": "SCHEDULED"    }  }}
200Validation failed. Nothing was created. The status is still 200: read `success` and the `error` array.
Response
{  "data": {    "createSimpleSocialMediaPost": {      "success": false,      "error": [        {          "message": "SY95045: No connected channel for PINTEREST on this brand",          "code": "SY95045",          "contextInfo": [{ "key": "platform", "value": "PINTEREST" }]        },        {          "message": "SY95046: scheduleTime must be HH:MM in the brand's timezone",          "code": "SY95046",          "contextInfo": null        }      ],      "socialPostId": null,      "status": null    }  }}
401Unauthenticated, missing or invalid API key.
404No brand with that ID on this account (`SY95043`).

Membuat satu postingan untuk satu merek di satu atau beberapa akun media sosial yang terhubung ke merek tersebut. Panggilan yang sama mencakup ketiga siklus hidup: menyimpan DRAFT, memasukkan SCHEDULE ke antrean, atau langsung PUBLISH.

Kasus penggunaan: menjadwalkan kampanye dari kalender Anda sendiri. Aplikasi Anda sudah mengetahui apa yang ingin disampaikan klien dan kapan. Untuk setiap slot, panggil endpoint ini dengan action: "SCHEDULE" dan salah satu dari scheduledAt atau scheduleDate + scheduleTime, lalu kirim pengenal slot Anda sendiri sebagai clientReference agar Anda dapat mencocokkan data tanpa menyimpan UUID yang dikembalikan. Tampilkan entri sebagai tertunda hingga GET /social/posts/{postId} melaporkan bahwa postingan telah tayang di setiap kanal, dan sediakan tombol batal yang terhubung ke POST /social/posts/cancel.

Publikasi berlangsung secara asinkron

action: "PUBLISH" tidak memublikasikan postingan sebelum memberikan respons. Panggilan ini menerima postingan, mengembalikan socialPostId, lalu meneruskan postingan ke alur pemrosesan publikasi. Untuk mengetahui apa yang sebenarnya terjadi, periksa GET /social/posts/{postId} secara berkala dan baca array channels[] per kanal: status pada setiap entri adalah hasil untuk satu platform tersebut. Dalam permintaan yang sama, postingan dapat berhasil di Instagram dan gagal di LinkedIn, sehingga channels[] menjadi acuan sebenarnya dan status pada tingkat postingan merupakan ringkasan.

Memilih jadwal

action: "SCHEDULE" memerlukan tepat satu dari dua bentuk berikut, tidak boleh keduanya:

BentukFieldDitafsirkan berdasarkan
Titik waktu absolutscheduledAt, ISO-8601 dengan offset (2026-10-02T09:30:00-04:00)Offset yang Anda kirim
Waktu lokalscheduleDate (YYYY-MM-DD) dan scheduleTime (HH:MM)Zona waktu merek

Mengirim keduanya, mengirim scheduleDate tanpa scheduleTime, atau mengirim scheduledAt tanpa offset akan ditolak dengan SY95046. DRAFT dan PUBLISH sama sekali tidak boleh menyertakan jadwal.

Catatan.

  • Body permintaan harus dibungkus dalam objek input.
  • Periksa success, bukan status HTTP. Kegagalan validasi dikembalikan sebagai HTTP 200 dengan success: false dan satu entri dalam array error untuk setiap masalah. Tidak ada yang dibuat ketika success bernilai false.
  • Merek diidentifikasi dalam body sebagai socialProfileId. brandId hanya digunakan sebagai token pada path URL, tidak pernah sebagai field dalam body.
  • Setiap platform dalam platforms harus sudah memiliki koneksi pada merek tersebut. Platform tanpa kanal aktif akan gagal dengan SY95045; baca koneksi merek terlebih dahulu, lalu arahkan pengguna melalui tautan koneksi untuk platform yang belum terhubung.
  • Nilai platform adalah nama enum berhuruf kapital FACEBOOK, INSTAGRAM, TWITTER, LINKEDIN, PINTEREST. TWITTER adalah X; nilai tersebut tetap menggunakan nama lamanya, dan nilai berhuruf kecil akan ditolak.
  • Instagram dan Pinterest tidak menerima postingan yang hanya berisi teks: sertakan setidaknya satu entri mediaUrls jika salah satunya ada dalam platforms.
  • ID postingan berupa UUID biasa, bukan ID relay Base64 yang digunakan oleh postingan lokasi.
  • Untuk membuat lebih dari beberapa postingan sekaligus, gunakan POST /social/bulk-posts, yang menerima struktur baris yang sama dan memvalidasi seluruh batch sebelum pemrosesan.

Operasi tulis: tidak dijalankan pada akun aktif. Permintaan dan respons yang ditampilkan disusun dari skema API; operasi ini memublikasikan postingan ke akun media sosial sungguhan saat dijalankan.

Request
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",        "LINKEDIN"      ],      "content": "Our autumn collection lands today. Solid oak, hand-finished, made two blocks from the shop. Come see it in person this weekend.",      "mediaUrls": [        "https://cdn.example.com/social/autumn-collection.jpg"      ],      "link": "https://jennyhome.example/autumn",      "action": "SCHEDULE",      "scheduleDate": "2026-10-02",      "scheduleTime": "09:30",      "clientReference": "campaign-4471-slot-01"    }  }'