List campaigns
curl --request GET \ --url 'https://api.sipstack.com/api/v2/flare/campaigns?page=1&limit=10&status=draft' \ --header 'x-api-key: <x-api-key>'import requests
url = "https://api.sipstack.com/api/v2/flare/campaigns"
querystring = {"page":"1","limit":"10","status":"draft"}
headers = {"x-api-key": "<x-api-key>"}
response = requests.get(url, headers=headers, params=querystring)
print(response.json())const url = 'https://api.sipstack.com/api/v2/flare/campaigns?page=1&limit=10&status=draft';const options = {method: 'GET', headers: {'x-api-key': '<x-api-key>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}import axios from 'axios';
const options = { method: 'GET', url: 'https://api.sipstack.com/api/v2/flare/campaigns', params: {page: '1', limit: '10', status: 'draft'}, headers: {'x-api-key': '<x-api-key>'}};
try { const { data } = await axios.request(options); console.log(data);} catch (error) { console.error(error);}Lists your organization’s A2P SMS campaigns, newest first, with optional
search (name) and status filters. Requires sms:read. The audience
fields (tags, tag_names, estimated_recipients) also need
contacts:read; without it they are null.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters ”Case-insensitive match on campaign name.
Responses
Section titled “ Responses ”Paginated campaign list.
object
A campaign row as returned by the list endpoint (the underlying record
plus a joined message_count). Snake-case fields mirror the stored row;
additional maintained columns (counters, pacing, tracking flags) may be
present.
The audience fields tags, tag_names and estimated_recipients name
your contact lists and count the contacts in them, so they need the
contacts:read scope. Without it they are null; every other field is
unchanged.
object
Delivery rate over every attempt (#6435). attempted = delivered + failed +
undelivered + sent-awaiting-receipt; queued and cancelled messages are
excluded. Rates are percentages (two decimals), null when nothing was
attempted. awaiting = sent within the last 72 hours with no delivery
receipt yet (the rate is provisional while this is above 0);
no_receipt = sent more than 72 hours ago and the carrier never confirmed
delivery — both stay in the denominator. Supersedes computing a rate from
messages_delivered / messages_sent, which ignored failures.
object
Failed + undelivered
object
Examples
First page of campaigns
{ "success": true, "data": [ { "id": "4d9a1b2c-3e5f-4a6b-8c7d-9e0f1a2b3c4d", "uuid": "4d9a1b2c-3e5f-4a6b-8c7d-9e0f1a2b3c4d", "name": "October promo", "status": "completed", "type": "immediate", "message_template": "Hi {firstName}, 20% off this week!", "message_count": 500, "created_at": "2026-01-14T18:22:00.000Z" } ], "pagination": { "page": 1, "limit": 10, "total": 12, "pages": 2 }}Missing or invalid API key.
Inline error shape used by the messaging API and management endpoints.
object
Example
{ "success": false, "error": "Recipient phone number (to) is required"}The key is missing the sms:read scope, or the Flare API tier is not on your plan.
Inline error shape used by the messaging API and management endpoints.
object
Example
{ "success": false, "error": "Recipient phone number (to) is required"}Organization not provisioned for Flare.
Inline error shape used by the messaging API and management endpoints.
object
Example
{ "success": false, "error": "Recipient phone number (to) is required"}