Synupv1
Créer une clé
v1Ressources/Posts

Posts

Créez, consultez et publiez des posts sociaux et des posts Google Business Profile.

Renvoie les posts d'un établissement, les plus récemment créés en premier, avec l'état de soumission par plateforme et des statistiques agrégées.

Lister les posts

get/api/v1/posts
posts:read
Paramètres de requête
locationIdstringobligatoire
L'établissement dont lister les posts. Obligatoire.
platformstringfacultatif
Restreint les résultats aux posts soumis à cette plateforme.
typestring (announcement | event | offer)facultatif
Restreint les résultats à un type de post.
statusstringfacultatif
Restreint les résultats à un statut de post.
fromstringfacultatif
N'inclut que les posts créés à cette date ou après.
tostringfacultatif
N'inclut que les posts créés à cette date ou avant.
searchstringfacultatif
Correspondance insensible à la casse sur le nom du post.
pageintegerfacultatif
Numéro de page, à partir de 1. Par défaut 1.
perPageintegerfacultatif
Résultats par page, jusqu'à 50. Par défaut 20.
Réponse
dataobjectfacultatif
rowsarray of objectfacultatif
Les posts correspondants.
idstringfacultatif
Identifiant unique du post.
namestringfacultatif
Nom/étiquette interne du post.
typestringfacultatif
Type de post : announcement, event ou offer.
statusstringfacultatif
Statut du cycle de vie du post : draft, scheduled, active ou error.
postDatestringfacultatif
Date programmée ou de création du post, au format horodatage ISO 8601.
platformsarray of stringfacultatif
Les plateformes ciblées par ce post.
firstMediaUrlstringfacultatif
URL du premier média du post, ou null.
firstMediaTypestringfacultatif
Type du premier média du post (image ou video), ou null.
submissionsarray of objectfacultatif
État de soumission par plateforme pour ce post.
platformstringfacultatif
La plateforme concernée par cette ligne.
statusstringfacultatif
Statut de cette soumission à la plateforme : pending, active, error ou deleted.
postLinkstringfacultatif
URL publique du post publié sur cette plateforme, ou null.
reviewStatestringfacultatif
État de modération Google (processing, live, rejected), ou null pour les autres plateformes.
errorMessagestringfacultatif
Message d'erreur si cette soumission a échoué, ou null.
messagePreviewstringfacultatif
Les 140 premiers caractères de la légende du post, ou null.
viewsnumberfacultatif
Nombre total de vues, ou null si pas encore disponible.
clicksnumberfacultatif
Nombre total de clics, ou null si pas encore disponible.
errorMsgstringfacultatif
Message d'erreur de la première soumission échouée, ou null.
deletedOnstringfacultatif
Date de dépublication de ce post, au format horodatage ISO 8601, ou null.
totalnumberfacultatif
Nombre total de posts correspondants.
statsobjectfacultatif
Statistiques agrégées sur les posts correspondants.
totalPostsnumberfacultatif
Nombre de posts correspondants.
totalViewsnumberfacultatif
Total des vues sur les posts correspondants, ou null.
totalClicksnumberfacultatif
Total des clics sur les posts correspondants, ou null.
totalEngagementnumberfacultatif
Total des réactions, partages et commentaires combinés sur les posts correspondants.
Erreurs
400Il manque un paramètre requis à la requête, ou elle est invalide.
401Clé API manquante, invalide, expirée ou révoquée.
403La clé n'a pas la permission requise, ou n'est pas autorisée pour ce client/établissement.
429Trop de requêtes. Réessayez après le nombre de secondes indiqué dans l'en-tête Retry-After.
get/api/v1/posts
Votre clé API
locationId *
platform
type
status
from
to
search
page
perPage
{
  "data": {
    "rows": [
      {
        "id": "cm_post_abc123",
        "name": "Fall Special Announcement",
        "type": "announcement",
        "status": "scheduled",
        "postDate": "2026-02-10T15:00:00.000Z",
        "platforms": [
          "google",
          "facebook"
        ],
        "firstMediaUrl": "https://cdn.synup.com/uploads/a1/promo.jpg",
        "firstMediaType": "image",
        "submissions": [
          {
            "platform": "google",
            "status": "pending",
            "postLink": null,
            "reviewState": null,
            "errorMessage": null
          },
          {
            "platform": "facebook",
            "status": "pending",
            "postLink": null,
            "reviewState": null,
            "errorMessage": null
          }
        ],
        "messagePreview": "Join us this weekend for our fall special — 20% off all services!",
        "views": null,
        "clicks": null,
        "errorMsg": null,
        "deletedOn": null
      }
    ],
    "total": 1,
    "stats": {
      "totalPosts": 12,
      "totalViews": 4300,
      "totalClicks": 210,
      "totalEngagement": 96
    }
  }
}
v1Ressources/Posts/postCréer un post

