Create a campaign
Create a campaign in DRAFT. Creating never sends — POST /api/v1/campaigns/{id}/send is the only operation that puts mail on the wire — so a campaign can be built up and reviewed before it costs anything.
The from address is checked against this project's verified domains before the campaign is written, so a campaign never exists with a sender it cannot use.
segment_id is required when audience_type is SEGMENT; audience_condition is required when it is FILTERED. Both answer 422 when missing.
Requires the campaigns:write scope — Create, edit, and organize your campaigns.
API key authentication. Use a sk_* (FULL) or pk_* (SENDING_ONLY) key as the bearer token. Public keys (pk_*) are restricted to the email-send endpoints and the self-serve list subscribe/unsubscribe pair; every other endpoint — event tracking included — answers 403 for them. In scope terms (used by /api/v1/* operations): FULL keys hold every scope; SENDING_ONLY keys hold only emails:send.
In: header
Header Parameters
Replay-safety key (24h TTL). Reuse it only to retry the identical request.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Body for POST /api/v1/campaigns. segment_id is required when audience_type is SEGMENT, audience_condition when it is FILTERED, and list_id when it is LIST.
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X POST "https://example.com/api/v1/campaigns" \ -H "Content-Type: application/json" \ -d '{ "name": "string", "subject": "string", "body": "string", "from": "user@example.com", "audience_type": "ALL" }'{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "string",
"status": "DRAFT",
"subject": "string",
"audience_type": "ALL",
"list_id": "430bbdbc-9d7f-4d06-a273-67ca4ba4ae4b",
"topic_id": "646807af-5da6-43aa-83d3-8ac1d15ab4e5",
"scheduled_at": "2019-08-24T14:15:22Z",
"sent_at": "2019-08-24T14:15:22Z",
"created_at": "2019-08-24T14:15:22Z",
"stats": {
"total_recipients": 0,
"sent": 0,
"delivered": 0,
"opened": 0,
"clicked": 0,
"bounced": 0
}
}{
"type": "http://example.com",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"code": "string",
"request_id": "string",
"errors": [
{
"pointer": "string",
"code": "string",
"message": "string"
}
]
}{
"type": "http://example.com",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"code": "string",
"request_id": "string",
"errors": [
{
"pointer": "string",
"code": "string",
"message": "string"
}
]
}{
"type": "http://example.com",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"code": "string",
"request_id": "string",
"errors": [
{
"pointer": "string",
"code": "string",
"message": "string"
}
]
}{
"type": "http://example.com",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"code": "string",
"request_id": "string",
"errors": [
{
"pointer": "string",
"code": "string",
"message": "string"
}
]
}{
"type": "http://example.com",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"code": "string",
"request_id": "string",
"errors": [
{
"pointer": "string",
"code": "string",
"message": "string"
}
]
}{
"type": "http://example.com",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"code": "string",
"request_id": "string",
"errors": [
{
"pointer": "string",
"code": "string",
"message": "string"
}
]
}{
"type": "http://example.com",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"code": "string",
"request_id": "string",
"errors": [
{
"pointer": "string",
"code": "string",
"message": "string"
}
]
}