List Emails
The per-recipient send log for one campaign: who it went to, current status, and delivery timestamps. Paginated, and returns total alongside the rows so you can page without a second call. Filter by status to answer questions like "who bounced", or by messageId / sendPhase to isolate one side of an A/B test.
Authorization
Authorization In: header
Path Parameters
ID of the project that owns the campaign.
ID of the campaign whose emails to list.
Query Parameters
Only include emails sent on or after this YYYY-MM-DD date.
Only include emails sent on or before this YYYY-MM-DD date.
Only include emails sent from this campaign message, one A/B variant, for example.
For A/B campaigns, restrict to one phase: sample for the initial test split, rollout for the winning variant sent to the remaining audience.
Number of emails to skip before collecting results.
Field to sort by, e.g. sentAt or lastEventAt.
Sort direction.
Only include emails currently in this delivery state, e.g. bounced or opened.
Maximum number of emails to return.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://www.saasco.com/api/v2/projects/string/email-campaigns/string/emails"{
"emails": [
{
"id": "string",
"createdAt": "string",
"updatedAt": "string",
"projectId": "string",
"emailCampaignId": "string",
"messageId": "string",
"distinctId": "string",
"to": "string",
"contactDistinctId": "string",
"subject": "string",
"lastEventAt": "string",
"sent": true,
"sentAt": "string",
"delivered": true,
"deliveredAt": "string",
"opened": true,
"openedAt": "string",
"clicked": true,
"clickedAt": "string",
"bounced": true,
"bouncedAt": "string",
"complained": true,
"complainedAt": "string",
"suppressed": true,
"suppressedAt": "string",
"sendPhase": "sample",
"status": "pending"
}
],
"total": 0
}{
"code": "BAD_REQUEST",
"message": "Invalid input data",
"issues": []
}{
"code": "UNAUTHORIZED",
"message": "Authorization not provided",
"issues": []
}{
"code": "FORBIDDEN",
"message": "Insufficient access",
"issues": []
}{
"code": "NOT_FOUND",
"message": "Not found",
"issues": []
}{
"code": "INTERNAL_SERVER_ERROR",
"message": "Internal server error",
"issues": []
}Get Email Stats
Aggregate delivery and engagement figures for one campaign: sent, delivered, opened, clicked, bounced, complained, and delivery-delayed. Each comes back as a raw `total`, a `unique` count that collapses repeat events from the same recipient, and a `rate`, so open rate is not just opens divided by sends. For the per-recipient breakdown behind these numbers use List Emails.
Get Email
Fetches one sent email (its recipient, status, and delivery timestamps) together with the rendered subject and body as that recipient actually received it, personalisation included. The content is fetched from the email provider, so this is heavier than the row returned by List Emails.