Email links clicked

Overview

Get which links in the email were clicked and how often.

Use this to see what customers acted on.

You'll need the campaign's id. Clicks are counted over the campaign's life unless you send a window (start_date, end_date).

Returns click counts per link, most clicked first. Links that weren't clicked are listed with 0.

Prerequisites

  • A bearer token. See Authentication.
  • The campaign's id (campaignId), from List campaigns.
  • Optional: a window (start_date, end_date), both Y-m-d.

Base URL

EnvironmentURL
Productionhttps://production-api.shoutaboutus.com
Developmenthttps://development-api.shoutaboutus.com

Endpoint

GET /api/v1/campaign/{campaignId}/report/email/click-urls

Authentication

Account token

  • The campaign must belong to the caller's own company. Any other id, including a campaign of another account, returns 404 Campaign not found.

Rate limit

120 requests per minute, counted per user (the token’s user). See Rate limits.

Request parameters

ParameterInTypeRequiredDescription
campaignIdpathintegerYesThe campaign's id (digits only). It must belong to your own company.
start_datequerystringNoStart of the window, Y-m-d. Default: the day the campaign was created. If it's after end_date, the two are swapped.
end_datequerystringNoEnd of the window, Y-m-d. Default: today.

Request body

None.

Request payload

None.

Response body

The payload is inside data.

FieldTypeDescription
statusstringsuccess.
data[]array of objectsOne row per tracked link in the campaign's emails, most clicked first. [] when there are none.
data[].idintegerThe link's id. Use it as click_url_id in Click events for a link.
data[].url_namestringThe link's name, e.g. Google; (Follow-up) is added for a follow-up email's link.
data[].is_follow_upbooleanWhether the link is in a follow-up email.
data[].placeholderstringThe template placeholder for the link, e.g. directTo_google.
data[].destination_urlstring or nullWhere the link goes. For a landing page, the landing page's preview URL.
data[].click_countintegerClicks in the window.
data[].unique_ipsintegerDistinct IP addresses that clicked.
data[].last_clickedstring or nullWhen it was last clicked (ISO 8601); null if never.

Response payload

{
  "data": {
    "status": "success",
    "data": [
      {
        "id": 45,
        "url_name": "Google",
        "is_follow_up": false,
        "placeholder": "directTo_google",
        "destination_url": "https://maps.google.com/...",
        "click_count": 25,
        "unique_ips": 20,
        "last_clicked": "2026-06-15T10:30:00.000Z"
      }
    ]
  }
}

Examples

Success payload

A campaign with a clicked link: see Response payload.

A campaign with no tracked links:

{
  "data": {
    "status": "success",
    "data": []
  }
}

Error payload

404 Campaign not found

{
  "message": "Campaign not found",
  "status": "error",
  "errors": []
}

422 Date not in Y-m-d

{
  "message": "The start date field must match the format Y-m-d.",
  "errors": {
    "start_date": [
      "The start date field must match the format Y-m-d."
    ]
  }
}

429 Too many requests

{
  "message": "Too Many Attempts."
}
StatusMeaning
200Click counts per link.
401The token is missing, expired or invalid.
404No campaign with that id in your company (Campaign not found).
422start_date or end_date isn't Y-m-d.
429More than 120 requests in a minute from this user.
500Unexpected server error.

Example request

curl --request GET \
  --url "https://production-api.shoutaboutus.com/api/v1/campaign/4823/report/email/click-urls" \
  --header 'Authorization: Bearer <bearer-token>' \
  --header 'Accept: application/json'

Did this page help you?