Cakemail
Cakemail API

Campaign

Create and manage email campaigns. A campaign combines content (from a template or custom HTML), an audience (a list or segment), and a sender identity. Campaigns go through a lifecycle: incomplete → scheduled → delivering → delivered. They can also be active (ready to schedule), suspended, resumed, canceled, archived, or deleted. Send test emails before scheduling to preview the final result.


Show all campaigns

GET
https://api.cakemail.dev
/campaigns

List all campaigns in the account. Results can be filtered by name, status, and type, and sorted by name, creation date, or scheduled date.

Required scope(s): campaigns:read

Show all campaigns › query Parameters

account_id
​integer · min: 1

Optional Account ID to be used for the request

Optional Account ID to be used for the request

page
​integer · min: 1
Default: 1
per_page
​integer · min: 1
Default: 50
with_count
​boolean

Include count in the response

Include count in the response

Default: false
filter
​string

Valid Terms:

  • status
  • name
  • type
  • list_id

Valid Operators:

  • ==

Query separator:

  • ;

Valid Terms:

  • status
  • name
  • type
  • list_id

Valid Operators:

  • ==

Query separator:

  • ;
sort
​string

Sort term and direction, using syntax [-|+]term.

Valid terms:

  • name
  • created_on
  • scheduled_for
  • scheduled_on
  • updated_on
  • type

Sort term and direction, using syntax [-|+]term.

Valid terms:

  • name
  • created_on
  • scheduled_for
  • scheduled_on
  • updated_on
  • type

Show all campaigns › Responses

Successful Response

​Pagination · required
​CampaignSummaryResponse[] · required

Create a campaign

POST
https://api.cakemail.dev
/campaigns

Create a new campaign in draft status. Requires a name, audience (list and optional segment), and content. The campaign must be scheduled separately after creation.

Required scope(s): campaigns:write

Create a campaign › query Parameters

account_id
​integer · min: 1

Optional Account ID to be used for the request

Optional Account ID to be used for the request

Create a campaign › Request Body

name
​string · minLength: 1 · required

Name of the campaign

​object

Target audience for the campaign

Default: {}
​object

Tracking settings for the campaign

Default: {"opens":true,"clicks_html":true,"clicks_text":true}
​object

Sender email and name for the campaign

reply_to_email
​string · email

Specify a different reply-to email address than the sender

​object

Email content of the campaign

Default: {"type":"html"}

Create a campaign › Responses

Successful Response

id
​integer · required
​CampaignFullResponse · required
object
​string
Default: campaign
created
​boolean
Default: true

Show a campaign details

GET
https://api.cakemail.dev
/campaigns/{campaign_id}

Retrieve the full details of a campaign, including its content, audience, tracking settings, sender, scheduling, and status.

Required scope(s): campaigns:read

Show a campaign details › path Parameters

campaign_id
​integer · required

Show a campaign details › query Parameters

revision_id
​integer
account_id
​integer · min: 1

Optional Account ID to be used for the request

Optional Account ID to be used for the request

Show a campaign details › Responses

Successful Response


Update a campaign

PATCH
https://api.cakemail.dev
/campaigns/{campaign_id}

Update a campaign's name, content, or tracking settings. All fields are optional — only provided fields are updated. The campaign must be in draft status to update its content.

Required scope(s): campaigns:write

Update a campaign › path Parameters

campaign_id
​integer · min: 1 · required

Update a campaign › query Parameters

account_id
​integer · min: 1

Optional Account ID to be used for the request

Optional Account ID to be used for the request

Update a campaign › Request Body

name
​string · minLength: 1

Name of the campaign

​object

Target audience for the campaign

Default: {}
​object

Tracking settings for the campaign

​object

Sender email and name for the campaign

reply_to_email
​string · email

Specify a different reply-to email address than the sender

​object

Email content of the campaign

Default: {}

Update a campaign › Responses

Successful Response

id
​integer · required
​CampaignFullResponse · required
object
​string
Default: campaign
updated
​boolean
Default: true

Delete a campaign

DELETE
https://api.cakemail.dev
/campaigns/{campaign_id}