Crée un post pour un établissement ou un client et le soumet aux plateformes sélectionnées. Ceci publie du contenu réel : sauf si scheduledFor est défini ou si draft vaut true, le post est immédiatement mis en ligne sur ses plateformes cibles. Une plateforme demandée sans connexion active, ou un post à qui manque un champ requis pour être mis en ligne, ne fait jamais échouer l'appel — le contenu est plutôt enregistré comme brouillon ; voir le schéma de réponse pour savoir comment cela est signalé.

Créer un post

post/api/v1/posts
posts:write
Corps de la requête
locationIdstringfacultatif
L'établissement pour lequel publier. Fournissez ceci ou clientId.
clientIdstringfacultatif
Le client pour lequel publier au niveau marque. Fournissez ceci ou locationId.
namestringobligatoire
Nom/étiquette interne du post. Obligatoire, non vide.
postTypestring (announcement | event | offer)obligatoire
Type de post. event et offer sont réservés à Google.
platformsarray of string (google | facebook | instagram | x | linkedin | pinterest | mastodon | bluesky | threads | tiktok)obligatoire
Plateformes cibles. Au moins une est requise.
connectionIdsarray of stringfacultatif
IDs de connexion explicites par lesquels publier, au lieu de résoudre les plateformes vers des connexions.
messageGooglestringfacultatif
Légende pour Google. Requise quand google est sélectionné, sauf en brouillon.
messageFacebookstringfacultatif
Légende sociale partagée pour chaque plateforme non-Google sélectionnée. Requise sauf en brouillon.
ctaTypestring (learn_more | sign_up | order_online | book | buy | call_now)facultatif
Type d'appel à l'action.
ctaUrlstringfacultatif
URL de destination de l'appel à l'action.
mediaUrlsarray of objectfacultatif
Médias à joindre, une entrée par pièce jointe de plateforme.
urlstringfacultatif
platformstringfacultatif
typestring (image | video)facultatif
eventTitlestringfacultatif
Titre de l'événement ou de l'offre. Requis pour un événement/une offre Google, sauf en brouillon.
eventStartAtstringfacultatif
Date/heure de début de l'événement ou de l'offre, au format horodatage ISO 8601. Requise pour un événement/une offre Google, sauf en brouillon.
eventEndAtstringfacultatif
Date/heure de fin de l'événement ou de l'offre, au format horodatage ISO 8601. Doit être après le début.
offerTermsstringfacultatif
Conditions de l'offre.
offerCouponCodestringfacultatif
Code promo de l'offre.
offerRedeemUrlstringfacultatif
URL d'utilisation de l'offre.
scheduledForstringfacultatif
Publier à ce futur horodatage ISO 8601 au lieu d'immédiatement.
draftbooleanfacultatif
Enregistrer sans publier. Ignore les vérifications de champs requis ; les vérifications structurelles (limites, règles de médias) s'appliquent toujours.
Réponse
dataobjectfacultatif
Une plateforme demandée sans connexion active, ou un champ requis manquant avant que le post puisse être publié, ne fait jamais échouer cet appel — le post est quand même enregistré. Quand l'un de ces cas se présente, status vaut "no_connection" ou "incomplete" et le post est niché dessous sous la forme post.{id,status} ; en cas de publication propre, l'id/status de premier niveau décrivent directement le post.
idstringfacultatif
Identifiant unique du post.
statusstringfacultatif
Statut du cycle de vie du post : draft, scheduled, active ou error.
missingFieldsarray of stringfacultatif
Champs encore nécessaires avant que ce post puisse être mis en ligne, le cas échéant.
missingPlatformsarray of stringfacultatif
Plateformes demandées sans connexion active, le cas échéant.
scopestring (location | client)facultatif
Si l'écart de connexion/champ s'applique au niveau de l'établissement ou du client.
postobjectfacultatif
Le post qui a été créé ou mis à jour.
idstringfacultatif
Identifiant unique du post.
statusstringfacultatif
Statut du cycle de vie du post : draft, scheduled, active ou error.
Erreurs
400Il manque un paramètre requis à la requête, ou elle est invalide.
401Clé API manquante, invalide, expirée ou révoquée.
403La clé n'a pas la permission requise, ou n'est pas autorisée pour ce client/établissement.
422Il manque un paramètre requis à la requête, ou elle est invalide.
429Trop de requêtes. Réessayez après le nombre de secondes indiqué dans l'en-tête Retry-After.
post/api/v1/posts
Votre clé API
Corps de la requête*
{
  "data": {
    "id": "cm_post_abc123",
    "status": "scheduled"
  }
}
v1Ressources/Posts/getObtenir les statistiques d'un post

