Skip to main content

Number of messages sent from each level in campaigns

This report focuses on the number of emails sent from your campaigns. It provides a breakdown of emails sent per campaign, day, path, step, and version. For campaigns sent from multiple mailboxes, the data will be presented as a total rather than by individual mailbox. To see a similar per-mailbox breakdown, review the Open rate per campaign report.

You can preview example results below

Generating a report

Use the below endpoint to generate a report hash. Afterwards use the rest/v2/reports/{hash} to retrieve the statistics data.

Request

Endpoint

POST https://api.woodpecker.co/rest/v2/reports/messages

Headers

x-api-key: {YOUR_API_KEY}
Content-type: application/json

For details on how to authenticate your requests, please see the authentication guide.

Body

A JSON object containing from and to date fields, that define the date period for the report's data generation.

info

You can generate data for up to 30 last days

{
"from": "YYYY-MM-DD",
"to": "YYYY-MM-DD"
}
FieldTypeDescriptionExample
fromstringStart date of the report in ISO 8601 format"2025-01-01"
tostringEnd date of the report in ISO 8601 format"2025-01-31"

Request sample

Generate a report hash
curl --request POST \
--url "https://api.woodpecker.co/rest/v2/reports/messages" \
--header "Content-Type: application/json" \
--header "x-api-key: {YOUR_API_KEY}" \
--data '{
"from": "YYYY-MM-DD",
"to": "YYYY-MM-DD"
}'

Response

Response examples

The response is a hash that you should use the fetch the report content using the rest/v2/reports/{hash} endpoint.

{
"hash":"c966572e5b7c12d73f....347b5186242782c9550d"
}
Body schema
FieldTypeDescription
hashstringRepresentation of the report's ID. Use it to fetch the generated data

Retrieving a report

After requesting the report generation, you can fetch it using the below endpoint. Insert the hash, obtained from the above request, to the URL.

Preparing the data may take some time. Please check the status value to monitor the progress. The possible statuses are PENDING, WAITING, IN_PROGRESS, READY and FAILED.

Request

Endpoint

GET https://api.woodpecker.co/rest/v2/reports/{hash}

Headers

x-api-key: {YOUR_API_KEY}

For details on how to authenticate your requests, please see the authentication guide.

Parameters

By default, the results are sorted by id, sent_date, step and version ascending. You can change the order by using one of the sort parameter and one of the values.

KeyValueRequiredDescription
sort+id/-idNoSort the results by data[].id. Use - for descending and + for ascending
sort+sent_date/-sent_date   NoSort the results by data[].sent_date. Use - for descending and + for ascending

Request sample

Retrieve a report using the hash
curl --request GET \
--url "https://api.woodpecker.co/rest/v2/reports/{hash}" \
--header "x-api-key: {YOUR_API_KEY}"

Response

Response examples

This example presents campaign statistics for the period from January 1 to January 13, 2025, covering two campaigns. Each object represents a number of emails sent, grouped by campaign, day, path, step and version.

The campaign with ID 1234567 is a linear campaign that does not have any conditions/paths, but it does include multiple A/B versions for each step. In contrast, campaign 9876543 has a condition before the first email step, resulting in two separate objects for the emails sent from the second step, as they follow different paths.

{
"status": "READY",
"report": {
"description": "Number_of_messages_sent_from_each_level_in_campaigns_2025-01-01-2025-01-13",
"data": [
{
"id": 1234567,
"name": "Campaign with A/B versions and no IF condition",
"sent_date": "2025-01-01",
"path": "",
"step": 1,
"version": "A",
"sent": 25
},
{
"id": 1234567,
"name": "Campaign with A/B versions and no IF condition",
"sent_date": "2025-01-01",
"path": "",
"step": 1,
"version": "B",
"sent": 25
},
{
"id": 1234567,
"name": "Campaign with A/B versions and no IF condition",
"sent_date": "2025-01-01",
"path": "",
"step": 1,
"version": "C",
"sent": 25
},
{
"id": 1234567,
"name": "Campaign with A/B versions and no IF condition",
"sent_date": "2025-01-01",
"path": "",
"step": 1,
"version": "D",
"sent": 25
},
{
"id": 1234567,
"name": "Campaign with A/B versions and no IF condition",
"sent_date": "2025-01-03",
"path": "",
"step": 1,
"version": "A",
"sent": 10
},
{
"id": 1234567,
"name": "Campaign with A/B versions and no IF condition",
"sent_date": "2025-01-03",
"path": "",
"step": 1,
"version": "B",
"sent": 10
},
{
"id": 1234567,
"name": "Campaign with A/B versions and no IF condition",
"sent_date": "2025-01-03",
"path": "",
"step": 2,
"version": "A",
"sent": 25
},
{
"id": 1234567,
"name": "Campaign with A/B versions and no IF condition",
"sent_date": "2025-01-03",
"path": "",
"step": 2,
"version": "B",
"sent": 25
},
{
"id": 1234567,
"name": "Campaign with A/B versions and no IF condition",
"sent_date": "2025-01-03",
"path": "",
"step": 2,
"version": "C",
"sent": 25
},
{
"id": 1234567,
"name": "Campaign with A/B versions and no IF condition",
"sent_date": "2025-01-03",
"path": "",
"step": 2,
"version": "D",
"sent": 25
},
{
"id": 9876543,
"name": "Campaign with A/B versions and a condition before the first email",
"sent_date": "2025-01-08",
"path": "Path YES/NO",
"step": 1,
"version": "A",
"sent": 15
},
{
"id": 9876543,
"name": "Campaign with A/B versions and a condition before the first email",
"sent_date": "2025-01-08",
"path": "Path YES/NO",
"step": 1,
"version": "B",
"sent": 15
},
{
"id": 9876543,
"name": "Campaign with A/B versions and a condition before the first email",
"sent_date": "2025-01-08",
"path": "Path YES/NO",
"step": 1,
"version": "C",
"sent": 15
},
{
"id": 9876543,
"name": "Campaign with A/B versions and a condition before the first email",
"sent_date": "2025-01-13",
"path": "Path NO",
"step": 2,
"version": "A",
"sent": 30
},
{
"id": 9876543,
"name": "Campaign with A/B versions and a condition before the first email",
"sent_date": "2025-01-13",
"path": "Path YES",
"step": 2,
"version": "A",
"sent": 15
}
]
}
}
Body schema
FieldTypeDescription
statusstringStatus of the generation. PENDING, WAITING, IN_PROGRESS, READY, FAILED
reportobject/nullContainer for report details. Null if status is not READY
└─report.descriptionstringFull name of the report and its period
└─report.dataarrayList of campaign statistics
    └─data[].idintegerUnique ID of the campaign
    └─data[].namestringName of the campaign
    └─data[].sent_datestringDate of sending emails from a specific step YYYY-MM-DD
    └─data[].pathstringIndication from which path the emails were sent. "" - there's no condition in this campaign; PATH YES - the sum of sent emails refers to the YES path on a given step; PATH NO - the sum of sent emails refers to the NO path on a given step; PATH YES/NO IF-condition is set up in a further step of the campaign, it has not been evaluated yet
    └─data[].stepintegerStep of the campaign
    └─data[].versionstringA/B/C/D/E version of of a step. Defaults to A
    └─data[].sentintegerNumber of emails sent