Synupv1
Créer une clé
v1Ressources/Idées de post

Idées de post

Consultez, créez et publiez des idées de post en brouillon en attente de validation, et publiez-les comme de véritables posts.

Renvoie des idées de post selon l'un des trois modes suivants : passez locationId pour la grille (paginée) d'un seul établissement ; passez clientId avec scope=locations pour la synthèse des idées au niveau des établissements sur l'ensemble des établissements d'un client ; ou passez clientId avec scope=brand pour les idées de niveau marque de ce client.

Lister les idées de post

get/api/v1/post-ideas
ideas:read
Paramètres de requête
locationIdstringfacultatif
Lister les idées de cet établissement (mode paginé).
clientIdstringfacultatif
Lister les idées de ce client. Nécessite scope.
scopestring (locations | brand)facultatif
Quel ensemble d'idées de niveau client renvoyer : locations (synthèse sur les établissements du client) ou brand (idées de niveau marque).
bucketstring (idea | holiday | calendar | series)facultatif
Restreint les résultats à une seule catégorie (mode locationId uniquement).
statusstringfacultatif
Restreint les résultats à un seul statut, ou "archived" pour lister les idées archivées à la place (mode locationId uniquement).
seriesIdstringfacultatif
Restreint les résultats aux idées de cette série de contenu (mode locationId uniquement).
searchstringfacultatif
Correspondance insensible à la casse sur le titre de l'idée (mode locationId uniquement).
pageintegerfacultatif
Numéro de page, à partir de 1. Par défaut 1 (mode locationId uniquement).
perPageintegerfacultatif
Résultats par page, jusqu'à 50. Par défaut 20 (mode locationId uniquement).
includeRejectedbooleanfacultatif
Inclut les idées rejetées lors de la validation. Par défaut false (modes clientId uniquement).
Réponse
dataobjectfacultatif
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/post-ideas
Votre clé API
locationId
clientId
scope
bucket
status
seriesId
search
page
perPage
includeRejected
{
  "data": {
    "rows": [
      {
        "id": "cm_idea_abc123",
        "agencyId": "cm_agency_1",
        "locationId": "cm_loc_1",
        "clientLocationId": "cm_loc_1",
        "clientId": null,
        "brandName": null,
        "agentMeta": null,
        "title": "Spotlight our new patient special",
        "content": "Book this month and get 20% off your first cleaning!",
        "imagePrompt": null,
        "imageUrl": null,
        "type": "announcement",
        "status": "draft",
        "bucket": "idea",
        "platforms": [
          "google",
          "facebook"
        ],
        "seriesId": null,
        "scheduledDate": null,
        "scheduledTime": null,
        "observanceName": null,
        "observanceDate": null,
        "generationBatchId": null,
        "generationJobId": null,
        "isUserGenerated": true,
        "source": "os",
        "externalId": "cm_idea_abc123",
        "reviewStatus": null,
        "archived": false,
        "archivedAt": null,
        "createdAt": "2026-01-20T09:00:00.000Z",
        "updatedAt": "2026-01-20T09:00:00.000Z"
      }
    ],
    "total": 1,
    "page": 1,
    "perPage": 20,
    "counts": [
      {
        "bucket": "idea",
        "_count": {
          "id": 4
        }
      }
    ]
  }
}
v1Ressources/Idées de post/postCréer une idée de post

Crée (ou, pour un externalId déjà utilisé, met à jour) une idée de post en brouillon, en attente de validation ou prête à être publiée.

Créer une idée de post

