Get a transactional send's status
const url = 'https://api.tryletterhead.com/api/v3/transactionals/example?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/transactionals/example?api=true' \ --header 'Authorization: Bearer <token>'Where one transactional send stands, looked up by the uniqueId that
POST /api/v3/transactionals/actions/send returned: whether it is still queued, was
accepted or refused by SparkPost, and — once accepted — whether it was delivered, bounced,
or marked as spam. Refused and bounced sends carry the reason.
Authorization: Bearer token (company-level API key). The caller must be a company administrator, and a company administrator sees only their own company’s sends.
Availability: Requires your tenant to be opted into transactional email, and send status
to be enabled for your account. Where either is off, this answers 404.
Statuses:
queued— Letterhead has the send and has not yet had a final answer from SparkPost.accepted— SparkPost accepted the email. Look it up again later to see what happened next.refused— SparkPost would not take the email (for example, an address that cannot receive mail), or Letterhead could not reach SparkPost after every retry.reasonsays which.delivered— the recipient’s mail server accepted the email.bounced— the email bounced.reason.codeis the bounce type.spam_complaint— the recipient marked the email as spam.
The latest event wins, so an email that was delivered and later bounced reads bounced.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”The send’s id, from the actions/send response.
Query Parameters
Section titled “Query Parameters ”Required. Set to true to authenticate with an API key.
Responses
Section titled “ Responses ”200 OK
object
object
The send’s id, as returned by actions/send.
Present for refused and usually for bounced; null otherwise.
object
For refused, SparkPost’s error code; no_valid_recipient when SparkPost rejected every recipient, transmission_error when it never answered, or unknown when its error carried no code. For bounced, the bounce type (Hard, Soft, Admin, Block).
Why the email was refused or bounced, in plain text.
When the status last changed — for delivered, bounced and spam_complaint, the time of that event.
Example
{ "items": { "uniqueId": "6cuswtvr7p", "status": "refused", "reason": { "code": "5002", "message": "invalid recipient" }, "updatedAt": "2026-10-02 14:02:11" }, "message": "Transactional email status.", "total": 1}No send with this id in your company, the send was made before send status was enabled, or send status or transactional email is not enabled for your account.
Still can’t find what you need? Contact support.