Skip to content
Get API key (opens in a new tab)

product-review.submitted

Sent when a customer submits a product review, with the review, the reviewer's profile and their loyalty standing.

Use it to copy reviews into a CRM or a support tool, or to alert a team about low ratings.

When it fires

  • Once per review, when a customer submits it through a Cevoid review form or widget.
  • Reviews imported through the API start no Flows, and past reviews cannot be enrolled later.
  • The review can still be waiting for moderation: check data.product_review.status before you show it anywhere.
  • profile, points and tier describe the reviewer.

Receive it

In Settings โ†’ Flows, choose Create flow โ†’ Forward event โ†’ Webhook and pick the Product review submitted trigger. See Set up a webhook.

The Company review request action can also send to a webhook from this trigger. Its data is different from the payload below.

Payload

Example payload
{
  "created_at": "2026-08-12T18:40:23.000Z",
  "data": {
    "points": {
      "expiring_30d": 0,
      "expiring_60d": 200,
      "expiring_90d": 200,
      "lifetime_earned": 3870,
      "lifetime_spent": 2450,
      "next_expiration_at": "2026-09-30T23:59:59.999Z",
      "pending": 130,
      "spendable": 1290,
      "total": 1420
    },
    "product_review": {
      "answers": [
        {
          "format": "SCALE",
          "prompt": "How does it fit?",
          "scale": {
            "center_label": "Just right",
            "end_label": "Too large",
            "start_label": "Too small",
            "steps": 5
          },
          "type": "PRODUCT_ATTRIBUTE",
          "value": 3
        }
      ],
      "approved_at": "2026-08-12T18:40:22.000Z",
      "body": "The linen is soft from the first wash and the medium fits as expected.",
      "channel": "REQUEST",
      "created_at": "2026-08-12T18:39:02.000Z",
      "helpful_down_count": 0,
      "helpful_up_count": 0,
      "id": "rev_9d4f2k7m1x8wqa",
      "identity_verification": "CONFIRMED",
      "is_incentivized": false,
      "is_insider": false,
      "language": "en",
      "market_id": "mar_s3k8w1n5q2x7ye",
      "media": [],
      "order_id": "ord_7k2m4n8p5x9qwe",
      "product": {
        "id": "prd_2w8k4m6q1x9zne",
        "options": [
          "size:M"
        ],
        "price": {
          "amount": 1190,
          "currency": "SEK"
        },
        "sku": "LINEN-SHIRT-M",
        "title": "Linen shirt",
        "variant_id": "var_6t1q9m3k7w2xpa"
      },
      "profile_id": "prf_c4n8x2q1m5v7rt",
      "published_at": "2026-08-12T18:40:22.000Z",
      "purchase_verification": "VERIFIED",
      "rating": 5,
      "rejection_reasons": [],
      "responses": [],
      "status": "PUBLISHED",
      "submitted_at": "2026-08-12T18:40:21.000Z",
      "title": "Soft and true to size",
      "updated_at": "2026-08-12T18:40:22.000Z"
    },
    "profile": {
      "country": "SE",
      "created_at": "2026-03-14T08:12:44.000Z",
      "email": "astrid.lindqvist@example.com",
      "external_id": "7391056823401",
      "first_name": "Astrid",
      "id": "prf_c4n8x2q1m5v7rt",
      "language": "sv",
      "last_name": "Lindqvist",
      "name": "Astrid Lindqvist",
      "name_display_format": "FIRST_LAST_INITIAL",
      "updated_at": "2026-08-03T11:58:02.000Z"
    },
    "tier": {
      "current_tier": {
        "expires_at": "2026-12-31T23:59:59.999Z",
        "id": "tier_0m3v8k2q9x1sdf",
        "name": "Silver"
      },
      "next_tier": {
        "entry_rewards": [
          {
            "title": "15% off your next order",
            "type": "DISCOUNT_CODE"
          }
        ],
        "id": "tier_5p7w2n4k8c1zyh",
        "milestones": [
          {
            "current": 1420,
            "percent_complete": 71,
            "remaining": 580,
            "required": 2000,
            "type": "POINTS"
          }
        ],
        "name": "Gold",
        "perks": [
          {
            "value": "Free shipping on every order"
          }
        ]
      }
    }
  },
  "id": "c7e9a1b3-5d2f-84c6-a8e0-1b3d5f7a9c2e",
  "origin": {
    "flow": {
      "id": "wfl_8q2m5k1x7w4npa",
      "name": "Sync product reviews to CRM"
    }
  },
  "type": "product-review.submitted",
  "version": 1
}
Show all 122 linesShow fewer lines
typestringrequired

