Webhooks

review.submitted

Shyni sends a POST to your endpoint when this event happens. Before you trust the body, verify the signature.

A customer submitted a review of a handed-over order. data is the review as the studio sees it (ReviewApiView), the same view PUT /reviews/{id}/reply answers with; the studio's reply and report are null at this point. Sent once per review. Sent to the endpoint URL when the event happens. Answer 2xx within 15 seconds. Verify the signature before trusting the body. See the webhooks guide.

Header Parameters

Shyni-Signature*string

t=<unix seconds>,v1=<hex>[,v1=<hex>], HMAC-SHA256 of "<t>.<raw body>" keyed with the endpoint secret. See the webhooks guide.

Shyni-Event-Id*string

Same as the envelope id. Stable across retries, dedupe on it.

Shyni-Event-Type*string

Same as the envelope type.

Request Body

application/json
  1. body

Webhook body for review.* events; data is the review as the REST API returns it.

id*string
type*string

Event name, e.g. review.submitted.

createdAt*string
Formatdate-time
apiVersion*string
businessId*string

The business (studio) the event happened in - the value sent as Shyni-Business.

data*

A review as the studio sees it - the public page plus the customer's full name and the order.

Response Body

Delivery acknowledged. Any 2xx counts as delivered; the body is ignored.

Example payload

Shyni sends a POST to your endpoint

{  "id": "f3a1c2d4-6b7e-4a80-9c15-0e2d4b6a8022",  "type": "review.submitted",  "createdAt": "2026-10-09T08:53:20Z",  "apiVersion": "v1",  "businessId": "5d0b8e4a-7c21-4f3e-9a66-1b2c3d4e5f60",  "data": {    "id": "7c1e9a30-5b84-4d62-8f17-2a6e0d9b4c53",    "rating": 5,    "text": "Perfect job, the car looks new.",    "authorName": "Jan N.",    "customerFullName": "Jan Novak",    "services": [      "Premium hand wash"    ],    "visitDate": "2026-10-09",    "createdAt": "2026-10-09T08:53:20Z",    "orderId": "68aa1b98-3c1e-4f0a-9d2b-5e7f1a2b3c4d",    "orderPublicId": "84609120",    "reply": null,    "report": null  }}