curl --request GET \
--url https://app.thinnest.ai/api/v1/campaigns \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.thinnest.ai/api/v1/campaigns', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.thinnest.ai/api/v1/campaigns"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"items": [
{
"id": "cmp_9a3b7c21-4d5e-4f60-8a1b-2c3d4e5f6a7b",
"agent": "ag_5c4a5f93-2b1e-4c0a-9d3f-7e8a1b2c3d4e",
"name": "Diwali sale — VIP customers",
"kind": "whatsapp",
"status": "sending",
"template": "diwali_offer_v2",
"purpose": null,
"counts": {
"recipients": 1200,
"sent": 640,
"delivered": 610,
"read": 402,
"replied": 37,
"failed": 9,
"skipped": 14
},
"scheduledAt": null,
"startedAt": "2026-10-05T09:00:00.000Z",
"finishedAt": null,
"createdAt": "2026-10-04T16:20:11.482Z",
"lastError": null
},
{
"id": "cmp_1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b",
"agent": "ag_8d7c6b5a-4e3f-4a2b-9c1d-0e9f8a7b6c5d",
"name": "Six-month check-up reminders",
"kind": "voice",
"status": "sending",
"template": null,
"purpose": "Hello, this is Asha calling from Sunrise Dental Clinic.",
"counts": {
"recipients": 180,
"sent": 96,
"delivered": 0,
"read": 0,
"replied": 0,
"failed": 4,
"skipped": 2
},
"scheduledAt": null,
"startedAt": "2026-10-03T04:30:00.000Z",
"finishedAt": null,
"createdAt": "2026-10-02T11:05:42.120Z",
"lastError": null
}
],
"nextCursor": null
}{
"error": "`status` is one of draft, sending, paused, sent, failed, cancelled."
}{
"error": "Send a valid API key as `Authorization: Bearer <key>`."
}{
"error": "Over 240 requests a minute. Slow down and retry."
}List Campaigns
Lists your workspace’s broadcasts and calling campaigns, newest first, each with its live counts: recipients, sent, delivered, read, replied, failed and skipped. Filter by status to watch only the ones that are sending.
curl --request GET \
--url https://app.thinnest.ai/api/v1/campaigns \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.thinnest.ai/api/v1/campaigns', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.thinnest.ai/api/v1/campaigns"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"items": [
{
"id": "cmp_9a3b7c21-4d5e-4f60-8a1b-2c3d4e5f6a7b",
"agent": "ag_5c4a5f93-2b1e-4c0a-9d3f-7e8a1b2c3d4e",
"name": "Diwali sale — VIP customers",
"kind": "whatsapp",
"status": "sending",
"template": "diwali_offer_v2",
"purpose": null,
"counts": {
"recipients": 1200,
"sent": 640,
"delivered": 610,
"read": 402,
"replied": 37,
"failed": 9,
"skipped": 14
},
"scheduledAt": null,
"startedAt": "2026-10-05T09:00:00.000Z",
"finishedAt": null,
"createdAt": "2026-10-04T16:20:11.482Z",
"lastError": null
},
{
"id": "cmp_1f2e3d4c-5b6a-4798-8a7b-6c5d4e3f2a1b",
"agent": "ag_8d7c6b5a-4e3f-4a2b-9c1d-0e9f8a7b6c5d",
"name": "Six-month check-up reminders",
"kind": "voice",
"status": "sending",
"template": null,
"purpose": "Hello, this is Asha calling from Sunrise Dental Clinic.",
"counts": {
"recipients": 180,
"sent": 96,
"delivered": 0,
"read": 0,
"replied": 0,
"failed": 4,
"skipped": 2
},
"scheduledAt": null,
"startedAt": "2026-10-03T04:30:00.000Z",
"finishedAt": null,
"createdAt": "2026-10-02T11:05:42.120Z",
"lastError": null
}
],
"nextCursor": null
}{
"error": "`status` is one of draft, sending, paused, sent, failed, cancelled."
}{
"error": "Send a valid API key as `Authorization: Bearer <key>`."
}{
"error": "Over 240 requests a minute. Slow down and retry."
}Authorizations
Your API key (ta_live_…) from Settings → API keys, sent as Authorization: Bearer <key>. Keep it on a server: it can message every customer you have. A key is full, build or read-only; a request its level does not allow is refused with 403.
Headers
Developers only: the customer workspace this request acts in — its org_… id from POST /customers. Leave it out to act in your own workspace.
"org_3fKq9TzQ1mN8vB2xR7cLpA"
Query Parameters
Only campaigns in this state. A scheduled campaign is a draft with scheduledAt set until it starts.
draft, sending, paused, sent, failed, cancelled How many items to return, 1 to 100.
1 <= x <= 100The nextCursor from the previous page. Leave it out for the first page.