The event type, always product-review.submitted.

idstring<uuid>required

Unique event ID, the same value as the webhook-id header. Retries keep it; a replay gets a new one.

created_atstring<date-time>required

When the delivery was scheduled to send, in ISO 8601 UTC: for a Flow, when its webhook action ran, after any Wait step. Retries and replays keep it.

versionintegerrequired

Payload version, currently 1.

originobject

Why this destination received the event. Absent when no Flow sent it.

origin properties
flowobjectrequired

The Flow that sent the event.

flow properties
idstringrequired

Flow ID.

namestringrequired

Flow name at the time of the delivery.

dataobjectrequired

The product review and its reviewer.

data properties
product_reviewobject

The product review.

product_review properties
idstringrequired

Cevoid product review ID.

ratingintegerrequired

Score from 1 to 5.

titlestring

Reviewer-supplied headline. In localized responses, title and body both use source text unless a complete translation is available.

bodystring

Reviewer-supplied text. Absent for star-only reviews. In localized responses, title and body both use source text unless a complete translation is available.

languagestringrequired

BCP-47 language of the original submission, even when the returned text is translated.

statusstringrequired

Moderation and conversion state. One of PENDING, PUBLISHED, REJECTED, CONVERTED.

rejection_reasonsstring[]required

Policy reasons recorded when moderation rejected the review. Empty unless status is REJECTED; a single take-down can carry several. Each item is one of SPAM, FAKE, DUPLICATE, OFF_TOPIC, PROFANE, ILLEGAL, PII.

identity_verificationstringrequired

Author verification state. Public display requires CONFIRMED. One of PENDING, CONFIRMED, EXPIRED.

purchase_verificationstringrequired

Purchase evidence state behind verified-buyer display. One of VERIFIED, UNVERIFIED.

is_incentivizedbooleanrequired

Whether a reward influenced submission.

is_insiderbooleanrequired

Whether the reviewer is brand-connected.

channelstringrequired

How the review entered Cevoid. One of REQUEST, WIDGET, LINK, IMPORT, SYNDICATED_IN.

sourceobject

External provenance. Present for imported or syndicated reviews.

source properties
platformstringrequired

Source-system slug, such as okendo or yotpo.

external_idstring

Review identifier in the source system.

urlstring

Link to the review in its source system.

profile_idstringrequired

Cevoid public identifier of the reviewer.

market_idstring

Cevoid public market identifier.

order_idstring

Cevoid public identifier of the matched order.

reward_idstring

Granted reward, when the review was incentivized.

converted_from_idstring

Review this one was converted from.

converted_to_idstring

Replacement review created by conversion.

mediaobject[]required
media[] properties
typestringrequired

Whether the item is an image or a video. One of IMAGE, VIDEO.

urlstringrequired

Delivery URL for the full asset.

thumbnail_urlstringrequired

Delivery URL for the thumbnail.

aspect_rationumberrequired

Width divided by height.

aspect_ratio_typestringrequired

Coarse orientation bucket. One of LANDSCAPE, PORTRAIT, SQUARE.

video_lengthnumber

Video duration in seconds.

moderation_statusstring

Moderation state for this asset, independent from the review itself. One of PENDING, APPROVED, DECLINED.

responsesobject[]required

Public workspace replies. Private replies are never exposed.

responses[] properties
bodystringrequired

Reply text as published.

author_typestringrequired

Whether the workspace or a named team member authored the reply. One of WORKSPACE, TEAM_MEMBER.

created_atstring<date-time>required

ISO 8601 timestamp when the reply was created.

updated_atstring<date-time>

ISO 8601 timestamp when the reply was last edited.

helpful_up_countnumberrequired

Positive helpful votes from shoppers.

helpful_down_countnumberrequired

Negative helpful votes, when down-voting is enabled.

submitted_atstring<date-time>

ISO 8601 timestamp when submission completed.

approved_atstring<date-time>

ISO 8601 timestamp when moderation approved it.

published_atstring<date-time>

ISO 8601 timestamp when it first became public.

created_atstring<date-time>required

ISO 8601 timestamp when Cevoid created the review.

updated_atstring<date-time>required

ISO 8601 timestamp when Cevoid last updated the review.

answersobject[]required
answers[] properties
typestringrequired

What the question was about. One of PRODUCT_ATTRIBUTE, PROFILE_PROPERTY.

promptstringrequired

Question wording as shown at submission time.

formatstringrequired