Delete a campaign. Only campaigns in draft status can be deleted. To remove a delivered or scheduled campaign, archive it instead.

Required scope(s): campaigns:delete

Delete a campaign › path Parameters

campaign_id
​integer · required

Delete a campaign › query Parameters

account_id
​integer · min: 1

Optional Account ID to be used for the request

Optional Account ID to be used for the request

Delete a campaign › Responses

Successful Response

id
​integer · required
object
​string
Default: campaign
deleted
​boolean
Default: true

Render a campaign

GET
https://api.cakemail.dev
/campaigns/{campaign_id}/render

Render a campaign's HTML and text content with merge tags replaced. Returns the final content as it would appear to a recipient.

Required scope(s): campaigns:read

Render a campaign › path Parameters

campaign_id
​integer · required

Render a campaign › query Parameters

contact_id
​integer · min: 1
account_id
​integer · min: 1

Render a campaign › Responses

Successful Response


Send a test email

POST
https://api.cakemail.dev
/campaigns/{campaign_id}/send-test

Send a test email for a campaign to one or more email addresses. The test email renders the campaign content exactly as recipients would see it, including merge tags and tracking links.

Required scope(s): (campaigns:send-test OR campaigns:send)

Send a test email › path Parameters

campaign_id
​integer · min: 1 · required

Send a test email › query Parameters

account_id
​integer · min: 1

Optional Account ID to be used for the request

Optional Account ID to be used for the request

Send a test email › Request Body

email
​string · email · required
type
​string · enum

An enumeration.

Enum values:
merged
separated
Default: merged

Send a test email › Responses

Successful Response

email
​string · email · required

Recipient email address

type
​string · enum · required

Type of test email sent

Enum values:
merged
separated
object
​string

Object type

Default: test_email
sent
​boolean

Whether the test email was sent

Default: true

Schedule a campaign

POST
https://api.cakemail.dev
/campaigns/{campaign_id}/schedule

Schedule a campaign for delivery. Optionally specify a date and time to send. If no date is provided, the campaign is sent immediately. The account must have a verified mailing address before scheduling.

Required scope(s): campaigns:send

Schedule a campaign › path Parameters

campaign_id
​integer · min: 1 · required

Schedule a campaign › query Parameters

account_id
​integer · min: 1

Optional Account ID to be used for the request

Optional Account ID to be used for the request

Schedule a campaign › Request Body

date
​integer · min: 1 · max: 2147483647

Scheduled send time

html_empty
​boolean

Required to be true if the html message is empty

Default: false

Schedule a campaign › Responses

Successful Response

id
​integer · required
object
​string
Default: campaign
scheduled
​boolean
Default: true

Unschedule a campaign

POST
https://api.cakemail.dev
/campaigns/{campaign_id}/unschedule

Remove a campaign from the delivery schedule, returning it to draft status. Only works for campaigns that have not yet started delivering.

Required scope(s): campaigns:send

Unschedule a campaign › path Parameters

campaign_id
​integer · min: 1 · required

Unschedule a campaign › query Parameters

account_id
​integer · min: 1

Optional Account ID to be used for the request

Optional Account ID to be used for the request

Unschedule a campaign › Responses

Successful Response

id
​integer · required
object
​string
Default: campaign
scheduled
​boolean
Default: true

Reschedule a campaign

POST
https://api.cakemail.dev
/campaigns/{campaign_id}/reschedule

Change the scheduled delivery date of an already-scheduled campaign.

Required scope(s): campaigns:send

Reschedule a campaign › path Parameters

campaign_id
​integer · min: 1 · required

Reschedule a campaign › query Parameters

account_id
​integer · min: 1

Optional Account ID to be used for the request

Optional Account ID to be used for the request

Reschedule a campaign › Request Body

date
​integer · min: 1 · max: 2147483647

Scheduled send time

html_empty
​boolean

Required to be true if the html message is empty

Default: false

Reschedule a campaign › Responses

Successful Response

id
​integer · required
object
​string
Default: campaign
scheduled
​boolean
Default: true

Suspend a campaign

POST
https://api.cakemail.dev
/campaigns/{campaign_id}/suspend

