Send review request (test-review-request — deprecated alias)

Overview

Create a one-off audience row and queue an Email and/or SMS review request for a campaign (dispatched after DB commit onto the messaging queue). Branches on whether email and/or phone is supplied. Serves both production and test sends via the is_test flag. A non-test send increments the campaign's total_audience and schedules a follow-up email when the email channel has a follow-up template.

Deprecated path. POST /campaign/test-review-request is a backward-compatible alias that points at the same sendReviewRequest handler as the canonical POST /campaign/review-request (documented as Send review request (email and/or SMS)). Migrate callers to review-request.

Prerequisites

  • A bearer token in the Authorization header.

Base URL

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

Endpoint

POST /api/v1/campaign/test-review-request

Authentication

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

  • Account — 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).

Rate limit

  • No rate limit.

Request body

FieldTypeRequiredDescription
campaign_idintegerRequiredMust be an existing campaign inside your own account tree.
customer_namestringRequiredmax 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_testbooleanOptionalnullable. When true, tags every downstream row as test and skips follow-ups; does not increment total_audience. Defaults false.
keywordsobjectOptionalnullable map; each key max 100 chars. Empty/null values skipped.
keywords.*stringOptionalnullable value per keyword.

At least one of email or phone is required.

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

How it works

  • 200 { status: "success", message } where message reflects which channel(s) were queued ("Email and SMS.", "Email.", or "SMS review request sent successfully").
  • 403 if the caller does not own the campaign.
  • 400 for: no active plan. A requested channel is missing/disabled or lacks a valid template. Missing review-site URLs in the landing page / email template (returns the per-site error list); or "Failed to send review request" if nothing was created.
  • 422 on validation failure.

Response

200 OK · 200

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

403 Not owned · 403

{
  "status": "error",
  "message": "You are not authorized to send a review request for this campaign",
  "errors": []
}

400 No active plan · 400

{
  "status": "error",
  "message": "Store does not have an active plan",
  "errors": []
}

Errors

StatusMeaning
400No active plan
401The bearer token is missing, expired or invalid
403Not owned
422Returned on validation failure
500Unexpected server error

Example request

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

Did this page help you?