Get metrics
const url = 'https://api.tryletterhead.com/api/v3/metrics';const form = new FormData();form.append('api', 'true');form.append('from', '2026-02-26');form.append('to', '2026-03-26');form.append('channels[]', 'an-example-channel');form.append('direction', 'desc');form.append('groupBy', 'channel');form.append('limit', '5');form.append('page', '1');form.append('sortBy', 'opens');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.tryletterhead.com/api/v3/metrics \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: multipart/form-data' \ --form api=true \ --form from=2026-02-26 \ --form to=2026-03-26 \ --form 'channels[]=an-example-channel' \ --form direction=desc \ --form groupBy=channel \ --form limit=5 \ --form page=1 \ --form sortBy=opensCompany-scoped send/engagement totals for a date range β accepted, bounced, clicks,
unique opens (confirmed and unconfirmed) β plus a daily sparkline and the prior periodβs
totals for comparison. Pass groupBy=channel to also get a per-channel breakdown, sorted by
sortBy.
v3 endpoints expect a company API key.
Authorizations
Section titled βAuthorizations βRequest Body required
Section titled βRequest Body required βobject
When set to true, this endpoint will accept authorization with your API Key.
Example
truePeriod start date (inclusive).
Example
2026-02-26Period end date (inclusive), must be >= from, max 90 days.
Example
2026-03-26string[] | Optionally filter your metrics with a list of channels (by their identifiers).
Example
an-example-channelChange sort direction by optionally specifying βascβ or βdesc.β Descending is default.
Example
descPass channel to include per-channel breakdown
Example
channelItems per page for the channel breakdown. Max of 25.
Example
5Page number for channel breakdown, as those will be paginated.
Example
1Sort by βopensβ or βchannelβ for a channel breakdown. Defaults to βopens.β
Example
opensResponses
Section titled β Responses βGet metrics
object
object
object
object
object
object
object
Example
{ "items": { "currentPeriod": { "totals": { "accepted": 172, "bounced": 0, "clicks": 6, "clicksUnique": 2, "opensUnique": 139, "opensUniqueConfirmed": 139, "unsubscribes": 0 }, "daily": [ { "date": "2026-02-27", "accepted": 0, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 0, "opensUniqueConfirmed": 0 }, { "date": "2026-02-28", "accepted": 0, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 0, "opensUniqueConfirmed": 0 }, { "date": "2026-03-01", "accepted": 0, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 0, "opensUniqueConfirmed": 0 }, { "date": "2026-03-02", "accepted": 0, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 0, "opensUniqueConfirmed": 0 }, { "date": "2026-03-05", "accepted": 0, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 0, "opensUniqueConfirmed": 0 }, { "date": "2026-03-06", "accepted": 0, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 0, "opensUniqueConfirmed": 0 }, { "date": "2026-03-07", "accepted": 0, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 0, "opensUniqueConfirmed": 0 }, { "date": "2026-03-08", "accepted": 15, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 11, "opensUniqueConfirmed": 11 }, { "date": "2026-03-09", "accepted": 13, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 9, "opensUniqueConfirmed": 9 }, { "date": "2026-03-10", "accepted": 1, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 1, "opensUniqueConfirmed": 1 }, { "date": "2026-03-11", "accepted": 0, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 0, "opensUniqueConfirmed": 0 }, { "date": "2026-03-12", "accepted": 13, "bounced": 0, "clicks": 6, "clicksUnique": 2, "opensUnique": 12, "opensUniqueConfirmed": 12 }, { "date": "2026-03-13", "accepted": 13, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 12, "opensUniqueConfirmed": 12 }, { "date": "2026-03-14", "accepted": 12, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 10, "opensUniqueConfirmed": 10 }, { "date": "2026-03-15", "accepted": 14, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 11, "opensUniqueConfirmed": 11 }, { "date": "2026-03-16", "accepted": 12, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 9, "opensUniqueConfirmed": 9 }, { "date": "2026-03-17", "accepted": 5, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 4, "opensUniqueConfirmed": 4 }, { "date": "2026-03-18", "accepted": 0, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 0, "opensUniqueConfirmed": 0 }, { "date": "2026-03-19", "accepted": 12, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 11, "opensUniqueConfirmed": 11 }, { "date": "2026-03-20", "accepted": 12, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 11, "opensUniqueConfirmed": 11 }, { "date": "2026-03-21", "accepted": 12, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 10, "opensUniqueConfirmed": 10 }, { "date": "2026-03-22", "accepted": 14, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 8, "opensUniqueConfirmed": 8 }, { "date": "2026-03-23", "accepted": 12, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 9, "opensUniqueConfirmed": 9 }, { "date": "2026-03-24", "accepted": 0, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 0, "opensUniqueConfirmed": 0 }, { "date": "2026-03-25", "accepted": 0, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 0, "opensUniqueConfirmed": 0 }, { "date": "2026-03-26", "accepted": 12, "bounced": 0, "clicks": 0, "clicksUnique": 0, "opensUnique": 11, "opensUniqueConfirmed": 11 } ] }, "priorPeriod": { "totals": { "accepted": 160, "bounced": 1, "clicks": 0, "clicksUnique": 0, "opensUnique": 119, "opensUniqueConfirmed": 117, "unsubscribes": 0 } } }, "message": "Do something kind today", "total": 1}400 Validation Error β from/to missing or malformed.
object
object
Example
{ "data": [ "The from field is required." ], "items": [], "message": "Looks like the input data doesn't meet our requirements.", "total": 0}422 Unprocessable Entity β from is after to, or the from/to range exceeds 90 days.
object
object
Example
{ "data": [ "Date range must not exceed 90 days." ], "items": [], "message": "Looks like the input data doesn't meet our requirements.", "total": 0}Still can’t find what you need? Contact support.