Skip to content
Pidgely Docs

API reference · Metrics

List clicks per link

GEThttps://api.pidgely.com/metrics/links
View as Markdown

The tracked links of a broadcast (broadcast_id) or template (template_id), most clicked by people first, with total, bot and unique clicks, and the all-time totals of that broadcast or template.

Pidgely extension. The tracked links of a broadcast (broadcast_id) or template (template_id), most clicked by people first, with total, bot and unique clicks, and the all-time totals of that broadcast or template. Requires a full_access key.

Authorization: Bearer pdg_…. An API key with full_access. A sending_access key gets 401 restricted_api_key.

Query parameters

Name Type Required Description
broadcast_id string No The broadcast (one of broadcast_id or template_id). UUID.
template_id string No The template (one of broadcast_id or template_id). UUID.

Request

This endpoint is not in the SDKs yet; call it over HTTP.

cURL
curl -X GET 'https://api.pidgely.com/metrics/links?broadcast_id=0199d7f6-4c8d-7e1a-9b3f-2d6a5c0e7f19' \
  -H "Authorization: Bearer $PIDGELY_API_KEY"

Response

200 OK

JSON
{
  "object": "list",
  "has_more": false,
  "data": [
    {
      "url": "https://acme.com/changelog",
      "clicks": 180,
      "bot_clicks": 31,
      "unique_clicks": 121,
      "unique_human_clicks": 98,
      "last_clicked_at": "2026-10-12 16:44:41.000000+00"
    },
    {
      "url": "https://acme.com/pricing",
      "clicks": 53,
      "bot_clicks": 10,
      "unique_clicks": 39,
      "unique_human_clicks": 33,
      "last_clicked_at": "2026-10-12 16:44:41.000000+00"
    }
  ],
  "totals": {
    "key": "0199d7f6-4c8d-7e1a-9b3f-2d6a5c0e7f19",
    "sent": 1200,
    "delivered": 1188,
    "hard_bounced": 7,
    "soft_bounced": 5,
    "complained": 0,
    "delayed": 14,
    "suppressed": 3,
    "failed": 0,
    "unsubscribed": 4,
    "opens": 1630,
    "machine_opens": 402,
    "unique_opens": 702,
    "unique_human_opens": 455,
    "clicks": 233,
    "bot_clicks": 41,
    "unique_clicks": 160,
    "unique_human_clicks": 131,
    "delivery_rate": 0.99,
    "bounce_rate": 0.0059,
    "soft_bounce_rate": 0.0042,
    "complaint_rate": 0,
    "open_rate": 0.383,
    "raw_open_rate": 0.591,
    "click_rate": 0.1103,
    "click_to_open_rate": 0.2879,
    "unsubscribe_rate": 0.0034
  }
}

Response fields

Name Type Required Description
object string Yes Object type.
has_more boolean No Whether another page exists.
data object[] Yes Items of this page.
data[].url string Yes Public https URL that receives the events.
data[].clicks integer Yes —
data[].bot_clicks integer Yes —
data[].unique_clicks integer Yes —
data[].unique_human_clicks integer Yes —
data[].last_clicked_at string Yes Timestamp in UTC.
totals object Yes —

Errors

Errors have the shape {"statusCode", "name", "message"}. See Errors for the full list.

Status Name When
401 missing_api_key, restricted_api_key No Authorization: Bearer header, or a sending_access key called an endpoint that needs full_access.
403 invalid_api_key, validation_error The API key is invalid or revoked, or the request is not allowed for this account (unverified domain, plan limit, paused account).
422 validation_error A field is missing or invalid; message names it.
429 rate_limit_exceeded Too many requests per second. Wait for Retry-After seconds.