POST/api/v4/posts

Buat postingan penawaran

Membuat postingan media sosial OFFER berisi kupon, diskon, serta syarat dan ketentuan, diterbitkan di situs pilihan 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 `OFFER`. One of EVENT, OFFER, ANNOUNCEMENT, COVID19, PRODUCT.
input.postSitesarray of stringswajibSites to publish to: `GOOGLE`, `FACEBOOK`.
input.postContextInfoobjectopsionalOffer details: `{ title, couponCode, discount, redeemUrl, termsConditions, startDay, endDay }`. `title` labels the offer; `startDay`/`endDay` bound its validity.
input.postMessagearray of objectsopsionalPer-site body text: `{ site, message }`. One entry per site in `postSites`.
input.postScheduledDatesobjectopsionalWhen to publish/expire the post itself: `{ startDatetime, endDatetime, removalSites }`. Distinct from the offer validity in `postContextInfo`.
input.postCtaarray of objectsopsionalOptional call-to-action per site: `{ site, type, url }`. The `CTAType` enum accepts BOOK, ORDER, SHOP, LEARN_MORE, SIGN_UP, and GET_OFFER. There is no `REDEEM`. For offer posts, Google takes ORDER and Facebook takes 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": "Diwali 25% Off",    "locationIds": ["TG9jYXRpb246MTgwMDI4OQ=="],    "postType": "OFFER",    "postSites": ["GOOGLE"],    "postContextInfo": {      "title": "25% off storewide",      "couponCode": "DIWALI25",      "discount": "25%",      "redeemUrl": "https://jennyhome.example/diwali",      "termsConditions": "Valid in-store only through July 6. Cannot be combined with other offers.",      "startDay": "2026-06-22",      "endDay": "2026-07-06"    },    "postMessage": [      { "site": "GOOGLE", "message": "Celebrate with us: 25% off everything in store this festive week." }    ],    "postCta": [      { "site": "GOOGLE", "type": "GET_OFFER", "url": "https://jennyhome.example/diwali" }    ],    "postMediaUrl": [      { "site": "GOOGLE", "url": "https://cdn.example.com/diwali.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": "U29jaWFsUG9zdDo0NDEyNA==",        "name": "Diwali 25% Off",        "status": "INPROGRESS",        "type": "OFFER",        "createdAt": "2026-06-20",        "scheduledStartDate": "2026-06-22",        "scheduledEndDate": "2026-07-06",        "sites": ["GOOGLE"],        "message": [          { "site": "GOOGLE", "message": "Celebrate with us: 25% off everything in store this festive week." }        ],        "cta": [          { "type": { "value": "GET_OFFER", "label": "Get offer" }, "url": "https://jennyhome.example/diwali", "site": "GOOGLE", "tinyUrl": null }        ],        "contextInfo": {          "title": "25% off storewide",          "couponCode": "DIWALI25",          "discount": "25%",          "redeemUrl": "https://jennyhome.example/diwali",          "termsConditions": "Valid in-store only through July 6. Cannot be combined with other offers.",          "startDay": "2026-06-22",          "endDay": "2026-07-06",          "startTime": null,          "endTime": null,          "locationType": null        },        "mediaUrl": [          { "url": "https://cdn.example.com/diwali.jpg", "site": "GOOGLE", "type": "IMAGE" }        ],        "publishDetails": [          { "site": "GOOGLE", "status": "PUBLISHING", "createdDate": "2026-06-20", "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 postingan penawaran: kartu promosi dengan kode kupon, diskon, tautan penukaran, serta syarat dan ketentuan. Detail penawaran ada di postContextInfo (title, couponCode, discount, redeemUrl, termsConditions, startDay, endDay). Penawaran cocok dipadukan dengan CTA GET_OFFER.

Kasus penggunaan: jalankan promosi berbatas waktu. Luncurkan penawaran "Diskon Diwali 25%" untuk Jenny Home yang berlaku pada 22 Juni–6 Juli, dengan kupon DIWALI25 dan URL penukaran. Atur postType: "OFFER", isi postContextInfo, dan tambahkan CTA GET_OFFER. Pemanggilan ini mengembalikan status: INPROGRESS; pastikan postingan muncul di setiap situs dengan GET /posts/{postId}, dan hapus lebih awal dengan DELETE /posts/{postId} jika promosi berakhir.

Catatan.

  • Isi permintaan harus dibungkus dalam objek input: setiap field merupakan properti dari input. Isi permintaan datar tanpa pembungkus ditolak dengan status HTTP 400 (Variable "$input" of required type "CreateSocialPostMutationInput!" was not provided).
  • postContextInfo.startDay/endDay membatasi masa berlaku penawaran; gunakan postScheduledDates jika Anda juga ingin menjadwalkan kapan postingan dipublikasikan/kedaluwarsa secara terpisah.
  • Sediakan entri postMessage untuk setiap situs dalam postSites.
  • Untuk pembaruan biasa, gunakan pengumuman; untuk kegiatan dengan tanggal tertentu, gunakan acara.

Operasi tulis: tidak dijalankan pada akun aktif. Permintaan dan respons yang ditampilkan dibuat 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": "Diwali 25% Off",      "locationIds": [        "TG9jYXRpb246MTgwMDI4OQ=="      ],      "postType": "OFFER",      "postSites": [        "GOOGLE"      ],      "postContextInfo": {        "title": "25% off storewide",        "couponCode": "DIWALI25",        "discount": "25%",        "redeemUrl": "https://jennyhome.example/diwali",        "termsConditions": "Valid in-store only through July 6. Cannot be combined with other offers.",        "startDay": "2026-06-22",        "endDay": "2026-07-06"      },      "postMessage": [        {          "site": "GOOGLE",          "message": "Celebrate with us: 25% off everything in store this festive week."        }      ],      "postCta": [        {          "site": "GOOGLE",          "type": "GET_OFFER",          "url": "https://jennyhome.example/diwali"        }      ],      "postMediaUrl": [        {          "site": "GOOGLE",          "url": "https://cdn.example.com/diwali.jpg",          "type": "IMAGE"        }      ]    }  }'