Pause a campaign that is currently delivering. Delivery stops and can be resumed later with the resume endpoint.

Required scope(s): campaigns:admin

Suspend a campaign › path Parameters

campaign_id
​integer · min: 1 · required

Suspend a campaign › query Parameters

account_id
​integer · min: 1

Optional Account ID to be used for the request

Optional Account ID to be used for the request

Suspend a campaign › Responses

Successful Response

id
​integer · required
object
​string
Default: campaign
suspended
​boolean
Default: true

Resume a campaign

POST
https://api.cakemail.dev
/campaigns/{campaign_id}/resume

Resume delivery of a previously suspended campaign.

Required scope(s): campaigns:send

Resume a campaign › path Parameters

campaign_id
​integer · min: 1 · required

Resume a campaign › query Parameters

account_id
​integer · min: 1

Optional Account ID to be used for the request

Optional Account ID to be used for the request

Resume a campaign › Responses

Successful Response

id
​integer · required
object
​string
Default: campaign
resumed
​boolean
Default: true

Cancel a campaign

POST
https://api.cakemail.dev
/campaigns/{campaign_id}/cancel

Cancel a campaign that is scheduled or currently delivering. Unlike suspend, a canceled campaign cannot be resumed.

Required scope(s): campaigns:admin

Cancel a campaign › path Parameters

campaign_id
​integer · min: 1 · required

Cancel a campaign › query Parameters

account_id
​integer · min: 1

Optional Account ID to be used for the request

Optional Account ID to be used for the request

Cancel a campaign › Responses

Successful Response

id
​integer · required
object
​string
Default: campaign
cancelled
​boolean
Default: true

Archive a campaign

POST
https://api.cakemail.dev
/campaigns/{campaign_id}/archive

You can only delete a campaign when the status is draft. However, if you want to remove a campaign from your list of active campaigns, you can archive it.

Required scope(s): campaigns:write

Archive a campaign › path Parameters

campaign_id
​integer · min: 1 · required

Archive a campaign › query Parameters

account_id
​integer · min: 1

Optional Account ID to be used for the request

Optional Account ID to be used for the request

Archive a campaign › Responses

Successful Response

id
​integer · required
object
​string
Default: campaign
archived
​boolean
Default: true

Unarchive a campaign

POST
https://api.cakemail.dev
/campaigns/{campaign_id}/unarchive

Restore a previously archived campaign back to the active campaign list.

Required scope(s): campaigns:write

Unarchive a campaign › path Parameters

campaign_id
​integer · min: 1 · required

Unarchive a campaign › query Parameters

account_id
​integer · min: 1

Optional Account ID to be used for the request

Optional Account ID to be used for the request

Unarchive a campaign › Responses

Successful Response

id
​integer · required
object
​string
Default: campaign
archived
​boolean
Default: true

Show all campaign revisions

GET
https://api.cakemail.dev
/campaigns/{campaign_id}/revisions

List all saved revisions of a campaign's content. Each revision captures a snapshot of the campaign at a point in time.

Required scope(s): campaigns:read

Show all campaign revisions › path Parameters

campaign_id
​integer · required

Show all campaign revisions › query Parameters

account_id
​integer · min: 1

Optional Account ID to be used for the request

Optional Account ID to be used for the request

page
​integer · min: 1
Default: 1
per_page
​integer · min: 1
Default: 50
with_count
​boolean

Include count in the response

Include count in the response

Default: false

Show all campaign revisions › Responses

Successful Response

​Pagination · required
​CampaignRevision[] · required

GET
https://api.cakemail.dev
/campaigns/{campaign_id}/links

List all tracked links in a campaign.

Required scope(s): links:read

Show a campaign links › path Parameters

campaign_id
​integer · required

Show a campaign links › query Parameters

account_id
​integer · min: 1

Optional Account ID to be used for the request

Optional Account ID to be used for the request

page
​integer · min: 1
Default: 1
per_page
​integer · min: 1
Default: 50
with_count
​boolean

Include count in the response

Include count in the response

Default: false

Show a campaign links › Responses

Successful Response

​object · required

Pagination metadata

​LinkFullResponse[] · required

List of links