curl --request GET \
--url https://api.paigeme.dev/v1/broadcasts/{id} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.paigeme.dev/v1/broadcasts/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.paigeme.dev/v1/broadcasts/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"success": true,
"data": {
"broadcast": {
"id": "<string>",
"project_id": "<string>",
"name": "<string>",
"template_name": "<string>",
"template_language": "<string>",
"category": "<string>",
"audience": {},
"template_variables": {},
"status": "<string>",
"scheduled_at": "<string>",
"started_at": "<string>",
"completed_at": "<string>",
"created_by": "<string>",
"creator_name": "<string>",
"creator_email": "<string>",
"counts": {
"total": 123,
"queued": 123,
"sent": 123,
"delivered": 123,
"read": 123,
"failed": 123,
"canceled": 123,
"held": 123
},
"wave_size": 123,
"wave_scheduled_at": "<string>",
"wave_scheduled_count": 123,
"auto_retarget_quality": true,
"retarget_parent_id": "<string>",
"retarget_count": 123,
"recipient_count": 123
}
}
}{
"success": false,
"error": {
"code": "invalid_request",
"message": "Invalid request body",
"details": {}
},
"request_id": "<string>"
}{
"success": false,
"error": {
"code": "invalid_request",
"message": "Invalid request body",
"details": {}
},
"request_id": "<string>"
}{
"success": false,
"error": {
"code": "invalid_request",
"message": "Invalid request body",
"details": {}
},
"request_id": "<string>"
}{
"success": false,
"error": {
"code": "invalid_request",
"message": "Invalid request body",
"details": {}
},
"request_id": "<string>"
}{
"success": false,
"error": {
"code": "invalid_request",
"message": "Invalid request body",
"details": {}
},
"request_id": "<string>"
}{
"success": false,
"error": {
"code": "invalid_request",
"message": "Invalid request body",
"details": {}
},
"request_id": "<string>"
}Broadcast status + rollup counts
{id} is the broadcast UUID. Returns the campaign with its delivery rollup (counts) and a live recipient_count resolved at read time.
Required scope: broadcasts:read
curl --request GET \
--url https://api.paigeme.dev/v1/broadcasts/{id} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.paigeme.dev/v1/broadcasts/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.paigeme.dev/v1/broadcasts/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"success": true,
"data": {
"broadcast": {
"id": "<string>",
"project_id": "<string>",
"name": "<string>",
"template_name": "<string>",
"template_language": "<string>",
"category": "<string>",
"audience": {},
"template_variables": {},
"status": "<string>",
"scheduled_at": "<string>",
"started_at": "<string>",
"completed_at": "<string>",
"created_by": "<string>",
"creator_name": "<string>",
"creator_email": "<string>",
"counts": {
"total": 123,
"queued": 123,
"sent": 123,
"delivered": 123,
"read": 123,
"failed": 123,
"canceled": 123,
"held": 123
},
"wave_size": 123,
"wave_scheduled_at": "<string>",
"wave_scheduled_count": 123,
"auto_retarget_quality": true,
"retarget_parent_id": "<string>",
"retarget_count": 123,
"recipient_count": 123
}
}
}{
"success": false,
"error": {
"code": "invalid_request",
"message": "Invalid request body",
"details": {}
},
"request_id": "<string>"
}{
"success": false,
"error": {
"code": "invalid_request",
"message": "Invalid request body",
"details": {}
},
"request_id": "<string>"
}{
"success": false,
"error": {
"code": "invalid_request",
"message": "Invalid request body",
"details": {}
},
"request_id": "<string>"
}{
"success": false,
"error": {
"code": "invalid_request",
"message": "Invalid request body",
"details": {}
},
"request_id": "<string>"
}{
"success": false,
"error": {
"code": "invalid_request",
"message": "Invalid request body",
"details": {}
},
"request_id": "<string>"
}{
"success": false,
"error": {
"code": "invalid_request",
"message": "Invalid request body",
"details": {}
},
"request_id": "<string>"
}Authorizations
Project API key issued in Settings → API keys. Send it as Authorization: Bearer pk_live_….
Headers
Target project id, for an MCP OAuth bearer (mcp_at_…) attached to more than one project — get ids from GET /v1/projects. Matched case-insensitively.
Omit it and a READ falls back to the connection's default project; a mutation (any non-GET) on a connection with 2+ projects is rejected with 400 project_required — a write is never defaulted to a guessed project. A connection with exactly one project never needs the header.
Scopes are checked against the SELECTED project only, never a union across the connection.
For a pk_ API key the header selects nothing — one key is one project's context — but it IS validated: omit it and the key's own project is used, send it and it must name that project, otherwise the call is rejected with 403 project_not_attached (a blank value is 400 invalid_project_header, as above).
Path Parameters
Response
Success.
true Hide child attributes
Hide child attributes
Hide child attributes
Hide child attributes
Template category — MARKETING campaigns require an opted-in audience.
The resolved audience definition (segment or inline filter).
pending_approval | scheduled | sending | completed | canceled | failed. Assembly always lands in pending_approval.
Delivery rollup. Counts are null until the broadcast starts sending.
Hide child attributes
Hide child attributes
Recipients still held back by batching ("N remaining").
First-wave size for a batched broadcast; null when not batched.
When the next held wave auto-releases; null when none is pending.
Size of that pending wave; null while scheduled means "all remaining held".
Whether quality-limit failures are auto-retargeted ~24h later.
Set on a spawned follow-up — points at the broadcast it retargets.
Follow-ups this broadcast has spawned (capped at 1).
Live audience count resolved at read time. NULL when it could not be resolved.
Was this page helpful?
