Duplicate campaign

Overview

Duplicate a campaign (and its active channels) under the same company as a fresh draft named "… (Copy)" with audience/scheduling fields reset.

Prerequisites

  • A bearer token with ACCOUNT scope.
  • The campaignId of the record you are targeting.

Base URL

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

Endpoint

POST /api/v1/campaign/{campaignId}/duplicate

Authentication

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

  • Who can call it: ACCOUNT-scope tokens.

  • If not owned by the caller it returns 403 ("You are not authorized to duplicate this campaign").

Rate limit

  • No rate limit.

Path parameters

ParameterTypeRequiredDescription
campaignIdintegerRequiredDigits only.

Response

  • data.status (string) — "success".
  • data.message (string).
  • data.data (object) — the new campaign via getCampaignData(newCampaignId); same shape as the campaign detail response. The copy is forced to status="draft", current_step=1, total_audience=0, request_file_status="pending", with scheduled_at/started_at/completed_at/next_execution_time nulled and request_per_day/request_frequency/request_delay zeroed; The endpoint copies channels against the new campaign id.

200 OK · 200

{
  "data": {
    "status": "success",
    "message": "Campaign duplicated successfully",
    "data": {
      "id": 42,
      "name": "Summer Review Campaign (Copy)",
      "description": "Collect summer reviews",
      "status": "draft",
      "current_step": 1,
      "store_id": 123,
      "scheduled_at": null,
      "started_at": null,
      "completed_at": null,
      "total_audience": 0,
      "request_per_day": 0,
      "request_frequency": 0,
      "request_delay": 0,
      "request_after_time": "14:00:00",
      "next_execution_time": null,
      "request_file_status": "pending",
      "request_file_name": null,
      "request_file_path": null,
      "send_immediately": false,
      "type": "bulk_upload",
      "channels": [],
      "email_requests": [],
      "sms_requests": [],
      "file_header": null
    }
  }
}

Errors

StatusMeaning
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/123/duplicate" \
  --header 'Authorization: Bearer <bearer-token>' \
  --header 'Accept: application/json'

Did this page help you?