Account-wide link analytics
Account-wide totals, the top five links by clicks, a daily click series, and country/device/browser/referrer breakdowns across all links for the requested window. Bot traffic is excluded from series and breakdowns.
View as MarkdownAuthorization
bearer In: header
Query Parameters
Analytics window in days; 0 means all-time (no cutoff); other values fall back to 14. 365 is the dashboard's own window — wide enough for its Month/Week tabs and to always have at least one full prior year for the Year tab, since bucketing a shorter window by month/year can collapse to a single bucket with nothing to draw a line between.
14Value in
- 0
- 7
- 14
- 30
- 90
- 365
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/analytics/summary"{ "totalLinks": 0, "activeLinks": 0, "totalClicks": 0, "linksWithClicks": 0, "topLinks": [ { "id": "string", "shortCode": "string", "shortUrl": "string", "destinationUrl": "string", "title": "string", "tags": [ "string" ], "clicks": 0, "active": true, "archived": true, "trackConversions": true, "campaignId": "string", "utmSource": "string", "utmMedium": "string", "utmCampaign": "string", "utmTerm": "string", "utmContent": "string", "expiresAt": "2019-08-24T14:15:22Z", "clickLimit": 0, "qrScanLimit": 0, "passwordProtected": true, "qrStyle": { "pattern": "square", "cornerStyle": "square", "fgColor": "string", "bgColor": "string", "bgColor2": "string" }, "qrLogoUrl": "string", "retargeting": { "enabled": true, "pixels": [ { "provider": "meta", "id": "string" } ] }, "excludedIps": [ { "cidr": "string", "label": "string" } ], "qrLogoRemoved": true, "created": "2019-08-24T14:15:22Z", "updated": "2019-08-24T14:15:22Z", "visibility": "private", "ownerId": "string", "screening": "clean", "screeningSource": "string", "screeningReason": "string" } ], "byDay": [ { "date": "string", "clicks": 0, "activeLinks": 0 } ], "breakdowns": { "byCountry": [ { "key": "string", "clicks": 0 } ], "byDevice": [ { "key": "string", "clicks": 0 } ], "byBrowser": [ { "key": "string", "clicks": 0 } ], "byReferrer": [ { "key": "string", "clicks": 0 } ], "byVariant": [ { "key": "string", "clicks": 0 } ] }, "conversions": { "count": 0, "revenueCents": 0 }, "conversionsByDay": [ { "date": "string", "count": 0, "revenueCents": 0 } ], "days": 0, "asOf": "2019-08-24T14:15:22Z"}Record a conversion for a click
Attributes a conversion to a click. Links with trackConversions enabled append ?esrx_id=<click id> to their destination; the customer's backend captures it and posts it here (typically with an org API key) when the visitor signs up or pays. Clicks are written asynchronously, so an instant conversion can 404 once — retry after a second. Idempotent on clickId+name: retrying the same clickId with the same name (a dropped response, an at-least-once webhook relay) returns 200 with the already-recorded conversion instead of creating a second one. A different name for the same clickId (e.g. "signup", then later "purchase") is a distinct event and is always accepted as a new 201.
Campaign-level click rollup
Campaign-level rollup (EAS-73): total clicks in the window across every link belonging to each of the caller's campaigns, aggregated strictly through the persisted links.campaign_id relationship — never by parsing destinationUrl or UTM query parameters — so "how did Q3 Email Campaign perform" is one row instead of manually summing every link. Archived campaigns are included: they stay reportable for the links/clicks already associated with them. A link with no campaign never contributes to any row.