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 send no event.
  • The review can still be waiting for moderation: check data.product_review.status before you show it anywhere.
  • profile describes the reviewer. The event carries no points or tier.

Receive it

Pick product-review.submitted in a webhook destination's events, or tick All events. See Create a destination.

To filter it or wait before sending, send it from a Flow on the Product review submitted trigger instead. See Send from a Flow.

The Company review request action can also send to a webhook from this trigger. It sends company-review-request.created, not the payload below.

Payload

Example payload
{
  "created_at": "2026-11-02T09:30:00.000Z",
  "data": {
    "product_review": {
      "answers": [
        {
          "format": "CENTERED_RANGE",
          "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
        },
        {
          "format": "SINGLE_SELECT",
          "options": [
            {
              "label": "Blue",
              "value": "blue"
            },
            {
              "label": "Green",
              "value": "green"
            }
          ],
          "prompt": "What is your favourite colour?",
          "type": "PROFILE_PROPERTY",
          "value": "blue"
        }
      ],
      "approved_at": "2026-09-01T10:00:00.000Z",
      "body": "Comfortable and true to size.",
      "channel": "REQUEST",
      "created_at": "2026-09-01T10:00:00.000Z",
      "helpful_down_count": 0,
      "helpful_up_count": 3,
      "id": "rev_abc123",
      "identity_verification": "CONFIRMED",
      "is_incentivized": false,
      "is_insider": false,
      "language": "en",
      "market_id": "mar_abc123",
      "media": [
        {
          "aspect_ratio": 1.5,
          "aspect_ratio_type": "LANDSCAPE",
          "moderation_status": "APPROVED",
          "thumbnail_url": "https://cdn.cevoid.com/reviews/rev_abc123/photo-thumb.jpg",
          "type": "IMAGE",
          "url": "https://cdn.cevoid.com/reviews/rev_abc123/photo.jpg"
        },
        {
          "aspect_ratio": 0.5625,
          "aspect_ratio_type": "PORTRAIT",
          "thumbnail_url": "https://cdn.cevoid.com/reviews/rev_abc123/clip-thumb.jpg",
          "type": "VIDEO",
          "url": "https://cdn.cevoid.com/reviews/rev_abc123/clip.mp4",
          "video_length": 12
        }
      ],
      "order_id": "ord_abc123",
      "pinned_at": "2026-09-01T10:00:00.000Z",
      "product": {
        "id": "prd_abc123",
        "image_url": "https://cdn.example.com/products/everyday-shirt.jpg",
        "options": [
          "color:blue",
          "size:m"
        ],
        "price": {
          "amount": 49.95,
          "currency": "USD"
        },
        "sku": "SHIRT-BLUE-M",
        "title": "Everyday shirt",
        "variant_id": "var_abc123"
      },
      "profile_id": "prf_abc123",
      "published_at": "2026-09-01T10:00:00.000Z",
      "purchase_verification": "VERIFIED",
      "rating": 5,
      "rejection_reasons": [],
      "responses": [
        {
          "author_type": "WORKSPACE",
          "body": "Thank you for the kind words!",
          "created_at": "2026-09-01T10:00:00.000Z",
          "updated_at": "2026-09-01T10:00:00.000Z"
        }
      ],
      "source": {
        "external_id": "review_123",
        "platform": "cevoid",
        "url": "https://example.com/reviews/123"
      },
      "status": "PUBLISHED",
      "submitted_at": "2026-09-01T10:00:00.000Z",
      "title": "Comfortable everyday fit",
      "updated_at": "2026-09-01T10:00:00.000Z"
    },
    "profile": {
      "avatar_url": "https://cdn.cevoid.com/avatars/prf_sarah/profile.jpg",
      "bio": "Lifestyle creator and photography enthusiast",
      "birthday": "1992-04-18",
      "country": "US",
      "created_at": "2026-01-15T09:30:00.000Z",
      "email": "sarah.johnson@example.com",
      "external_id": "customer_7391056823401",
      "first_name": "Sarah",
      "id": "prf_sarah",
      "language": "en",
      "last_name": "Johnson",
      "location": "San Francisco, CA",
      "name": "Sarah Johnson",
      "notes": "VIP customer; prefers email communication",
      "social_instagram_handle": "sarah.lifestyle",
      "social_tiktok_handle": "sarah.creates",
      "social_x_handle": "sarah_j",
      "updated_at": "2026-01-20T14:22:15.000Z"
    }
  },
  "id": "evt_m3p82kdq5xw7tz4c",
  "type": "product-review.submitted",
  "version": 1
}
Show all 129 linesShow fewer lines
versionnumberrequired

The version of this event type. A published version only gains fields, so ignore fields you do not use; a breaking change is a new version.

idstringrequired

Stable event id (evt_ plus 16 characters), also sent as the webhook-id header. Retries and manual replays send the same id, so ignore an event whose id you have already processed.

typestringrequired

What data describes. New types are added over time, and an endpoint on "All events" receives them, so ignore any type you do not handle.

created_atstring<date-time>required

When the event happened, as an ISO 8601 timestamp.

originobject

Why your endpoint received the event. Omitted when the event was forwarded without a Flow of your own.

origin properties
flowobjectrequired

The Flow that sent the event.

flow properties
idstringrequired

The Flow id, shown in the Flow URL.

namestringrequired

The Flow name at the time of sending.

triggerstringrequired

The event that started the Flow. One of order.fulfilled, order.delivered, product-review.submitted, company-review.submitted, product-review.replied, company-review.replied, upload.completed, post.approved, profile.program-joined, profile.program-left, tier.earned, reward.fulfilled, tier.evaluation-approaching, points.expiration-approaching.

dataobjectrequired

The resources the event carries, keyed by resource name. type decides which resources are included, and resources your plan does not include are left out.

data properties
product_reviewobject
product_review properties
idstringrequired

Cevoid public product review identifier.

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

Immutable product presentation captured at submission, so the review stays renderable after the product changes or is delisted.

product properties
idstring

Cevoid public catalog product identifier.

variant_idstring

Cevoid public catalog variant identifier.

titlestring

Product title as at submission.

image_urlstring

Product image as at submission.

skustring

Merchant SKU as at submission.

priceobject

Price as at submission.

price properties
amountnumberrequired
currencystringrequired
optionsstring[]

Flattened variant options at submission, e.g. ["color:blue"].

pinned_atstring<date-time>

ISO 8601 timestamp when pinned to its product.

profileobject
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.

biostring

Profile biography text.

notesstring

Merchant 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.