Skip to content

Get a campaign

GET
/api/v2/flare/campaigns/{id}
curl --request GET \
--url https://api.sipstack.com/api/v2/flare/campaigns/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0 \
--header 'x-api-key: <x-api-key>'

Returns one campaign by UUID, transformed to camelCase with a rolled-up stats block. Requires sms:read. tags and stats.estimatedRecipients also need contacts:read; without it they are null. 404 when absent or cross-org.

id
required
string format: uuid

The campaign.

Media type application/json
object
success
boolean
data

A single campaign, transformed to camelCase with a rolled-up stats block.

object
id
string format: uuid
uuid
string format: uuid
name
string
description
string
nullable
type
string
Allowed values: immediate scheduled drip
status
string
Allowed values: draft scheduled active paused completed cancelled
message

The message template.

string
fromPhoneNumberId

Public UUID of the sending number.

string format: uuid
nullable
fromPhoneNumber
string
nullable
tags

Recipient audience — contacts carrying any of these tags. null when the key lacks the contacts:read scope.

Array<string>
nullable
scheduledAt
string format: date-time
nullable
startedAt
string format: date-time
nullable
completedAt
string format: date-time
nullable
stats
object
totalRecipients
integer
estimatedRecipients

Pre-send audience estimate. null when the key lacks the contacts:read scope.

integer
nullable
sent
integer
delivered
integer
failed
integer
bounced
integer
replies
integer
optOuts
integer
deliveryStats

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); noReceipt = 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
attempted
integer
delivered
integer
failed
integer
undelivered
integer
failedTotal

Failed + undelivered

integer
awaiting
integer
noReceipt
integer
deliveryRate
number
nullable
failureRate
number
nullable
provisional
boolean
respectQuietHours
boolean
quietHoursStart

Local start of the do-not-disturb window (HH:MM); 21:00 when unset.

string
quietHoursEnd

Local end of the do-not-disturb window (HH:MM); 09:00 when unset.

string
includeOptOut

Whether the opt-out footer is appended to each message.

boolean
includeSignature

Whether the organization’s signature is appended.

boolean
steps

Drip steps (empty unless type is drip).

Array<object>
object
key
additional properties
any
abTestEnabled
boolean
winningVariantId

Id of the winning A/B variant, once decided.

string
nullable
variants

A/B variants (empty unless A/B testing is enabled).

Array<object>
object
key
additional properties
any
dailySendLimit

Per-campaign daily send cap (send-pacing feature); null = no cap.

integer
nullable
pacingSentInCycle

Messages sent in the current pacing cycle.

integer
pacingCycleResetsAt

When the current pacing cycle resets.

string format: date-time
nullable
pausedReason

Why the campaign is paused, when applicable (e.g. pacing cap reached).

string
nullable
trackLinks

Whether link-click tracking is enabled.

boolean
smartSendEnabled

Whether smart-send time optimization is enabled.

boolean
createdAt
string format: date-time
updatedAt
string format: date-time
Examples
Example campaign

A single campaign with rolled-up stats

{
"success": true,
"data": {
"id": "4d9a1b2c-3e5f-4a6b-8c7d-9e0f1a2b3c4d",
"uuid": "4d9a1b2c-3e5f-4a6b-8c7d-9e0f1a2b3c4d",
"name": "October promo",
"description": "Fall discount blast to VIP contacts",
"type": "immediate",
"status": "completed",
"message": "Hi {firstName}, 20% off this week!",
"fromPhoneNumberId": "7c2e9f1a-4b6d-4e8f-9a0b-1c2d3e4f5a6b",
"fromPhoneNumber": "+16135550200",
"tags": [
"vip"
],
"scheduledAt": null,
"startedAt": "2026-01-15T13:00:00.000Z",
"completedAt": "2026-01-15T13:04:12.000Z",
"stats": {
"totalRecipients": 500,
"estimatedRecipients": 500,
"sent": 500,
"delivered": 491,
"failed": 9,
"bounced": 0,
"replies": 21,
"optOuts": 2
},
"respectQuietHours": true,
"quietHoursStart": "21:00",
"quietHoursEnd": "09:00",
"includeOptOut": true,
"includeSignature": true,
"steps": [],
"abTestEnabled": false,
"winningVariantId": null,
"variants": [],
"dailySendLimit": null,
"pacingSentInCycle": 0,
"pacingCycleResetsAt": null,
"pausedReason": null,
"trackLinks": false,
"smartSendEnabled": false,
"createdAt": "2026-01-14T18:22:00.000Z",
"updatedAt": "2026-01-15T13:04:12.000Z"
}
}

Missing or invalid API key.

Media type application/json

Inline error shape used by the messaging API and management endpoints.

object
success
boolean
error
string
Example
{
"success": false,
"error": "Recipient phone number (to) is required"
}

Campaign not found in your organization.

Media type application/json

Inline error shape used by the messaging API and management endpoints.

object
success
boolean
error
string
Example
{
"success": false,
"error": "Recipient phone number (to) is required"
}