curl --request POST \
--url https://app.thinnest.ai/api/v1/campaigns/{id}/resume \
--header 'Authorization: Bearer <token>'const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.thinnest.ai/api/v1/campaigns/{id}/resume', 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/{id}/resume"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text){
"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": 612,
"read": 409,
"replied": 38,
"failed": 9,
"skipped": 14
},
"scheduledAt": null,
"startedAt": "2026-10-05T09:00:00.000Z",
"finishedAt": null,
"createdAt": "2026-10-04T16:20:11.482Z",
"lastError": null
}{
"error": "Send a valid API key as `Authorization: Bearer <key>`."
}{
"error": "This API key is read-only: it can read everything but change nothing."
}{
"error": "That campaign was not found."
}{
"error": "Only a paused campaign can be resumed. This one is draft."
}{
"error": "Over 240 requests a minute. Slow down and retry."
}Resume Campaign
Sends a paused campaign again, to everyone it has not reached yet; nobody is messaged or called twice. It clears lastError, and what it sends is charged as usual. Only a paused campaign can be resumed; a draft is started with Launch Campaign. Needs a full key.
curl --request POST \
--url https://app.thinnest.ai/api/v1/campaigns/{id}/resume \
--header 'Authorization: Bearer <token>'const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.thinnest.ai/api/v1/campaigns/{id}/resume', 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/{id}/resume"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text){
"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": 612,
"read": 409,
"replied": 38,
"failed": 9,
"skipped": 14
},
"scheduledAt": null,
"startedAt": "2026-10-05T09:00:00.000Z",
"finishedAt": null,
"createdAt": "2026-10-04T16:20:11.482Z",
"lastError": null
}{
"error": "Send a valid API key as `Authorization: Bearer <key>`."
}{
"error": "This API key is read-only: it can read everything but change nothing."
}{
"error": "That campaign was not found."
}{
"error": "Only a paused campaign can be resumed. This one is draft."
}{
"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"
Path Parameters
The campaign's id (cmp_…), as Create Campaign and List Campaigns return it.
Response
Sending again. The campaign as it now is.
A WhatsApp broadcast or a calling campaign, with its results.
The campaign's id.
"cmp_9a3b7c21-4d5e-4f60-8a1b-2c3d4e5f6a7b"
A calling campaign: the agent that makes the calls. A broadcast: the agent that answers replies to it.
"ag_5c4a5f93-2b1e-4c0a-9d3f-7e8a1b2c3d4e"
The campaign's name, as the console lists it.
whatsapp for a broadcast, voice for a calling campaign.
whatsapp, voice draft until launched (a scheduled campaign stays a draft until scheduledAt), sending while it runs, paused when stopped for now, then sent, failed (it could not run; see lastError) or cancelled.
draft, sending, paused, sent, failed, cancelled A broadcast's template name. null on a calling campaign.
A calling campaign's opening line: the sentence the agent opens each call with, copied from the agent when the campaign was created (editing the agent later does not change it). null on a broadcast.
How far the campaign has got, person by person.
Show child attributes
Show child attributes
When a scheduled campaign starts itself. null when it is started by hand.
When it started sending. null while a draft.
When it finished or was cancelled. null while it can still send.
When it was created.
Why the campaign last stopped or failed, when it did. Cleared when it is launched or resumed.