post/api/v1/post-ideas
ideas:write
Corps de la requête
locationIdstringfacultatif
L'établissement concerné par cette idée, ou à omettre pour une idée de niveau marque.
clientIdstringfacultatif
Le client concerné par cette idée (idées de niveau marque).
titlestringobligatoire
Le titre de l'idée. Requis à la création.
contentstringfacultatif
Le contenu/corps de légende de l'idée.
externalIdstringobligatoire
Un id stable que vous contrôlez — répéter une création avec le même externalId met à jour l'idée existante au lieu de la dupliquer. Requis à la création.
originstring (channel | routine | os_button)obligatoire
D'où provient cette idée : channel, routine ou os_button. Requis à la création.
typestring (announcement | offer | tip | showcase | story | event)facultatif
Type d'idée.
bucketstring (idea | holiday | calendar | series)facultatif
Dans quelle catégorie de grille se trouve l'idée.
platformsarray of stringfacultatif
Plateformes visées par cette idée.
imageUrlstringfacultatif
URL d'une image à joindre à l'idée.
imagePromptstringfacultatif
Le prompt utilisé pour générer l'image de l'idée.
seriesIdstringfacultatif
ID de la série de contenu à laquelle rattacher cette idée.
scheduledDatestringfacultatif
Date de publication prévue (YYYY-MM-DD).
scheduledTimestringfacultatif
Heure de publication prévue.
generationJobIdstringfacultatif
ID du job de génération IA qui a produit cette idée, le cas échéant.
Réponse
dataobjectfacultatif
idstringfacultatif
Identifiant unique de l'idée de post.
createdbooleanfacultatif
Si cet appel a créé une nouvelle idée (false si une idée avec cet externalId existait déjà et a été mise à jour à la place).
reviewStatusstringfacultatif
Portail de validation : null (aucun portail), pending, approved ou rejected.
statusstringfacultatif
Statut de l'idée : draft, published ou archived.
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/post-ideas
Votre clé API
Corps de la requête*
{
  "data": {
    "id": "cm_idea_abc123",
    "created": true,
    "reviewStatus": null,
    "status": "draft"
  }
}
v1Ressources/Idées de post/getObtenir une idée de post

Renvoie une seule idée de post. id accepte soit son propre id, soit l'id externe avec lequel elle a été créée.

Obtenir une idée de post

