Send a letter
const url = 'https://api.tryletterhead.com/api/v3/letters/actions/send';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"api":true,"channel":"an-example-channels","html":"<!DOCTYPE html><html><head><meta charset=\"UTF-8\"><title>Test</title></head><body><h1>Hello from Postman</h1><p>This is a test letter sent via the <strong>/api/v3/letters/actions/send</strong> endpoint.</p><p><a href=\"https://letterhead.co\">Visit Letterhead</a></p></body></html>","segment":0,"subject":"Who doesn\'t love a good movie?","subtitle":"A new exhibition, two openings, and a closer look at this season\'s residency.","tags":["a-tag-of-my-choosing"]}'};
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/letters/actions/send \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "api": true, "channel": "an-example-channels", "html": "<!DOCTYPE html><html><head><meta charset=\"UTF-8\"><title>Test</title></head><body><h1>Hello from Postman</h1><p>This is a test letter sent via the <strong>/api/v3/letters/actions/send</strong> endpoint.</p><p><a href=\"https://letterhead.co\">Visit Letterhead</a></p></body></html>", "segment": 0, "subject": "Who doesn'\''t love a good movie?", "subtitle": "A new exhibition, two openings, and a closer look at this season'\''s residency.", "tags": [ "a-tag-of-my-choosing" ] }'Immediately send a letter from the HTML you provide. Note that because you are providing your own HTML, you will not be able to edit this edition with our composer.
-
api: Boolean flag indicating the request is being made via the API. -
channel: Channel slug to associate the draft with. -
html: Full HTML content for the letter body. -
segment: Segment identifier to target a subset of the channel audience;0applies to all subscribers. -
subject: Draft subject/title. -
suppress(optional): Array of channel slugs used to suppress recipients who are also subscribed to those channels. -
subtitle(optional): Populates the email preview text shown in inbox previews after the subject, so the Letterhead UI only needs the send date filled in. Max 191 chars. -
tags(optional): Newsletter tags applied to the created letter. Use this to label a send with your own internal identifier; tags are reused across sends and listed underGET /api/v3/letters/tags. Max 20 items, each ≤ 60 chars. Names are trimmed and deduped case-insensitively. Requires thenewsletterTagsflag on the company.
Authorizations
Section titled “Authorizations ”Request Body required
Section titled “Request Body required ”object
Required. Set to true to authenticate with an API key.
The channel you are targeting.
This endpoint is designed for you to use your own HTML.
Identify a specific subset of your channel’s list. Pass 0 to send to every subscriber.
(optional) Email preview text shown in inbox previews after the subject. Max 191 chars.
(optional) Newsletter tags applied to the created letter. Max 20 items, each ≤ 60 chars. Names are trimmed and deduped case-insensitively.
Example
{ "api": true, "channel": "an-example-channels", "html": "<!DOCTYPE html><html><head><meta charset=\"UTF-8\"><title>Test</title></head><body><h1>Hello from Postman</h1><p>This is a test letter sent via the <strong>/api/v3/letters/actions/send</strong> endpoint.</p><p><a href=\"https://letterhead.co\">Visit Letterhead</a></p></body></html>", "segment": 0, "subject": "Who doesn't love a good movie?", "subtitle": "A new exhibition, two openings, and a closer look at this season's residency.", "tags": [ "a-tag-of-my-choosing" ]}Responses
Section titled “ Responses ”Send
object
object
Example
{ "items": { "uniqueId": "ludctamgd6", "publicationDate": "2026-05-06 05:53:05" }, "message": "Your html letter will be sent shortly.", "total": 0}Still can’t find what you need? Contact support.