curl -X GET "https://api.tracklysms.com/api/v2/creatives?status=active&creative_type=automated&page=1&per_page=25" \
-H "X-Api-Key: trk_your_api_key_here"
import requests
response = requests.get(
"https://api.tracklysms.com/api/v2/creatives",
params={
"status": "active",
"creative_type": "automated",
"page": 1,
"per_page": 25
},
headers={"X-Api-Key": "trk_your_api_key_here"}
)
data = response.json()
for creative in data["creatives"]:
print(f"{creative['name']} — {creative['segment_count']} segment(s)")
print(f"Page {data['pagination']['page']} of {data['pagination']['total_pages']}")
const params = new URLSearchParams({
status: "active",
creative_type: "automated",
page: "1",
per_page: "25",
});
const response = await fetch(
`https://api.tracklysms.com/api/v2/creatives?${params}`,
{
headers: {
"X-Api-Key": "trk_your_api_key_here",
},
}
);
const data = await response.json();
console.log(data.creatives);
console.log(`Page ${data.pagination.page} of ${data.pagination.total_pages}`);
{
"creatives": [
{
"id": 101,
"name": "Summer Sale Promo",
"message": "Hot deals just for you! Shop now: {{link1}} Reply STOP to opt out.",
"offer_links": [
{
"key": "link1",
"offer_id": "665f1a2b3c4d5e6f70819201",
"url": null,
"url_params": {"sub1": "sms"}
}
],
"offers": ["665f1a2b3c4d5e6f70819201"],
"status": "active",
"creative_type": "automated",
"character_count": 114,
"segment_count": 1,
"created_at": "2025-06-10T12:00:00",
"slug": "cre_summer-sale-promo_a1b2c3",
"list_control_mode": "all",
"list_control_ids": []
},
{
"id": 102,
"name": "New Arrivals Alert",
"message": "Check out what just dropped: {{link1}} See more: {{link2}} Reply STOP to opt out.",
"offer_links": [
{
"key": "link1",
"offer_id": "665f1a2b3c4d5e6f70819202",
"url": null,
"url_params": {}
},
{
"key": "link2",
"offer_id": "665f1a2b3c4d5e6f70819203",
"url": "https://example.com/new",
"url_params": {}
}
],
"offers": ["665f1a2b3c4d5e6f70819202", "665f1a2b3c4d5e6f70819203"],
"status": "active",
"creative_type": "automated",
"character_count": 143,
"segment_count": 1,
"created_at": "2025-06-12T08:30:00",
"slug": "cre_new-arrivals-alert_d4e5f6",
"list_control_mode": "all",
"list_control_ids": []
}
],
"pagination": {
"page": 1,
"per_page": 25,
"total": 2,
"total_pages": 1
}
}
{
"error": "Invalid credentials",
"code": "invalid_credentials"
}
Creatives (v2)
List All Creatives
Retrieve a paginated list of all creatives in your account.
GET
/
v2
/
creatives
curl -X GET "https://api.tracklysms.com/api/v2/creatives?status=active&creative_type=automated&page=1&per_page=25" \
-H "X-Api-Key: trk_your_api_key_here"
import requests
response = requests.get(
"https://api.tracklysms.com/api/v2/creatives",
params={
"status": "active",
"creative_type": "automated",
"page": 1,
"per_page": 25
},
headers={"X-Api-Key": "trk_your_api_key_here"}
)
data = response.json()
for creative in data["creatives"]:
print(f"{creative['name']} — {creative['segment_count']} segment(s)")
print(f"Page {data['pagination']['page']} of {data['pagination']['total_pages']}")
const params = new URLSearchParams({
status: "active",
creative_type: "automated",
page: "1",
per_page: "25",
});
const response = await fetch(
`https://api.tracklysms.com/api/v2/creatives?${params}`,
{
headers: {
"X-Api-Key": "trk_your_api_key_here",
},
}
);
const data = await response.json();
console.log(data.creatives);
console.log(`Page ${data.pagination.page} of ${data.pagination.total_pages}`);
{
"creatives": [
{
"id": 101,
"name": "Summer Sale Promo",
"message": "Hot deals just for you! Shop now: {{link1}} Reply STOP to opt out.",
"offer_links": [
{
"key": "link1",
"offer_id": "665f1a2b3c4d5e6f70819201",
"url": null,
"url_params": {"sub1": "sms"}
}
],
"offers": ["665f1a2b3c4d5e6f70819201"],
"status": "active",
"creative_type": "automated",
"character_count": 114,
"segment_count": 1,
"created_at": "2025-06-10T12:00:00",
"slug": "cre_summer-sale-promo_a1b2c3",
"list_control_mode": "all",
"list_control_ids": []
},
{
"id": 102,
"name": "New Arrivals Alert",
"message": "Check out what just dropped: {{link1}} See more: {{link2}} Reply STOP to opt out.",
"offer_links": [
{
"key": "link1",
"offer_id": "665f1a2b3c4d5e6f70819202",
"url": null,
"url_params": {}
},
{
"key": "link2",
"offer_id": "665f1a2b3c4d5e6f70819203",
"url": "https://example.com/new",
"url_params": {}
}
],
"offers": ["665f1a2b3c4d5e6f70819202", "665f1a2b3c4d5e6f70819203"],
"status": "active",
"creative_type": "automated",
"character_count": 143,
"segment_count": 1,
"created_at": "2025-06-12T08:30:00",
"slug": "cre_new-arrivals-alert_d4e5f6",
"list_control_mode": "all",
"list_control_ids": []
}
],
"pagination": {
"page": 1,
"per_page": 25,
"total": 2,
"total_pages": 1
}
}
{
"error": "Invalid credentials",
"code": "invalid_credentials"
}
Returns all creatives for your account with support for filtering by status and creative type. Results are paginated.
Query Parameters
string
default:"active"
Filter creatives by status. Accepted values:
active, paused, archived.string
Filter creatives by type. Accepted values:
automated, one_time, welcome. When omitted, all types are returned.integer
default:1
The page number to return.
integer
default:50
Number of creatives per page. Maximum:
100.integer
Filter to creatives whose
list_control_ids include this list ID.Response Fields
array
Array of creative objects.
Show Creative object properties
Show Creative object properties
integer
Unique identifier for the creative.
string
Display name of the creative.
string
The message template. Contains
{{linkN}} placeholders (e.g. {{link1}}, {{link2}}) that are replaced with tracked short links at send time.array
Array of offer link objects that map to placeholders in the message.
Show Offer link properties
Show Offer link properties
string
The placeholder key (e.g.
link1). Corresponds to {{link1}} in the message.string
The ID of the offer associated with this link. A 24-character hexadecimal ObjectId.
string
Optional URL override. When set, this URL is used instead of the offer’s default URL.
object
Optional additional query parameters appended to the link URL.
array
Array of offer ID strings referenced by this creative.
string
Current status. One of:
active, paused, archived.string
The type of creative. One of:
automated, one_time, welcome.integer
Estimated character count of the rendered message. Link placeholders are estimated as 23 characters, and 34 characters of compliance overhead are added.
integer
Estimated number of SMS segments, encoding-aware. The message is expanded (link placeholders as 23 characters plus 34 characters of compliance overhead) and segmented the way carriers bill it. GSM-7 messages fit 160 septets in a single segment, or 153 septets per part when concatenated; extension-table characters (
^ { } [ ] ~ | € \ and form-feed) cost 2 septets each. If the message contains any non-GSM-7 character (e.g. emoji), UCS-2 encoding applies instead: 70 characters single, 67 per concatenated part.datetime
ISO 8601 timestamp of when the creative was created.
string
Auto-generated unique slug for the creative.
string
List targeting control mode. One of:
all (default), include, exclude.array
List IDs used when
list_control_mode is include or exclude.object
Examples
curl -X GET "https://api.tracklysms.com/api/v2/creatives?status=active&creative_type=automated&page=1&per_page=25" \
-H "X-Api-Key: trk_your_api_key_here"
import requests
response = requests.get(
"https://api.tracklysms.com/api/v2/creatives",
params={
"status": "active",
"creative_type": "automated",
"page": 1,
"per_page": 25
},
headers={"X-Api-Key": "trk_your_api_key_here"}
)
data = response.json()
for creative in data["creatives"]:
print(f"{creative['name']} — {creative['segment_count']} segment(s)")
print(f"Page {data['pagination']['page']} of {data['pagination']['total_pages']}")
const params = new URLSearchParams({
status: "active",
creative_type: "automated",
page: "1",
per_page: "25",
});
const response = await fetch(
`https://api.tracklysms.com/api/v2/creatives?${params}`,
{
headers: {
"X-Api-Key": "trk_your_api_key_here",
},
}
);
const data = await response.json();
console.log(data.creatives);
console.log(`Page ${data.pagination.page} of ${data.pagination.total_pages}`);
{
"creatives": [
{
"id": 101,
"name": "Summer Sale Promo",
"message": "Hot deals just for you! Shop now: {{link1}} Reply STOP to opt out.",
"offer_links": [
{
"key": "link1",
"offer_id": "665f1a2b3c4d5e6f70819201",
"url": null,
"url_params": {"sub1": "sms"}
}
],
"offers": ["665f1a2b3c4d5e6f70819201"],
"status": "active",
"creative_type": "automated",
"character_count": 114,
"segment_count": 1,
"created_at": "2025-06-10T12:00:00",
"slug": "cre_summer-sale-promo_a1b2c3",
"list_control_mode": "all",
"list_control_ids": []
},
{
"id": 102,
"name": "New Arrivals Alert",
"message": "Check out what just dropped: {{link1}} See more: {{link2}} Reply STOP to opt out.",
"offer_links": [
{
"key": "link1",
"offer_id": "665f1a2b3c4d5e6f70819202",
"url": null,
"url_params": {}
},
{
"key": "link2",
"offer_id": "665f1a2b3c4d5e6f70819203",
"url": "https://example.com/new",
"url_params": {}
}
],
"offers": ["665f1a2b3c4d5e6f70819202", "665f1a2b3c4d5e6f70819203"],
"status": "active",
"creative_type": "automated",
"character_count": 143,
"segment_count": 1,
"created_at": "2025-06-12T08:30:00",
"slug": "cre_new-arrivals-alert_d4e5f6",
"list_control_mode": "all",
"list_control_ids": []
}
],
"pagination": {
"page": 1,
"per_page": 25,
"total": 2,
"total_pages": 1
}
}
{
"error": "Invalid credentials",
"code": "invalid_credentials"
}
Error Codes
| HTTP Status | Error Code | Description |
|---|---|---|
| 401 | invalid_credentials | API key is missing or invalid. |
| 403 | account_suspended | Your account is suspended. Resolve outstanding billing or contact support. |
| 429 | rate_limited | Request throttled; retry with exponential backoff after the window resets. |
Next Steps
Creative Templates
Design effective message templates
Create Schedule
Use creatives in a scheduled campaign
⌘I