Renvoie une synthèse des statistiques d'engagement — totaux résumés, répartition par plateforme, séries de tendance et posts les plus performants — à travers les connexions de plateforme de niveau marque d'un client.

Obtenir les statistiques d'un post

get/api/v1/posts/analytics
posts:read
Paramètres de requête
clientIdstringobligatoire
Le client à synthétiser. Obligatoire.
fromstringfacultatif
Début de la période de reporting. Par défaut il y a 30 jours.
tostringfacultatif
Fin de la période de reporting. Par défaut maintenant.
Réponse
dataobjectfacultatif
summaryobjectfacultatif
Totaux d'engagement pour la période en cours.
totalPostsnumberfacultatif
Nombre de posts pour cette période.
totalViewsnumberfacultatif
Total des vues pour cette période.
totalReactionsnumberfacultatif
Total des réactions pour cette période.
totalSharesnumberfacultatif
Total des partages pour cette période.
totalCommentsnumberfacultatif
Total des commentaires pour cette période.
periodDaysnumberfacultatif
Durée de la période de reporting, en jours.
prevSummaryobjectfacultatif
Totaux d'engagement pour la période précédente de durée équivalente, pour comparaison de variation.
totalPostsnumberfacultatif
Nombre de posts pour cette période.
totalViewsnumberfacultatif
Total des vues pour cette période.
totalReactionsnumberfacultatif
Total des réactions pour cette période.
totalSharesnumberfacultatif
Total des partages pour cette période.
totalCommentsnumberfacultatif
Total des commentaires pour cette période.
byPlatformarray of objectfacultatif
Totaux d'engagement ventilés par plateforme pour cette période.
platformstringfacultatif
La plateforme concernée par cette ligne.
labelstringfacultatif
Nom d'affichage de la plateforme.
totalPostsnumberfacultatif
Nombre de posts pour cette période.
totalViewsnumberfacultatif
Total des vues pour cette période.
totalReactionsnumberfacultatif
Total des réactions pour cette période.
totalSharesnumberfacultatif
Total des partages pour cette période.
totalCommentsnumberfacultatif
Total des commentaires pour cette période.
prevByPlatformarray of objectfacultatif
Totaux d'engagement ventilés par plateforme pour la période précédente.
platformstringfacultatif
La plateforme concernée par cette ligne.
labelstringfacultatif
Nom d'affichage de la plateforme.
totalPostsnumberfacultatif
Nombre de posts pour cette période.
totalViewsnumberfacultatif
Total des vues pour cette période.
totalReactionsnumberfacultatif
Total des réactions pour cette période.
totalSharesnumberfacultatif
Total des partages pour cette période.
totalCommentsnumberfacultatif
Total des commentaires pour cette période.
trendobjectfacultatif
Nombre quotidien de vues par plateforme sur la période.
datesarray of stringfacultatif
Les dates couvertes par cette tendance, au format YYYY-MM-DD.
seriesarray of objectfacultatif
Une entrée par plateforme.
platformstringfacultatif
La plateforme concernée par cette ligne.
labelstringfacultatif
Nom d'affichage de la plateforme.
valuesarray of numberfacultatif
Une valeur par date dans dates, dans le même ordre.
engagementTrendobjectfacultatif
Vues, réactions, partages, commentaires et portée quotidiens par plateforme sur la période.
datesarray of stringfacultatif
Les dates couvertes par cette tendance, au format YYYY-MM-DD.
seriesarray of objectfacultatif
Une entrée par plateforme.
platformstringfacultatif
La plateforme concernée par cette ligne.
labelstringfacultatif
Nom d'affichage de la plateforme.
viewsarray of numberfacultatif
reactionsarray of numberfacultatif
sharesarray of numberfacultatif
commentsarray of numberfacultatif
reacharray of numberfacultatif
Valeurs de portée quotidiennes, dans le même ordre que dates.
postsTrendobjectfacultatif
Nombre quotidien de soumissions de posts par plateforme sur la période.
datesarray of stringfacultatif
Les dates couvertes par cette tendance, au format YYYY-MM-DD.
seriesarray of objectfacultatif
Une entrée par plateforme.
platformstringfacultatif
La plateforme concernée par cette ligne.
labelstringfacultatif
Nom d'affichage de la plateforme.
valuesarray of numberfacultatif
Une valeur par date dans dates, dans le même ordre.
allPostsarray of objectfacultatif
Les soumissions individuelles à partir desquelles cette synthèse est construite, triées par vues.
submissionIdstringfacultatif
Identifiant unique de la soumission à la plateforme.
platformstringfacultatif
La plateforme concernée par cette ligne.
platformPostIdstringfacultatif
L'identifiant propre à la plateforme pour le post publié, ou null.
postLinkstringfacultatif
URL publique du post publié sur cette plateforme, ou null.
publishedAtstringfacultatif
Date de publication de cette soumission, au format horodatage ISO 8601, ou null.
contentPreviewstringfacultatif
Le nom du post, pour l'affichage.
totalViewsnumberfacultatif
Total des vues pour cette période.
totalReactionsnumberfacultatif
Total des réactions pour cette période.
totalSharesnumberfacultatif
Total des partages pour cette période.
totalCommentsnumberfacultatif
Total des commentaires pour cette période.
totalReachnumberfacultatif
Portée totale pour cette soumission.
engRatenumberfacultatif
Taux d'engagement — réactions plus partages plus commentaires, en pourcentage des vues — ou null s'il n'y a pas encore de vues.
Erreurs
400Il manque un paramètre requis à la requête, ou elle est invalide.
401Clé API manquante, invalide, expirée ou révoquée.
403La clé n'a pas la permission requise, ou n'est pas autorisée pour ce client/établissement.
429Trop de requêtes. Réessayez après le nombre de secondes indiqué dans l'en-tête Retry-After.
get/api/v1/posts/analytics
Votre clé API
clientId *
from
to
{
  "data": {
    "summary": {
      "totalPosts": 18,
      "totalViews": 5400,
      "totalReactions": 320,
      "totalShares": 44,
      "totalComments": 61,
      "periodDays": 30
    },
    "prevSummary": {
      "totalPosts": 14,
      "totalViews": 4100,
      "totalReactions": 260,
      "totalShares": 30,
      "totalComments": 48
    },
    "byPlatform": [
      {
        "platform": "facebook",
        "label": "Facebook",
        "totalPosts": 10,
        "totalViews": 3200,
        "totalReactions": 210,
        "totalShares": 30,
        "totalComments": 40
      },
      {
        "platform": "instagram",
        "label": "Instagram",
        "totalPosts": 8,
        "totalViews": 2200,
        "totalReactions": 110,
        "totalShares": 14,
        "totalComments": 21
      }
    ],
    "prevByPlatform": [
      {
        "platform": "facebook",
        "label": "Facebook",
        "totalPosts": 8,
        "totalViews": 2500,
        "totalReactions": 170,
        "totalShares": 20,
        "totalComments": 32
      }
    ],
    "trend": {
      "dates": [
        "2026-01-15",
        "2026-01-16"
      ],
      "series": [
        {
          "platform": "facebook",
          "label": "Facebook",
          "values": [
            4,
            6
          ]
        }
      ]
    },
    "engagementTrend": {
      "dates": [
        "2026-01-15",
        "2026-01-16"
      ],
      "series": [
        {
          "platform": "facebook",
          "label": "Facebook",
          "views": [
            180,
            210
          ],
          "reactions": [
            12,
            15
          ],
          "shares": [
            2,
            3
          ],
          "comments": [
            4,
            5
          ],
          "reach": [
            900,
            1100
          ]
        }
      ]
    },
    "postsTrend": {
      "dates": [
        "2026-01-15",
        "2026-01-16"
      ],
      "series": [
        {
          "platform": "facebook",
          "label": "Facebook",
          "values": [
            1,
            2
          ]
        }
      ]
    },
    "allPosts": [
      {
        "submissionId": "cm_sub_xyz789",
        "platform": "facebook",
        "platformPostId": "1234567890",
        "postLink": "https://www.facebook.com/1234567890",
        "publishedAt": "2026-01-16T14:00:00.000Z",
        "contentPreview": "Join us this weekend for our fall special — 20% off all services!",
        "totalViews": 890,
        "totalReactions": 42,
        "totalShares": 6,
        "totalComments": 9,
        "totalReach": 1450,
        "engRate": 0.064
      }
    ]
  }
}
v1Ressources/Posts/getObtenir un post

