Create an announcement
Creates and starts an announcement: a one-off campaign email rendered from the referenced template for the audience selected by topic and filter. Delivery begins asynchronously on creation, and announcements are create-only - there is no update path.
/v2/ accounts/ {accountId}/ announcementsPath parameters
accountIdstringrequired
The account the request is scoped to.
Request body
Request body for creating an announcement. Delivery starts immediately, and announcements cannot be updated afterwards.
namestringrequired
Internal campaign name, shown on the dashboard - recipients never see it.
templateIdstringrequired
Id of the email template to send.
topicIdstringoptional
Announcement topic the campaign belongs to; contacts unsubscribed from it are skipped.
includeUnsubscribedbooleanrequired
Send to unsubscribed contacts too - only for messages they must receive, like terms changes. Required: send false for ordinary campaigns.
attributesarray of objectsoptional
Attribute conditions selecting who receives the campaign; combined with AND. Omit or send an empty array to reach the whole audience.
slugstringrequired
Attribute slug to test - see the attribute metas endpoint.
operatorone of: exists, not_exists, true, false, s_equal, s_not_equal, contains, not_contains, n_equal, n_not_equal, greater_than, greater_than_equal, less_than, less_than_equal, after, before, d_equal, d_not_equalrequired
Comparison to apply. The s_/n_/d_ prefixes select string, number and date comparison; pick the family that matches the attribute’s type.
valueanyoptional
Value to compare against. Its type is dictated by the operator: send an empty string for exists, not_exists, true and false; a number for the n_ and greater_/less_than operators; a date for after, before, d_equal and d_not_equal; a string for the rest.
Response
The created announcement.
Errors
400
The request body or parameters failed validation.
401
Missing or invalid token, or the token is not authorized for this account/user.
See Errors and rate limits for what error responses look like.
curl --location --request POST 'https://api.sendstreak.com/v2/accounts/YOUR_ACCOUNT_ID/announcements' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Example name",
"templateId": "6650cc1d3e8a220013ef78ab",
"topicId": "6651dd2e4f9b110014ab90cd",
"includeUnsubscribed": false,
"attributes": [
{
"slug": "plan",
"operator": "s_equal",
"value": "professional"
}
]
}'
const res = await fetch('https://api.sendstreak.com/v2/accounts/YOUR_ACCOUNT_ID/announcements', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SENDSTREAK_TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
"name": "Example name",
"templateId": "6650cc1d3e8a220013ef78ab",
"topicId": "6651dd2e4f9b110014ab90cd",
"includeUnsubscribed": false,
"attributes": [
{
"slug": "plan",
"operator": "s_equal",
"value": "professional"
}
]
})
});
import os, requests
res = requests.post(
'https://api.sendstreak.com/v2/accounts/YOUR_ACCOUNT_ID/announcements',
headers={'Authorization': f"Bearer {os.environ['SENDSTREAK_TOKEN']}"},
json={
"name": "Example name",
"templateId": "6650cc1d3e8a220013ef78ab",
"topicId": "6651dd2e4f9b110014ab90cd",
"includeUnsubscribed": False,
"attributes": [
{
"slug": "plan",
"operator": "s_equal",
"value": "professional"
}
]
},
)
{
"_id": "665f0a2b1c9d440012ab34cd",
"name": "Example name",
"templateId": "6650cc1d3e8a220013ef78ab",
"subject": "Welcome to Acme!",
"topicId": "6651dd2e4f9b110014ab90cd",
"includeUnsubscribed": false,
"attributes": [
{
"slug": "plan",
"operator": "s_equal",
"value": "professional"
}
],
"status": "running",
"processDate": "2026-07-07T09:30:00.000Z",
"lastSampledContactId": "665f0a2b1c9d440012ab34cd",
"createDate": "2026-07-07T09:30:00.000Z"
}