get/api/v1/post-ideas/{id}
ideas:read
Paramètres de requête
idstringobligatoire
L'idée de post à consulter — son id ou son externalId.
Réponse
dataobjectfacultatif
idstringfacultatif
Identifiant unique de l'idée de post.
locationIdstringfacultatif
ID de l'établissement auquel appartient cette idée, ou null pour une idée de niveau marque.
clientLocationIdstringfacultatif
ID de l'enregistrement d'établissement résolu, ou null.
clientIdstringfacultatif
ID du client auquel appartient cette idée (idées de niveau marque), ou null.
brandNamestringfacultatif
Nom d'affichage du profil de marque, pour les idées de niveau marque, ou null.
titlestringfacultatif
Le titre de l'idée.
contentstringfacultatif
Le contenu/corps de légende de l'idée.
imageUrlstringfacultatif
URL de l'image de l'idée, ou null.
imagePromptstringfacultatif
Le prompt utilisé pour générer l'image de l'idée, ou null.
typestring (announcement | offer | tip | showcase | story | event)facultatif
Type d'idée : announcement, offer, tip, showcase, story ou event.
statusstring (draft | published | archived)facultatif
Statut de l'idée : draft, published ou archived.
bucketstring (idea | holiday | calendar | series)facultatif
Dans quelle catégorie de grille se trouve l'idée : idea, holiday, calendar ou series.
platformsarray of stringfacultatif
Plateformes visées par cette idée.
seriesIdstringfacultatif
ID de la série de contenu à laquelle appartient cette idée, ou null.
scheduledDatestringfacultatif
Date de publication prévue (YYYY-MM-DD), ou null.
scheduledTimestringfacultatif
Heure de publication prévue, ou null.
externalIdstringfacultatif
Id stable avec lequel cette idée a été créée, si elle provient d'une source externe.
sourcestring (os | agent)facultatif
D'où provient l'idée : os (créée dans Synup) ou agent (envoyée par un agent IA).
reviewStatusstring (pending | approved | rejected)facultatif
Portail de validation : null (aucun portail), pending, approved ou rejected.
generationJobIdstringfacultatif
ID du job de génération IA qui a produit cette idée, le cas échéant, ou null.
isUserGeneratedbooleanfacultatif
Si une personne (plutôt qu'un agent) a créé cette idée.
archivedbooleanfacultatif
Si cette idée a été archivée.
archivedAtstringfacultatif
Date d'archivage de cette idée, au format horodatage ISO 8601, ou null.
createdAtstringfacultatif
Date de création de cette idée, au format horodatage ISO 8601.
updatedAtstringfacultatif
Date de dernière mise à jour de cette idée, au format horodatage ISO 8601.
locationNamestringfacultatif
Nom d'affichage de l'établissement de l'idée. Présent uniquement lors de la liste des idées au niveau établissement d'un client.
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/post-ideas/{id}
Votre clé API
id *
{
  "data": {
    "id": "cm_idea_abc123",
    "agencyId": "cm_agency_1",
    "locationId": "cm_loc_1",
    "clientLocationId": "cm_loc_1",
    "clientId": null,
    "brandName": null,
    "agentMeta": null,
    "title": "Spotlight our new patient special",
    "content": "Book this month and get 20% off your first cleaning!",
    "imagePrompt": null,
    "imageUrl": null,
    "type": "announcement",
    "status": "draft",
    "bucket": "idea",
    "platforms": [
      "google",
      "facebook"
    ],
    "seriesId": null,
    "scheduledDate": null,
    "scheduledTime": null,
    "observanceName": null,
    "observanceDate": null,
    "generationBatchId": null,
    "generationJobId": null,
    "isUserGenerated": true,
    "source": "os",
    "externalId": "cm_idea_abc123",
    "reviewStatus": null,
    "archived": false,
    "archivedAt": null,
    "createdAt": "2026-01-20T09:00:00.000Z",
    "updatedAt": "2026-01-20T09:00:00.000Z"
  }
}
v1Ressources/Idées de post/patchMettre à jour une idée de post

Met à jour les champs modifiables d'une idée de post. id accepte soit son propre id, soit l'id externe avec lequel elle a été créée.

Mettre à jour une idée de post

patch/api/v1/post-ideas/{id}
ideas:write
Paramètres de requête
idstringobligatoire
L'idée de post à mettre à jour — son id ou son externalId.
Corps de la requête
titlestringfacultatif
Le titre de l'idée. Requis à la création.
contentstringfacultatif
Le contenu/corps de légende de l'idée.
imageUrlstringfacultatif
URL d'une image à joindre à l'idée.
imagePromptstringfacultatif
Le prompt utilisé pour générer l'image de l'idée.
typestring (announcement | offer | tip | showcase | story | event)facultatif
Type d'idée.
statusstring (draft | published | archived)facultatif
Statut de l'idée.
platformsarray of stringfacultatif
Plateformes visées par cette idée.
scheduledDatestringfacultatif
Date de publication prévue (YYYY-MM-DD).
scheduledTimestringfacultatif
Heure de publication prévue.
Réponse
dataobjectfacultatif
idstringfacultatif
Identifiant unique de l'idée de post.
locationIdstringfacultatif
ID de l'établissement auquel appartient cette idée, ou null pour une idée de niveau marque.
clientLocationIdstringfacultatif
ID de l'enregistrement d'établissement résolu, ou null.
clientIdstringfacultatif
ID du client auquel appartient cette idée (idées de niveau marque), ou null.
brandNamestringfacultatif
Nom d'affichage du profil de marque, pour les idées de niveau marque, ou null.
titlestringfacultatif
Le titre de l'idée.
contentstringfacultatif
Le contenu/corps de légende de l'idée.
imageUrlstringfacultatif
URL de l'image de l'idée, ou null.
imagePromptstringfacultatif
Le prompt utilisé pour générer l'image de l'idée, ou null.
typestring (announcement | offer | tip | showcase | story | event)facultatif
Type d'idée : announcement, offer, tip, showcase, story ou event.
statusstring (draft | published | archived)facultatif
Statut de l'idée : draft, published ou archived.
bucketstring (idea | holiday | calendar | series)facultatif
Dans quelle catégorie de grille se trouve l'idée : idea, holiday, calendar ou series.
platformsarray of stringfacultatif
Plateformes visées par cette idée.
seriesIdstringfacultatif
ID de la série de contenu à laquelle appartient cette idée, ou null.
scheduledDatestringfacultatif
Date de publication prévue (YYYY-MM-DD), ou null.
scheduledTimestringfacultatif
Heure de publication prévue, ou null.
externalIdstringfacultatif
Id stable avec lequel cette idée a été créée, si elle provient d'une source externe.
sourcestring (os | agent)facultatif
D'où provient l'idée : os (créée dans Synup) ou agent (envoyée par un agent IA).
reviewStatusstring (pending | approved | rejected)facultatif
Portail de validation : null (aucun portail), pending, approved ou rejected.
generationJobIdstringfacultatif
ID du job de génération IA qui a produit cette idée, le cas échéant, ou null.
isUserGeneratedbooleanfacultatif
Si une personne (plutôt qu'un agent) a créé cette idée.
archivedbooleanfacultatif
Si cette idée a été archivée.
archivedAtstringfacultatif
Date d'archivage de cette idée, au format horodatage ISO 8601, ou null.
createdAtstringfacultatif
Date de création de cette idée, au format horodatage ISO 8601.
updatedAtstringfacultatif
Date de dernière mise à jour de cette idée, au format horodatage ISO 8601.
locationNamestringfacultatif
Nom d'affichage de l'établissement de l'idée. Présent uniquement lors de la liste des idées au niveau établissement d'un client.
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.
429Trop de requêtes. Réessayez après le nombre de secondes indiqué dans l'en-tête Retry-After.
patch/api/v1/post-ideas/{id}
Votre clé API
id *
Corps de la requête
{
  "data": {
    "id": "cm_idea_abc123",
    "agencyId": "cm_agency_1",
    "locationId": "cm_loc_1",
    "clientLocationId": "cm_loc_1",
    "clientId": null,
    "brandName": null,
    "agentMeta": null,
    "title": "Spotlight our new patient special (updated)",
    "content": "Book this month and get 25% off your first cleaning!",
    "imagePrompt": null,
    "imageUrl": null,
    "type": "announcement",
    "status": "draft",
    "bucket": "idea",
    "platforms": [
      "google",
      "facebook"
    ],
    "seriesId": null,
    "scheduledDate": null,
    "scheduledTime": null,
    "observanceName": null,
    "observanceDate": null,
    "generationBatchId": null,
    "generationJobId": null,
    "isUserGenerated": true,
    "source": "os",
    "externalId": "cm_idea_abc123",
    "reviewStatus": null,
    "archived": false,
    "archivedAt": null,
    "createdAt": "2026-01-20T09:00:00.000Z",
    "updatedAt": "2026-01-20T09:05:00.000Z"
  }
}
v1Ressources/Idées de post/deleteArchiver une idée de post

Supprime (archive) une idée de post en suppression douce. id accepte soit son propre id, soit l'id externe avec lequel elle a été créée.

Archiver une idée de post

delete/api/v1/post-ideas/{id}
ideas:write
Paramètres de requête
idstringobligatoire
L'idée de post à archiver — son id ou son externalId.
Réponse
dataobjectfacultatif
idstringfacultatif
Identifiant unique de l'idée de post.
archivedbooleanfacultatif
Si cette idée a été archivée.
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/post-ideas/{id}
Votre clé API
id *
{
  "data": {
    "id": "cm_idea_abc123",
    "archived": true
  }
}
v1Ressources/Idées de post/postPublier une idée de post

Publie une idée de post sous forme de véritable post, en le soumettant à ses plateformes cibles. Sauf si scheduledFor ou draft est défini, cela met du contenu réel en ligne immédiatement. id accepte soit le propre id de l'idée, soit l'id externe avec lequel elle a été créée.

Publier une idée de post

post/api/v1/post-ideas/{id}/publish
posts:write
Paramètres de requête
idstringobligatoire
L'idée de post à publier — son id ou son externalId.
Corps de la requête
scheduledForstringfacultatif
Publier à ce futur horodatage ISO 8601 au lieu d'immédiatement.
draftbooleanfacultatif
Enregistrer comme post en brouillon au lieu de publier immédiatement.
Réponse
dataobjectfacultatif
Une plateforme demandée sans connexion active, ou un champ dont l'idée a besoin avant de pouvoir être mise en ligne, ne fait jamais échouer cet appel — l'idée est plutôt enregistrée comme post en brouillon. Rappeler cette route pour une idée qui a déjà un post renvoie alreadyPublished: true au lieu d'en créer un second.
postIdstringfacultatif
ID du post publié à partir de cette idée, ou null si la publication n'a pas abouti.
statusstringfacultatif
Statut de l'idée : draft, published ou archived.
ideaIdstringfacultatif
ID de l'idée de post qui a été publiée.
alreadyPublishedbooleanfacultatif
Si cette idée avait déjà un post issu d'un appel précédent — quand true, rien de nouveau n'a été publié.
missingFieldsarray of stringfacultatif
Champs encore nécessaires avant que le post résultant 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.
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.
post/api/v1/post-ideas/{id}/publish
Votre clé API
id *
Corps de la requête
{
  "data": {
    "postId": "cm_post_xyz789",
    "status": "scheduled",
    "ideaId": "cm_idea_abc123"
  }
}