Preview a lifecycle email
US Region: https://public-api.sessionboard.com · EU Region: https://public-api-eu.sessionboard.com
Renders one of an in-person event's or webinar's lifecycle emails exactly as Sessionboard's own
preview draws it: the event's real name, date, venue and join link, the Brand kit, and the footer the
send adds. version: live (the default) is what sends today; version: proposed is the design an AI
assistant proposed, which a person has not accepted yet (404 when there is none).
Returns subject, preheader, html, text, design_mode and accessibility_warnings. A read:
it stores nothing and emails no one. Requires read:events; the organization's AI switch applies, and
a key restricted to particular events can preview only those events' emails.
Request example
curl --request POST \ --url 'https://public-api.sessionboard.com/v1/event/{eventId}/emails/{key}/authoring/preview' \ --header 'x-access-token: <api-token>' \ --header 'Content-Type: application/json' \ --data '{ "version": "live"}'const response = await fetch('https://public-api.sessionboard.com/v1/event/{eventId}/emails/{key}/authoring/preview', { method: 'POST', headers: { "x-access-token": "<api-token>", "Content-Type": "application/json" }, body: JSON.stringify({ "version": "live" }),});
const data = await response.json();console.log(data);import requests
response = requests.request( "POST", "https://public-api.sessionboard.com/v1/event/{eventId}/emails/{key}/authoring/preview", headers={ "x-access-token": "<api-token>", "Content-Type": "application/json" }, json={ "version": "live" },)
print(response.json())<?php
$curl = curl_init();
curl_setopt_array($curl, [ CURLOPT_URL => "https://public-api.sessionboard.com/v1/event/{eventId}/emails/{key}/authoring/preview", CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => '{ "version": "live"}', CURLOPT_HTTPHEADER => [ "x-access-token: <api-token>", "Content-Type: application/json", ],]);
$response = curl_exec($curl);curl_close($curl);
echo $response;package main
import ( "fmt" "io" "net/http" "strings")
func main() { req, _ := http.NewRequest("POST", "https://public-api.sessionboard.com/v1/event/{eventId}/emails/{key}/authoring/preview", strings.NewReader(`{ "version": "live"}`)) req.Header.Add("x-access-token", "<api-token>") req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))}HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://public-api.sessionboard.com/v1/event/{eventId}/emails/{key}/authoring/preview")) .header("x-access-token", "<api-token>") .header("Content-Type", "application/json") .method("POST", HttpRequest.BodyPublishers.ofString("{\n \"version\": \"live\"\n}")) .build();
HttpResponse<String> response = HttpClient.newHttpClient() .send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());Try it
Response headers
Authorizations
x-access-tokenstringheaderOrganization API token. Generate from Organization Settings → API Tokens.
AuthorizationBearer <token>headerorOAuth 2.1 access token. Obtained via the OAuth PKCE flow at
/oauth/token.
Send one of these. See Authentication.
Path parameters
eventIdintegerpathrequiredThe event or webinar
keystringpathrequiredThe email's key, e.g.
gathering-reminder
Request body
versionstring- Allowed values
"live", "proposed"- Default
"live"
{ "version": "live"}Responses
200application/json
The rendered email.
successbooleanpayloadobjectShow child attributes
keystringversionstring- Allowed values
"live", "proposed"
proposed_byobject | nullWho proposed the design (
proposedonly)proposed_atstring<date-time> | nullsubjectstringpreheaderstring | nullhtmlstringtextstring | nulldesign_modestringaccessibility_warningsobject[]
401
Missing, invalid or expired token.
403
The token lacks read:events, is restricted to other events, or AI features are off for the organization.
404
The event is not in the token's organization, there is no email with that key, or there is no proposed design.
Response examples
{ "success": true, "payload": { "key": "<string>", "version": "live", "proposed_by": {}, "proposed_at": "2026-01-15T09:30:00Z", "subject": "<string>", "preheader": "<string>", "html": "<string>", "text": "<string>", "design_mode": "<string>", "accessibility_warnings": [ {} ] }}