POST/api/v4/social/posts

Cré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.

Nécessite une clé API. Consultez Authentification pour le format de l’en-tête et la rotation des clés.

Paramètres

Corps

NomTypeObligatoireDescription
inputobjectobligatoireWrapper object. Every field below is a property of `input`, the entire body must be nested under it.
input.socialProfileIdstringobligatoireUUID 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.namestringobligatoireInternal name for the post (not shown to the audience). Used to find it again in lists.
input.platformsarray of stringsobligatoirePlatforms to publish to: `FACEBOOK`, `INSTAGRAM`, `TWITTER` (X), `LINKEDIN`, `PINTEREST`.
input.contentstringobligatoireThe post body, published to every platform in `platforms`.
input.actionstringobligatoire`DRAFT` to save without publishing, `SCHEDULE` to publish at a future time (requires a schedule), or `PUBLISH` to publish now.
input.mediaUrlsarray of stringsfacultatifPublic https image URLs to attach. Instagram and Pinterest require at least one.
input.videoUrlsarray of stringsfacultatifPublic https video URLs to attach.
input.linkstringfacultatifLink to attach to the post where the platform supports one.
input.scheduledAtstringfacultatifPublish 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.scheduleDatestringfacultatifPublish date as `YYYY-MM-DD`, interpreted in the **brand's** timezone. Must be sent together with `scheduleTime`.
input.scheduleTimestringfacultatifPublish time as `HH:MM` (24-hour), interpreted in the **brand's** timezone. Must be sent together with `scheduleDate`.
input.connectedChannelIdsarray of stringsfacultatifRestrict publishing to specific connections by their `id` from the connections list. Defaults to the brand's active connection for each platform in `platforms`.
input.clientReferencestringfacultatifYour 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.

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"  }}

Réponses

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`).

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 :

FormeChampsInterprétation temporelle
Instant absoluscheduledAt, au format ISO-8601 avec un décalage horaire (2026-10-02T09:30:00-04:00)Le décalage horaire que vous avez envoyé
Heure localescheduleDate (YYYY-MM-DD) et scheduleTime (HH:MM)Le fuseau horaire de la marque

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 forme HTTP 200 avec success: false et une entrée par problème dans le tableau error. Rien n’est créé lorsque success vaut false.
  • La marque est identifiée dans le corps par socialProfileId. brandId est toujours un paramètre du chemin de l’URL, jamais un champ du corps.
  • Chaque plateforme dans platforms doit déjà disposer d’une connexion pour la marque. Une plateforme sans canal actif entraîne un échec avec SY95045 ; 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. TWITTER correspond à 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 mediaUrls lorsque l’une de ces plateformes figure dans platforms.
  • 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.

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"    }  }'