Get campaign analytics
curl --request GET \
--url https://app.manypi.com/api/outreach/campaigns/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.manypi.com/api/outreach/campaigns/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.manypi.com/api/outreach/campaigns/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.manypi.com/api/outreach/campaigns/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.manypi.com/api/outreach/campaigns/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.manypi.com/api/outreach/campaigns/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.manypi.com/api/outreach/campaigns/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"campaign": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"status": "active",
"sequence_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"smtp_config_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"reply_to": "<string>",
"daily_limit": 123,
"priority": 123,
"schedule_enabled": true,
"send_days": [
3
],
"send_from": "<string>",
"send_to": "<string>",
"timezone": "<string>",
"track_opens": true,
"inbox_strategy": "single",
"include_unsubscribe": true,
"require_verified": true,
"stats": {
"enrolled": 123,
"active": 123,
"completed": 123,
"sent": 123,
"failed": 123,
"opened": 123,
"replied": 123,
"bounced": 123,
"unsubscribed": 123,
"unsubscribed_sends": 123
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
},
"stats": {
"enrolled": 123,
"active": 123,
"completed": 123,
"sent": 123,
"failed": 123,
"opened": 123,
"replied": 123,
"bounced": 123,
"unsubscribed": 123,
"unsubscribed_sends": 123
},
"perStep": [
{
"step": 123,
"sent": 123,
"opened": 123
}
],
"leads": [
{}
]
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}Outreach
Get campaign analytics
One campaign’s full analytics: headline stats, a per-step sent/opened breakdown, and every enrolled lead with its progress.
The per-step breakdown is where you see whether the follow-ups are doing the work.
Requires the read permission.
GET
/
api
/
outreach
/
campaigns
/
{id}
Get campaign analytics
curl --request GET \
--url https://app.manypi.com/api/outreach/campaigns/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.manypi.com/api/outreach/campaigns/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.manypi.com/api/outreach/campaigns/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.manypi.com/api/outreach/campaigns/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.manypi.com/api/outreach/campaigns/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.manypi.com/api/outreach/campaigns/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.manypi.com/api/outreach/campaigns/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"campaign": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"status": "active",
"sequence_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"smtp_config_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"reply_to": "<string>",
"daily_limit": 123,
"priority": 123,
"schedule_enabled": true,
"send_days": [
3
],
"send_from": "<string>",
"send_to": "<string>",
"timezone": "<string>",
"track_opens": true,
"inbox_strategy": "single",
"include_unsubscribe": true,
"require_verified": true,
"stats": {
"enrolled": 123,
"active": 123,
"completed": 123,
"sent": 123,
"failed": 123,
"opened": 123,
"replied": 123,
"bounced": 123,
"unsubscribed": 123,
"unsubscribed_sends": 123
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
},
"stats": {
"enrolled": 123,
"active": 123,
"completed": 123,
"sent": 123,
"failed": 123,
"opened": 123,
"replied": 123,
"bounced": 123,
"unsubscribed": 123,
"unsubscribed_sends": 123
},
"perStep": [
{
"step": 123,
"sent": 123,
"opened": 123
}
],
"leads": [
{}
]
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}Authorizations
A ManyPI API key (mpi_...) from Settings → API keys, or an OAuth 2.1 access token obtained through the MCP consent flow.
Path Parameters
Response
Campaign analytics.
The campaign, with an added inboxes array describing the sending identities it uses.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Per-step sent and opened breakdown. Named perStep, not steps.
Show child attributes
Show child attributes
The enrolled leads with their progress. Named leads, not enrollments.
