Saasco logoSaasco logo
Saasco logoSaasco logo

Introduction

Quick StartWhat is Saasco?

Analytics

CRM

Email Marketing

getList EmailsgetGet EmailgetList Contact EmailsgetGet Email Events

Knowledge

Support

Projects

Emails

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.

GET
/projects/{projectId}/email-campaigns/{campaignId}/emails

Authorization

Authorization
AuthorizationBearer <token>

In: header

Path Parameters

projectIdrequiredstring

ID of the project that owns the campaign.

campaignIdrequiredstring

ID of the campaign whose emails to list.

Query Parameters

dateFromstring

Only include emails sent on or after this YYYY-MM-DD date.

dateTostring

Only include emails sent on or before this YYYY-MM-DD date.

messageIdstring

Only include emails sent from this campaign message, one A/B variant, for example.

sendPhasestring

For A/B campaigns, restrict to one phase: sample for the initial test split, rollout for the winning variant sent to the remaining audience.

Value in: "sample" | "rollout"
skipnumber

Number of emails to skip before collecting results.

sortBystring

Field to sort by, e.g. sentAt or lastEventAt.

Value in: "sentAt" | "deliveredAt" | "openedAt" | "clickedAt" | "bouncedAt" | "suppressedAt" | "to" | "status" | "lastEventAt"
sortOrderstring

Sort direction.

Value in: "asc" | "desc"
statusstring

Only include emails currently in this delivery state, e.g. bounced or opened.

Value in: "pending" | "sent" | "delivered" | "opened" | "clicked" | "bounced" | "complained" | "suppressed" | "deliveryDelayed"
takenumber

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.