Review Invites
Suchen und Verwalten der Empfänger in Ihren Review-Invite-Kampagnen.
Sucht Empfänger nach Name, E-Mail-Adresse oder Telefonnummer über die Review-Invite-Kampagnen Ihrer Agentur hinweg.
Empfänger suchen
/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
}
}Fügt einer Review-Invite-Kampagne einen oder mehrere Empfänger hinzu, dedupliziert gegen die Charge selbst und gegen alle bereits auf der Kampagne vorhandenen Empfänger. Warnung — dies kann einen echten Nachrichtenversand auslösen: Ist die Zielkampagne bereits gestartet und die automatische Zustellung aktiv, werden die neu hinzugefügten Empfänger sofort in die Warteschlange eingereiht und an ihre echte E-Mail-Adresse oder Telefonnummer gesendet.
Empfänger zu einer Kampagne hinzufügen
/api/v1/review-invites{
"data": {
"count": 1,
"duplicates": 0,
"alreadyPresent": 0
}
}Korrigiert Name, E-Mail-Adresse, Telefonnummer oder Kontakttyp eines Empfängers. E-Mail-Adresse und Telefonnummer werden eingefroren, sobald eine Nachricht an diesen Empfänger gesendet wurde — eine Änderung nach einem Versand liefert einen 409, da Zustellbestätigungen und Antworten an die tatsächlich verwendete Adresse gebunden sind.
Empfänger aktualisieren
/api/v1/review-invites/update{
"data": {
"id": "cm_recip_1",
"name": "Jordan Lee",
"email": "jordan@example.com",
"phone": null,
"contactType": "Customer",
"status": "pending"
}
}Listet die Review-Invite-Kampagnen eines Standorts auf, neueste zuerst.
Kampagnen auflisten
/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
}
}Erstellt eine neue Review-Invite-Kampagne als Entwurf. locationId ist erforderlich; alles Weitere kann jetzt oder später über den Update-Endpunkt gesetzt werden. Verwenden Sie den Aktions-Endpunkt, um sie nach der Konfiguration zu veröffentlichen — dies allein versendet nichts.
Eine Kampagne erstellen
/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
}
}Gibt eine einzelne Kampagne anhand ihrer ID zurück.
Eine Kampagne abrufen
/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
}
}Bearbeitet die Konfiguration einer Kampagne. Übergeben Sie nur die Felder, die geändert werden sollen. Um den Lebenszyklusstatus zu ändern (publish, stop, clone, archive, unarchive), verwenden Sie den Aktions-Endpunkt statt status hier direkt zu setzen.
Eine Kampagne aktualisieren
/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
}
}Führt eine Lebenszyklusaktion für eine Kampagne aus. publish startet sie — ist autoSend aktiviert, werden sofort echte E-Mails oder SMS versendet, und dies ist pro Kanal abgesichert: Eine Kampagne mit EMAIL benötigt eine verifizierte Absenderdomain für den Kunden, eine mit SMS benötigt eine carrier-verifizierte Nummer für den Standort. Schlägt eine dieser Voraussetzungen fehl, wird ein erklärender 422 zurückgegeben — das Bereitstellen einer Domain oder Telefonnummer ist ein reiner UI-Schritt, den diese API nicht für Sie erledigen kann. stop hält eine aktive Kampagne an. clone dupliziert sie als neuen Entwurf. autoSend schaltet den automatischen Versand für neue Empfänger ein oder aus — übergeben Sie on. archive archiviert eine gestoppte Kampagne; bei einer noch aktiven ist dies ein No-op, kein Fehler — die Antwort ist {id, skipped: true} statt der vollständigen Kampagne, prüfen Sie also skipped, statt anzunehmen, dass data immer eine Campaign ist. unarchive stellt eine archivierte Kampagne wieder her.
Eine Kampagnen-Lebenszyklusaktion ausführen
/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
}
}Listet die gespeicherten Review-Invite-Nachrichtenvorlagen der Agentur auf — wiederverwendbare E-Mail-/SMS-Inhalte für Kampagnen.
Nachrichtenvorlagen auflisten
/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"
}
]
}Erstellt eine wiederverwendbare Review-Invite-Nachrichtenvorlage. content ist das Rich-Text-JSON-Format, das der Editor des Kampagnen-Builders erzeugt.
Eine Nachrichtenvorlage erstellen
/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"
}
}Bearbeitet eine Vorlage. Übergeben Sie nur die Felder, die geändert werden sollen.
Eine Nachrichtenvorlage aktualisieren
/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"
}
}Löscht eine Vorlage endgültig. Dies wirkt sich nicht auf Kampagnen aus, die deren Inhalt bereits verwenden — es entfernt nur die wiederverwendbare Vorlage.
Eine Nachrichtenvorlage löschen
/api/v1/review-invites/templates/{id}{
"data": {
"ok": true
}
}