Campaign Recipient-Level Engagement API Endpoint
J
Jacinto Jr. Bernardino Pena
Add API endpoint to retrieve individual recipient-level engagement data (opens, clicks, bounces) for each campaign to enable comprehensive CRM integration and analytics.
Proposed endpoint: GET /api/v1/campaigns/{campaignId}/recipients
OR GET /api/v1/campaignRecipients?campaignId={id}&limit={limit}&offset={offset}
--Why This is Important
#Current Limitation:
The existing /api/v1/campaignReports endpoint only provides aggregate statistics (total sent, opened, clicked), which limits our ability to:
Sync individual contact engagement to our CRM (Zoho CRM)
Track individual customer journey across multiple campaigns
Build personalized follow-up workflows based on specific user behavior
Calculate engagement scores at the contact level
Create targeted segments based on individual engagement patterns
#Business Use Cases:
CRM Integration - Link campaign engagement to specific contacts/leads in CRM systems
Lead Scoring - Calculate engagement scores based on individual open/click behavior
Behavioral Segmentation - Create segments of highly engaged vs. unengaged recipients
Personalized Follow-ups - Trigger automated workflows for users who clicked specific links
Customer Journey Tracking - Build comprehensive timeline of each contact's email interactions
Attribution Analysis - Track which campaigns drive specific user actions
#Key Features Needed
Pagination support (limit/offset) for campaigns with large recipient lists
Date filtering (fromDate/toDate) to get recipients added within a time range
Status filtering (delivered, bounced, opened, clicked) to query specific segments
Individual timestamps for each action (sent, delivered, opened, clicked)
Engagement counts (not just boolean flags) to track repeat opens/clicks
Basic recipient data (email, name, custom fields if available)
#Request Data Structure
{
"success": true,
"data": {
"campaignId": "abc123",
"campaignName": "Summer Sale 2025",
"recipients": [
{
"email": "user@example.com",
"firstName": "John",
"lastName": "Doe",
"status": "delivered",
"sentAt": "2025-10-22T10:30:00Z",
"deliveredAt": "2025-10-22T10:31:00Z",
"opened": true,
"openCount": 3,
"lastOpenedAt": "2025-10-23T14:20:00Z",
"clicked": true,
"clickCount": 2,
"lastClickedAt": "2025-10-23T14:25:00Z",
"bounced": false,
"bounceReason": null,
"unsubscribed": false,
"complained": false
}
],
"pagination": {
"total": 5000,
"limit": 100,
"offset": 0,
"hasMore": true
}
}
}