/api/v4/social/postsCréer une publication sur les réseaux sociaux
Crée une publication en brouillon, programmée ou immédiate sur les comptes Facebook, Instagram, X, LinkedIn et Pinterest connectés à une marque.
Paramètres
Corps
| Nom | Type | Obligatoire | Description |
|---|---|---|---|
| input | object | obligatoire | Wrapper object. Every field below is a property of `input`, the entire body must be nested under it. |
| input.socialProfileId | string | obligatoire | UUID 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.name | string | obligatoire | Internal name for the post (not shown to the audience). Used to find it again in lists. |
| input.platforms | array of strings | obligatoire | Platforms to publish to: `FACEBOOK`, `INSTAGRAM`, `TWITTER` (X), `LINKEDIN`, `PINTEREST`. |
| input.content | string | obligatoire | The post body, published to every platform in `platforms`. |
| input.action | string | obligatoire | `DRAFT` to save without publishing, `SCHEDULE` to publish at a future time (requires a schedule), or `PUBLISH` to publish now. |
| input.mediaUrls | array of strings | facultatif | Public https image URLs to attach. Instagram and Pinterest require at least one. |
| input.videoUrls | array of strings | facultatif | Public https video URLs to attach. |
| input.link | string | facultatif | Link to attach to the post where the platform supports one. |
| input.scheduledAt | string | facultatif | Publish 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.scheduleDate | string | facultatif | Publish date as `YYYY-MM-DD`, interpreted in the **brand's** timezone. Must be sent together with `scheduleTime`. |
| input.scheduleTime | string | facultatif | Publish time as `HH:MM` (24-hour), interpreted in the **brand's** timezone. Must be sent together with `scheduleDate`. |
| input.connectedChannelIds | array of strings | facultatif | Restrict publishing to specific connections by their `id` from the connections list. Defaults to the brand's active connection for each platform in `platforms`. |
| input.clientReference | string | facultatif | Your 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. |
Exemple de requête
Corps prêt à coller. Remplacez les identifiants et valeurs d’exemple par les vôtres.
{ "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" }}Réponses
200Post accepted. Publishing runs asynchronously, poll GET /social/posts/{postId} for per-channel status.
{ "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.
{ "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`).
Crée une publication pour une marque sur un ou plusieurs de ses comptes sociaux connectés. Le même appel couvre les trois cycles de vie : enregistrer un DRAFT, mettre un SCHEDULE en file d’attente ou effectuer PUBLISH immédiatement.
Cas d’utilisation : programmer une campagne à partir de votre propre calendrier. Votre application sait déjà ce qu’un client souhaite communiquer et à quel moment. Pour chaque créneau, appelez cet endpoint avec action: "SCHEDULE" et soit scheduledAt, soit scheduleDate + scheduleTime, et transmettez votre propre identifiant de créneau dans clientReference afin de pouvoir faire le rapprochement sans stocker l’UUID renvoyé. Affichez l’entrée comme étant en attente jusqu’à ce que GET /social/posts/{postId} indique que la publication est en ligne sur chaque canal, et proposez un bouton d’annulation relié à POST /social/posts/cancel.
La publication est asynchrone
action: "PUBLISH" ne publie pas avant de répondre. L’appel accepte la publication, renvoie un socialPostId et la transmet au pipeline de publication. Pour savoir ce qui s’est réellement passé, interrogez régulièrement GET /social/posts/{postId} et consultez le tableau channels[] des résultats par canal : le champ status de chaque entrée correspond au résultat pour cette seule plateforme. Une publication peut réussir sur Instagram et échouer sur LinkedIn dans la même requête : channels[] fait donc foi, tandis que le champ status au niveau de la publication en est un résumé.
Choisir une programmation
action: "SCHEDULE" exige exactement l’une des deux formes suivantes, jamais les deux :
L’envoi des deux formes, de scheduleDate sans scheduleTime ou de scheduledAt sans décalage horaire est rejeté avec SY95046. DRAFT et PUBLISH ne doivent comporter aucune programmation.
Remarques.
- Le corps de la requête doit être encapsulé dans un objet
input. - Vérifiez
success, et non le statut HTTP. Les échecs de validation sont renvoyés sous la formeHTTP 200avecsuccess: falseet une entrée par problème dans le tableauerror. Rien n’est créé lorsquesuccessvautfalse. - La marque est identifiée dans le corps par
socialProfileId.brandIdest toujours un paramètre du chemin de l’URL, jamais un champ du corps. - Chaque plateforme dans
platformsdoit déjà disposer d’une connexion pour la marque. Une plateforme sans canal actif entraîne un échec avecSY95045; consultez d’abord les connexions de la marque, puis dirigez l’utilisateur vers un lien de connexion pour toute connexion manquante. - Les valeurs des plateformes sont les noms d’énumération en majuscules
FACEBOOK,INSTAGRAM,TWITTER,LINKEDIN,PINTEREST.TWITTERcorrespond à X ; la valeur a conservé son ancien nom, et toute valeur en minuscules est rejetée. - Instagram et Pinterest n’acceptent pas les publications contenant uniquement du texte : fournissez au moins une entrée
mediaUrlslorsque l’une de ces plateformes figure dansplatforms. - Les identifiants de publication sont de simples UUID, et non les identifiants relay en Base64 utilisés pour les publications d’établissement.
- Pour traiter plus de quelques publications à la fois, utilisez
POST /social/bulk-posts, qui accepte la même structure de ligne et valide l’ensemble du lot au préalable.
Opération d’écriture : non exécutée sur le compte réel. La requête et la réponse présentées sont construites à partir du schéma de l’API ; cette opération publie sur de véritables comptes sociaux lorsqu’elle est exécutée.
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" } }'