Update a campaign
Deprecated. This endpoint is replaced by /v3/sender-profiles and will be removed in a future release. It still behaves exactly as before, so nothing needs to change today — but new integrations should use /v3/sender-profiles, which models a profile's markets, compliance, brand, campaigns and billing explicitly.
Updates an existing campaign under the brand of the specified profile. Once the campaign has been submitted to TCR its volume can no longer move between low volume (under 2,000 messages a day) and high volume.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X PUT "https://example.com/v3/profiles/770e8400-e29b-41d4-a716-446655440002/campaigns/b2c3d4e5-f6a7-8901-bcde-f12345678901" \ -H "Idempotency-Key: req_abc123_retry1" \ -H "Content-Type: application/json" \ -d '{ "campaign": { "name": "Customer Notifications Updated", "description": "Updated appointment reminders and account notifications", "type": "App", "useCases": [ { "messagingUseCaseUs": "ACCOUNT_NOTIFICATION", "sampleMessages": [ "Hi {name}, your appointment is confirmed for {date} at {time}.", "Your order #{order_id} has been shipped. Track at {url}" ] } ], "messageFlow": "User signs up on website and opts in to receive SMS notifications" }, "sandbox": false }'{
"success": true,
"data": {
"id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"customerId": "00000000-0000-0000-0000-000000000000",
"type": "App",
"name": "Customer Notifications Updated",
"description": "Updated appointment reminders and account notifications",
"brandId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": null,
"tcrCampaignId": null,
"submittedToTCR": false,
"submittedAt": null,
"cost": null,
"billedDate": null,
"messageFlow": null,
"volume": null,
"privacyPolicyLink": null,
"termsAndConditionsLink": null,
"optinMessage": null,
"optoutMessage": null,
"helpMessage": null,
"optinKeywords": null,
"optoutKeywords": null,
"helpKeywords": null,
"dcaElectionsComplete": null,
"dcaElectionsCompletedAt": null,
"tcrSyncError": null,
"hasSubmissionTransaction": false,
"useCases": [
{
"id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"campaignId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"customerId": "00000000-0000-0000-0000-000000000000",
"messagingUseCaseUs": "ACCOUNT_NOTIFICATION",
"sampleMessages": [
"Hi {name}, your appointment is confirmed for {date} at {time}.",
"Your order #{order_id} has been shipped. Track at {url}"
],
"createdAt": "0001-01-01T00:00:00+00:00",
"updatedAt": null
}
],
"createdAt": "2026-10-29T15:14:27.1614832+00:00",
"updatedAt": "2026-11-05T15:14:27.161484+00:00"
},
"error": null,
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-11-05T15:14:27.1614972+00:00",
"version": "v3"
}
}{
"success": false,
"data": null,
"error": {
"code": "VALIDATION_001",
"message": "These campaigns are read-only. Set inherit_tcr_campaign to false to manage your own campaigns.",
"details": null,
"doc_url": "https://docs.sent.dm/reference/api/error-catalog"
},
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-11-05T15:14:27.1615162+00:00",
"version": "v3"
}
}{
"success": false,
"data": null,
"error": {
"code": "RESOURCE_010",
"message": "Campaign not found for this profile",
"details": null,
"doc_url": "https://docs.sent.dm/reference/api/error-catalog"
},
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-11-05T15:14:27.1615168+00:00",
"version": "v3"
}
}{
"success": true,
"error": {
"code": "string",
"message": "string",
"details": {
"property1": [
"string"
],
"property2": [
"string"
]
},
"doc_url": "string"
},
"meta": {
"request_id": "string",
"timestamp": "2019-08-24T14:15:22Z",
"version": "string"
}
}{
"success": false,
"data": null,
"error": {
"code": "INTERNAL_001",
"message": "Failed to update campaign. Please contact support with request ID: req_7X9zKp2jDw",
"details": null,
"doc_url": "https://docs.sent.dm/reference/api/error-catalog"
},
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-11-05T15:14:27.1615173+00:00",
"version": "v3"
}
}Create a campaign for a profile's brand POST
**Deprecated.** This endpoint is replaced by `/v3/sender-profiles` and will be removed in a future release. It still behaves exactly as before, so nothing needs to change today — but new integrations should use `/v3/sender-profiles`, which models a profile's markets, compliance, brand, campaigns and billing explicitly. Creates a new campaign scoped under the brand of the specified profile. Each campaign must include at least one use case with sample messages.
Delete a campaign DELETE
**Deprecated.** This endpoint is replaced by `/v3/sender-profiles` and will be removed in a future release. It still behaves exactly as before, so nothing needs to change today — but new integrations should use `/v3/sender-profiles`, which models a profile's markets, compliance, brand, campaigns and billing explicitly. Deletes a campaign by ID from the brand of the specified profile. The profile must belong to the authenticated organization.