Send review request (email and/or SMS)

Overview

Unified send-review-request: creates audience row(s) and queues an Email and/or SMS review request for a campaign. It branches on whether email and/or phone is supplied. Serves both production and test sends via the is_test flag. (Canonical 2026-06 rename of test-review-request, which remains a deprecated alias to the same handler.)

Prerequisites

  • A bearer token. Callable with Account tokens.

Base URL

EnvironmentURL
Productionhttps://production-api.shoutaboutus.com
Developmenthttps://development-api.shoutaboutus.com

Endpoint

POST /api/v1/campaign/review-request

Authentication

  • Requires a bearer token in the Authorization: Bearer <bearer-token> header.

  • Who can call it: Account tokens.

  • Authentication, ACCOUNT-scope group.

  • If not owned by the caller it returns 403 ("You are not authorized to send a review request for this campaign").

  • Store must have an active plan (400 otherwise).

  • Each requested channel must be enabled with a valid template.

  • Missing review-site URLs in the landing page / email template surface as a 400 listing the missing sites.

  • A non-test send (is_test=false) also increments total_audience. It schedules a follow-up email if the email channel has a follow-up template.

Rate limit

  • No rate limit.

Request body

  • Body:
FieldTypeRequiredDescription
campaign_idintegeryesMust be an existing campaign inside your own account tree.
customer_namestringyesmax 255; trimmed.
emailstringconditionalrequired_without:phone; nullable, email:rfc,dns, max 255. Drives the Email send.
phonestringconditionalrequired_without:email; nullable, min 7, max 20. Drives the SMS send.
is_testbooleannonullable. When true, tags every downstream row as test and skips follow-up emails; does not increment total_audience. Defaults false.
keywordsobjectnonullable map; each key max 100 chars, values strings. Empty/null values skipped.

At least one of email or phone is required.

{
  "campaign_id": 1,
  "customer_name": "John Doe",
  "email": "[email protected]",
  "phone": "+15555550123",
  "is_test": false,
  "keywords": {
    "paragraph_1": "Thanks for visiting our store today!"
  }
}

Response

  • data.status (string) — "success".
  • data.message (string) — reflects which channel(s) were queued.

200 Success · 200

{
  "data": {
    "status": "success",
    "message": "Email and SMS review requests sent successfully"
  }
}

Errors

StatusMeaning
400The request was rejected — the response explains why
401The bearer token is missing, expired or invalid
403The token is valid but the record sits outside your account
422The request failed validation — the response names the fields
500Unexpected server error

Example request

curl --request POST \
  --url "https://production-api.shoutaboutus.com/api/v1/campaign/review-request" \
  --header 'Authorization: Bearer <bearer-token>' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{"campaign_id": 1, "customer_name": "John Doe", "email": "[email protected]", "phone": "+15555550123", "is_test": false, "keywords": {"paragraph_1": "Thanks for visiting our store today!"}}'

Did this page help you?