List campaigns

Overview

List campaigns for the authenticated user's own company (paginated), with status/search filtering and sorting.

Prerequisites

  • A bearer token. Callable with Account tokens.

Base URL

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

Endpoint

GET /api/v1/campaign/list

Authentication

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

  • Who can call it: Account tokens.

  • Authentication, under the ACCOUNT-scope route group.

  • Scoped to (the caller's own company); no partner-tree walk.

  • If the user has assign_location set with assigned stores, results are further restricted to store_id IN (assignedStores).

Rate limit

  • No rate limit.

Query parameters

  • Query: status (string, optional) — one of draft, active (becomes scheduled/in_progress), inactive (becomes completed/paused/cancelled).
  • Query: page (integer, optional) — min 1.
  • Query: per_page (integer, optional) — 10–100 (values below 10 are raised to 10), default 15.
  • Query: search_field (string, optional) — one of name, description, store_name, store_id, storeId, type (paired with search_value).
  • Query: search_value (string, optional) — max 255.
  • Query: sort_field (string, optional) — one of name, status, created_at, updated_at, scheduled_at, started_at, completed_at, request_file_status, request_per_day, request_frequency, request_delay, next_execution_time, total_audience, total_valid_phones, total_valid_emails, store_name, storeId, type (default created_at).
  • Query: sort_by (string, optional) — asc/ASC/desc/DESC (default DESC).
  • Query: location_id (integer, optional) — Must be an existing location; filters to a single store.

Response

  • data.data[] (array) — campaign rows; each item:
  • id, store_id, user_id (int)
  • name, description, status, current_step — campaign basics
  • scheduled_at, started_at, completed_at, created_at, updated_at, next_execution_time (datetime|null)
  • total_audience, total_valid_phones, total_valid_emails (int) — non-test counts
  • request_file_name, request_file_status, request_per_day, request_frequency, request_delay, request_after_time, send_immediately (bool), type
  • channels[]{ id, rs_campaign_id, channel_type, is_enabled(bool), template_id, errors[], landing_page{} }
  • store (object|null) — { id, name, storeId, clientLocationId }
  • request_file_url (string|null), unique_code (string|null)
  • has_sms_channel (bool), has_email_channel (bool), is_active (bool)
  • data.current_page, data.per_page, data.total, data.last_page, data.from, data.to, data.first_page_url, data.last_page_url, data.prev_page_url, data.next_page_url, data.path, data.links[] — standard pagination meta.

200 Success · 200

{
  "data": {
    "current_page": 1,
    "data": [
      {
        "id": 1,
        "store_id": 123,
        "user_id": 456,
        "name": "Summer Review Campaign",
        "description": "Collect summer reviews",
        "status": "draft",
        "current_step": 3,
        "scheduled_at": null,
        "started_at": null,
        "completed_at": null,
        "total_audience": 1000,
        "total_valid_phones": 850,
        "total_valid_emails": 920,
        "request_file_name": "audience.xlsx",
        "request_file_status": "completed",
        "request_per_day": 50,
        "request_frequency": 1,
        "request_delay": 0,
        "request_after_time": "09:00:00",
        "next_execution_time": null,
        "send_immediately": false,
        "type": "bulk_upload",
        "created_at": "2024-01-10T14:30:00.000000Z",
        "updated_at": "2024-01-15T10:00:00.000000Z",
        "channels": [
          {
            "id": 1,
            "rs_campaign_id": 1,
            "channel_type": "email",
            "is_enabled": true,
            "template_id": 5,
            "errors": [],
            "landing_page": []
          }
        ],
        "store": {
          "id": 123,
          "name": "Downtown Store",
          "storeId": "STORE001",
          "clientLocationId": null
        },
        "request_file_url": null,
        "unique_code": "a1b2c3",
        "has_sms_channel": false,
        "has_email_channel": true,
        "is_active": false
      }
    ],
    "per_page": 15,
    "total": 45,
    "last_page": 3,
    "from": 1,
    "to": 15,
    "first_page_url": "http://example.com/api/v1/campaign/list?page=1",
    "next_page_url": "http://example.com/api/v1/campaign/list?page=2",
    "prev_page_url": null,
    "path": "http://example.com/api/v1/campaign/list",
    "links": []
  }
}

Errors

StatusMeaning
401The bearer token is missing, expired or invalid
422The request failed validation — the response names the fields
500Unexpected server error

Example request

curl --request GET \
  --url "https://production-api.shoutaboutus.com/api/v1/campaign/list" \
  --header 'Authorization: Bearer <bearer-token>' \
  --header 'Accept: application/json'

Did this page help you?