Direct comment feedback
Overview
Create an off-platform reviews row plus an internal customer comment tied to an Email or SMS review request (looked up by unique_code). Then notifies the store's configured recipients with the CUSTOMER_COMMENT template. De-dupes on (store_id, review_site_id, reviewer_email|reviewer_phone). On save it emits review_campaign_collected, which drives the partner-webhook batch fan-out. The endpoint stamps for review site id 100 the review is_off_platform=1, is_legacy=0, and is_qualified from the request.
Prerequisites
- No authentication — this endpoint is public.
Base URL
| Environment | URL |
|---|---|
| Production | https://production-api.shoutaboutus.com |
| Development | https://development-api.shoutaboutus.com |
Endpoint
POST /api/v1/campaign/direct-comment-feedback
Authentication
-
No bearer token required.
-
Public — no bearer token (unauthenticated
campaigngroup; item markednoauth). Reached by end customers via the review-request link;unique_codescopes the write to a store.
Rate limit
- 30 requests/min per IP (public).
Request body
| Field | Type | Required | Description |
|---|---|---|---|
unique_code | string | Required | max 50. Email or SMS request unique code. |
email | string | Required | email:rfc,dns, max 100. Stored as reviewer_email. |
name | string | Required | max 100. Stored as reviewer. |
phone | string | Optional | nullable, min 7, max 20. Stored as reviewer_phone. |
comments | string | Required | max 255. Stored as the review message. |
star_rating | integer | Required | 1–5. Stored as rate. |
g_recaptcha_response | string | Required | Google reCAPTCHA token; verified server-side. |
review_site_id | integer | Required | Must be an existing review site. |
is_qualified | integer | Optional | nullable; 0 or 1 (default 1). Only applied when review_site_id = 100. |
{
"unique_code": "<emailRequestUniqueCode>",
"email": "[email protected]",
"name": "Jane",
"phone": "+15551234567",
"comments": "Great service, thank you!",
"star_rating": 5,
"g_recaptcha_response": "03AGdBq24...",
"review_site_id": 123,
"is_qualified": 1
}How it works
- 200
{ status: "success", message: "Thank you for your comment. Your feedback helps us improve our service." }(same message whether or not a notification recipient was resolved). - 400 (
badRequestResponse) for: "Email or SMS request not found"; "You have already submitted your feedback. Thank you!" (dedupe hit); or "Review site not found". - 500 (
errorResponse) "Failed to add customer comment. Please try again." on save failure. - 422 on validation failure (including an invalid reCAPTCHA token).
Response
200 OK · 200
200{
"data": {
"status": "success",
"message": "Thank you for your comment. Your feedback helps us improve our service."
}
}400 Already submitted · 400
400{
"status": "error",
"message": "Bad Request",
"errors": "You have already submitted your feedback. Thank you!"
}422 Validation · 422
422{
"message": "The star rating field is required.",
"errors": {
"star_rating": [
"The star rating field is required."
]
}
}Errors
| Status | Meaning |
|---|---|
400 | Already submitted |
422 | Validation |
500 | Unexpected server error |
Example request
curl --request POST \
--url "https://production-api.shoutaboutus.com/api/v1/campaign/direct-comment-feedback" \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"unique_code": "<emailRequestUniqueCode>", "email": "[email protected]", "name": "Jane", "phone": "+15551234567", "comments": "Great service, thank you!", "star_rating": 5, "g_recaptcha_response": "03AGdBq24...", "review_site_id": 123, "is_qualified": 1}'Updated 9 days ago
