Skip to main content

Complete statistics for each level of campaign

This report provides an overview of campaign statistics, including the number of contacted prospects, response rate, bounce rate, interest levels, and more. It focuses on step-level metrics. For detailed statistics at campaign-level, please refer to the General statistics per campaign report.

  • The statistics are grouped by campaign, campaign step, and step's A/B version.
  • Campaigns with YES/NO paths have the results aggregated per step, not per path.
  • Campaigns and campaign steps that did not send any messages during the selected period will not be included in the results.

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/complete_statistics_for_each_level_of_campaign

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/complete_statistics_for_each_level_of_campaign" \
--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.

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 31, 2025, covering two campaigns. You can observe ten objects as both campaigns utilize three A/B/C versions of the first step and one version for steps two and three.

Successful response example
{
"status": "READY",
"report": {
"description": "Complete_statistics_for_each_level_of_campaign_2025-01-01-2025-01-31",
"data": [
{
"client": "Bachmanity",
"campaign_owner": "Erlich",
"id": 1234567,
"name": "First successful campaign",
"campaign_status": "RUNNING",
"step": 1,
"version": "A",
"sent": 75,
"bounced": 1,
"bounce_rate": 1.3,
"opened": 0,
"opened_rate": 0.0,
"clicked": 0,
"opt_out": 0,
"opt_out_rate": 0.0,
"delivered": 74,
"responded": 4,
"responded_rate": 5.4,
"interested_yes": 2,
"interested_maybe": 0,
"interested_no": 2
},
{
"client": "Bachmanity",
"campaign_owner": "Erlich",
"id": 1234567,
"name": "First successful campaign",
"campaign_status": "RUNNING",
"step": 1,
"version": "B",
"sent": 76,
"bounced": 1,
"bounce_rate": 1.3,
"opened": 0,
"opened_rate": 0.0,
"clicked": 0,
"opt_out": 0,
"opt_out_rate": 0.0,
"delivered": 75,
"responded": 4,
"responded_rate": 5.3,
"interested_yes": 1,
"interested_maybe": 0,
"interested_no": 3
},
{
"client": "Bachmanity",
"campaign_owner": "Erlich",
"id": 1234567,
"name": "First successful campaign",
"campaign_status": "RUNNING",
"step": 1,
"version": "C",
"sent": 78,
"bounced": 2,
"bounce_rate": 2.6,
"opened": 0,
"opened_rate": 0.0,
"clicked": 0,
"opt_out": 0,
"opt_out_rate": 0.0,
"delivered": 76,
"responded": 3,
"responded_rate": 3.9,
"interested_yes": 1,
"interested_maybe": 0,
"interested_no": 2
},
{
"client": "Bachmanity",
"campaign_owner": "Erlich",
"id": 1234567,
"name": "First successful campaign",
"campaign_status": "RUNNING",
"step": 2,
"version": "A",
"sent": 201,
"bounced": 1,
"bounce_rate": 0.5,
"opened": 0,
"opened_rate": 0.0,
"clicked": 0,
"opt_out": 0,
"opt_out_rate": 0.0,
"delivered": 200,
"responded": 10,
"responded_rate": 5.0,
"interested_yes": 0,
"interested_maybe": 3,
"interested_no": 5
},
{
"client": "Bachmanity",
"campaign_owner": "Erlich",
"id": 1234567,
"name": "First successful campaign",
"campaign_status": "RUNNING",
"step": 3,
"version": "A",
"sent": 177,
"bounced": 0,
"bounce_rate": 0.0,
"opened": 0,
"opened_rate": 0.0,
"clicked": 0,
"opt_out": 0,
"opt_out_rate": 0.0,
"delivered": 177,
"responded": 3,
"responded_rate": 1.7,
"interested_yes": 0,
"interested_maybe": 0,
"interested_no": 3
},
{
"client": "Bachmanity",
"campaign_owner": "Erlich",
"id": 9876543,
"name": "Second campaign",
"campaign_status": "RUNNING",
"step": 1,
"version": "A",
"sent": 34,
"bounced": 1,
"bounce_rate": 2.9,
"opened": 0,
"opened_rate": 0.0,
"clicked": 0,
"opt_out": 0,
"opt_out_rate": 0.0,
"delivered": 33,
"responded": 0,
"responded_rate": 0.0,
"interested_yes": 0,
"interested_maybe": 0,
"interested_no": 0
},
{
"client": "Bachmanity",
"campaign_owner": "Erlich",
"id": 9876543,
"name": "Second campaign",
"campaign_status": "RUNNING",
"step": 1,
"version": "B",
"sent": 32,
"bounced": 1,
"bounce_rate": 3.1,
"opened": 0,
"opened_rate": 0.0,
"clicked": 0,
"opt_out": 0,
"opt_out_rate": 0.0,
"delivered": 31,
"responded": 3,
"responded_rate": 9.7,
"interested_yes": 0,
"interested_maybe": 1,
"interested_no": 2
},
{
"client": "Bachmanity",
"campaign_owner": "Erlich",
"id": 9876543,
"name": "Second campaign",
"campaign_status": "RUNNING",
"step": 1,
"version": "C",
"sent": 31,
"bounced": 0,
"bounce_rate": 0.0,
"opened": 0,
"opened_rate": 0.0,
"clicked": 0,
"opt_out": 0,
"opt_out_rate": 0.0,
"delivered": 31,
"responded": 1,
"responded_rate": 3.2,
"interested_yes": 0,
"interested_maybe": 0,
"interested_no": 1
},
{
"client": "Bachmanity",
"campaign_owner": "Erlich",
"id": 9876543,
"name": "Second campaign",
"campaign_status": "RUNNING",
"step": 2,
"version": "A",
"sent": 89,
"bounced": 0,
"bounce_rate": 0.0,
"opened": 0,
"opened_rate": 0.0,
"clicked": 0,
"opt_out": 0,
"opt_out_rate": 0.0,
"delivered": 89,
"responded": 4,
"responded_rate": 4.5,
"interested_yes": 0,
"interested_maybe": 1,
"interested_no": 3
},
{
"client": "Bachmanity",
"campaign_owner": "Erlich",
"id": 9876543,
"name": "Second campaign",
"campaign_status": "RUNNING",
"step": 3,
"version": "A",
"sent": 69,
"bounced": 0,
"bounce_rate": 0.0,
"opened": 0,
"opened_rate": 0.0,
"clicked": 0,
"opt_out": 0,
"opt_out_rate": 0.0,
"delivered": 69,
"responded": 1,
"responded_rate": 1.4,
"interested_yes": 0,
"interested_maybe": 0,
"interested_no": 1
}
]
}
}
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[].clientstringName of the Woodpecker account
    └─data[].campaign_ownerstringFull name of the Woodpecker user who created the campaign
    └─data[].idintegerUnique ID of the campaign
    └─data[].namestringName of the campaign
    └─data[].campaign_statusstringCurrent status of the campaign. One of: RUNNING PAUSED STOPPED EDITED DRAFT COMPLETED DELETED
    └─data[].stepintegerStep of the campaign
    └─data[].versionstringA/B/C/D/E version of of a step
    └─data[].sentintegerNumber of contacted prospects
    └─data[].bouncedintegerNumber of prospects who bounced
    └─data[].bounce_ratestringPercentage of prospects who bounced
    └─data[].openedintegerNumber of prospects who opened an email
    └─data[].opened_ratestringPercentage of prospects who opened an email
    └─data[].clickedintegerNumber of prospects who who clicked a link
    └─data[].opt_outintegerNumber of prospects who opted-out
    └─data[].opt_out_rateintegerPercentage of prospects who opted-out
    └─data[].deliveredintegerNumber of prospects who received an email
    └─data[].respondedintegerNumber of prospects who responded
    └─data[].responded_ratestringPercentage of prospects who responded
    └─data[].interested_yesintegerNumber of "interested" responses
    └─data[].interested_maybeintegerNumber of "maybe later" responses
    └─data[].interested_nointegerNumber of "not interested" responses