POST/api/v4/posts

Buat postingan pengumuman

Membuat postingan media sosial ANNOUNCEMENT dan memublikasikannya ke situs yang dipilih untuk satu atau beberapa lokasi.

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.postNamestringwajibInternal name for the campaign (not shown to customers).
input.locationIdsarray of stringswajibBase64-encoded location IDs to publish to (e.g. `TG9jYXRpb246MTgwMDI4OQ==`).
input.postTypestringwajibMust be `ANNOUNCEMENT`. One of EVENT, OFFER, ANNOUNCEMENT, COVID19, PRODUCT.
input.postSitesarray of stringswajibSites to publish to: `GOOGLE`, `FACEBOOK`.
input.postMessagearray of objectsopsionalPer-site body text: `{ site, message }`. Provide one entry per site in `postSites`.
input.postCtaarray of objectsopsionalOptional call-to-action button per site: `{ site, type, url }`. `type` is one of BOOK, ORDER, SHOP, LEARN_MORE, SIGN_UP, GET_OFFER.
input.postMediaUrlarray of objectsopsionalOptional media per site: `{ site, url, type }` where `type` is IMAGE or VIDEO.
input.clientMutationIdstringopsionalOptional client token returned unchanged in the response for correlation.

Contoh permintaan

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

Request body
{  "input": {    "postName": "Grand Opening Announcement",    "locationIds": ["TG9jYXRpb246MTgwMDI4OQ=="],    "postType": "ANNOUNCEMENT",    "postSites": ["GOOGLE"],    "postMessage": [      { "site": "GOOGLE", "message": "We are now open! Visit Jenny Home this week for our grand opening." }    ],    "postCta": [      { "site": "GOOGLE", "type": "LEARN_MORE", "url": "https://jennyhome.example/opening" }    ],    "postMediaUrl": [      { "site": "GOOGLE", "url": "https://cdn.example.com/opening.jpg", "type": "IMAGE" }    ]  }}

Respons

200Post accepted. Publishing runs asynchronously, the returned post starts as INPROGRESS.
Response
{  "data": {    "createSocialPost": {      "clientMutationId": null,      "success": true,      "errors": [],      "socialPost": {        "id": "U29jaWFsUG9zdDo0NDEyMg==",        "name": "Grand Opening Announcement",        "status": "INPROGRESS",        "type": "ANNOUNCEMENT",        "createdAt": "2026-06-28",        "sites": ["GOOGLE"],        "message": [          { "site": "GOOGLE", "message": "We are now open! Visit Jenny Home this week for our grand opening." }        ],        "cta": [          { "type": { "value": "LEARN_MORE", "label": "Learn more" }, "url": "https://jennyhome.example/opening", "site": "GOOGLE", "tinyUrl": null }        ],        "contextInfo": null,        "mediaUrl": [          { "url": "https://cdn.example.com/opening.jpg", "site": "GOOGLE", "type": "IMAGE" }        ],        "publishDetails": [          { "site": "GOOGLE", "status": "PUBLISHING", "createdDate": "2026-06-28", "submissionError": null }        ],        "postLinks": [],        "locationIds": [1800289]      }    }  }}
400Bad request, the body was not wrapped in `input` (error message: `Variable "$input" of required type "CreateSocialPostMutationInput!" was not provided`).
401Unauthenticated, missing or invalid API key.

Membuat pengumuman: jenis postingan paling sederhana. Pengumuman berisi pesan biasa (serta CTA dan gambar opsional) tanpa tanggal acara atau detail penawaran. Sertakan postType: "ANNOUNCEMENT" dan satu entri postMessage untuk setiap situs dalam postSites.

Kasus penggunaan: "Kami buka" di seluruh gerai Anda. Umumkan pembukaan perdana atau jam operasional baru di Google (dan Facebook) untuk sekumpulan lokasi dalam satu panggilan. Sertakan CTA LEARN_MORE yang menautkan ke situs Anda dan gambar untuk kartu yang lebih kaya konten. Panggilan tersebut segera mengembalikan status: INPROGRESS; periksa GET /posts/{postId} secara berkala dengan socialPost.id yang dikembalikan hingga nilainya menjadi SUCCESS, dan baca publishDetails[].submissionError jika publikasi ke situs mana pun gagal.

Catatan.

  • Body permintaan harus dibungkus dalam objek input: setiap field (postName, locationIds, postType, postSites, …) merupakan properti dari input. Body datar tanpa pembungkus ditolak dengan HTTP 400 (Variable "$input" of required type "CreateSocialPostMutationInput!" was not provided).
  • postSites dan setiap postMessage.site menggunakan enum situs (GOOGLE, FACEBOOK); sertakan entri pesan untuk setiap situs yang Anda tuju.
  • Untuk memublikasikan pengumuman yang sama ke banyak lokasi, sertakan semua ID dalam locationIds di sini, atau gunakan POST /bulk-posts untuk publikasi berskala besar di banyak lokasi.
  • Untuk postingan bertanggal, gunakan acara; untuk kupon/diskon, gunakan penawaran.

Operasi tulis: tidak dijalankan pada akun aktif. Permintaan dan respons yang ditampilkan disusun berdasarkan skema API; saat dijalankan, operasi ini memublikasikan postingan ke profil Google/Facebook yang sebenarnya.

Request
curl -X POST 'https://listingsapi.com/api/v4/posts' \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H 'Content-Type: application/json' \  -d '{    "input": {      "postName": "Grand Opening Announcement",      "locationIds": [        "TG9jYXRpb246MTgwMDI4OQ=="      ],      "postType": "ANNOUNCEMENT",      "postSites": [        "GOOGLE"      ],      "postMessage": [        {          "site": "GOOGLE",          "message": "We are now open! Visit Jenny Home this week for our grand opening."        }      ],      "postCta": [        {          "site": "GOOGLE",          "type": "LEARN_MORE",          "url": "https://jennyhome.example/opening"        }      ],      "postMediaUrl": [        {          "site": "GOOGLE",          "url": "https://cdn.example.com/opening.jpg",          "type": "IMAGE"        }      ]    }  }'