List promotions
const url = 'https://api.tryletterhead.com/api/v3/promotions?api=true';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.tryletterhead.com/api/v3/promotions?api=true' \ --header 'Authorization: Bearer <token>'List promotions for the authenticated company, with filtering, sorting, and pagination.
v3 endpoints expect a company API key.
Response field naming note
The list response uses image and position for two fields that the Get a promotion endpoint exposes as imageUrl and zone. Same data, different keys — this is a legacy inconsistency in the API. Treat them as aliases. The same applies to promotionCampaignUid (list) vs the campaign-uid embedded in the show response.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters ”When set to true, the endpoint accepts authorization with your API Key.
1-indexed page number. Defaults to 1.
Records per page (max 100). Defaults to 10.
Search by campaign title or promoter name
0=draft, 5=active, 9=inactive, 6=any
createdAt | title | status | promoterDisplayName. Defaults to createdAt.
asc or desc. Defaults to desc.
Filter by channel slug(s)
Filter by promoter name(s)
Y-m-d, inclusive lower bound on dates
Y-m-d, inclusive upper bound on dates (must be ≥ from)
When true, items include clicks and impressions. Defaults to false.
When true, items include rendered MJML. Defaults to false.
Accepted for compatibility with other promotion endpoints, but currently has no effect on this response — no item ever carries a separate html field; the mjml field is the only rendered-content field this endpoint returns. Defaults to false.
Accepted for compatibility with other promotion endpoints, but currently has no effect on this response — this endpoint’s items never expose resolved passthrough links. Defaults to false.
ESP id used to render MJML/HTML (only relevant when mjml=true). Defaults to 0 (Letterhead’s own ESP).
Responses
Section titled “ Responses ”200 OK
object
object
Example
{ "items": [ { "promotionCollateralUid": "b2c3d4e5f6", "campaignTitle": "Summer Sale 2026", "promoter": "Example Brand", "createdAt": "2026-06-04 17:30:00", "nextDate": "2026-07-01", "isActive": true, "isInactive": false, "isEvergreen": false, "position": "A", "promotionCampaignUid": "a1b2c3d4e5", "image": "https://cdn.example.com/summer-sale.png", "imageWidth": 600, "imageHeight": 400, "impressions": 0, "clicks": 0, "mjml": null } ], "total": 47, "totalInPage": 10, "page": 1, "limit": 10, "totalPages": 5}Still can’t find what you need? Contact support.