Invitations à laisser un avis
Recherchez et gérez les destinataires de vos campagnes d'invitation à laisser un avis.
Recherche des destinataires par nom, e-mail ou téléphone sur les campagnes d'invitation à laisser un avis de votre agence.
Rechercher des destinataires
/api/v1/review-invites{
"data": {
"recipients": [
{
"id": "cm_recip_1",
"name": "Jordan Lee",
"email": "jordan@example.com",
"phone": "",
"source": "manual",
"contactType": "Customer",
"status": "pending",
"campaignId": "cm_campaign_1",
"campaignName": "Spring Checkup Follow-up",
"locationId": "cm_loc_1",
"locationLabel": "Acme Dental — Downtown · Austin",
"alreadyMessaged": false
}
],
"count": 1
}
}Ajoute un ou plusieurs destinataires à une campagne d'invitation à laisser un avis, dédupliqués au sein du lot lui-même et par rapport à tous ceux déjà sur la campagne. Attention — cela peut déclencher un envoi de message réel : si la campagne cible est déjà lancée avec l'envoi automatique activé, les destinataires nouvellement ajoutés sont mis en file et envoyés immédiatement, sur leur véritable adresse e-mail ou numéro de téléphone.
Ajouter des destinataires à une campagne
/api/v1/review-invites{
"data": {
"count": 1,
"duplicates": 0,
"alreadyPresent": 0
}
}Corrige le nom, l'e-mail, le téléphone ou le type de contact d'un destinataire. L'e-mail et le téléphone sont figés une fois qu'un message a été envoyé à ce destinataire — modifier l'un ou l'autre après un envoi renvoie une erreur 409, puisque les accusés de réception et les réponses sont liés à l'adresse réellement utilisée.
Mettre à jour un destinataire
/api/v1/review-invites/update{
"data": {
"id": "cm_recip_1",
"name": "Jordan Lee",
"email": "jordan@example.com",
"phone": null,
"contactType": "Customer",
"status": "pending"
}
}Liste les campagnes d'invitation à laisser un avis d'un établissement, les plus récentes en premier.
Lister les campagnes
/api/v1/review-invites/campaigns{
"data": {
"rows": [
{
"id": "cm_campaign_1",
"name": "Spring Checkup Follow-up",
"type": "email_sms",
"collectMode": "directory",
"status": "draft",
"archived": false,
"locationLabel": "Acme Dental — Downtown · Austin",
"emailsSent": 0,
"smsSent": 0,
"repliesCount": 0,
"clickRate": null,
"followUpSent": 0,
"autoSend": true,
"yelpCompliant": true,
"staticUrl": null
}
],
"total": 1
}
}Crée une nouvelle campagne d'invitation à laisser un avis à l'état de brouillon. locationId est obligatoire ; le reste peut être défini maintenant ou plus tard via l'endpoint de mise à jour. Utilisez l'endpoint d'action pour la publier une fois configurée — ceci seul n'envoie rien.
Créer une campagne
/api/v1/review-invites/campaigns{
"data": {
"id": "cm_campaign_1",
"agencyId": "cm_agency_1",
"locationId": "cm_loc_1",
"clientLocationId": "cm_loc_1",
"name": "Spring Checkup Follow-up",
"campaignType": "email_sms",
"channels": "EMAIL",
"status": "draft",
"fromEmail": null,
"replyToEmail": null,
"emailSubject": null,
"emailBody": null,
"smsBody": null,
"smsReviewSite": null,
"reviewSites": null,
"screeningEnabled": false,
"landingTitle": null,
"landingContent": null,
"hideAddress": false,
"hideBusinessName": false,
"followups": null,
"stopFollowupOnClick": false,
"scheduleAt": null,
"timezone": null,
"autoSend": true,
"staticUrl": null,
"launchedAt": null,
"emailHtml": null,
"thankYouEnabled": false,
"thankYouSubject": null,
"thankYouBody": null,
"thankYouDelayHours": 12,
"funnelThreshold": 4,
"funnelStyle": null,
"lowRankContent": null,
"hideFeedbackBox": false,
"ratingMechanism": null,
"askName": true,
"askFeedback": true,
"archivedAt": null,
"hideImage": false,
"clientId": "cm_client_1",
"createdAt": "2026-01-20T09:00:00.000Z",
"updatedAt": "2026-01-20T09:00:00.000Z",
"createdByUserId": null,
"createdByType": "user",
"archived": false
}
}Renvoie une campagne unique par son id.
Récupérer une campagne
/api/v1/review-invites/campaigns/{id}{
"data": {
"id": "cm_campaign_1",
"agencyId": "cm_agency_1",
"locationId": "cm_loc_1",
"clientLocationId": "cm_loc_1",
"name": "Spring Checkup Follow-up",
"campaignType": "email_sms",
"channels": "EMAIL",
"status": "draft",
"fromEmail": null,
"replyToEmail": null,
"emailSubject": "How was your visit?",
"emailBody": null,
"smsBody": null,
"smsReviewSite": null,
"reviewSites": null,
"screeningEnabled": false,
"landingTitle": null,
"landingContent": null,
"hideAddress": false,
"hideBusinessName": false,
"followups": null,
"stopFollowupOnClick": false,
"scheduleAt": null,
"timezone": null,
"autoSend": true,
"staticUrl": null,
"launchedAt": null,
"emailHtml": null,
"thankYouEnabled": false,
"thankYouSubject": null,
"thankYouBody": null,
"thankYouDelayHours": 12,
"funnelThreshold": 4,
"funnelStyle": null,
"lowRankContent": null,
"hideFeedbackBox": false,
"ratingMechanism": null,
"askName": true,
"askFeedback": true,
"archivedAt": null,
"hideImage": false,
"clientId": "cm_client_1",
"createdAt": "2026-01-20T09:00:00.000Z",
"updatedAt": "2026-01-20T09:00:00.000Z",
"createdByUserId": null,
"createdByType": "user",
"archived": false
}
}Modifie la configuration d'une campagne. Ne transmettez que les champs à modifier. Pour changer le statut du cycle de vie (publish, stop, clone, archive, unarchive), utilisez l'endpoint d'action plutôt que de définir status directement ici.
Mettre à jour une campagne
/api/v1/review-invites/campaigns/{id}{
"data": {
"id": "cm_campaign_1",
"agencyId": "cm_agency_1",
"locationId": "cm_loc_1",
"clientLocationId": "cm_loc_1",
"name": "Spring Checkup Follow-up (updated)",
"campaignType": "email_sms",
"channels": "EMAIL",
"status": "draft",
"fromEmail": null,
"replyToEmail": null,
"emailSubject": "How was your visit?",
"emailBody": null,
"smsBody": null,
"smsReviewSite": null,
"reviewSites": null,
"screeningEnabled": false,
"landingTitle": null,
"landingContent": null,
"hideAddress": false,
"hideBusinessName": false,
"followups": null,
"stopFollowupOnClick": false,
"scheduleAt": null,
"timezone": null,
"autoSend": true,
"staticUrl": null,
"launchedAt": null,
"emailHtml": null,
"thankYouEnabled": false,
"thankYouSubject": null,
"thankYouBody": null,
"thankYouDelayHours": 12,
"funnelThreshold": 4,
"funnelStyle": null,
"lowRankContent": null,
"hideFeedbackBox": false,
"ratingMechanism": null,
"askName": true,
"askFeedback": true,
"archivedAt": null,
"hideImage": false,
"clientId": "cm_client_1",
"createdAt": "2026-01-20T09:00:00.000Z",
"updatedAt": "2026-01-21T10:00:00.000Z",
"createdByUserId": null,
"createdByType": "user",
"archived": false
}
}Exécute une action de cycle de vie sur une campagne. publish la lance — si autoSend est activé, cela déclenche immédiatement l'envoi de vrais e-mails ou SMS, et c'est conditionné par canal : une campagne incluant EMAIL nécessite un domaine d'envoi vérifié pour le client, et une incluant SMS nécessite un numéro vérifié par l'opérateur pour l'établissement. Si l'une de ces conditions échoue, une erreur 422 explicative est renvoyée ; le provisionnement d'un domaine ou d'un numéro de téléphone est une étape réservée à l'interface, pas quelque chose que cette API peut faire à votre place. stop arrête une campagne active. clone la duplique en un nouveau brouillon. autoSend active ou désactive l'envoi automatique pour les nouveaux destinataires — transmettez on. archive archive une campagne arrêtée ; sur une campagne encore active, c'est un no-op, pas une erreur — la réponse est {id, skipped: true} au lieu de la campagne complète, donc vérifiez skipped plutôt que de supposer que data est toujours une Campaign. unarchive restaure une campagne archivée.
Exécuter une action de cycle de vie sur une campagne
/api/v1/review-invites/campaigns/{id}/action{
"data": {
"id": "cm_campaign_1",
"agencyId": "cm_agency_1",
"locationId": "cm_loc_1",
"clientLocationId": "cm_loc_1",
"name": "Spring Checkup Follow-up (copy)",
"campaignType": "email_sms",
"channels": "EMAIL",
"status": "draft",
"fromEmail": null,
"replyToEmail": null,
"emailSubject": "How was your visit?",
"emailBody": null,
"smsBody": null,
"smsReviewSite": null,
"reviewSites": null,
"screeningEnabled": false,
"landingTitle": null,
"landingContent": null,
"hideAddress": false,
"hideBusinessName": false,
"followups": null,
"stopFollowupOnClick": false,
"scheduleAt": null,
"timezone": null,
"autoSend": false,
"staticUrl": null,
"launchedAt": null,
"emailHtml": null,
"thankYouEnabled": false,
"thankYouSubject": null,
"thankYouBody": null,
"thankYouDelayHours": 12,
"funnelThreshold": 4,
"funnelStyle": null,
"lowRankContent": null,
"hideFeedbackBox": false,
"ratingMechanism": null,
"askName": true,
"askFeedback": true,
"archivedAt": null,
"hideImage": false,
"clientId": "cm_client_1",
"createdAt": "2026-01-21T10:05:00.000Z",
"updatedAt": "2026-01-21T10:05:00.000Z",
"createdByUserId": null,
"createdByType": "user",
"archived": false
}
}Liste les modèles de messages d'invitation à laisser un avis enregistrés par l'agence — du contenu e-mail/SMS réutilisable pour les campagnes.
Lister les modèles de messages
/api/v1/review-invites/templates{
"data": [
{
"id": "cm_tmpl_1",
"name": "Standard follow-up",
"description": "Default post-visit email template",
"content": null,
"assignedLocationIds": [],
"createdAt": "2026-01-15T09:00:00.000Z"
}
]
}Crée un modèle de message d'invitation à laisser un avis réutilisable. content est le format JSON de texte enrichi produit par l'éditeur du créateur de campagnes.
Créer un modèle de message
/api/v1/review-invites/templates{
"data": {
"id": "cm_tmpl_1",
"agencyId": "cm_agency_1",
"name": "Standard follow-up",
"description": "Default post-visit email template",
"content": null,
"assignedLocationIds": [],
"createdAt": "2026-01-15T09:00:00.000Z",
"updatedAt": "2026-01-15T09:00:00.000Z"
}
}Modifie un modèle. Ne transmettez que les champs à modifier.
Mettre à jour un modèle de message
/api/v1/review-invites/templates/{id}{
"data": {
"id": "cm_tmpl_1",
"agencyId": "cm_agency_1",
"name": "Standard follow-up",
"description": "Default post-visit email template (updated)",
"content": null,
"assignedLocationIds": [
"cm_loc_1"
],
"createdAt": "2026-01-15T09:00:00.000Z",
"updatedAt": "2026-01-16T09:00:00.000Z"
}
}Supprime définitivement un modèle. Cela n'affecte pas les campagnes utilisant déjà son contenu — cela ne fait que retirer le modèle réutilisable.
Supprimer un modèle de message
/api/v1/review-invites/templates/{id}{
"data": {
"ok": true
}
}