Renvoie un seul post, y compris sa performance de soumission par plateforme.

Obtenir un post

get/api/v1/posts/{id}
posts:read
Paramètres de requête
idstringobligatoire
Le post à consulter.
Réponse
dataobjectfacultatif
Des champs internes supplémentaires peuvent être présents mais ne font pas partie du contrat stable — ne vous fiez qu'aux champs documentés ici.
idstringfacultatif
Identifiant unique du post.
namestringfacultatif
Nom/étiquette interne du post.
typestringfacultatif
Type de post (duplicata de postType, conservé pour la compatibilité ascendante).
statusstring (draft | scheduled | active | error)facultatif
Statut du cycle de vie du post : draft, scheduled, active ou error.
postTypestring (announcement | event | offer)facultatif
Type de post : announcement, event ou offer.
clientIdstringfacultatif
ID du client auquel appartient ce post.
locationIdstringfacultatif
ID de l'établissement auquel appartient ce post, ou null pour un post de niveau marque.
locationNamestringfacultatif
Nom d'affichage de l'établissement du post, ou null.
clientNamestringfacultatif
Nom d'affichage du client du post, ou null.
platformsarray of stringfacultatif
Les plateformes ciblées par ce post.
messageGooglestringfacultatif
Légende utilisée pour Google, ou null.
messageFacebookstringfacultatif
Légende sociale partagée utilisée par chaque plateforme non-Google, ou null.
ctaTypestringfacultatif
Type d'appel à l'action, ou null.
ctaUrlstringfacultatif
URL de l'appel à l'action, ou null.
ctaUrlFacebookstringfacultatif
URL de l'appel à l'action spécifique à Facebook, ou null.
xThreadbooleanfacultatif
Si le mode fil X est activé (contourne la limite de 280 caractères).
ctaJsonobjectfacultatif
Réglages bruts d'appel à l'action et de ciblage par plateforme.
mediaUrlsarray of objectfacultatif
Médias associés au post, une entrée par pièce jointe de plateforme.
urlstringfacultatif
platformstringfacultatif
typestring (image | video)facultatif
eventTitlestringfacultatif
Titre de l'événement ou de l'offre, ou null.
eventStartAtstringfacultatif
Date/heure de début de l'événement ou de l'offre, au format horodatage ISO 8601, ou null.
eventEndAtstringfacultatif
Date/heure de fin de l'événement ou de l'offre, au format horodatage ISO 8601, ou null.
offerTermsstringfacultatif
Conditions de l'offre, ou null.
offerCouponCodestringfacultatif
Code promo de l'offre, ou null.
offerRedeemUrlstringfacultatif
URL d'utilisation de l'offre, ou null.
scheduledForstringfacultatif
Date/heure de publication programmée du post, au format horodatage ISO 8601, ou null pour publier immédiatement.
createdAtstringfacultatif
Date de création du post, au format horodatage ISO 8601.
performancearray of objectfacultatif
Performance de soumission par plateforme pour ce post.
submissionIdstringfacultatif
Identifiant unique de la soumission à la plateforme.
connectionIdstringfacultatif
ID de la connexion par laquelle cette soumission a été envoyée.
sitestringfacultatif
La plateforme ciblée par cette soumission.
viewsnumberfacultatif
Nombre total de vues, ou null si pas encore disponible.
clicksnumberfacultatif
Nombre total de clics, ou null si pas encore disponible.
reactionsnumberfacultatif
Nombre total de réactions.
sharesnumberfacultatif
Nombre total de partages.
commentsnumberfacultatif
Nombre total de commentaires.
statusstringfacultatif
Statut de cette soumission à la plateforme : pending, active, error ou deleted.
platformPostIdstringfacultatif
L'identifiant propre à la plateforme pour le post publié, ou null.
postLinkstringfacultatif
URL publique du post publié sur cette plateforme, ou null.
reviewStatestringfacultatif
État de modération Google (processing, live, rejected), ou null pour les autres plateformes.
errorMessagestringfacultatif
Message d'erreur si cette soumission a échoué, ou null.
Erreurs
401Clé API manquante, invalide, expirée ou révoquée.
403La clé n'a pas la permission requise, ou n'est pas autorisée pour ce client/établissement.
404La ressource est introuvable, ou n'appartient pas à votre agence.
429Trop de requêtes. Réessayez après le nombre de secondes indiqué dans l'en-tête Retry-After.
get/api/v1/posts/{id}
Votre clé API
id *
{
  "data": {
    "id": "cm_post_abc123",
    "name": "Fall Special Announcement",
    "type": "announcement",
    "status": "scheduled",
    "postType": "announcement",
    "clientId": "cm_client_1",
    "locationId": "cm_loc_1",
    "locationName": "Acme Dental — Downtown",
    "clientName": "Acme Dental",
    "platforms": [
      "google",
      "facebook"
    ],
    "messageGoogle": "Join us this weekend for our fall special — 20% off all services!",
    "messageFacebook": "Join us this weekend for our fall special — 20% off all services!",
    "ctaType": "learn_more",
    "ctaUrl": "https://acmedental.example.com/fall-special",
    "ctaUrlFacebook": null,
    "xThread": false,
    "ctaJson": {
      "ctaType": "learn_more",
      "ctaUrl": "https://acmedental.example.com/fall-special",
      "ctaUrlFacebook": null,
      "xThread": false
    },
    "mediaUrls": [
      {
        "url": "https://cdn.synup.com/uploads/a1/promo.jpg",
        "platform": "facebook",
        "type": "image"
      }
    ],
    "eventTitle": null,
    "eventStartAt": null,
    "eventEndAt": null,
    "offerTerms": null,
    "offerCouponCode": null,
    "offerRedeemUrl": null,
    "scheduledFor": "2026-02-10T15:00:00.000Z",
    "createdAt": "2026-01-20T09:12:00.000Z",
    "performance": [
      {
        "submissionId": "cm_sub_xyz789",
        "connectionId": "cm_conn_1",
        "site": "facebook",
        "views": 890,
        "clicks": null,
        "reactions": 42,
        "shares": 6,
        "comments": 9,
        "status": "active",
        "platformPostId": "1234567890",
        "postLink": "https://www.facebook.com/1234567890",
        "reviewState": null,
        "errorMessage": null
      }
    ]
  }
}
v1Ressources/Posts/patchMettre à jour un post

