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.
When true (together with mjml), items include rendered HTML. Defaults to false.
Resolve passthrough links inside the rendered content. Defaults to false.
ESP id used to render MJML/HTML (only relevant when mjml=true). Defaults to 1.
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.