curl "https://docurise.io/api/preview/email/broadcasts/7f1c0f7e-3c5e-4b1a-9d34-2f0a5b6c8d90/insights" \
-H "Authorization: Bearer $DOCURISE_API_KEY"import requests
url = "https://docurise.io/api/preview/email/broadcasts/{id}/insights"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://docurise.io/api/preview/email/broadcasts/{id}/insights', 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://docurise.io/api/preview/email/broadcasts/{id}/insights",
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://docurise.io/api/preview/email/broadcasts/{id}/insights"
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://docurise.io/api/preview/email/broadcasts/{id}/insights")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://docurise.io/api/preview/email/broadcasts/{id}/insights")
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{
"broadcastId": "7f1c0f7e-3c5e-4b1a-9d34-2f0a5b6c8d90",
"sent": 1280,
"delivered": 1262,
"opened": 604,
"clicked": 131,
"bounced": 14,
"deliveredRate": 0.9859,
"openedRate": 0.4786,
"clickedRate": 0.1038,
"bouncedRate": 0.0109
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"retryAfterSeconds": 123,
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"retryAfterSeconds": 123,
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"retryAfterSeconds": 123,
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"retryAfterSeconds": 123,
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"retryAfterSeconds": 123,
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"retryAfterSeconds": 123,
"details": {}
}
}Get broadcast insights
Aggregate sent, delivered, opened, clicked and bounced numbers for one email broadcast
curl "https://docurise.io/api/preview/email/broadcasts/7f1c0f7e-3c5e-4b1a-9d34-2f0a5b6c8d90/insights" \
-H "Authorization: Bearer $DOCURISE_API_KEY"import requests
url = "https://docurise.io/api/preview/email/broadcasts/{id}/insights"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://docurise.io/api/preview/email/broadcasts/{id}/insights', 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://docurise.io/api/preview/email/broadcasts/{id}/insights",
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://docurise.io/api/preview/email/broadcasts/{id}/insights"
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://docurise.io/api/preview/email/broadcasts/{id}/insights")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://docurise.io/api/preview/email/broadcasts/{id}/insights")
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{
"broadcastId": "7f1c0f7e-3c5e-4b1a-9d34-2f0a5b6c8d90",
"sent": 1280,
"delivered": 1262,
"opened": 604,
"clicked": 131,
"bounced": 14,
"deliveredRate": 0.9859,
"openedRate": 0.4786,
"clickedRate": 0.1038,
"bouncedRate": 0.0109
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"retryAfterSeconds": 123,
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"retryAfterSeconds": 123,
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"retryAfterSeconds": 123,
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"retryAfterSeconds": 123,
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"retryAfterSeconds": 123,
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"retryAfterSeconds": 123,
"details": {}
}
}Authorizations
A key generated from Settings → Developers, sent as
Authorization: Bearer dr_live_<12 hex chars>_<64 hex chars>. Keys
carry explicit scopes — each endpoint states the one it requires.
The full key is shown exactly once at generation time and cannot be
retrieved again; only the keyId prefix is shown afterward. A
revoked key fails auth on its very next request.
Path Parameters
The broadcast id from GET /api/preview/email/broadcasts.
Response
The broadcast's aggregate numbers.
Aggregate delivery numbers for one broadcast. No recipient-level data.
The broadcast's id.
Number of sends recorded for this broadcast, whatever their status (including suppressed, failed and bounced sends); not only messages that reached the provider.
Recorded sends whose status is delivered, opened, clicked or complained (a count of sends, not unique recipients).
Unique recipient addresses with an open or a click recorded.
Unique recipient addresses that clicked a content link (an unsubscribe-only click does not count). For broadcasts sent before 2026-05-17, any recorded click counts.
Recorded sends with status bounced.
delivered / sent, 0 to 1, four decimals.
opened / delivered, 0 to 1, four decimals.
clicked / delivered, 0 to 1, four decimals.
bounced / sent, 0 to 1, four decimals.