Met à jour un post modifiable (draft, scheduled, error ou active) et réconcilie ses soumissions par plateforme en conséquence. Si le post n'est ni programmé ni enregistré comme brouillon, cela peut publier ou modifier ce qui est déjà en ligne sur ses plateformes.

Mettre à jour un post

patch/api/v1/posts/{id}
posts:write
Paramètres de requête
idstringobligatoire
Le post à mettre à jour.
Corps de la requête
locationIdstringfacultatif
L'établissement pour lequel publier. Fournissez ceci ou clientId.
clientIdstringfacultatif
Le client pour lequel publier au niveau marque. Fournissez ceci ou locationId.
namestringfacultatif
Nom/étiquette interne du post. Obligatoire, non vide.
postTypestring (announcement | event | offer)facultatif
Type de post. event et offer sont réservés à Google.
platformsarray of string (google | facebook | instagram | x | linkedin | pinterest | mastodon | bluesky | threads | tiktok)facultatif
Plateformes cibles. Au moins une est requise.
connectionIdsarray of stringfacultatif
IDs de connexion explicites par lesquels publier, au lieu de résoudre les plateformes vers des connexions.
messageGooglestringfacultatif
Légende pour Google. Requise quand google est sélectionné, sauf en brouillon.
messageFacebookstringfacultatif
Légende sociale partagée pour chaque plateforme non-Google sélectionnée. Requise sauf en brouillon.
ctaTypestring (learn_more | sign_up | order_online | book | buy | call_now)facultatif
Type d'appel à l'action.
ctaUrlstringfacultatif
URL de destination de l'appel à l'action.
mediaUrlsarray of objectfacultatif
Médias à joindre, une entrée par pièce jointe de plateforme.
urlstringfacultatif
platformstringfacultatif
typestring (image | video)facultatif
eventTitlestringfacultatif
Titre de l'événement ou de l'offre. Requis pour un événement/une offre Google, sauf en brouillon.
eventStartAtstringfacultatif
Date/heure de début de l'événement ou de l'offre, au format horodatage ISO 8601. Requise pour un événement/une offre Google, sauf en brouillon.
eventEndAtstringfacultatif
Date/heure de fin de l'événement ou de l'offre, au format horodatage ISO 8601. Doit être après le début.
offerTermsstringfacultatif
Conditions de l'offre.
offerCouponCodestringfacultatif
Code promo de l'offre.
offerRedeemUrlstringfacultatif
URL d'utilisation de l'offre.
scheduledForstringfacultatif
Publier à ce futur horodatage ISO 8601 au lieu d'immédiatement.
draftbooleanfacultatif
Enregistrer sans publier. Ignore les vérifications de champs requis ; les vérifications structurelles (limites, règles de médias) s'appliquent toujours.
Réponse
dataobjectfacultatif
Une plateforme demandée sans connexion active, ou un champ requis manquant avant que le post puisse être publié, ne fait jamais échouer cet appel — le post est quand même enregistré. Quand l'un de ces cas se présente, status vaut "no_connection" ou "incomplete" et le post est niché dessous sous la forme post.{id,status} ; en cas de publication propre, l'id/status de premier niveau décrivent directement le post.
idstringfacultatif
Identifiant unique du post.
statusstringfacultatif
Statut du cycle de vie du post : draft, scheduled, active ou error.
missingFieldsarray of stringfacultatif
Champs encore nécessaires avant que ce post puisse être mis en ligne, le cas échéant.
missingPlatformsarray of stringfacultatif
Plateformes demandées sans connexion active, le cas échéant.
scopestring (location | client)facultatif
Si l'écart de connexion/champ s'applique au niveau de l'établissement ou du client.
postobjectfacultatif
Le post qui a été créé ou mis à jour.
idstringfacultatif
Identifiant unique du post.
statusstringfacultatif
Statut du cycle de vie du post : draft, scheduled, active ou error.
Erreurs
400Il manque un paramètre requis à la requête, ou elle est invalide.
401Clé API manquante, invalide, expirée ou révoquée.
403La clé n'a pas la permission requise, ou n'est pas autorisée pour ce client/établissement.
404La ressource est introuvable, ou n'appartient pas à votre agence.
422Il manque un paramètre requis à la requête, ou elle est invalide.
429Trop de requêtes. Réessayez après le nombre de secondes indiqué dans l'en-tête Retry-After.
patch/api/v1/posts/{id}
Votre clé API
id *
Corps de la requête
{
  "data": {
    "id": "cm_post_abc123",
    "name": "Fall Special Announcement (updated)",
    "type": "announcement",
    "status": "scheduled",
    "postType": "announcement",
    "clientId": "cm_client_1",
    "locationId": "cm_loc_1",
    "platforms": [
      "google",
      "facebook"
    ],
    "messageGoogle": "Join us this weekend — now 25% off all services!",
    "messageFacebook": "Join us this weekend — now 25% off all services!",
    "ctaType": "learn_more",
    "ctaUrl": "https://acmedental.example.com/fall-special",
    "ctaUrlFacebook": null,
    "xThread": false,
    "ctaJson": {
      "ctaType": "learn_more",
      "ctaUrl": "https://acmedental.example.com/fall-special",
      "ctaUrlFacebook": null,
      "xThread": false
    },
    "mediaUrls": [
      {
        "url": "https://cdn.synup.com/uploads/a1/promo.jpg",
        "platform": "facebook",
        "type": "image"
      }
    ],
    "eventTitle": null,
    "eventStartAt": null,
    "eventEndAt": null,
    "offerTerms": null,
    "offerCouponCode": null,
    "offerRedeemUrl": null,
    "scheduledFor": "2026-02-10T15:00:00.000Z",
    "createdAt": "2026-01-20T09:12:00.000Z",
    "performance": []
  }
}
v1Ressources/Posts/deleteDépublier et supprimer un post

