Get an email
GET
/v1/emails/{id}Secret key — sk_… or sk_test_… · Base URL https://api.volanea.com
Full message detail including the rendered HTML body and engagement counters.
Path parameters
idstringrequiredEmail id.
Response
200 · Email
emailIdstringrequiredtoemailrequiredsubjectstringrequiredfromEmailstringfromNamestring | nullsourceenumrequiredtransactionalcampaignworkflowinboundstatusenumrequiredqueuedsendingsentdeliveredopenedclickedbouncedcomplainedfailedreceivedcancelledcampaignIdstring | nullworkflowIdstring | nulltestModebooleanopensintegerclicksintegererrorstring | nullsentAtstring | nullscheduledForstring | nullcreatedAtdate-timerequiredprojectIdstringcontactIdstring | nullbodystringThe rendered HTML body.
providerMessageIdstring | nulldeliveredAtstring | nullopenedAtstring | nullclickedAtstring | nulllatencyMsnumber | null
Errors
Every failure returns the standard envelope — branch on `code`, never on the wording of `error`.
401Missing or invalid API key.404Not found.422Request validation failed (code `validation_error`, 422).
Request
curl https://api.volanea.com/v1/emails/id_123 \
-H "Authorization: Bearer sk_..."Response
200 · application/json
{
"success": true,
"data": {
"emailId": "em_1c4f",
"to": "ada@example.com",
"subject": "Your order shipped",
"fromEmail": "hello@yourdomain.com",
"fromName": "Acme",
"source": "transactional",
"status": "queued",
"campaignId": "cmp_2b8e",
"workflowId": "wf_7d31",
"testMode": true,
"opens": 1,
"clicks": 1,
"error": "<error>",
"sentAt": "2026-01-01T09:00:00.000Z",
"scheduledFor": "2026-01-01T09:00:00Z",
"createdAt": "2026-01-01T09:00:00.000Z",
"projectId": "<projectId>",
"contactId": "con_5e90",
"body": "<p>On its way, {{firstName}}.</p>",
"providerMessageId": "<providerMessageId>",
"deliveredAt": "2026-01-01T09:00:00.000Z",
"openedAt": "2026-01-01T09:00:00.000Z",
"clickedAt": "2026-01-01T09:00:00.000Z",
"latencyMs": 1
}
}92 endpoints · OpenAPI document