API / Campaigns¶
Method | Endpoint | Description |
---|---|---|
GET | /api/campaigns | Retrieve all campaigns. |
GET | /api/campaigns/{campaign_id} | Retrieve a specific campaign. |
GET | /api/campaigns/{campaign_id}/preview | Retrieve preview of a campaign. |
GET | /api/campaigns/running/stats | Retrieve stats of specified campaigns. |
GET | /api/campaigns/analytics/{type} | Retrieve view counts for a campaign. |
POST | /api/campaigns | Create a new campaign. |
POST | /api/campaigns/{campaign_id}/test | Test campaign with arbitrary subscribers. |
PUT | /api/campaigns/{campaign_id} | Update a campaign. |
PUT | /api/campaigns/{campaign_id}/status | Change status of a campaign. |
PUT | /api/campaigns/{campaign_id}/archive | Publish campaign to public archive. |
DELETE | /api/campaigns/{campaign_id} | Delete a campaign. |
GET /api/campaigns¶
Retrieve all campaigns.
Example Request¶
curl -u "api_user:token" -X GET 'http://localhost:9000/api/campaigns?page=1&per_page=100'
Parameters¶
Name | Type | Required | Description |
---|---|---|---|
order | string | Sorting order: ASC for ascending, DESC for descending. | |
order_by | string | Result sorting field. Options: name, status, created_at, updated_at. | |
query | string | SQL query expression to filter campaigns. | |
status | []string | Status to filter campaigns. Repeat in the query for multiple values. | |
tags | []string | Tags to filter campaigns. Repeat in the query for multiple values. | |
page | number | Page number for paginated results. | |
per_page | number | Results per page. Set as 'all' for all results. | |
no_body | boolean | When set to true, returns response without body content. |
Example Response¶
{
"data": {
"results": [
{
"id": 1,
"created_at": "2020-03-14T17:36:41.29451+01:00",
"updated_at": "2020-03-14T17:36:41.29451+01:00",
"views": 0,
"clicks": 0,
"lists": [
{
"id": 1,
"name": "Default list"
}
],
"started_at": null,
"to_send": 0,
"sent": 0,
"uuid": "57702beb-6fae-4355-a324-c2fd5b59a549",
"type": "regular",
"name": "Test campaign",
"subject": "Welcome to listmonk",
"from_email": "No Reply <noreply@yoursite.com>",
"body": "<h3>Hi {{ .Subscriber.FirstName }}!</h3>\n\t\t\tThis is a test e-mail campaign. Your second name is {{ .Subscriber.LastName }} and you are from {{ .Subscriber.Attribs.city }}.",
"send_at": "2020-03-15T17:36:41.293233+01:00",
"status": "draft",
"content_type": "richtext",
"tags": [
"test-campaign"
],
"template_id": 1,
"messenger": "email"
}
],
"query": "",
"total": 1,
"per_page": 20,
"page": 1
}
}
GET /api/campaigns/{campaign_id}¶
Retrieve a specific campaign.
Parameters¶
Name | Type | Required | Description |
---|---|---|---|
campaign_id | number | Yes | Campaign ID. |
no_body | boolean | When set to true, returns response without body content. |
Example Request¶
curl -u "api_user:token" -X GET 'http://localhost:9000/api/campaigns/1'
Example Response¶
{
"data": {
"id": 1,
"created_at": "2020-03-14T17:36:41.29451+01:00",
"updated_at": "2020-03-14T17:36:41.29451+01:00",
"views": 0,
"clicks": 0,
"lists": [
{
"id": 1,
"name": "Default list"
}
],
"started_at": null,
"to_send": 0,
"sent": 0,
"uuid": "57702beb-6fae-4355-a324-c2fd5b59a549",
"type": "regular",
"name": "Test campaign",
"subject": "Welcome to listmonk",
"from_email": "No Reply <noreply@yoursite.com>",
"body": "<h3>Hi {{ .Subscriber.FirstName }}!</h3>\n\t\t\tThis is a test e-mail campaign. Your second name is {{ .Subscriber.LastName }} and you are from {{ .Subscriber.Attribs.city }}.",
"send_at": "2020-03-15T17:36:41.293233+01:00",
"status": "draft",
"content_type": "richtext",
"tags": [
"test-campaign"
],
"template_id": 1,
"messenger": "email"
}
}
GET /api/campaigns/{campaign_id}/preview¶
Preview a specific campaign.
Parameters¶
Name | Type | Required | Description |
---|---|---|---|
campaign_id | number | Yes | Campaign ID to preview. |
Example Request¶
curl -u "api_user:token" -X GET 'http://localhost:9000/api/campaigns/1/preview'
Example Response¶
<h3>Hi John!</h3>
This is a test e-mail campaign. Your second name is Doe and you are from Bengaluru.
GET /api/campaigns/running/stats¶
Retrieve stats of specified campaigns.
Parameters¶
Name | Type | Required | Description |
---|---|---|---|
campaign_id | number | Yes | Campaign IDs to get stats for. |
Example Request¶
curl -u "api_user:token" -X GET 'http://localhost:9000/api/campaigns/running/stats?campaign_id=1'
Example Response¶
{
"data": []
}
GET /api/campaigns/analytics/{type}¶
Retrieve stats of specified campaigns.
Parameters¶
Name | Type | Required | Description |
---|---|---|---|
id | number[] | Yes | Campaign IDs to get stats for. |
type | string | Yes | Analytics type: views, links, clicks, bounces |
from | string | Yes | Start value of date range. |
to | string | Yes | End value of date range. |
Example Request¶
curl -u "api_user:token" -X GET 'http://localhost:9000/api/campaigns/analytics/views?id=1&from=2024-08-04&to=2024-08-12'
Example Response¶
{
"data": [
{
"campaign_id": 1,
"count": 10,
"timestamp": "2024-08-04T00:00:00Z"
},
{
"campaign_id": 1,
"count": 14,
"timestamp": "2024-08-08T00:00:00Z"
},
{
"campaign_id": 1,
"count": 20,
"timestamp": "2024-08-09T00:00:00Z"
},
{
"campaign_id": 1,
"count": 21,
"timestamp": "2024-08-10T00:00:00Z"
},
{
"campaign_id": 1,
"count": 21,
"timestamp": "2024-08-11T00:00:00Z"
}
]
}
Example Request¶
curl -u "api_user:token" -X GET 'http://localhost:9000/api/campaigns/analytics/links?id=1&from=2024-08-04T18%3A30%3A00.624Z&to=2024-08-12T18%3A29%3A00.624Z'
Example Response¶
{
"data": [
{
"url": "https://freethebears.org",
"count": 294
},
{
"url": "https://calmcode.io",
"count": 278
},
{
"url": "https://climate.nasa.gov",
"count": 261
},
{
"url": "https://www.storybreathing.com",
"count": 260
}
]
}
POST /api/campaigns¶
Create a new campaign.
Parameters¶
Name | Type | Required | Description |
---|---|---|---|
name | string | Yes | Campaign name. |
subject | string | Yes | Campaign email subject. |
lists | number[] | Yes | List IDs to send campaign to. |
from_email | string | 'From' email in campaign emails. Defaults to value from settings if not provided. | |
type | string | Yes | Campaign type: 'regular' or 'optin'. |
content_type | string | Yes | Content type: 'richtext', 'html', 'markdown', 'plain'. |
body | string | Yes | Content body of campaign. |
altbody | string | Alternate plain text body for HTML (and richtext) emails. | |
send_at | string | Timestamp to schedule campaign. Format: 'YYYY-MM-DDTHH:MM:SSZ'. | |
messenger | string | 'email' or a custom messenger defined in settings. Defaults to 'email' if not provided. | |
template_id | number | Template ID to use. Defaults to default template if not provided. | |
tags | string[] | Tags to mark campaign. | |
headers | JSON | Key-value pairs to send as SMTP headers. Example: [{"x-custom-header": "value"}]. |
Example request¶
curl -u "api_user:token" 'http://localhost:9000/api/campaigns' -X POST -H 'Content-Type: application/json;charset=utf-8' --data-raw '{"name":"Test campaign","subject":"Hello, world","lists":[1],"from_email":"listmonk <noreply@listmonk.yoursite.com>","content_type":"richtext","messenger":"email","type":"regular","tags":["test"],"template_id":1}'
Example response¶
{
"data": {
"id": 1,
"created_at": "2021-12-27T11:50:23.333485Z",
"updated_at": "2021-12-27T11:50:23.333485Z",
"views": 0,
"clicks": 0,
"bounces": 0,
"lists": [{
"id": 1,
"name": "Default list"
}],
"started_at": null,
"to_send": 1,
"sent": 0,
"uuid": "90c889cc-3728-4064-bbcb-5c1c446633b3",
"type": "regular",
"name": "Test campaign",
"subject": "Hello, world",
"from_email": "listmonk \u003cnoreply@listmonk.yoursite.com\u003e",
"body": "",
"altbody": null,
"send_at": null,
"status": "draft",
"content_type": "richtext",
"tags": ["test"],
"template_id": 1,
"messenger": "email"
}
}
POST /api/campaigns/{campaign_id}/test¶
Test campaign with arbitrary subscribers.
Use the same parameters in POST /api/campaigns in addition to the below parameters.
Parameters¶
Name | Type | Required | Description |
---|---|---|---|
subscribers | string[] | Yes | List of subscriber e-mails to send the message to. |
PUT /api/campaigns/{campaign_id}¶
Update a campaign.
Refer to parameters from POST /api/campaigns
PUT /api/campaigns/{campaign_id}¶
Update a specific campaign.
Refer to parameters from POST /api/campaigns
PUT /api/campaigns/{campaign_id}/status¶
Change status of a campaign.
Parameters¶
Name | Type | Required | Description |
---|---|---|---|
campaign_id | number | Yes | Campaign ID to change status. |
status | string | Yes | New status for campaign: 'scheduled', 'running', 'paused', 'cancelled'. |
Note¶
- Only 'scheduled' campaigns can change status to 'draft'.
- Only 'draft' campaigns can change status to 'scheduled'.
- Only 'paused' and 'draft' campaigns can start ('running' status).
- Only 'running' campaigns can change status to 'cancelled' and 'paused'.
Example Request¶
curl -u "api_user:token" -X PUT 'http://localhost:9000/api/campaigns/1/status' \
--header 'Content-Type: application/json' \
--data-raw '{"status":"scheduled"}'
Example Response¶
{
"data": {
"id": 1,
"created_at": "2020-03-14T17:36:41.29451+01:00",
"updated_at": "2020-04-08T19:35:17.331867+01:00",
"views": 0,
"clicks": 0,
"lists": [
{
"id": 1,
"name": "Default list"
}
],
"started_at": null,
"to_send": 0,
"sent": 0,
"uuid": "57702beb-6fae-4355-a324-c2fd5b59a549",
"type": "regular",
"name": "Test campaign",
"subject": "Welcome to listmonk",
"from_email": "No Reply <noreply@yoursite.com>",
"body": "<h3>Hi {{ .Subscriber.FirstName }}!</h3>\n\t\t\tThis is a test e-mail campaign. Your second name is {{ .Subscriber.LastName }} and you are from {{ .Subscriber.Attribs.city }}.",
"send_at": "2020-03-15T17:36:41.293233+01:00",
"status": "scheduled",
"content_type": "richtext",
"tags": [
"test-campaign"
],
"template_id": 1,
"messenger": "email"
}
}
PUT /api/campaigns/{campaign_id}/archive¶
Publish campaign to public archive.
Parameters¶
Name | Type | Required | Description |
---|---|---|---|
campaign_id | number | Yes | Campaign ID to publish to public archive. |
archive | bool | Yes | State of the public archive. |
archive_template_id | number | No | Archive template id. Defaults to 0. |
archive_meta | JSON string | No | Optional Metadata to use in campaign message or template.Eg: name, email. |
archive_slug | string | No | Name for page to be used in public archive URL |
Example Request¶
curl -u "api_user:token" -X PUT 'http://localhost:8080/api/campaigns/33/archive'
--header 'Content-Type: application/json'
--data-raw '{"archive":true,"archive_template_id":1,"archive_meta":{},"archive_slug":"my-newsletter-old-edition"}'
Example Response¶
{
"data": {
"archive": true,
"archive_template_id": 1,
"archive_meta": {},
"archive_slug": "my-newsletter-old-edition"
}
}
DELETE /api/campaigns/{campaign_id}¶
Delete a campaign.
Parameters¶
Name | Type | Required | Description |
---|---|---|---|
campaign_id | number | Yes | Campaign ID to delete. |
Example Request¶
curl -u "api_user:token" -X DELETE 'http://localhost:9000/api/campaigns/34'
Example Response¶
{
"data": true
}