Skip to content
SynupAPI
Get an API key
EVENTcampaign.review_posted

Review posted (campaign-attributed)

Event name: campaign.review_posted

A new review landed at a location with at least one active campaign within the 30-day attribution window. Attribution is location-level. Scope: location-scoped. Delivered as a signed HTTP POST to your Webhooks URL.

Every delivery is signed. Verify X-Synup-Signature before processing — see Synup Webhooks.

Payload

NameTypeRequiredDescription
eventstringoptionalDotted event name.
timestampstringoptionalISO-8601 UTC time the event was emitted.
account_idintegeroptionalSynup account the event belongs to.
location_idstringoptionalNumeric string for location-scoped events; null for brand-scoped events.
dataobjectoptional
data.attributionstringoptionalAlways "location_level".
data.recency_window_daysintegeroptionalAttribution window in days (30).
data.reviewobjectoptionalThe posted review: interaction_id, source, author_name, rating (0-5), rating_scale, title, content, permalink, posted_at.
data.campaignsarray of objectoptionalActive campaigns attributed (max 25, newest first): review_campaign_id, name, launched_at.
Example delivery
{
  "event": "campaign.review_posted",
  "timestamp": "2026-07-15T14:31:09Z",
  "account_id": 11073,
  "location_id": "279381",
  "data": {
    "attribution": "location_level",
    "recency_window_days": 30,
    "review": {
      "interaction_id": "9c8b7a65-4321-4def-8abc-0123456789ab",
      "source": "google",
      "author_name": "Jordan M.",
      "rating": 4.5,
      "rating_scale": "0-5",
      "title": "Great experience",
      "content": "Booked online and everything went smoothly.",
      "permalink": "https://maps.google.com/review/xyz123",
      "posted_at": "2026-07-15T13:58:44Z"
    },
    "campaigns": [
      {
        "review_campaign_id": "8f3a1c72-1e4b-4d90-9a2e-6b1c0f7a4d21",
        "name": "Summer Review Push",
        "launched_at": "2026-07-01T09:00:00Z"
      }
    ]
  }
}