Input shape used to interpret value. One of SCALE, CENTERED_RANGE, SINGLE_SELECT, MULTI_SELECT, WOULD_RECOMMEND, NUMERIC.

optionsobject[]

Options as shown at submission time.

options[] properties
valuestringrequired
labelstringrequired
scaleobject

Scale definition as shown at submission time.

scale properties
stepsnumberrequired
start_labelstringrequired
end_labelstringrequired
center_labelstring
step_labelsstring[]
valuenumber | string | boolean | string[]required

Submitted scalar or selection, interpreted per format.

productobjectrequired

Product as it was when the review was submitted, so the review stays readable after the product changes or is delisted.

product properties
idstring

Cevoid catalog product ID.

variant_idstring

Cevoid catalog variant ID.

titlestring

Product title at submission.

image_urlstring

Product image at submission.

skustring

Merchant SKU at submission.

priceobject

Price at submission.

price properties
amountnumberrequired

Price in major currency units.

currencystringrequired

Currency code.

optionsstring[]

Variant options at submission, flattened as name:value, such as ["size:M"].

pinned_atstring<date-time>

ISO 8601 timestamp when the review was pinned to its product.

profileobject

The profile of the reviewer. Absent when no profile is linked.

profile properties
idstringrequired

Cevoid profile ID.

external_idstring

Identifier this profile carries in the workspace source system, when known.

namestring

Display name of the profile.

first_namestring

First name of the profile.

last_namestring

Last name of the profile.

emailstring

Email address for the profile.

avatar_urlstring

Profile image URL.

countrystring

Country code associated with the profile.

languagestring

Preferred language code associated with the profile.

locationstring

Free-form location associated with the profile.

social_instagram_handlestring

Instagram handle associated with the profile.

social_tiktok_handlestring

TikTok handle associated with the profile.

social_x_handlestring

X handle associated with the profile.

birthdaystring<date>

Birthday in YYYY-MM-DD format.

name_display_formatstring

Preferred format for displaying the profile name. One of FULL, FIRST_LAST_INITIAL, FIRST, ANONYMOUS.

biostring

Profile biography text.

notesstring

Internal notes about the profile.

created_atstring<date-time>required

ISO 8601 timestamp when the profile was created.

updated_atstring<date-time>required

ISO 8601 timestamp when the profile was last updated.

pointsobject

The profile's loyalty points. Only for workspaces with Loyalty, and only when the profile is a member.

points properties
totalnumberrequired

Total active and pending points.

spendablenumberrequired

Active points available to spend.

pendingnumberrequired

Earned points not active yet.

expiring_30dnumberrequired

Points expiring within 30 days.

expiring_60dnumberrequired

Points expiring within 60 days.

expiring_90dnumberrequired

Points expiring within 90 days.

lifetime_earnednumberrequired

Points earned over the membership lifetime.

lifetime_spentnumberrequired

Points spent over the membership lifetime.

next_expiration_atstring<date-time>

Earliest upcoming active-points expiration.

tierobject

The profile's tier standing. Only for workspaces with Loyalty, and only when the profile is a member.

tier properties
current_tierobject | nullrequired

The member's current tier; null without one.

current_tier properties
idstringrequired

Cevoid tier ID.

namestringrequired

Display name of the tier.

icon_urlstring

Optional icon representing the tier.

expires_atstring<date-time>

When the current tier expires, if tier evaluations expire.

next_tierobject | nullrequired

The next tier the member can reach; null when there is none.

next_tier properties
idstringrequired

Cevoid tier ID.

namestringrequired

Display name of the tier.

icon_urlstring

Optional icon representing the tier.

milestonesobject[]required

Progress required for the next tier.

milestones[] properties
typestringrequired

Metric used to qualify for the next tier. One of POINTS, AMOUNT_SPENT, NUMBER_OF_PURCHASES.

requirednumberrequired

Required amount for the next tier. AMOUNT_SPENT values use major currency units.

currentnumberrequired

Current progress. AMOUNT_SPENT values use major currency units.

remainingnumberrequired

Remaining amount. AMOUNT_SPENT values use major currency units.

percent_completenumberrequired

Progress percentage, capped at 100.

entry_rewardsobject[]required

Rewards granted at the next tier.

entry_rewards[] properties
typestringrequired

Reward type granted when the tier is reached.

titlestringrequired

Human-readable reward title.

icon_urlstring

Optional icon representing the reward.

perksobject[]required

Perks associated with the next tier.

perks[] properties
valuestringrequired

Human-readable perk text.