Dépublie un post de chaque plateforme sur laquelle il avait été soumis — une action réelle et immédiate, irréversible. Ce n'est que lorsque la dépublication réussit sur toutes les plateformes que le post disparaît aussi de cette API ; si une plateforme échoue, rien n'est archivé et le post reste visible afin que l'échec puisse être retenté. Cette API ne supprime jamais définitivement l'enregistrement du post.

Dépublier et supprimer un post

delete/api/v1/posts/{id}
posts:write
Paramètres de requête
idstringobligatoire
Le post à supprimer.
Réponse
dataobjectfacultatif
idstringfacultatif
Identifiant unique du post.
okbooleanfacultatif
Si toutes les soumissions à la plateforme ont bien été dépubliées.
deletednumberfacultatif
Nombre de soumissions à la plateforme dépubliées avec succès.
failedarray of objectfacultatif
Soumissions à la plateforme dont la dépublication a échoué, le cas échéant.
connectionIdstringfacultatif
ID de la connexion dont la dépublication a échoué.
platformstringfacultatif
La plateforme concernée par cette ligne.
errorstringfacultatif
Message d'erreur décrivant pourquoi la dépublication a échoué.
Erreurs
401Clé API manquante, invalide, expirée ou révoquée.
403La clé n'a pas la permission requise, ou n'est pas autorisée pour ce client/établissement.
404La ressource est introuvable, ou n'appartient pas à votre agence.
429Trop de requêtes. Réessayez après le nombre de secondes indiqué dans l'en-tête Retry-After.
delete/api/v1/posts/{id}
Votre clé API
id *
{
  "data": {
    "id": "cm_post_abc123",
    "ok": true,
    "deleted": 2,
    "failed": []
  }
}
v1Ressources/Posts/postPublier un post immédiatement

Force la soumission immédiate d'un post en brouillon ou en erreur, en relançant les soumissions par plateforme en attente ou échouées. Cela envoie du contenu réel aux plateformes connectées du post, dès maintenant.

Publier un post immédiatement

post/api/v1/posts/{id}/publish
posts:write
Paramètres de requête
idstringobligatoire
Le post à publier.
Réponse
dataobjectfacultatif
retryingnumberfacultatif
Nombre de soumissions à la plateforme remises en file pour livraison.
Erreurs
401Clé API manquante, invalide, expirée ou révoquée.
403La clé n'a pas la permission requise, ou n'est pas autorisée pour ce client/établissement.
404La ressource est introuvable, ou n'appartient pas à votre agence.
422Il manque un paramètre requis à la requête, ou elle est invalide.
429Trop de requêtes. Réessayez après le nombre de secondes indiqué dans l'en-tête Retry-After.
post/api/v1/posts/{id}/publish
Votre clé API
id *
{
  "data": {
    "retrying": 2
  }
}