Products
GET/v1/workspaces/{workspaceId}/products
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
valueobject
dataarrayrequired
Each itemobject
idstringrequired
format: "uuid"
workspace_idstringrequired
format: "uuid"
namestringrequired
slugstringrequired
kindstringrequired
enum: "product", "store", "brand", "newsletter", "company", "other"
website_urlstring | nullrequired
domainsarrayrequired
Each itemstring
descriptionstringrequired
contextobjectrequired
Additional propertyAny value
brandobjectrequired
company_namestring
maxLength: 160
logo_urlstring
maxLength: 2000
wordmark_urlstring
maxLength: 2000
website_urlstring
maxLength: 2000
primary_colorstring
maxLength: 7
accent_colorstring
maxLength: 7
background_colorstring
maxLength: 7
surface_colorstring
maxLength: 7
text_colorstring
maxLength: 7
muted_text_colorstring
maxLength: 7
heading_font_familystring
maxLength: 200
body_font_familystring
maxLength: 200
tonestring
maxLength: 1000
footer_addressstring
maxLength: 500
email_stylestring
maxLength: 20
statusstringrequired
enum: "active", "archived"
is_defaultbooleanrequired
route_readybooleanrequired
setuparrayrequired
Each itemobject
keystringrequired
enum: "context", "domain", "mailboxes", "journeys", "broadcasts", "compliance"
statusstringrequired
enum: "todo", "in_progress", "complete", "not_relevant"
completion_sourcestring | nullrequired
enum: "system", "person", "agent", null
notestringrequired
updated_atstring | nullrequired
format: "date-time"
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/products' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/products
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
namestringrequired
minLength: 1 · maxLength: 160
kindstring
default: "product" · enum: "product", "store", "brand", "newsletter", "company", "other"
website_urlstring | null
maxLength: 2000
descriptionstring
maxLength: 4000
contextobject
Additional propertyAny value
domainsarray
maxItems: 20
Each itemstring
maxLength: 253
Success response 201
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
workspace_idstringrequired
format: "uuid"
namestringrequired
slugstringrequired
kindstringrequired
enum: "product", "store", "brand", "newsletter", "company", "other"
website_urlstring | nullrequired
domainsarrayrequired
Each itemstring
descriptionstringrequired
contextobjectrequired
Additional propertyAny value
brandobjectrequired
company_namestring
maxLength: 160
logo_urlstring
maxLength: 2000
wordmark_urlstring
maxLength: 2000
website_urlstring
maxLength: 2000
primary_colorstring
maxLength: 7
accent_colorstring
maxLength: 7
background_colorstring
maxLength: 7
surface_colorstring
maxLength: 7
text_colorstring
maxLength: 7
muted_text_colorstring
maxLength: 7
heading_font_familystring
maxLength: 200
body_font_familystring
maxLength: 200
tonestring
maxLength: 1000
footer_addressstring
maxLength: 500
email_stylestring
maxLength: 20
statusstringrequired
enum: "active", "archived"
is_defaultbooleanrequired
route_readybooleanrequired
setuparrayrequired
Each itemobject
keystringrequired
enum: "context", "domain", "mailboxes", "journeys", "broadcasts", "compliance"
statusstringrequired
enum: "todo", "in_progress", "complete", "not_relevant"
completion_sourcestring | nullrequired
enum: "system", "person", "agent", null
notestringrequired
updated_atstring | nullrequired
format: "date-time"
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/products' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "example",
"kind": "product",
"website_url": "example",
"description": "example",
"context": {},
"domains": [
"example"
]
}'
GET/v1/workspaces/{workspaceId}/products/{productId}
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
workspace_idstringrequired
format: "uuid"
namestringrequired
slugstringrequired
kindstringrequired
enum: "product", "store", "brand", "newsletter", "company", "other"
website_urlstring | nullrequired
domainsarrayrequired
Each itemstring
descriptionstringrequired
contextobjectrequired
Additional propertyAny value
brandobjectrequired
company_namestring
maxLength: 160
logo_urlstring
maxLength: 2000
wordmark_urlstring
maxLength: 2000
website_urlstring
maxLength: 2000
primary_colorstring
maxLength: 7
accent_colorstring
maxLength: 7
background_colorstring
maxLength: 7
surface_colorstring
maxLength: 7
text_colorstring
maxLength: 7
muted_text_colorstring
maxLength: 7
heading_font_familystring
maxLength: 200
body_font_familystring
maxLength: 200
tonestring
maxLength: 1000
footer_addressstring
maxLength: 500
email_stylestring
maxLength: 20
statusstringrequired
enum: "active", "archived"
is_defaultbooleanrequired
route_readybooleanrequired
setuparrayrequired
Each itemobject
keystringrequired
enum: "context", "domain", "mailboxes", "journeys", "broadcasts", "compliance"
statusstringrequired
enum: "todo", "in_progress", "complete", "not_relevant"
completion_sourcestring | nullrequired
enum: "system", "person", "agent", null
notestringrequired
updated_atstring | nullrequired
format: "date-time"
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/products/{productId}' \
--header "Authorization: Bearer $BANGER_API_KEY"
PATCH/v1/workspaces/{workspaceId}/products/{productId}
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
namestring
maxLength: 160
kindstring
enum: "product", "store", "brand", "newsletter", "company", "other"
website_urlstring | null
maxLength: 2000
descriptionstring
maxLength: 4000
contextobject
Additional propertyAny value
brandobject
company_namestring
maxLength: 160
logo_urlstring
maxLength: 2000
wordmark_urlstring
maxLength: 2000
website_urlstring
maxLength: 2000
primary_colorstring
maxLength: 7
accent_colorstring
maxLength: 7
background_colorstring
maxLength: 7
surface_colorstring
maxLength: 7
text_colorstring
maxLength: 7
muted_text_colorstring
maxLength: 7
heading_font_familystring
maxLength: 200
body_font_familystring
maxLength: 200
tonestring
maxLength: 1000
footer_addressstring
maxLength: 500
email_stylestring
maxLength: 20
statusstring
enum: "active", "archived"
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
workspace_idstringrequired
format: "uuid"
namestringrequired
slugstringrequired
kindstringrequired
enum: "product", "store", "brand", "newsletter", "company", "other"
website_urlstring | nullrequired
domainsarrayrequired
Each itemstring
descriptionstringrequired
contextobjectrequired
Additional propertyAny value
brandobjectrequired
company_namestring
maxLength: 160
logo_urlstring
maxLength: 2000
wordmark_urlstring
maxLength: 2000
website_urlstring
maxLength: 2000
primary_colorstring
maxLength: 7
accent_colorstring
maxLength: 7
background_colorstring
maxLength: 7
surface_colorstring
maxLength: 7
text_colorstring
maxLength: 7
muted_text_colorstring
maxLength: 7
heading_font_familystring
maxLength: 200
body_font_familystring
maxLength: 200
tonestring
maxLength: 1000
footer_addressstring
maxLength: 500
email_stylestring
maxLength: 20
statusstringrequired
enum: "active", "archived"
is_defaultbooleanrequired
route_readybooleanrequired
setuparrayrequired
Each itemobject
keystringrequired
enum: "context", "domain", "mailboxes", "journeys", "broadcasts", "compliance"
statusstringrequired
enum: "todo", "in_progress", "complete", "not_relevant"
completion_sourcestring | nullrequired
enum: "system", "person", "agent", null
notestringrequired
updated_atstring | nullrequired
format: "date-time"
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
curl example
curl --request PATCH --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/products/{productId}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "example",
"kind": "product",
"website_url": "example",
"description": "example",
"context": {},
"brand": {
"company_name": "example",
"logo_url": "example",
"wordmark_url": "example",
"website_url": "example",
"primary_color": "example",
"accent_color": "example",
"background_color": "example",
"surface_color": "example",
"text_color": "example",
"muted_text_color": "example",
"heading_font_family": "example",
"body_font_family": "example",
"tone": "example",
"footer_address": "example",
"email_style": "example"
},
"status": "active"
}'
PUT/v1/workspaces/{workspaceId}/products/{productId}/setup/{key}
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
statusstringrequired
enum: "todo", "in_progress", "complete", "not_relevant"
completion_sourcestring
default: "person" · enum: "system", "person", "agent"
notestring
maxLength: 1000
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
keystringrequired
enum: "context", "domain", "mailboxes", "journeys", "broadcasts", "compliance"
statusstringrequired
enum: "todo", "in_progress", "complete", "not_relevant"
completion_sourcestring | nullrequired
enum: "system", "person", "agent", null
notestringrequired
updated_atstring | nullrequired
format: "date-time"
curl example
curl --request PUT --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/products/{productId}/setup/{key}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"status": "todo",
"completion_source": "person",
"note": "example"
}'
POST/v1/workspaces/{workspaceId}/products/{productId}/domains
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 201
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
workspace_idstringrequired
format: "uuid"
namestringrequired
slugstringrequired
kindstringrequired
enum: "product", "store", "brand", "newsletter", "company", "other"
website_urlstring | nullrequired
domainsarrayrequired
Each itemstring
descriptionstringrequired
contextobjectrequired
Additional propertyAny value
brandobjectrequired
company_namestring
maxLength: 160
logo_urlstring
maxLength: 2000
wordmark_urlstring
maxLength: 2000
website_urlstring
maxLength: 2000
primary_colorstring
maxLength: 7
accent_colorstring
maxLength: 7
background_colorstring
maxLength: 7
surface_colorstring
maxLength: 7
text_colorstring
maxLength: 7
muted_text_colorstring
maxLength: 7
heading_font_familystring
maxLength: 200
body_font_familystring
maxLength: 200
tonestring
maxLength: 1000
footer_addressstring
maxLength: 500
email_stylestring
maxLength: 20
statusstringrequired
enum: "active", "archived"
is_defaultbooleanrequired
route_readybooleanrequired
setuparrayrequired
Each itemobject
keystringrequired
enum: "context", "domain", "mailboxes", "journeys", "broadcasts", "compliance"
statusstringrequired
enum: "todo", "in_progress", "complete", "not_relevant"
completion_sourcestring | nullrequired
enum: "system", "person", "agent", null
notestringrequired
updated_atstring | nullrequired
format: "date-time"
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/products/{productId}/domains' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"domain": "example"
}'
Drafts
GET/v1/workspaces/{workspaceId}/drafts
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
valueobject
dataarrayrequired
Each itemobject
idstringrequired
format: "uuid"
mailbox_idstringrequired
format: "uuid"
thread_idstring | nullrequired
format: "uuid"
versionintegerrequired
toarrayrequired
Each itemobject
emailstringrequired
namestring
ccarrayrequired
Each itemobject
emailstringrequired
namestring
bccarrayrequired
Each itemobject
emailstringrequired
namestring
subjectstringrequired
body_textstringrequired
statusstringrequired
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
attachmentsarrayrequired
Each itemobject
idstringrequired
format: "uuid"
filenamestringrequired
content_typestringrequired
size_bytesintegerrequired
sha256string
created_atstring
format: "date-time"
body_html_urlstring
format: "uri"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/drafts?mailbox_id=00000000-0000-4000-8000-000000000001' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/drafts
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
mailbox_idstringrequired
format: "uuid"
thread_idstring
format: "uuid"
toarray
maxItems: 500
Each itemobject
namestring
emailstringrequired
format: "email"
ccarray
maxItems: 500
Each itemobject
namestring
emailstringrequired
format: "email"
bccarray
maxItems: 500
Each itemobject
namestring
emailstringrequired
format: "email"
subjectstring
maxLength: 10000
body_textstring
maxLength: 2000000
body_htmlstring
maxLength: 2000000
Success response 201
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
mailbox_idstringrequired
format: "uuid"
thread_idstring | nullrequired
format: "uuid"
versionintegerrequired
toarrayrequired
Each itemobject
emailstringrequired
namestring
ccarrayrequired
Each itemobject
emailstringrequired
namestring
bccarrayrequired
Each itemobject
emailstringrequired
namestring
subjectstringrequired
body_textstringrequired
statusstringrequired
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
attachmentsarrayrequired
Each itemobject
idstringrequired
format: "uuid"
filenamestringrequired
content_typestringrequired
size_bytesintegerrequired
sha256string
created_atstring
format: "date-time"
body_html_urlstring
format: "uri"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/drafts' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"mailbox_id": "00000000-0000-4000-8000-000000000001",
"thread_id": "00000000-0000-4000-8000-000000000001",
"to": [
{
"name": "example",
"email": "person@example.com"
}
],
"cc": [
{
"name": "example",
"email": "person@example.com"
}
],
"bcc": [
{
"name": "example",
"email": "person@example.com"
}
],
"subject": "example",
"body_text": "example",
"body_html": "example"
}'
GET/v1/workspaces/{workspaceId}/drafts/{draftId}
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Canonical deliverability performance, health, and incidents.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
mailbox_idstringrequired
format: "uuid"
thread_idstring | nullrequired
format: "uuid"
versionintegerrequired
toarrayrequired
Each itemobject
emailstringrequired
namestring
ccarrayrequired
Each itemobject
emailstringrequired
namestring
bccarrayrequired
Each itemobject
emailstringrequired
namestring
subjectstringrequired
body_textstringrequired
statusstringrequired
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
attachmentsarrayrequired
Each itemobject
idstringrequired
format: "uuid"
filenamestringrequired
content_typestringrequired
size_bytesintegerrequired
sha256string
created_atstring
format: "date-time"
body_html_urlstring
format: "uri"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/drafts/{draftId}' \
--header "Authorization: Bearer $BANGER_API_KEY"
PUT/v1/workspaces/{workspaceId}/drafts/{draftId}
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueunspecified
allOf 1object
No additional properties
mailbox_idstringrequired
format: "uuid"
thread_idstring
format: "uuid"
toarray
maxItems: 500
Each itemobject
namestring
emailstringrequired
format: "email"
ccarray
maxItems: 500
Each itemobject
namestring
emailstringrequired
format: "email"
bccarray
maxItems: 500
Each itemobject
namestring
emailstringrequired
format: "email"
subjectstring
maxLength: 10000
body_textstring
maxLength: 2000000
body_htmlstring
maxLength: 2000000
allOf 2object
versionintegerrequired
minimum: 1
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
mailbox_idstringrequired
format: "uuid"
thread_idstring | nullrequired
format: "uuid"
versionintegerrequired
toarrayrequired
Each itemobject
emailstringrequired
namestring
ccarrayrequired
Each itemobject
emailstringrequired
namestring
bccarrayrequired
Each itemobject
emailstringrequired
namestring
subjectstringrequired
body_textstringrequired
statusstringrequired
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
attachmentsarrayrequired
Each itemobject
idstringrequired
format: "uuid"
filenamestringrequired
content_typestringrequired
size_bytesintegerrequired
sha256string
created_atstring
format: "date-time"
body_html_urlstring
format: "uri"
curl example
curl --request PUT --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/drafts/{draftId}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"mailbox_id": "00000000-0000-4000-8000-000000000001",
"thread_id": "00000000-0000-4000-8000-000000000001",
"to": [
{
"name": "example",
"email": "person@example.com"
}
],
"cc": [
{
"name": "example",
"email": "person@example.com"
}
],
"bcc": [
{
"name": "example",
"email": "person@example.com"
}
],
"subject": "example",
"body_text": "example",
"body_html": "example",
"version": 1
}'
DELETE/v1/workspaces/{workspaceId}/drafts/{draftId}
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 204
Draft and referenced objects scheduled for deletion.
No response body.
curl example
curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/drafts/{draftId}' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/drafts/{draftId}/send
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 202
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
typestringrequired
statusstringrequired
enum: "accepted", "executing", "succeeded", "failed"
workspace_revisionintegerrequired
format: "int64"
created_atstringrequired
format: "date-time"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/drafts/{draftId}/send' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Idempotency-Key: examplexxxxxxxxx'
POST/v1/workspaces/{workspaceId}/drafts/{draftId}/attachments
Authentication: Bearer workspace API key.
Parameters
Request body required
application/octet-stream
Success response 201
Successful response.
application/json
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/drafts/{draftId}/attachments' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Filename: example' \
--header 'Content-Type: application/octet-stream' \
--data-binary @request-body
DELETE/v1/workspaces/{workspaceId}/drafts/{draftId}/attachments/{attachmentId}
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 204
Attachment scheduled for version-aware B2 deletion.
No response body.
curl example
curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/drafts/{draftId}/attachments/{attachmentId}' \
--header "Authorization: Bearer $BANGER_API_KEY"
GET/v1/workspaces/{workspaceId}/drafts/{draftId}/html
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Draft HTML.
text/html
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/drafts/{draftId}/html' \
--header "Authorization: Bearer $BANGER_API_KEY"
GET/v1/workspaces/{workspaceId}/contacts
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
valueobject
dataarrayrequired
Each itemobject
idstringrequired
format: "uuid"
emailstringrequired
format: "email"
display_namestring | nullrequired
attributesobjectrequired
Additional propertyAny value
statusstringrequired
enum: "subscribed", "unsubscribed", "bounced", "complained"
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
pageobjectrequired
next_cursorstring
has_morebooleanrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/contacts?cursor=example&limit=50&q=example' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/contacts
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
emailstringrequired
format: "email"
display_namestring
maxLength: 1000
statusstringrequired
enum: "subscribed", "unsubscribed", "bounced", "complained"
attributesobject
Additional propertyAny value
consent_confirmedboolean
Required when newly subscribing an address.
Success response 201
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
emailstringrequired
format: "email"
display_namestring | nullrequired
attributesobjectrequired
Additional propertyAny value
statusstringrequired
enum: "subscribed", "unsubscribed", "bounced", "complained"
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/contacts' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"email": "person@example.com",
"display_name": "example",
"status": "subscribed",
"attributes": {},
"consent_confirmed": true
}'
GET/v1/workspaces/{workspaceId}/contacts/{contactId}
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
emailstringrequired
format: "email"
display_namestring | nullrequired
attributesobjectrequired
Additional propertyAny value
statusstringrequired
enum: "subscribed", "unsubscribed", "bounced", "complained"
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
suppressedbooleanrequired
suppression_reasonstring | nullrequired
sourcesarrayrequired
Each itemobject
kindstringrequired
referencestringrequired
connection_idstring | nullrequired
format: "uuid"
metadataobjectrequired
Additional propertyAny value
first_seen_atstringrequired
format: "date-time"
last_seen_atstringrequired
format: "date-time"
listsarrayrequired
Each itemobject
idstringrequired
format: "uuid"
namestringrequired
subscription_statusstringrequired
consent_evidencearrayrequired
Each itemobject
kindstringrequired
referencestringrequired
connection_idstring | nullrequired
format: "uuid"
metadataobjectrequired
Additional propertyAny value
first_seen_atstringrequired
format: "date-time"
last_seen_atstringrequired
format: "date-time"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/contacts/{contactId}' \
--header "Authorization: Bearer $BANGER_API_KEY"
DELETE/v1/workspaces/{workspaceId}/contacts/{contactId}
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 204
Contact deleted.
No response body.
curl example
curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/contacts/{contactId}' \
--header "Authorization: Bearer $BANGER_API_KEY"
GET/v1/workspaces/{workspaceId}/contacts/imports
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
valueobject
dataarrayrequired
Each itemobject
idstring
format: "uuid"
filenamestring
list_idstring | null
format: "uuid"
list_namestring | null
statusstring
total_rowsinteger
imported_rowsinteger
invalid_rowsinteger
error_summaryarray
Each itemstring
consent_confirmedboolean
consent_confirmed_atstring | null
format: "date-time"
processed_rowsinteger
attempt_countinteger
last_error_codestring | null
created_atstring
format: "date-time"
completed_atstring | null
format: "date-time"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/contacts/imports' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/contacts/imports
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
filenamestringrequired
minLength: 1 · maxLength: 500
list_idstring
format: "uuid"
consent_confirmedboolean
Required when any imported row is subscribed.
rowsarrayrequired
minItems: 1 · maxItems: 5000
Each itemobject
emailstringrequired
format: "email"
display_namestring
maxLength: 1000
statusstring
enum: "subscribed", "unsubscribed", "bounced", "complained"
attributesobject
Additional propertyAny value
Success response 201
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
statusstringrequired
enum: "queued"
total_rowsintegerrequired
imported_rowsintegerrequired
invalid_rowsintegerrequired
list_idstring | nullrequired
format: "uuid"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/contacts/imports' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"filename": "example",
"list_id": "00000000-0000-4000-8000-000000000001",
"consent_confirmed": true,
"rows": [
{
"email": "person@example.com",
"display_name": "example",
"status": "subscribed",
"attributes": {}
}
]
}'
POST/v1/workspaces/{workspaceId}/contacts/upsert
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
emailstringrequired
format: "email" · maxLength: 320
display_namestring
minLength: 0 · maxLength: 1000
attributesobject
Additional propertyAny value
statusstringrequired
enum: "subscribed", "unsubscribed", "bounced", "complained"
consent_evidenceobject
No additional properties
sourcestring
minLength: 1 · maxLength: 2000
referencestring
minLength: 1 · maxLength: 2000
observed_atstring
format: "date-time"
statementstring
minLength: 1 · maxLength: 2000
consent_confirmedboolean
Success response 200
Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
idstringrequired
format: "uuid"
emailstringrequired
format: "email"
display_namestring | nullrequired
attributesobjectrequired
Additional propertyAny value
statusstringrequired
enum: "subscribed", "unsubscribed", "bounced", "complained"
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
suppressedbooleanrequired
suppression_reasonstring | nullrequired
sourcesarrayrequired
Each itemobject
kindstringrequired
referencestringrequired
connection_idstring | nullrequired
format: "uuid"
metadataobjectrequired
Additional propertyAny value
first_seen_atstringrequired
format: "date-time"
last_seen_atstringrequired
format: "date-time"
listsarrayrequired
Each itemobject
idstringrequired
format: "uuid"
namestringrequired
subscription_statusstringrequired
consent_evidencearrayrequired
Each itemobject
kindstringrequired
referencestringrequired
connection_idstring | nullrequired
format: "uuid"
metadataobjectrequired
Additional propertyAny value
first_seen_atstringrequired
format: "date-time"
last_seen_atstringrequired
format: "date-time"
allOf 2object
replayedbooleanrequired
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/contacts/upsert' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
--header 'Idempotency-Key: example' \
--header 'Content-Type: application/json' \
--data-raw '{
"email": "person@example.com",
"display_name": "example",
"attributes": {},
"status": "subscribed",
"consent_evidence": {
"source": "example",
"reference": "example",
"observed_at": "2026-01-01T00:00:00Z",
"statement": "example"
},
"consent_confirmed": true
}'
POST/v1/workspaces/{workspaceId}/contacts/import-validation
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
rowsarrayrequired
minItems: 1 · maxItems: 5000
Each itemobject
No additional properties
emailstringrequired
format: "email" · maxLength: 320
display_namestring
minLength: 0 · maxLength: 1000
attributesobject
Additional propertyAny value
statusstringrequired
enum: "subscribed", "unsubscribed", "bounced", "complained"
consent_evidenceobject
No additional properties
sourcestring
minLength: 1 · maxLength: 2000
referencestring
minLength: 1 · maxLength: 2000
observed_atstring
format: "date-time"
statementstring
minLength: 1 · maxLength: 2000
consent_confirmedboolean
Success response 200
Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.
application/json
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/contacts/import-validation' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
--header 'Content-Type: application/json' \
--data-raw '{
"rows": [
{
"email": "person@example.com",
"display_name": "example",
"attributes": {},
"status": "subscribed",
"consent_evidence": {
"source": "example",
"reference": "example",
"observed_at": "2026-01-01T00:00:00Z",
"statement": "example"
}
}
],
"consent_confirmed": true
}'
GET/v1/workspaces/{workspaceId}/contacts/imports/{importId}
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.
application/json
valueobject
dataobjectrequired
idstring
format: "uuid"
filenamestring
list_idstring | null
format: "uuid"
list_namestring | null
statusstring
total_rowsinteger
imported_rowsinteger
invalid_rowsinteger
error_summaryarray
Each itemstring
consent_confirmedboolean
consent_confirmed_atstring | null
format: "date-time"
processed_rowsinteger
attempt_countinteger
last_error_codestring | null
created_atstring
format: "date-time"
completed_atstring | null
format: "date-time"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/contacts/imports/{importId}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
GET/v1/workspaces/{workspaceId}/contacts/fields
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
valueobject
dataarrayrequired
Each itemstring
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/contacts/fields' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/contacts/import-mapping
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
mappingobjectrequired
columnsarrayrequired
Each itemobject
columnstringrequired
targetstringrequired
enum: "email", "display_name", "first_name", "last_name", "locale", "time_zone", "status", "unsubscribed_flag", "subscribed_flag", "field", "ignore"
field_keystring
field_typestring
enum: "text", "number", "boolean", "date", "choice", "choices"
confidencenumberrequired
sourcestringrequired
enum: "saved", "ai", "rules", "person"
alternativesarray
Each itemobject
Further nesting omitted
locale_valuesobjectrequired
Additional propertystring | null
reviewobjectrequired
neededbooleanrequired
reasonsarrayrequired
Each itemstring
columnsarrayrequired
Each itemstring
sourcestringrequired
enum: "saved", "ai", "rules"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/contacts/import-mapping' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"filename": "example",
"columns": [
{
"name": "example",
"samples": [
"example"
],
"filled": 0,
"rows": 0
}
]
}'
Audience
POST/v1/workspaces/{workspaceId}/audience/lists
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 200
Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
idstringrequired
format: "uuid"
namestringrequired
descriptionstringrequired
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
membersarrayrequired
Each itemobject
idstringrequired
format: "uuid"
emailstringrequired
display_namestring | nullrequired
statusstringrequired
attributesobjectrequired
Additional propertyAny value
updated_atstringrequired
format: "date-time"
allOf 2object
replayedbooleanrequired
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/audience/lists' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
--header 'Idempotency-Key: example' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "example",
"description": "example"
}'
GET/v1/workspaces/{workspaceId}/audience/lists/{listId}
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
namestringrequired
descriptionstringrequired
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
membersarrayrequired
Each itemobject
idstringrequired
format: "uuid"
emailstringrequired
display_namestring | nullrequired
statusstringrequired
attributesobjectrequired
Additional propertyAny value
updated_atstringrequired
format: "date-time"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/audience/lists/{listId}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
POST/v1/workspaces/{workspaceId}/audience/lists/{listId}/members
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
contact_idsarrayrequired
maxItems: 1000
Each itemstring
format: "uuid"
Success response 200
Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
idstringrequired
format: "uuid"
namestringrequired
descriptionstringrequired
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
membersarrayrequired
Each itemobject
idstringrequired
format: "uuid"
emailstringrequired
display_namestring | nullrequired
statusstringrequired
attributesobjectrequired
Additional propertyAny value
updated_atstringrequired
format: "date-time"
allOf 2object
replayedbooleanrequired
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/audience/lists/{listId}/members' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
--header 'Idempotency-Key: example' \
--header 'Content-Type: application/json' \
--data-raw '{
"contact_ids": [
"00000000-0000-4000-8000-000000000001"
]
}'
DELETE/v1/workspaces/{workspaceId}/audience/lists/{listId}/members
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
contact_idsarrayrequired
maxItems: 1000
Each itemstring
format: "uuid"
Success response 200
Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
idstringrequired
format: "uuid"
namestringrequired
descriptionstringrequired
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
membersarrayrequired
Each itemobject
idstringrequired
format: "uuid"
emailstringrequired
display_namestring | nullrequired
statusstringrequired
attributesobjectrequired
Additional propertyAny value
updated_atstringrequired
format: "date-time"
allOf 2object
replayedbooleanrequired
curl example
curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/audience/lists/{listId}/members' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
--header 'Idempotency-Key: example' \
--header 'Content-Type: application/json' \
--data-raw '{
"contact_ids": [
"00000000-0000-4000-8000-000000000001"
]
}'
POST/v1/workspaces/{workspaceId}/audience/segments
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
namestringrequired
minLength: 1 · maxLength: 200
filterobjectrequired
No additional properties
statusstring
enum: "subscribed", "unsubscribed", "bounced", "complained"
attributesobject
Additional propertyAny value
Success response 200
Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.
application/json
valueobject
dataunspecifiedrequired
allOf 1unspecified
allOf 1object
idstringrequired
format: "uuid"
namestringrequired
filterobjectrequired
Conditions must reference declared contact fields and use operators supported by their type. set and not_set omit value; within_days uses 1–3650 days.
No additional properties
statusstring
enum: "subscribed", "unsubscribed", "bounced", "complained"
attributesobject
Additional propertyAny value
conditionsarray
maxItems: 20
Each itemobject
Further nesting omitted
matchstring
enum: "all", "any"
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
allOf 2object
countintegerrequired
missing_consent_evidence_countintegerrequired
samplearrayrequired
Each itemobject
idstringrequired
format: "uuid"
Further nesting omitted
emailstringrequired
Further nesting omitted
display_namestring | nullrequired
Further nesting omitted
attributesobjectrequired
Further nesting omitted
excludedobjectrequired
suppressedintegerrequired
not_subscribedintegerrequired
missing_recipient_hashintegerrequired
missing_consent_evidenceintegerrequired
allOf 2object
replayedbooleanrequired
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/audience/segments' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
--header 'Idempotency-Key: example' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "example",
"filter": {
"status": "subscribed",
"attributes": {}
}
}'
GET/v1/workspaces/{workspaceId}/audience/segments/{segmentId}/preview
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
idstringrequired
format: "uuid"
namestringrequired
filterobjectrequired
Conditions must reference declared contact fields and use operators supported by their type. set and not_set omit value; within_days uses 1–3650 days.
No additional properties
statusstring
enum: "subscribed", "unsubscribed", "bounced", "complained"
attributesobject
Additional propertyAny value
conditionsarray
maxItems: 20
Each itemobject
fieldstringrequired
Further nesting omitted
opstringrequired
enum: "is", "is_not", "contains", "set", "not_set", "gt", "gte", "lt", "lte", "within_days", "any_of", "includes"
Further nesting omitted
valueunspecified
Further nesting omitted
matchstring
enum: "all", "any"
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
allOf 2object
countintegerrequired
missing_consent_evidence_countintegerrequired
samplearrayrequired
Each itemobject
idstringrequired
format: "uuid"
emailstringrequired
display_namestring | nullrequired
attributesobjectrequired
Additional propertyAny value
excludedobjectrequired
suppressedintegerrequired
not_subscribedintegerrequired
missing_recipient_hashintegerrequired
missing_consent_evidenceintegerrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/audience/segments/{segmentId}/preview' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
GET/v1/workspaces/{workspaceId}/audience/approvals
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.
application/json
valueobject
dataarrayrequired
Each itemunspecified
allOf 1object
idstringrequired
format: "uuid"
requested_by_actor_idstringrequired
action_kindstringrequired
summarystringrequired
capability_scopesarrayrequired
Each itemstring
resource_scopeobjectrequired
Additional propertyarray
Each itemstring
Further nesting omitted
payloadobjectrequired
Additional propertyAny value
payload_sha256stringrequired
pattern: "^[0-9a-f]{64}$"
statusstringrequired
enum: "pending", "approved", "rejected", "cancelled", "expired"
missedbooleanrequired
expires_atstringrequired
format: "date-time"
decided_by_actor_idstring | null
decision_reasonstring | null
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
decided_atstring | null
format: "date-time"
execution_job_idstring
format: "uuid"
reviewobject
No additional properties
dispositionstringrequired
enum: "automatic", "human_required"
recipient_countinteger | nullrequired
minimum: 0
reasonsarrayrequired
Each itemstring
Further nesting omitted
checksarrayrequired
Each itemstring
Further nesting omitted
allOf 2object
approval_idstringrequired
format: "uuid"
broadcast_idstring | nullrequired
format: "uuid"
import_idstring | nullrequired
format: "uuid"
blockersarrayrequired
Each itemobject
codestringrequired
Further nesting omitted
messagestringrequired
Further nesting omitted
executionsarrayrequired
Each itemobject
idstringrequired
format: "uuid"
Further nesting omitted
statusstringrequired
Further nesting omitted
resultobjectrequired
Further nesting omitted
error_codestring | nullrequired
Further nesting omitted
execution_job_idsarrayrequired
Each itemstring
format: "uuid"
execution_statusstringrequired
enum: "completed", "failed", "queued", "awaiting_review", "not_queued"
human_review_urlstring | nullrequired
human_review_instructionstring | nullrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/audience/approvals?status=pending' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
GET/v1/workspaces/{workspaceId}/audience/approvals/{approvalId}
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
idstringrequired
format: "uuid"
requested_by_actor_idstringrequired
action_kindstringrequired
summarystringrequired
capability_scopesarrayrequired
Each itemstring
resource_scopeobjectrequired
Additional propertyarray
Each itemstring
payloadobjectrequired
Additional propertyAny value
payload_sha256stringrequired
pattern: "^[0-9a-f]{64}$"
statusstringrequired
enum: "pending", "approved", "rejected", "cancelled", "expired"
missedbooleanrequired
expires_atstringrequired
format: "date-time"
decided_by_actor_idstring | null
decision_reasonstring | null
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
decided_atstring | null
format: "date-time"
execution_job_idstring
format: "uuid"
reviewobject
No additional properties
dispositionstringrequired
enum: "automatic", "human_required"
recipient_countinteger | nullrequired
minimum: 0
reasonsarrayrequired
Each itemstring
checksarrayrequired
Each itemstring
allOf 2object
approval_idstringrequired
format: "uuid"
broadcast_idstring | nullrequired
format: "uuid"
import_idstring | nullrequired
format: "uuid"
blockersarrayrequired
Each itemobject
codestringrequired
messagestringrequired
executionsarrayrequired
Each itemobject
idstringrequired
format: "uuid"
statusstringrequired
resultobjectrequired
Additional propertyAny value
error_codestring | nullrequired
execution_job_idsarrayrequired
Each itemstring
format: "uuid"
execution_statusstringrequired
enum: "completed", "failed", "queued", "awaiting_review", "not_queued"
human_review_urlstring | nullrequired
human_review_instructionstring | nullrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/audience/approvals/{approvalId}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
GET/v1/workspaces/{workspaceId}/signup-forms
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
valueobject
dataarrayrequired
Each itemobject
idstringrequired
format: "uuid"
product_idstringrequired
format: "uuid"
public_idstringrequired
pattern: "^f_[a-z0-9]{16}$"
namestringrequired
kindstringrequired
enum: "inline", "popup", "bar", "slide_in", "page"
list_idstringrequired
format: "uuid"
list_namestringrequired
mailbox_idstring | nullrequired
format: "uuid"
double_opt_inbooleanrequired
configobjectrequired
No additional properties
eyebrowstring
maxLength: 60
headlinestring
minLength: 1 · maxLength: 140
bodystring
maxLength: 400
button_labelstring
minLength: 1 · maxLength: 40
email_placeholderstring
maxLength: 80
name_placeholderstring
maxLength: 60
fine_printstring
maxLength: 160
incentivestring
maxLength: 160
success_headlinestring
maxLength: 120
success_bodystring
maxLength: 400
redirect_urlstring
maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"
image_urlstring
maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"
artstring
enum: "arcs", "blocks", "horizon", "confetti", "frame", "bands", "dots"
stylestring
enum: "", "brand", "material", "clarity", "editorial", "bold", "luxe", "playful", "plain"
count_nounstring
maxLength: 30
confirm_promisestring
maxLength: 200
localestring
collect_nameboolean
show_logoboolean
show_countboolean
exit_intentboolean
delay_secondsinteger
minimum: 0 · maximum: 600
scroll_percentinteger
minimum: 0 · maximum: 100
frequency_daysinteger
minimum: 0 · maximum: 365
imagestring
enum: "none", "photo", "art"
layoutstring
enum: "stacked", "split"
themestring
enum: "light", "dark", "brand", "auto"
positionstring
enum: "bottom", "top", "right", "left"
fieldsarray
maxItems: 6
Each itemobject
Select questions require options. Other question types do not accept options. Keys must be unique and cannot use reserved form fields; omitted keys are derived from labels.
No additional properties
keystring
pattern: "^[a-z][a-z0-9_]{0,39}$"
Further nesting omitted
labelstringrequired
minLength: 1 · maxLength: 80
Further nesting omitted
typestring
default: "text" · enum: "text", "select", "checkbox"
Further nesting omitted
requiredboolean
default: false
Further nesting omitted
placeholderstring
maxLength: 80
Further nesting omitted
optionsarray
minItems: 1 · maxItems: 20 · uniqueItems: true
Further nesting omitted
statusstringrequired
enum: "active", "paused", "archived"
viewsintegerrequired
submissionsintegerrequired
confirmationsintegerrequired
subscribersintegerrequired
versionintegerrequired
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
hosted_urlstringrequired
embed_codestringrequired
embed_slotstringrequired
open_buttonstringrequired
conversion_ratenumberrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/signup-forms?include_archived=true' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/signup-forms
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
namestring
maxLength: 200
kindstring
default: "inline" · enum: "inline", "popup", "bar", "slide_in", "page"
list_idstring
format: "uuid"
list_namestring
maxLength: 200
mailbox_idstring | null
format: "uuid"
double_opt_inboolean
default: true
configobject
No additional properties
eyebrowstring
maxLength: 60
headlinestring
minLength: 1 · maxLength: 140
bodystring
maxLength: 400
button_labelstring
minLength: 1 · maxLength: 40
email_placeholderstring
maxLength: 80
name_placeholderstring
maxLength: 60
fine_printstring
maxLength: 160
incentivestring
maxLength: 160
success_headlinestring
maxLength: 120
success_bodystring
maxLength: 400
redirect_urlstring
maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"
image_urlstring
maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"
artstring
enum: "arcs", "blocks", "horizon", "confetti", "frame", "bands", "dots"
stylestring
enum: "", "brand", "material", "clarity", "editorial", "bold", "luxe", "playful", "plain"
count_nounstring
maxLength: 30
confirm_promisestring
maxLength: 200
localestring
collect_nameboolean
show_logoboolean
show_countboolean
exit_intentboolean
delay_secondsinteger
minimum: 0 · maximum: 600
scroll_percentinteger
minimum: 0 · maximum: 100
frequency_daysinteger
minimum: 0 · maximum: 365
imagestring
enum: "none", "photo", "art"
layoutstring
enum: "stacked", "split"
themestring
enum: "light", "dark", "brand", "auto"
positionstring
enum: "bottom", "top", "right", "left"
fieldsarray
maxItems: 6
Each itemobject
Select questions require options. Other question types do not accept options. Keys must be unique and cannot use reserved form fields; omitted keys are derived from labels.
No additional properties
keystring
pattern: "^[a-z][a-z0-9_]{0,39}$"
labelstringrequired
minLength: 1 · maxLength: 80
typestring
default: "text" · enum: "text", "select", "checkbox"
requiredboolean
default: false
placeholderstring
maxLength: 80
optionsarray
minItems: 1 · maxItems: 20 · uniqueItems: true
Each itemstring
minLength: 1 · maxLength: 80
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
idstring
format: "uuid"
product_idstring
format: "uuid"
public_idstring
pattern: "^f_[a-z0-9]{16}$"
namestring
kindstring
enum: "inline", "popup", "bar", "slide_in", "page"
list_idstring
format: "uuid"
list_namestring
mailbox_idstring | null
format: "uuid"
double_opt_inboolean
configobject
No additional properties
eyebrowstring
maxLength: 60
headlinestring
minLength: 1 · maxLength: 140
bodystring
maxLength: 400
button_labelstring
minLength: 1 · maxLength: 40
email_placeholderstring
maxLength: 80
name_placeholderstring
maxLength: 60
fine_printstring
maxLength: 160
incentivestring
maxLength: 160
success_headlinestring
maxLength: 120
success_bodystring
maxLength: 400
redirect_urlstring
maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"
image_urlstring
maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"
artstring
enum: "arcs", "blocks", "horizon", "confetti", "frame", "bands", "dots"
stylestring
enum: "", "brand", "material", "clarity", "editorial", "bold", "luxe", "playful", "plain"
count_nounstring
maxLength: 30
confirm_promisestring
maxLength: 200
localestring
collect_nameboolean
show_logoboolean
show_countboolean
exit_intentboolean
delay_secondsinteger
minimum: 0 · maximum: 600
scroll_percentinteger
minimum: 0 · maximum: 100
frequency_daysinteger
minimum: 0 · maximum: 365
imagestring
enum: "none", "photo", "art"
layoutstring
enum: "stacked", "split"
themestring
enum: "light", "dark", "brand", "auto"
positionstring
enum: "bottom", "top", "right", "left"
fieldsarray
maxItems: 6
Each itemobject
Select questions require options. Other question types do not accept options. Keys must be unique and cannot use reserved form fields; omitted keys are derived from labels.
No additional properties
keystring
pattern: "^[a-z][a-z0-9_]{0,39}$"
labelstringrequired
minLength: 1 · maxLength: 80
typestring
default: "text" · enum: "text", "select", "checkbox"
requiredboolean
default: false
placeholderstring
maxLength: 80
optionsarray
minItems: 1 · maxItems: 20 · uniqueItems: true
Each itemstring
minLength: 1 · maxLength: 80
Further nesting omitted
statusstring
enum: "active", "paused", "archived"
viewsinteger
submissionsinteger
confirmationsinteger
subscribersinteger
versioninteger
created_atstring
format: "date-time"
updated_atstring
format: "date-time"
hosted_urlstring
embed_codestring
embed_slotstring
open_buttonstring
conversion_ratenumber
replayedboolean
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/signup-forms' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Idempotency-Key: example' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "example",
"kind": "inline",
"list_id": "00000000-0000-4000-8000-000000000001",
"list_name": "example",
"mailbox_id": "00000000-0000-4000-8000-000000000001",
"double_opt_in": true,
"config": {
"eyebrow": "example",
"headline": "example",
"body": "example",
"button_label": "example",
"email_placeholder": "example",
"name_placeholder": "example",
"fine_print": "example",
"incentive": "example",
"success_headline": "example",
"success_body": "example",
"redirect_url": "example",
"image_url": "example",
"art": "arcs",
"style": "",
"count_noun": "example",
"confirm_promise": "example",
"locale": "example",
"collect_name": true,
"show_logo": true,
"show_count": true,
"exit_intent": true,
"delay_seconds": 0,
"scroll_percent": 0,
"frequency_days": 0,
"image": "none",
"layout": "stacked",
"theme": "light",
"position": "bottom",
"fields": [
{
"key": "example",
"label": "example",
"type": "text",
"required": false,
"placeholder": "example",
"options": [
"example"
]
}
]
}
}'
GET/v1/workspaces/{workspaceId}/signup-forms/readiness
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/signup-forms/readiness' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/signup-forms/preview
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
kindstring
enum: "inline", "popup", "bar", "slide_in", "page"
configobject
No additional properties
eyebrowstring
maxLength: 60
headlinestring
minLength: 1 · maxLength: 140
bodystring
maxLength: 400
button_labelstring
minLength: 1 · maxLength: 40
email_placeholderstring
maxLength: 80
name_placeholderstring
maxLength: 60
fine_printstring
maxLength: 160
incentivestring
maxLength: 160
success_headlinestring
maxLength: 120
success_bodystring
maxLength: 400
redirect_urlstring
maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"
image_urlstring
maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"
artstring
enum: "arcs", "blocks", "horizon", "confetti", "frame", "bands", "dots"
stylestring
enum: "", "brand", "material", "clarity", "editorial", "bold", "luxe", "playful", "plain"
count_nounstring
maxLength: 30
confirm_promisestring
maxLength: 200
localestring
collect_nameboolean
show_logoboolean
show_countboolean
exit_intentboolean
delay_secondsinteger
minimum: 0 · maximum: 600
scroll_percentinteger
minimum: 0 · maximum: 100
frequency_daysinteger
minimum: 0 · maximum: 365
imagestring
enum: "none", "photo", "art"
layoutstring
enum: "stacked", "split"
themestring
enum: "light", "dark", "brand", "auto"
positionstring
enum: "bottom", "top", "right", "left"
fieldsarray
maxItems: 6
Each itemobject
Select questions require options. Other question types do not accept options. Keys must be unique and cannot use reserved form fields; omitted keys are derived from labels.
No additional properties
keystring
pattern: "^[a-z][a-z0-9_]{0,39}$"
labelstringrequired
minLength: 1 · maxLength: 80
typestring
default: "text" · enum: "text", "select", "checkbox"
requiredboolean
default: false
placeholderstring
maxLength: 80
optionsarray
minItems: 1 · maxItems: 20 · uniqueItems: true
Each itemstring
minLength: 1 · maxLength: 80
double_opt_inboolean
statestring
enum: "form", "success"
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
kindstringrequired
enum: "inline", "popup", "bar", "slide_in", "page"
statestringrequired
enum: "form", "success"
htmlstringrequired
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/signup-forms/preview' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"kind": "inline",
"config": {
"eyebrow": "example",
"headline": "example",
"body": "example",
"button_label": "example",
"email_placeholder": "example",
"name_placeholder": "example",
"fine_print": "example",
"incentive": "example",
"success_headline": "example",
"success_body": "example",
"redirect_url": "example",
"image_url": "example",
"art": "arcs",
"style": "",
"count_noun": "example",
"confirm_promise": "example",
"locale": "example",
"collect_name": true,
"show_logo": true,
"show_count": true,
"exit_intent": true,
"delay_seconds": 0,
"scroll_percent": 0,
"frequency_days": 0,
"image": "none",
"layout": "stacked",
"theme": "light",
"position": "bottom",
"fields": [
{
"key": "example",
"label": "example",
"type": "text",
"required": false,
"placeholder": "example",
"options": [
"example"
]
}
]
},
"double_opt_in": true,
"state": "form"
}'
GET/v1/workspaces/{workspaceId}/signup-forms/{formId}
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
product_idstringrequired
format: "uuid"
public_idstringrequired
pattern: "^f_[a-z0-9]{16}$"
namestringrequired
kindstringrequired
enum: "inline", "popup", "bar", "slide_in", "page"
list_idstringrequired
format: "uuid"
list_namestringrequired
mailbox_idstring | nullrequired
format: "uuid"
double_opt_inbooleanrequired
configobjectrequired
No additional properties
eyebrowstring
maxLength: 60
headlinestring
minLength: 1 · maxLength: 140
bodystring
maxLength: 400
button_labelstring
minLength: 1 · maxLength: 40
email_placeholderstring
maxLength: 80
name_placeholderstring
maxLength: 60
fine_printstring
maxLength: 160
incentivestring
maxLength: 160
success_headlinestring
maxLength: 120
success_bodystring
maxLength: 400
redirect_urlstring
maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"
image_urlstring
maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"
artstring
enum: "arcs", "blocks", "horizon", "confetti", "frame", "bands", "dots"
stylestring
enum: "", "brand", "material", "clarity", "editorial", "bold", "luxe", "playful", "plain"
count_nounstring
maxLength: 30
confirm_promisestring
maxLength: 200
localestring
collect_nameboolean
show_logoboolean
show_countboolean
exit_intentboolean
delay_secondsinteger
minimum: 0 · maximum: 600
scroll_percentinteger
minimum: 0 · maximum: 100
frequency_daysinteger
minimum: 0 · maximum: 365
imagestring
enum: "none", "photo", "art"
layoutstring
enum: "stacked", "split"
themestring
enum: "light", "dark", "brand", "auto"
positionstring
enum: "bottom", "top", "right", "left"
fieldsarray
maxItems: 6
Each itemobject
Select questions require options. Other question types do not accept options. Keys must be unique and cannot use reserved form fields; omitted keys are derived from labels.
No additional properties
keystring
pattern: "^[a-z][a-z0-9_]{0,39}$"
labelstringrequired
minLength: 1 · maxLength: 80
typestring
default: "text" · enum: "text", "select", "checkbox"
requiredboolean
default: false
placeholderstring
maxLength: 80
optionsarray
minItems: 1 · maxItems: 20 · uniqueItems: true
Each itemstring
minLength: 1 · maxLength: 80
Further nesting omitted
statusstringrequired
enum: "active", "paused", "archived"
viewsintegerrequired
submissionsintegerrequired
confirmationsintegerrequired
subscribersintegerrequired
versionintegerrequired
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
hosted_urlstringrequired
embed_codestringrequired
embed_slotstringrequired
open_buttonstringrequired
conversion_ratenumberrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/signup-forms/{formId}' \
--header "Authorization: Bearer $BANGER_API_KEY"
PATCH/v1/workspaces/{workspaceId}/signup-forms/{formId}
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
namestring
maxLength: 200
kindstring
default: "inline" · enum: "inline", "popup", "bar", "slide_in", "page"
list_idstring
format: "uuid"
list_namestring
maxLength: 200
mailbox_idstring | null
format: "uuid"
double_opt_inboolean
default: true
configobject
No additional properties
eyebrowstring
maxLength: 60
headlinestring
minLength: 1 · maxLength: 140
bodystring
maxLength: 400
button_labelstring
minLength: 1 · maxLength: 40
email_placeholderstring
maxLength: 80
name_placeholderstring
maxLength: 60
fine_printstring
maxLength: 160
incentivestring
maxLength: 160
success_headlinestring
maxLength: 120
success_bodystring
maxLength: 400
redirect_urlstring
maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"
image_urlstring
maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"
artstring
enum: "arcs", "blocks", "horizon", "confetti", "frame", "bands", "dots"
stylestring
enum: "", "brand", "material", "clarity", "editorial", "bold", "luxe", "playful", "plain"
count_nounstring
maxLength: 30
confirm_promisestring
maxLength: 200
localestring
collect_nameboolean
show_logoboolean
show_countboolean
exit_intentboolean
delay_secondsinteger
minimum: 0 · maximum: 600
scroll_percentinteger
minimum: 0 · maximum: 100
frequency_daysinteger
minimum: 0 · maximum: 365
imagestring
enum: "none", "photo", "art"
layoutstring
enum: "stacked", "split"
themestring
enum: "light", "dark", "brand", "auto"
positionstring
enum: "bottom", "top", "right", "left"
fieldsarray
maxItems: 6
Each itemobject
Select questions require options. Other question types do not accept options. Keys must be unique and cannot use reserved form fields; omitted keys are derived from labels.
No additional properties
keystring
pattern: "^[a-z][a-z0-9_]{0,39}$"
labelstringrequired
minLength: 1 · maxLength: 80
typestring
default: "text" · enum: "text", "select", "checkbox"
requiredboolean
default: false
placeholderstring
maxLength: 80
optionsarray
minItems: 1 · maxItems: 20 · uniqueItems: true
Each itemstring
minLength: 1 · maxLength: 80
statusstring
enum: "active", "paused", "archived"
expected_versioninteger
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
product_idstringrequired
format: "uuid"
public_idstringrequired
pattern: "^f_[a-z0-9]{16}$"
namestringrequired
kindstringrequired
enum: "inline", "popup", "bar", "slide_in", "page"
list_idstringrequired
format: "uuid"
list_namestringrequired
mailbox_idstring | nullrequired
format: "uuid"
double_opt_inbooleanrequired
configobjectrequired
No additional properties
eyebrowstring
maxLength: 60
headlinestring
minLength: 1 · maxLength: 140
bodystring
maxLength: 400
button_labelstring
minLength: 1 · maxLength: 40
email_placeholderstring
maxLength: 80
name_placeholderstring
maxLength: 60
fine_printstring
maxLength: 160
incentivestring
maxLength: 160
success_headlinestring
maxLength: 120
success_bodystring
maxLength: 400
redirect_urlstring
maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"
image_urlstring
maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"
artstring
enum: "arcs", "blocks", "horizon", "confetti", "frame", "bands", "dots"
stylestring
enum: "", "brand", "material", "clarity", "editorial", "bold", "luxe", "playful", "plain"
count_nounstring
maxLength: 30
confirm_promisestring
maxLength: 200
localestring
collect_nameboolean
show_logoboolean
show_countboolean
exit_intentboolean
delay_secondsinteger
minimum: 0 · maximum: 600
scroll_percentinteger
minimum: 0 · maximum: 100
frequency_daysinteger
minimum: 0 · maximum: 365
imagestring
enum: "none", "photo", "art"
layoutstring
enum: "stacked", "split"
themestring
enum: "light", "dark", "brand", "auto"
positionstring
enum: "bottom", "top", "right", "left"
fieldsarray
maxItems: 6
Each itemobject
Select questions require options. Other question types do not accept options. Keys must be unique and cannot use reserved form fields; omitted keys are derived from labels.
No additional properties
keystring
pattern: "^[a-z][a-z0-9_]{0,39}$"
labelstringrequired
minLength: 1 · maxLength: 80
typestring
default: "text" · enum: "text", "select", "checkbox"
requiredboolean
default: false
placeholderstring
maxLength: 80
optionsarray
minItems: 1 · maxItems: 20 · uniqueItems: true
Each itemstring
minLength: 1 · maxLength: 80
Further nesting omitted
statusstringrequired
enum: "active", "paused", "archived"
viewsintegerrequired
submissionsintegerrequired
confirmationsintegerrequired
subscribersintegerrequired
versionintegerrequired
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
hosted_urlstringrequired
embed_codestringrequired
embed_slotstringrequired
open_buttonstringrequired
conversion_ratenumberrequired
replayedbooleanrequired
curl example
curl --request PATCH --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/signup-forms/{formId}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Idempotency-Key: example' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "example",
"kind": "inline",
"list_id": "00000000-0000-4000-8000-000000000001",
"list_name": "example",
"mailbox_id": "00000000-0000-4000-8000-000000000001",
"double_opt_in": true,
"config": {
"eyebrow": "example",
"headline": "example",
"body": "example",
"button_label": "example",
"email_placeholder": "example",
"name_placeholder": "example",
"fine_print": "example",
"incentive": "example",
"success_headline": "example",
"success_body": "example",
"redirect_url": "example",
"image_url": "example",
"art": "arcs",
"style": "",
"count_noun": "example",
"confirm_promise": "example",
"locale": "example",
"collect_name": true,
"show_logo": true,
"show_count": true,
"exit_intent": true,
"delay_seconds": 0,
"scroll_percent": 0,
"frequency_days": 0,
"image": "none",
"layout": "stacked",
"theme": "light",
"position": "bottom",
"fields": [
{
"key": "example",
"label": "example",
"type": "text",
"required": false,
"placeholder": "example",
"options": [
"example"
]
}
]
},
"status": "active",
"expected_version": 1
}'
POST/v1/workspaces/{workspaceId}/signup-forms/{formId}/preview
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
kindstring
enum: "inline", "popup", "bar", "slide_in", "page"
configobject
No additional properties
eyebrowstring
maxLength: 60
headlinestring
minLength: 1 · maxLength: 140
bodystring
maxLength: 400
button_labelstring
minLength: 1 · maxLength: 40
email_placeholderstring
maxLength: 80
name_placeholderstring
maxLength: 60
fine_printstring
maxLength: 160
incentivestring
maxLength: 160
success_headlinestring
maxLength: 120
success_bodystring
maxLength: 400
redirect_urlstring
maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"
image_urlstring
maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"
artstring
enum: "arcs", "blocks", "horizon", "confetti", "frame", "bands", "dots"
stylestring
enum: "", "brand", "material", "clarity", "editorial", "bold", "luxe", "playful", "plain"
count_nounstring
maxLength: 30
confirm_promisestring
maxLength: 200
localestring
collect_nameboolean
show_logoboolean
show_countboolean
exit_intentboolean
delay_secondsinteger
minimum: 0 · maximum: 600
scroll_percentinteger
minimum: 0 · maximum: 100
frequency_daysinteger
minimum: 0 · maximum: 365
imagestring
enum: "none", "photo", "art"
layoutstring
enum: "stacked", "split"
themestring
enum: "light", "dark", "brand", "auto"
positionstring
enum: "bottom", "top", "right", "left"
fieldsarray
maxItems: 6
Each itemobject
Select questions require options. Other question types do not accept options. Keys must be unique and cannot use reserved form fields; omitted keys are derived from labels.
No additional properties
keystring
pattern: "^[a-z][a-z0-9_]{0,39}$"
labelstringrequired
minLength: 1 · maxLength: 80
typestring
default: "text" · enum: "text", "select", "checkbox"
requiredboolean
default: false
placeholderstring
maxLength: 80
optionsarray
minItems: 1 · maxItems: 20 · uniqueItems: true
Each itemstring
minLength: 1 · maxLength: 80
double_opt_inboolean
statestring
enum: "form", "success"
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
kindstringrequired
enum: "inline", "popup", "bar", "slide_in", "page"
statestringrequired
enum: "form", "success"
htmlstringrequired
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/signup-forms/{formId}/preview' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"kind": "inline",
"config": {
"eyebrow": "example",
"headline": "example",
"body": "example",
"button_label": "example",
"email_placeholder": "example",
"name_placeholder": "example",
"fine_print": "example",
"incentive": "example",
"success_headline": "example",
"success_body": "example",
"redirect_url": "example",
"image_url": "example",
"art": "arcs",
"style": "",
"count_noun": "example",
"confirm_promise": "example",
"locale": "example",
"collect_name": true,
"show_logo": true,
"show_count": true,
"exit_intent": true,
"delay_seconds": 0,
"scroll_percent": 0,
"frequency_days": 0,
"image": "none",
"layout": "stacked",
"theme": "light",
"position": "bottom",
"fields": [
{
"key": "example",
"label": "example",
"type": "text",
"required": false,
"placeholder": "example",
"options": [
"example"
]
}
]
},
"double_opt_in": true,
"state": "form"
}'
GET/v1/forms/embed.js
Public endpoint: no authentication required.
Parameters
No parameters are specified.
Request body
No request body is specified in the contract.
Success response 200
Embeddable signup form loader.
text/javascript
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/forms/embed.js'
OPTIONS/v1/forms/embed.js
Public endpoint: no authentication required.
Parameters
No parameters are specified.
Request body
No request body is specified in the contract.
Success response 204
Successful response.
No response body.
curl example
curl --request OPTIONS --globoff 'https://api.bangermail.com/v1/forms/embed.js'
HEAD/v1/forms/embed.js
Public endpoint: no authentication required.
Parameters
No parameters are specified.
Request body
No request body is specified in the contract.
Success response 200
Successful response.
No response schema is specified in the contract.
curl example
curl --request HEAD --globoff 'https://api.bangermail.com/v1/forms/embed.js'
GET/v1/forms/{publicId}/widget
Public endpoint: no authentication required.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
kindstringrequired
enum: "inline", "popup", "bar", "slide_in", "page"
langstringrequired
htmlstringrequired
cssstringrequired
font_hrefstringrequired
redirect_urlstringrequired
behaviorobjectrequired
delay_secondsnumberrequired
scroll_percentnumberrequired
exit_intentbooleanrequired
frequency_daysnumberrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/forms/{publicId}/widget'
OPTIONS/v1/forms/{publicId}/widget
Public endpoint: no authentication required.
Parameters
Request body
No request body is specified in the contract.
Success response 204
Successful response.
No response body.
curl example
curl --request OPTIONS --globoff 'https://api.bangermail.com/v1/forms/{publicId}/widget'
POST/v1/forms/{publicId}/subscribe
Public endpoint: no authentication required.
Parameters
Request body required
application/x-www-form-urlencoded
valueobject
Custom answers use x_<field key> (or the unprefixed key). Required answers depend on the form configuration. The handler reads the first 8000 characters of the body.
emailstringrequired
format: "email" · maxLength: 320
namestring
maxLength: 100
pagestring
maxLength: 2000
elapsednumber | string
Milliseconds elapsed since displaying the form.
langstring
maxLength: 35
localestring
maxLength: 35
websitestring
Honeypot; leave empty.
maxLength: 200
Additional propertystring | number
application/json
valueobject
Custom answers use x_<field key> (or the unprefixed key). Required answers depend on the form configuration. The handler reads the first 8000 characters of the body.
emailstringrequired
format: "email" · maxLength: 320
namestring
maxLength: 100
pagestring
maxLength: 2000
elapsednumber | string
Milliseconds elapsed since displaying the form.
langstring
maxLength: 35
localestring
maxLength: 35
websitestring
Honeypot; leave empty.
maxLength: 200
Additional propertystring | number
Success response 200
Signup accepted.
application/json
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/forms/{publicId}/subscribe' \
--header 'Content-Type: application/json' \
--data-raw '{
"email": "person@example.com",
"name": "example",
"page": "example",
"elapsed": 1,
"lang": "example",
"locale": "example",
"website": "example"
}'
OPTIONS/v1/forms/{publicId}/subscribe
Public endpoint: no authentication required.
Parameters
Request body
No request body is specified in the contract.
Success response 204
Successful response.
No response body.
curl example
curl --request OPTIONS --globoff 'https://api.bangermail.com/v1/forms/{publicId}/subscribe'
POST/v1/forms/{publicId}/view
Public endpoint: no authentication required.
Parameters
Request body
No request body is specified in the contract.
Success response 204
Counted.
No response body.
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/forms/{publicId}/view'
OPTIONS/v1/forms/{publicId}/view
Public endpoint: no authentication required.
Parameters
Request body
No request body is specified in the contract.
Success response 204
Successful response.
No response body.
curl example
curl --request OPTIONS --globoff 'https://api.bangermail.com/v1/forms/{publicId}/view'
Templates
GET/v1/workspaces/{workspaceId}/templates
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
valueobject
dataarrayrequired
Each itemobject
idstringrequired
format: "uuid"
product_idstring
format: "uuid"
namestringrequired
subjectstringrequired
body_textstringrequired
contentobjectrequired
Additional propertystring
slotsarrayrequired
Each itemobject
keystringrequired
pattern: "^[A-Za-z0-9_$.-]{1,200}$"
labelstring
maxLength: 120
typestring
enum: "text", "paragraph", "url", "image"
helpstring
maxLength: 300
statusstringrequired
enum: "active", "archived"
originstringrequired
enum: "person", "agent", "starter", "import"
created_by_actor_idstring | null
campaign_idstring | null
format: "uuid"
message_kindstring
starter_idstring | null
starter_versioninteger | null
versionintegerrequired
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
body_html_urlstring
format: "uri"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/templates' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/templates
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
namestringrequired
minLength: 1 · maxLength: 200
subjectstring
maxLength: 10000
body_textstring
maxLength: 2000000
body_htmlstring
maxLength: 2000000
contentobject
Additional propertystring
slotsarray
Each itemobject
keystringrequired
pattern: "^[A-Za-z0-9_$.-]{1,200}$"
labelstring
maxLength: 120
typestring
enum: "text", "paragraph", "url", "image"
helpstring
maxLength: 300
originstring
enum: "person", "agent", "starter", "import"
message_kindstring
starter_idstring
maxLength: 80
starter_versioninteger
minimum: 1
Success response 201
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
product_idstring
format: "uuid"
namestringrequired
subjectstringrequired
body_textstringrequired
contentobjectrequired
Additional propertystring
slotsarrayrequired
Each itemobject
keystringrequired
pattern: "^[A-Za-z0-9_$.-]{1,200}$"
labelstring
maxLength: 120
typestring
enum: "text", "paragraph", "url", "image"
helpstring
maxLength: 300
statusstringrequired
enum: "active", "archived"
originstringrequired
enum: "person", "agent", "starter", "import"
created_by_actor_idstring | null
campaign_idstring | null
format: "uuid"
message_kindstring
starter_idstring | null
starter_versioninteger | null
versionintegerrequired
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
body_html_urlstring
format: "uri"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/templates' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "example",
"subject": "example",
"body_text": "example",
"body_html": "example",
"content": {},
"slots": [
{
"key": "example",
"label": "example",
"type": "text",
"help": "example"
}
],
"origin": "person",
"message_kind": "example",
"starter_id": "example",
"starter_version": 1
}'
POST/v1/workspaces/{workspaceId}/templates/preview
Render unsaved design input with sample or audience values and report placeholder gaps.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
subjectstring
maxLength: 10000
body_textstring
maxLength: 2000000
body_htmlstring
maxLength: 2000000
contentobject
Additional propertystring
audienceobject
Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.
all_subscribedboolean
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
sample_emailstring
maxLength: 320
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
subjectstringrequired
body_textstringrequired
body_htmlstring
font_renderingarrayrequired
Each itemobject
stackstringrequired
fontstringrequired
web_fontbooleanrequired
clientsarrayrequired
Each itemobject
clientstringrequired
Further nesting omitted
labelstringrequired
Further nesting omitted
fontstringrequired
Further nesting omitted
web_fontbooleanrequired
Further nesting omitted
fallbackbooleanrequired
Further nesting omitted
sample_recipientunspecifiedrequired
anyOf 1object
emailstringrequired
display_namestring | nullrequired
anyOf 2null
required_variablesarrayrequired
Each itemstring
effective_slotsarrayrequired
Each itemobject
keystringrequired
pattern: "^[A-Za-z0-9_$.-]{1,200}$"
labelstring
maxLength: 120
typestring
enum: "text", "paragraph", "url", "image"
helpstring
maxLength: 300
audience_countinteger
gapsarray
Each itemobject
variablestringrequired
missing_countintegerrequired
sample_emailsarrayrequired
Each itemstring
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/templates/preview' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"subject": "example",
"body_text": "example",
"body_html": "example",
"content": {},
"audience": {
"all_subscribed": true,
"contact_ids": [
"00000000-0000-4000-8000-000000000001"
],
"list_ids": [
"00000000-0000-4000-8000-000000000001"
],
"segment_ids": [
"00000000-0000-4000-8000-000000000001"
]
},
"sample_email": "example"
}'
GET/v1/workspaces/{workspaceId}/templates/{templateId}
One design with its inline HTML, fill-in content, and effective slots.
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
product_idstring
format: "uuid"
namestringrequired
subjectstringrequired
body_textstringrequired
contentobjectrequired
Additional propertystring
slotsarrayrequired
Each itemobject
keystringrequired
pattern: "^[A-Za-z0-9_$.-]{1,200}$"
labelstring
maxLength: 120
typestring
enum: "text", "paragraph", "url", "image"
helpstring
maxLength: 300
statusstringrequired
enum: "active", "archived"
originstringrequired
enum: "person", "agent", "starter", "import"
created_by_actor_idstring | null
campaign_idstring | null
format: "uuid"
message_kindstring
starter_idstring | null
starter_versioninteger | null
versionintegerrequired
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
body_html_urlstring
format: "uri"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/templates/{templateId}' \
--header "Authorization: Bearer $BANGER_API_KEY"
PATCH/v1/workspaces/{workspaceId}/templates/{templateId}
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
namestring
maxLength: 200
subjectstring
maxLength: 10000
body_textstring
maxLength: 2000000
body_htmlstring
minLength: 1 · maxLength: 2000000
contentobject
Additional propertystring
maxLength: 20000
slotsarray
maxItems: 100
Each itemobject
keystringrequired
maxLength: 200
labelstring
maxLength: 120
typestring
enum: "text", "paragraph", "url", "image"
helpstring
maxLength: 300
statusstring
enum: "active", "archived"
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
product_idstring
format: "uuid"
namestringrequired
subjectstringrequired
body_textstringrequired
contentobjectrequired
Additional propertystring
slotsarrayrequired
Each itemobject
keystringrequired
pattern: "^[A-Za-z0-9_$.-]{1,200}$"
labelstring
maxLength: 120
typestring
enum: "text", "paragraph", "url", "image"
helpstring
maxLength: 300
statusstringrequired
enum: "active", "archived"
originstringrequired
enum: "person", "agent", "starter", "import"
created_by_actor_idstring | null
campaign_idstring | null
format: "uuid"
message_kindstring
starter_idstring | null
starter_versioninteger | null
versionintegerrequired
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
body_html_urlstring
format: "uri"
curl example
curl --request PATCH --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/templates/{templateId}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "example",
"subject": "example",
"body_text": "example",
"body_html": "example",
"content": {},
"slots": [
{
"key": "example",
"label": "example",
"type": "text",
"help": "example"
}
],
"status": "active"
}'
POST/v1/workspaces/{workspaceId}/templates/{templateId}/duplicate
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
namestring
maxLength: 200
Success response 201
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
product_idstring
format: "uuid"
namestringrequired
subjectstringrequired
body_textstringrequired
contentobjectrequired
Additional propertystring
slotsarrayrequired
Each itemobject
keystringrequired
pattern: "^[A-Za-z0-9_$.-]{1,200}$"
labelstring
maxLength: 120
typestring
enum: "text", "paragraph", "url", "image"
helpstring
maxLength: 300
statusstringrequired
enum: "active", "archived"
originstringrequired
enum: "person", "agent", "starter", "import"
created_by_actor_idstring | null
campaign_idstring | null
format: "uuid"
message_kindstring
starter_idstring | null
starter_versioninteger | null
versionintegerrequired
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
body_html_urlstring
format: "uri"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/templates/{templateId}/duplicate' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "example"
}'
POST/v1/workspaces/{workspaceId}/templates/{templateId}/preview
Render a saved design with sample or audience values and report placeholder gaps.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
contentobject
Additional propertystring
audienceobject
Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.
all_subscribedboolean
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
sample_emailstring
maxLength: 320
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
subjectstringrequired
body_textstringrequired
body_htmlstring
font_renderingarrayrequired
Each itemobject
stackstringrequired
fontstringrequired
web_fontbooleanrequired
clientsarrayrequired
Each itemobject
clientstringrequired
Further nesting omitted
labelstringrequired
Further nesting omitted
fontstringrequired
Further nesting omitted
web_fontbooleanrequired
Further nesting omitted
fallbackbooleanrequired
Further nesting omitted
sample_recipientunspecifiedrequired
anyOf 1object
emailstringrequired
display_namestring | nullrequired
anyOf 2null
required_variablesarrayrequired
Each itemstring
effective_slotsarrayrequired
Each itemobject
keystringrequired
pattern: "^[A-Za-z0-9_$.-]{1,200}$"
labelstring
maxLength: 120
typestring
enum: "text", "paragraph", "url", "image"
helpstring
maxLength: 300
audience_countinteger
gapsarray
Each itemobject
variablestringrequired
missing_countintegerrequired
sample_emailsarrayrequired
Each itemstring
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/templates/{templateId}/preview' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"content": {},
"audience": {
"all_subscribed": true,
"contact_ids": [
"00000000-0000-4000-8000-000000000001"
],
"list_ids": [
"00000000-0000-4000-8000-000000000001"
],
"segment_ids": [
"00000000-0000-4000-8000-000000000001"
]
},
"sample_email": "example"
}'
GET/v1/workspaces/{workspaceId}/templates/{templateId}/html
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Scriptless HTML email template body.
text/html
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/templates/{templateId}/html' \
--header "Authorization: Bearer $BANGER_API_KEY"
Campaigns
POST/v1/workspaces/{workspaceId}/campaigns/coverage-preview
Required placeholders an audience cannot fill, before any Broadcast is saved.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
subjectstring
maxLength: 10000
body_textstring
maxLength: 2000000
body_htmlstring
maxLength: 2000000
contentobject
Additional propertystring
audienceobjectrequired
Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.
all_subscribedboolean
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
sample_emailstring
maxLength: 320
template_idstring
format: "uuid"
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
required_variablesarrayrequired
Each itemstring
audience_countintegerrequired
gapsarrayrequired
Each itemobject
variablestringrequired
missing_countintegerrequired
sample_emailsarrayrequired
Each itemstring
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/campaigns/coverage-preview' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"subject": "example",
"body_text": "example",
"body_html": "example",
"content": {},
"audience": {
"all_subscribed": true,
"contact_ids": [
"00000000-0000-4000-8000-000000000001"
],
"list_ids": [
"00000000-0000-4000-8000-000000000001"
],
"segment_ids": [
"00000000-0000-4000-8000-000000000001"
]
},
"sample_email": "example",
"template_id": "00000000-0000-4000-8000-000000000001"
}'
GET/v1/workspaces/{workspaceId}/campaigns
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
valueobject
dataarrayrequired
Each itemobject
idstringrequired
format: "uuid"
product_idstring
format: "uuid"
namestringrequired
mailbox_idstring
format: "uuid"
template_idstring | null
format: "uuid"
managed_content_idstring | null
format: "uuid"
managed_source_revision_idstring | null
format: "uuid"
managed_publication_idstring | null
format: "uuid"
managed_locales_snapshotarray
Each itemstring
localization_failure_policystring
expires_after_secondsinteger | null
statusstringrequired
versionintegerrequired
subject_variantsarray
Each itemstring
selected_subject_variantinteger
content_overridesobject
Additional propertystring
audience_queryobject
Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.
all_subscribedboolean
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
audience_frozen_atstring | null
format: "date-time"
audience_recipient_countinteger | null
audience_snapshot_sha256string | null
audience_snapshot_campaign_versioninteger | null
scheduled_atstring | null
format: "date-time"
started_atstring | null
format: "date-time"
completed_atstring | null
format: "date-time"
created_atstring
format: "date-time"
updated_atstring
format: "date-time"
archived_atstring | null
format: "date-time"
statsobject
Additional propertyAny value
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/campaigns' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/campaigns
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
namestringrequired
maxLength: 200
mailbox_idstringrequired
format: "uuid"
template_idstringrequired
format: "uuid"
subject_variantsarray
maxItems: 8
Each itemstring
minLength: 1 · maxLength: 998
selected_subject_variantinteger
minimum: 0
audienceobjectrequired
all_subscribedboolean
default: false
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
Success response 201
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
product_idstring
format: "uuid"
namestringrequired
mailbox_idstring
format: "uuid"
template_idstring | null
format: "uuid"
managed_content_idstring | null
format: "uuid"
managed_source_revision_idstring | null
format: "uuid"
managed_publication_idstring | null
format: "uuid"
managed_locales_snapshotarray
Each itemstring
localization_failure_policystring
expires_after_secondsinteger | null
statusstringrequired
versionintegerrequired
subject_variantsarray
Each itemstring
selected_subject_variantinteger
content_overridesobject
Additional propertystring
audience_queryobject
Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.
all_subscribedboolean
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
audience_frozen_atstring | null
format: "date-time"
audience_recipient_countinteger | null
audience_snapshot_sha256string | null
audience_snapshot_campaign_versioninteger | null
scheduled_atstring | null
format: "date-time"
started_atstring | null
format: "date-time"
completed_atstring | null
format: "date-time"
created_atstring
format: "date-time"
updated_atstring
format: "date-time"
archived_atstring | null
format: "date-time"
statsobject
Additional propertyAny value
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/campaigns' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "example",
"mailbox_id": "00000000-0000-4000-8000-000000000001",
"template_id": "00000000-0000-4000-8000-000000000001",
"subject_variants": [
"example"
],
"selected_subject_variant": 0,
"audience": {
"all_subscribed": false,
"contact_ids": [
"00000000-0000-4000-8000-000000000001"
],
"list_ids": [
"00000000-0000-4000-8000-000000000001"
],
"segment_ids": [
"00000000-0000-4000-8000-000000000001"
]
}
}'
POST/v1/workspaces/{workspaceId}/campaigns/audience-preview
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
countintegerrequired
missing_consent_evidence_countintegerrequired
samplearrayrequired
Each itemobject
idstringrequired
format: "uuid"
emailstringrequired
display_namestring | nullrequired
attributesobjectrequired
Additional propertyAny value
excludedobjectrequired
suppressedintegerrequired
not_subscribedintegerrequired
missing_recipient_hashintegerrequired
missing_consent_evidenceintegerrequired
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/campaigns/audience-preview' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"audience": {
"all_subscribed": true,
"contact_ids": [
"00000000-0000-4000-8000-000000000001"
],
"list_ids": [
"00000000-0000-4000-8000-000000000001"
],
"segment_ids": [
"00000000-0000-4000-8000-000000000001"
]
}
}'
GET/v1/workspaces/{workspaceId}/campaigns/{campaignId}
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
product_idstring
format: "uuid"
namestringrequired
mailbox_idstring
format: "uuid"
template_idstring | null
format: "uuid"
managed_content_idstring | null
format: "uuid"
managed_source_revision_idstring | null
format: "uuid"
managed_publication_idstring | null
format: "uuid"
managed_locales_snapshotarray
Each itemstring
localization_failure_policystring
expires_after_secondsinteger | null
statusstringrequired
versionintegerrequired
subject_variantsarray
Each itemstring
selected_subject_variantinteger
content_overridesobject
Additional propertystring
audience_queryobject
Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.
all_subscribedboolean
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
audience_frozen_atstring | null
format: "date-time"
audience_recipient_countinteger | null
audience_snapshot_sha256string | null
audience_snapshot_campaign_versioninteger | null
scheduled_atstring | null
format: "date-time"
started_atstring | null
format: "date-time"
completed_atstring | null
format: "date-time"
created_atstring
format: "date-time"
updated_atstring
format: "date-time"
archived_atstring | null
format: "date-time"
statsobject
Additional propertyAny value
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/campaigns/{campaignId}' \
--header "Authorization: Bearer $BANGER_API_KEY"
PATCH/v1/workspaces/{workspaceId}/campaigns/{campaignId}
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
namestringrequired
maxLength: 200
mailbox_idstringrequired
format: "uuid"
template_idstring
format: "uuid"
subject_variantsarray
maxItems: 8
Each itemstring
minLength: 1 · maxLength: 998
selected_subject_variantinteger
minimum: 0
audienceobjectrequired
Properties not specified in the contract
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
product_idstring
format: "uuid"
namestringrequired
mailbox_idstring
format: "uuid"
template_idstring | null
format: "uuid"
managed_content_idstring | null
format: "uuid"
managed_source_revision_idstring | null
format: "uuid"
managed_publication_idstring | null
format: "uuid"
managed_locales_snapshotarray
Each itemstring
localization_failure_policystring
expires_after_secondsinteger | null
statusstringrequired
versionintegerrequired
subject_variantsarray
Each itemstring
selected_subject_variantinteger
content_overridesobject
Additional propertystring
audience_queryobject
Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.
all_subscribedboolean
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
audience_frozen_atstring | null
format: "date-time"
audience_recipient_countinteger | null
audience_snapshot_sha256string | null
audience_snapshot_campaign_versioninteger | null
scheduled_atstring | null
format: "date-time"
started_atstring | null
format: "date-time"
completed_atstring | null
format: "date-time"
created_atstring
format: "date-time"
updated_atstring
format: "date-time"
archived_atstring | null
format: "date-time"
statsobject
Additional propertyAny value
curl example
curl --request PATCH --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/campaigns/{campaignId}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "example",
"mailbox_id": "00000000-0000-4000-8000-000000000001",
"template_id": "00000000-0000-4000-8000-000000000001",
"subject_variants": [
"example"
],
"selected_subject_variant": 0,
"audience": {}
}'
DELETE/v1/workspaces/{workspaceId}/campaigns/{campaignId}
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
deletedbooleanrequired
const: true
curl example
curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/campaigns/{campaignId}' \
--header "Authorization: Bearer $BANGER_API_KEY"
GET/v1/workspaces/{workspaceId}/campaigns/{campaignId}/recipients
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
valueobject
dataarrayrequired
Each itemobject
contact_idstring | null
format: "uuid"
recipient_emailstring
recipient_namestring | null
recipient_hashstring
statusstring
dispatch_statusstring
command_idstring | null
format: "uuid"
error_codestring | null
created_atstring
format: "date-time"
updated_atstring
format: "date-time"
delivery_statestring | null
provider_message_keystring | null
last_event_atstring | null
format: "date-time"
first_delivered_atstring | null
format: "date-time"
first_opened_atstring | null
format: "date-time"
first_clicked_atstring | null
format: "date-time"
first_human_likely_opened_atstring | null
format: "date-time"
first_human_likely_clicked_atstring | null
format: "date-time"
first_replied_atstring | null
format: "date-time"
machine_open_countinteger
machine_click_countinteger
privacy_proxy_open_countinteger
unknown_open_countinteger
unknown_click_countinteger
first_unsubscribed_atstring | null
format: "date-time"
pageobjectrequired
next_cursorstring
has_morebooleanrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/campaigns/{campaignId}/recipients?cursor=example&limit=50&status=pending' \
--header "Authorization: Bearer $BANGER_API_KEY"
GET/v1/workspaces/{workspaceId}/campaigns/{campaignId}/timeline
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
valueobject
dataarrayrequired
Each itemobject
idstringrequired
typestringrequired
occurred_atstringrequired
format: "date-time"
actor_idstring | nullrequired
detailobjectrequired
Additional propertyAny value
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/campaigns/{campaignId}/timeline' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/campaigns/{campaignId}/pause
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
product_idstringrequired
format: "uuid"
namestringrequired
mailbox_idstringrequired
format: "uuid"
template_idstring | nullrequired
format: "uuid"
statusstringrequired
audience_queryobjectrequired
Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.
all_subscribedboolean
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
scheduled_atstring | nullrequired
format: "date-time"
started_atstring | nullrequired
format: "date-time"
completed_atstring | nullrequired
format: "date-time"
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/campaigns/{campaignId}/pause' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/campaigns/{campaignId}/resume
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
product_idstringrequired
format: "uuid"
namestringrequired
mailbox_idstringrequired
format: "uuid"
template_idstring | nullrequired
format: "uuid"
statusstringrequired
audience_queryobjectrequired
Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.
all_subscribedboolean
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
scheduled_atstring | nullrequired
format: "date-time"
started_atstring | nullrequired
format: "date-time"
completed_atstring | nullrequired
format: "date-time"
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/campaigns/{campaignId}/resume' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/campaigns/{campaignId}/cancel
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
product_idstringrequired
format: "uuid"
namestringrequired
mailbox_idstringrequired
format: "uuid"
template_idstring | nullrequired
format: "uuid"
statusstringrequired
audience_queryobjectrequired
Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.
all_subscribedboolean
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
scheduled_atstring | nullrequired
format: "date-time"
started_atstring | nullrequired
format: "date-time"
completed_atstring | nullrequired
format: "date-time"
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/campaigns/{campaignId}/cancel' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/campaigns/{campaignId}/schedule
Deprecated
Deprecated direct scheduling boundary. Always returns governed_review_required; use the campaign review endpoint so the workspace recipient threshold is enforced.
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response
No success response is specified in the contract.
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/campaigns/{campaignId}/schedule' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/campaigns/{campaignId}/test
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
tostringrequired
minLength: 3 · maxLength: 320
data_modestring
default: "contact" · enum: "sample", "fallback", "contact"
contact_emailstring
maxLength: 320
variant_keystring
maxLength: 80
localestring
Success response 202
Successful response.
application/json
valueobject
dataobjectrequired
action_kindstringrequired
enum: "transactional.send"
idstringrequired
format: "uuid"
send_intent_idstringrequired
format: "uuid"
provider_attempt_idstringrequired
format: "uuid"
statusstringrequired
replayedbooleanrequired
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/campaigns/{campaignId}/test' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Idempotency-Key: examplexxxxxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"to": "example",
"data_mode": "contact",
"contact_email": "example",
"variant_key": "example",
"locale": "example"
}'
POST/v1/workspaces/{workspaceId}/campaigns/{campaignId}/review
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 201
Campaign scheduling approval created.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
requested_by_actor_idstringrequired
action_kindstringrequired
summarystringrequired
capability_scopesarrayrequired
Each itemstring
resource_scopeobjectrequired
Additional propertyarray
Each itemstring
payloadobjectrequired
Additional propertyAny value
payload_sha256stringrequired
pattern: "^[0-9a-f]{64}$"
statusstringrequired
enum: "pending", "approved", "rejected", "cancelled", "expired"
missedbooleanrequired
expires_atstringrequired
format: "date-time"
decided_by_actor_idstring | null
decision_reasonstring | null
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
decided_atstring | null
format: "date-time"
execution_job_idstring
format: "uuid"
reviewobject
No additional properties
dispositionstringrequired
enum: "automatic", "human_required"
recipient_countinteger | nullrequired
minimum: 0
reasonsarrayrequired
Each itemstring
checksarrayrequired
Each itemstring
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/campaigns/{campaignId}/review' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Idempotency-Key: examplexxxxxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '"example"'
POST/v1/workspaces/{workspaceId}/campaigns/{campaignId}/archive
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/campaigns/{campaignId}/archive' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/campaigns/{campaignId}/unarchive
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/campaigns/{campaignId}/unarchive' \
--header "Authorization: Bearer $BANGER_API_KEY"
PUT/v1/workspaces/{workspaceId}/campaigns/{campaignId}/design-test
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
namestringrequired
minLength: 1 · maxLength: 200
mailbox_idstringrequired
format: "uuid"
audienceobjectrequired
Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.
all_subscribedboolean
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
automatic_translationboolean
variantsarrayrequired
minItems: 1 · maxItems: 4
Each itemobject
body_htmlstringrequired
minLength: 1 · maxLength: 2000000
subjectstring
maxLength: 10000
body_textstring
maxLength: 2000000
contentobject
Additional propertystring
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
product_idstring
format: "uuid"
namestringrequired
mailbox_idstring
format: "uuid"
template_idstring | null
format: "uuid"
managed_content_idstring | null
format: "uuid"
managed_source_revision_idstring | null
format: "uuid"
managed_publication_idstring | null
format: "uuid"
managed_locales_snapshotarray
Each itemstring
localization_failure_policystring
expires_after_secondsinteger | null
statusstringrequired
versionintegerrequired
subject_variantsarray
Each itemstring
selected_subject_variantinteger
content_overridesobject
Additional propertystring
audience_queryobject
Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.
all_subscribedboolean
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
audience_frozen_atstring | null
format: "date-time"
audience_recipient_countinteger | null
audience_snapshot_sha256string | null
audience_snapshot_campaign_versioninteger | null
scheduled_atstring | null
format: "date-time"
started_atstring | null
format: "date-time"
completed_atstring | null
format: "date-time"
created_atstring
format: "date-time"
updated_atstring
format: "date-time"
archived_atstring | null
format: "date-time"
statsobject
Additional propertyAny value
design_template_idstringrequired
format: "uuid"
curl example
curl --request PUT --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/campaigns/{campaignId}/design-test' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "example",
"mailbox_id": "00000000-0000-4000-8000-000000000001",
"audience": {
"all_subscribed": true,
"contact_ids": [
"00000000-0000-4000-8000-000000000001"
],
"list_ids": [
"00000000-0000-4000-8000-000000000001"
],
"segment_ids": [
"00000000-0000-4000-8000-000000000001"
]
},
"automatic_translation": true,
"variants": [
{
"body_html": "example",
"subject": "example",
"body_text": "example",
"content": {}
}
]
}'
Broadcasts
POST/v1/workspaces/{workspaceId}/broadcasts
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
namestringrequired
minLength: 1 · maxLength: 200
mailbox_idstringrequired
format: "uuid"
template_idstring
format: "uuid"
audienceobject
No additional properties
all_subscribedboolean
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
subject_variantsarray
maxItems: 8
Each itemstring
minLength: 1 · maxLength: 998
selected_subject_variantinteger
minimum: 0 · maximum: 7
expires_after_secondsinteger
Discard unsent recipients after this many seconds from the scheduled time; defaults to seven days.
minimum: 1 · maximum: 604800
content_overridesobject
Additional propertystring
maxLength: 20000
Success response 200
Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.
application/json
valueobject
dataunspecifiedrequired
allOf 1unspecified
allOf 1object
idstringrequired
format: "uuid"
product_idstringrequired
format: "uuid"
namestringrequired
mailbox_idstring
format: "uuid"
template_idstring | null
format: "uuid"
managed_content_idstring | null
format: "uuid"
managed_source_revision_idstring | null
format: "uuid"
managed_publication_idstring | null
format: "uuid"
managed_locales_snapshotarray
Each itemstring
localization_failure_policystring
expires_after_secondsinteger | null
statusstring
versionintegerrequired
subject_variantsarray
Each itemstring
selected_subject_variantinteger
content_overridesobject
Additional propertystring
audience_queryobject
Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.
all_subscribedboolean
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
Further nesting omitted
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
Further nesting omitted
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
Further nesting omitted
audience_frozen_atstring | null
format: "date-time"
audience_recipient_countinteger | null
audience_snapshot_sha256string | null
audience_snapshot_campaign_versioninteger | null
scheduled_atstring | null
format: "date-time"
started_atstring | null
format: "date-time"
completed_atstring | null
format: "date-time"
created_atstring
format: "date-time"
updated_atstring
format: "date-time"
archived_atstring | null
format: "date-time"
statsobject
Additional propertyAny value
broadcast_idstringrequired
format: "uuid"
sender_addressstring | nullrequired
sending_blockerunspecifiedrequired
anyOf 1object
codestringrequired
Further nesting omitted
messagestringrequired
Further nesting omitted
anyOf 2null
designunspecifiedrequired
anyOf 1object
idstring
format: "uuid"
Further nesting omitted
product_idstring
format: "uuid"
Further nesting omitted
namestring
Further nesting omitted
subjectstring
Further nesting omitted
body_textstring
Further nesting omitted
contentobject
Further nesting omitted
slotsarray
Further nesting omitted
statusstring
enum: "active", "archived"
Further nesting omitted
originstring
enum: "person", "agent", "starter", "import"
Further nesting omitted
created_by_actor_idstring | null
Further nesting omitted
campaign_idstring | null
format: "uuid"
Further nesting omitted
message_kindstring
Further nesting omitted
starter_idstring | null
Further nesting omitted
starter_versioninteger | null
Further nesting omitted
versioninteger
Further nesting omitted
created_atstring
format: "date-time"
Further nesting omitted
updated_atstring
format: "date-time"
Further nesting omitted
body_html_urlstring
format: "uri"
Further nesting omitted
body_htmlstring | null
Further nesting omitted
body_html_b2_keystring | null
Further nesting omitted
anyOf 2null
managed_contentunspecifiedrequired
anyOf 1unspecified
allOf 1object
Further nesting omitted
allOf 2object
Further nesting omitted
anyOf 2null
subjectstring | nullrequired
sender_mailboxunspecifiedrequired
anyOf 1object
idstringrequired
format: "uuid"
Further nesting omitted
addressstringrequired
Further nesting omitted
display_namestringrequired
Further nesting omitted
statusstringrequired
Further nesting omitted
anyOf 2null
reply_mailboxunspecifiedrequired
anyOf 1object
idstringrequired
format: "uuid"
Further nesting omitted
addressstringrequired
Further nesting omitted
display_namestringrequired
Further nesting omitted
statusstringrequired
Further nesting omitted
anyOf 2null
design_versioninteger | nullrequired
audienceobjectrequired
Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.
all_subscribedboolean
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
Further nesting omitted
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
Further nesting omitted
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
Further nesting omitted
allOf 2object
replayedbooleanrequired
allOf 2object
previewobject
subjectstringrequired
preheaderstring
htmlstringrequired
textstringrequired
localestringrequired
directionstringrequired
enum: "ltr", "rtl"
warningsarray
Each itemstring
Additional propertyAny value
translation_jobsarrayrequired
Each itemstring
format: "uuid"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/broadcasts' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
--header 'Idempotency-Key: example' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "example",
"mailbox_id": "00000000-0000-4000-8000-000000000001",
"template_id": "00000000-0000-4000-8000-000000000001",
"audience": {
"all_subscribed": true,
"contact_ids": [
"00000000-0000-4000-8000-000000000001"
],
"list_ids": [
"00000000-0000-4000-8000-000000000001"
],
"segment_ids": [
"00000000-0000-4000-8000-000000000001"
]
},
"subject_variants": [
"example"
],
"selected_subject_variant": 0,
"expires_after_seconds": 1,
"content_overrides": {}
}'
GET/v1/workspaces/{workspaceId}/broadcasts/{broadcastId}
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
product_idstringrequired
format: "uuid"
namestringrequired
mailbox_idstring
format: "uuid"
template_idstring | null
format: "uuid"
managed_content_idstring | null
format: "uuid"
managed_source_revision_idstring | null
format: "uuid"
managed_publication_idstring | null
format: "uuid"
managed_locales_snapshotarray
Each itemstring
localization_failure_policystring
expires_after_secondsinteger | null
statusstring
versionintegerrequired
subject_variantsarray
Each itemstring
selected_subject_variantinteger
content_overridesobject
Additional propertystring
audience_queryobject
Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.
all_subscribedboolean
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
audience_frozen_atstring | null
format: "date-time"
audience_recipient_countinteger | null
audience_snapshot_sha256string | null
audience_snapshot_campaign_versioninteger | null
scheduled_atstring | null
format: "date-time"
started_atstring | null
format: "date-time"
completed_atstring | null
format: "date-time"
created_atstring
format: "date-time"
updated_atstring
format: "date-time"
archived_atstring | null
format: "date-time"
statsobject
Additional propertyAny value
broadcast_idstringrequired
format: "uuid"
sender_addressstring | nullrequired
sending_blockerunspecifiedrequired
anyOf 1object
codestringrequired
messagestringrequired
anyOf 2null
designunspecifiedrequired
anyOf 1object
idstring
format: "uuid"
product_idstring
format: "uuid"
namestring
subjectstring
body_textstring
contentobject
Additional propertystring
slotsarray
Each itemobject
keystringrequired
pattern: "^[A-Za-z0-9_$.-]{1,200}$"
Further nesting omitted
labelstring
maxLength: 120
Further nesting omitted
typestring
enum: "text", "paragraph", "url", "image"
Further nesting omitted
helpstring
maxLength: 300
Further nesting omitted
statusstring
enum: "active", "archived"
originstring
enum: "person", "agent", "starter", "import"
created_by_actor_idstring | null
campaign_idstring | null
format: "uuid"
message_kindstring
starter_idstring | null
starter_versioninteger | null
versioninteger
created_atstring
format: "date-time"
updated_atstring
format: "date-time"
body_html_urlstring
format: "uri"
body_htmlstring | null
body_html_b2_keystring | null
anyOf 2null
managed_contentunspecifiedrequired
anyOf 1unspecified
allOf 1object
idstringrequired
format: "uuid"
namestringrequired
versionintegerrequired
minimum: 1
review_requiredbooleanrequired
draft_revision_idstring | null
format: "uuid"
submitted_revision_idstring | null
format: "uuid"
approved_revision_idstring | null
format: "uuid"
published_revision_idstring | null
format: "uuid"
published_publication_idstring | null
format: "uuid"
source_revisionobject
Additional propertyAny value
translationsarray
Each itemobject
Further nesting omitted
translation_jobsarray
Each itemobject
Further nesting omitted
allOf 2object
source_revisionunspecifiedrequired
anyOf 1object
Further nesting omitted
anyOf 2null
Further nesting omitted
published_source_revisionunspecifiedrequired
anyOf 1object
Further nesting omitted
anyOf 2null
Further nesting omitted
translationsarrayrequired
Each itemobject
Further nesting omitted
anyOf 2null
subjectstring | nullrequired
sender_mailboxunspecifiedrequired
anyOf 1object
idstringrequired
format: "uuid"
addressstringrequired
display_namestringrequired
statusstringrequired
anyOf 2null
reply_mailboxunspecifiedrequired
anyOf 1object
idstringrequired
format: "uuid"
addressstringrequired
display_namestringrequired
statusstringrequired
anyOf 2null
design_versioninteger | nullrequired
audienceobjectrequired
Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.
all_subscribedboolean
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/broadcasts/{broadcastId}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
PATCH/v1/workspaces/{workspaceId}/broadcasts/{broadcastId}
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
namestring
minLength: 1 · maxLength: 200
mailbox_idstring
format: "uuid"
template_idstring
format: "uuid"
audienceobject
No additional properties
all_subscribedboolean
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
subject_variantsarray
maxItems: 8
Each itemstring
minLength: 1 · maxLength: 998
selected_subject_variantinteger
minimum: 0 · maximum: 7
expires_after_secondsinteger
Discard unsent recipients after this many seconds from the scheduled time.
minimum: 1 · maximum: 604800
content_overridesobject
Additional propertystring
maxLength: 20000
expected_versionintegerrequired
minimum: 1
Success response 200
Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
idstringrequired
format: "uuid"
product_idstringrequired
format: "uuid"
namestringrequired
mailbox_idstring
format: "uuid"
template_idstring | null
format: "uuid"
managed_content_idstring | null
format: "uuid"
managed_source_revision_idstring | null
format: "uuid"
managed_publication_idstring | null
format: "uuid"
managed_locales_snapshotarray
Each itemstring
localization_failure_policystring
expires_after_secondsinteger | null
statusstring
versionintegerrequired
subject_variantsarray
Each itemstring
selected_subject_variantinteger
content_overridesobject
Additional propertystring
audience_queryobject
Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.
all_subscribedboolean
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
audience_frozen_atstring | null
format: "date-time"
audience_recipient_countinteger | null
audience_snapshot_sha256string | null
audience_snapshot_campaign_versioninteger | null
scheduled_atstring | null
format: "date-time"
started_atstring | null
format: "date-time"
completed_atstring | null
format: "date-time"
created_atstring
format: "date-time"
updated_atstring
format: "date-time"
archived_atstring | null
format: "date-time"
statsobject
Additional propertyAny value
broadcast_idstringrequired
format: "uuid"
sender_addressstring | nullrequired
sending_blockerunspecifiedrequired
anyOf 1object
codestringrequired
messagestringrequired
anyOf 2null
designunspecifiedrequired
anyOf 1object
idstring
format: "uuid"
product_idstring
format: "uuid"
namestring
subjectstring
body_textstring
contentobject
Additional propertystring
Further nesting omitted
slotsarray
Each itemobject
Further nesting omitted
statusstring
enum: "active", "archived"
originstring
enum: "person", "agent", "starter", "import"
created_by_actor_idstring | null
campaign_idstring | null
format: "uuid"
message_kindstring
starter_idstring | null
starter_versioninteger | null
versioninteger
created_atstring
format: "date-time"
updated_atstring
format: "date-time"
body_html_urlstring
format: "uri"
body_htmlstring | null
body_html_b2_keystring | null
anyOf 2null
managed_contentunspecifiedrequired
anyOf 1unspecified
allOf 1object
idstringrequired
format: "uuid"
Further nesting omitted
namestringrequired
Further nesting omitted
versionintegerrequired
minimum: 1
Further nesting omitted
review_requiredbooleanrequired
Further nesting omitted
draft_revision_idstring | null
format: "uuid"
Further nesting omitted
submitted_revision_idstring | null
format: "uuid"
Further nesting omitted
approved_revision_idstring | null
format: "uuid"
Further nesting omitted
published_revision_idstring | null
format: "uuid"
Further nesting omitted
published_publication_idstring | null
format: "uuid"
Further nesting omitted
source_revisionobject
Further nesting omitted
translationsarray
Further nesting omitted
translation_jobsarray
Further nesting omitted
allOf 2object
source_revisionunspecifiedrequired
Further nesting omitted
published_source_revisionunspecifiedrequired
Further nesting omitted
translationsarrayrequired
Further nesting omitted
anyOf 2null
subjectstring | nullrequired
sender_mailboxunspecifiedrequired
anyOf 1object
idstringrequired
format: "uuid"
addressstringrequired
display_namestringrequired
statusstringrequired
anyOf 2null
reply_mailboxunspecifiedrequired
anyOf 1object
idstringrequired
format: "uuid"
addressstringrequired
display_namestringrequired
statusstringrequired
anyOf 2null
design_versioninteger | nullrequired
audienceobjectrequired
Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.
all_subscribedboolean
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
allOf 2object
replayedbooleanrequired
curl example
curl --request PATCH --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/broadcasts/{broadcastId}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
--header 'Idempotency-Key: example' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "example",
"mailbox_id": "00000000-0000-4000-8000-000000000001",
"template_id": "00000000-0000-4000-8000-000000000001",
"audience": {
"all_subscribed": true,
"contact_ids": [
"00000000-0000-4000-8000-000000000001"
],
"list_ids": [
"00000000-0000-4000-8000-000000000001"
],
"segment_ids": [
"00000000-0000-4000-8000-000000000001"
]
},
"subject_variants": [
"example"
],
"selected_subject_variant": 0,
"expires_after_seconds": 1,
"content_overrides": {},
"expected_version": 1
}'
POST/v1/workspaces/{workspaceId}/broadcasts/audience-preview
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 200
Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
countintegerrequired
missing_consent_evidence_countintegerrequired
samplearrayrequired
Each itemobject
idstringrequired
format: "uuid"
emailstringrequired
display_namestring | nullrequired
attributesobjectrequired
Additional propertyAny value
excludedobjectrequired
suppressedintegerrequired
not_subscribedintegerrequired
missing_recipient_hashintegerrequired
missing_consent_evidenceintegerrequired
allOf 2object
eligible_countintegerrequired
required_variablesarrayrequired
Each itemstring
missing_personalization_fieldsarrayrequired
Each itemobject
variablestringrequired
missingCountintegerrequired
sampleEmailsarrayrequired
Each itemstring
Further nesting omitted
audienceobjectrequired
Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.
all_subscribedboolean
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/broadcasts/audience-preview' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
--header 'Content-Type: application/json' \
--data-raw '{
"audience": {
"all_subscribed": true,
"contact_ids": [
"00000000-0000-4000-8000-000000000001"
],
"list_ids": [
"00000000-0000-4000-8000-000000000001"
],
"segment_ids": [
"00000000-0000-4000-8000-000000000001"
]
},
"template_id": "00000000-0000-4000-8000-000000000001",
"subject": "example",
"content_overrides": {}
}'
POST/v1/workspaces/{workspaceId}/broadcasts/{broadcastId}/audience-preview
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
audienceobject
No additional properties
all_subscribedboolean
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
Success response 200
Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
countintegerrequired
missing_consent_evidence_countintegerrequired
samplearrayrequired
Each itemobject
idstringrequired
format: "uuid"
emailstringrequired
display_namestring | nullrequired
attributesobjectrequired
Additional propertyAny value
excludedobjectrequired
suppressedintegerrequired
not_subscribedintegerrequired
missing_recipient_hashintegerrequired
missing_consent_evidenceintegerrequired
allOf 2object
eligible_countintegerrequired
required_variablesarrayrequired
Each itemstring
missing_personalization_fieldsarrayrequired
Each itemobject
variablestringrequired
missingCountintegerrequired
sampleEmailsarrayrequired
Each itemstring
Further nesting omitted
audienceobjectrequired
Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.
all_subscribedboolean
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/broadcasts/{broadcastId}/audience-preview' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
--header 'Content-Type: application/json' \
--data-raw '{
"audience": {
"all_subscribed": true,
"contact_ids": [
"00000000-0000-4000-8000-000000000001"
],
"list_ids": [
"00000000-0000-4000-8000-000000000001"
],
"segment_ids": [
"00000000-0000-4000-8000-000000000001"
]
}
}'
GET/v1/workspaces/{workspaceId}/broadcasts/{broadcastId}/readiness
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.
application/json
valueobject
dataobjectrequired
broadcast_idstringrequired
format: "uuid"
product_idstringrequired
format: "uuid"
readybooleanrequired
blockersarrayrequired
Each itemobject
codestringrequired
messagestringrequired
audienceunspecifiedrequired
allOf 1object
countintegerrequired
missing_consent_evidence_countintegerrequired
samplearrayrequired
Each itemobject
idstringrequired
format: "uuid"
Further nesting omitted
emailstringrequired
Further nesting omitted
display_namestring | nullrequired
Further nesting omitted
attributesobjectrequired
Further nesting omitted
excludedobjectrequired
suppressedintegerrequired
not_subscribedintegerrequired
missing_recipient_hashintegerrequired
missing_consent_evidenceintegerrequired
allOf 2object
eligible_countintegerrequired
required_variablesarrayrequired
Each itemstring
missing_personalization_fieldsarrayrequired
Each itemobject
variablestringrequired
Further nesting omitted
missingCountintegerrequired
Further nesting omitted
sampleEmailsarrayrequired
Further nesting omitted
audienceobjectrequired
Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.
all_subscribedboolean
contact_idsarray
maxItems: 10000
Each itemstring
format: "uuid"
Further nesting omitted
list_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
Further nesting omitted
segment_idsarray
maxItems: 1000
Each itemstring
format: "uuid"
Further nesting omitted
campaign_versionintegerrequired
design_versioninteger | nullrequired
languagesunspecifiedrequired
anyOf 1object
requestedarrayrequired
Each itemobject
localestringrequired
Further nesting omitted
countintegerrequired
Further nesting omitted
pending_localesarrayrequired
Each itemstring
fallback_localesarrayrequired
Each itemstring
anyOf 2null
sendingobjectrequired
route_kindstring | null
sending_stream_idstring | null
format: "uuid"
banger_send_limitinteger | string | null
daily_send_limitinteger | string | null
usedinteger | string | null
daily_usedinteger | string | null
delivery_paceunspecifiedrequired
anyOf 1object
daysintegerrequired
daily_limitintegerrequired
messagestringrequired
anyOf 2null
approval_requirementsobjectrequired
dispositionstringrequired
enum: "automatic", "human_required"
recipient_countinteger | nullrequired
reasonsarrayrequired
Each itemstring
checksarrayrequired
Each itemstring
footerobjectrequired
identity_presentbooleanrequired
address_presentbooleanrequired
checks_are_advisorybooleanrequired
const: true
next_actionstringrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/broadcasts/{broadcastId}/readiness' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
GET/v1/workspaces/{workspaceId}/broadcasts/{broadcastId}/recipients
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.
application/json
valueobject
dataarrayrequired
Each itemobject
contact_idstring | null
format: "uuid"
recipient_emailstring
recipient_namestring | null
recipient_hashstring
statusstring
dispatch_statusstring
command_idstring | null
format: "uuid"
error_codestring | null
created_atstring
format: "date-time"
updated_atstring
format: "date-time"
delivery_statestring | null
provider_message_keystring | null
last_event_atstring | null
format: "date-time"
first_delivered_atstring | null
format: "date-time"
first_opened_atstring | null
format: "date-time"
first_clicked_atstring | null
format: "date-time"
first_human_likely_opened_atstring | null
format: "date-time"
first_human_likely_clicked_atstring | null
format: "date-time"
first_replied_atstring | null
format: "date-time"
machine_open_countinteger
machine_click_countinteger
privacy_proxy_open_countinteger
unknown_open_countinteger
unknown_click_countinteger
first_unsubscribed_atstring | null
format: "date-time"
pageobjectrequired
next_cursorstring
has_morebooleanrequired
delivery_semanticsstringrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/broadcasts/{broadcastId}/recipients?cursor=example&limit=1&status=pending' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
GET/v1/workspaces/{workspaceId}/broadcasts/{broadcastId}/timeline
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.
application/json
valueobject
dataarrayrequired
Each itemobject
idstringrequired
typestringrequired
occurred_atstringrequired
format: "date-time"
actor_idstring | nullrequired
detailobjectrequired
Additional propertyAny value
delivery_semanticsstringrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/broadcasts/{broadcastId}/timeline' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
Journeys
GET/v1/workspaces/{workspaceId}/journeys
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Product Journeys.
application/json
valueobject
dataarrayrequired
Each itemunspecified
allOf 1object
No additional properties
namestringrequired
minLength: 1 · maxLength: 200
descriptionstring
maxLength: 2000
mailbox_idstring
format: "uuid"
from_local_partstring
maxLength: 64 · pattern: "^[a-z0-9][a-z0-9._+-]{0,62}$"
triggerobjectrequired
kindstringrequired
enum: "manual", "contact_created", "audience_joined", "event", "schedule", "inbound_email", "api"
connection_idstring
format: "uuid"
configobject
eventstring
Further nesting omitted
once_per_personboolean
Each person enters once. Set false to let people re-enter after they finish.
default: true
Further nesting omitted
reentry_daysinteger
With once_per_person false, days after a person's last entry before they may enter again.
minimum: 1 · maximum: 365
Further nesting omitted
Additional propertyAny value
conditionsarray
Each itemobject
Further nesting omitted
audienceobject
Additional propertyAny value
goalobject
No additional properties
kindstringrequired
enum: "none", "event", "reply", "conversion"
connection_idstring
format: "uuid"
configobjectrequired
Additional propertyAny value
exitobject
No additional properties
on_replyboolean
default: true
on_unsubscribeboolean
default: true
on_suppressionboolean
default: true
eventstring
maxLength: 200
approval_modestring
enum: "policy", "required"
apiobject
keystring
maxLength: 100
content_modestring
enum: "code", "managed"
identitystring
maxLength: 300
managed_contentobject
Create-only shortcut: atomically save a source-managed email draft and a Journey whose email step references it. Missing target languages queue for free translation; this does not publish or activate the Journey.
No additional properties
source_localestring
Canonical BCP 47 source locale; inherits product settings when omitted.
configured_localesarray
Source plus target locales; omitted source is added by the server.
maxItems: 100 · uniqueItems: true
Each itemstring
Further nesting omitted
fallback_localestring
layout_idstring
Selected reusable layout; the server snapshots its published revision into this content revision.
format: "uuid"
localization_policyobject
No additional properties
manual_reviewboolean
default: false
Further nesting omitted
journey_translationobject
Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.
No additional properties
Further nesting omitted
sourceobjectrequired
No additional properties
subjectstringrequired
minLength: 1 · maxLength: 100000
Further nesting omitted
preheaderstring
maxLength: 100000
Further nesting omitted
body_textstring
Accepted for source compatibility; rendered plain text derives from final HTML.
maxLength: 100000
Further nesting omitted
body_htmlstringrequired
minLength: 1 · maxLength: 100000
Further nesting omitted
layoutstring
Must contain one {{ content }} slot.
maxLength: 100000
Further nesting omitted
variantsobject
Optional source versions. Every version is translated automatically in the same revision.
Further nesting omitted
variablesobjectrequired
Further nesting omitted
samplesobject
Named sample value sets for preview and source validation.
Additional propertyobject
Further nesting omitted
translationsobject
Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.
Additional propertyobject
Further nesting omitted
stepsarrayrequired
maxItems: 100
Each itemobject
No additional properties
idstring
format: "uuid"
Further nesting omitted
positioninteger
minimum: 1 · maximum: 100
Further nesting omitted
kindstringrequired
enum: "email", "wait", "condition", "action", "split"
Further nesting omitted
namestringrequired
minLength: 1 · maxLength: 200
Further nesting omitted
managed_contentobject
Typed source contract and draft/published revision identity for an email step.
Further nesting omitted
configobjectrequired
Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.
Further nesting omitted
armsarray
minItems: 2 · maxItems: 4
Further nesting omitted
allOf 2object
idstringrequired
format: "uuid"
statusstringrequired
enum: "draft", "discovered", "active", "paused", "archived"
api_keystring | null
content_modestring | null
enum: "code", "managed", null
identitystring | null
identity_aliasesarray
Each itemstring
samplesarray
Each itemobject
Additional propertyAny value
versionintegerrequired
minimum: 1
statsobjectrequired
Additional propertyAny value
stepStatsarray
Each itemobject
Additional propertyAny value
armStatsarray
Each itemobject
Additional propertyAny value
healthobjectrequired
Additional propertyAny value
indicatorobjectrequired
Additional propertyAny value
sparklinearrayrequired
Each itemnumber
activated_atstring | null
format: "date-time"
updated_atstring
format: "date-time"
last_activity_atstring | null
format: "date-time"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys?status=draft&trigger_kind=example&testing=1&q=example' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/journeys
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
namestringrequired
minLength: 1 · maxLength: 200
descriptionstring
maxLength: 2000
mailbox_idstring
format: "uuid"
from_local_partstring
maxLength: 64 · pattern: "^[a-z0-9][a-z0-9._+-]{0,62}$"
triggerobjectrequired
kindstringrequired
enum: "manual", "contact_created", "audience_joined", "event", "schedule", "inbound_email", "api"
connection_idstring
format: "uuid"
configobject
eventstring
once_per_personboolean
Each person enters once. Set false to let people re-enter after they finish.
default: true
reentry_daysinteger
With once_per_person false, days after a person's last entry before they may enter again.
minimum: 1 · maximum: 365
Additional propertyAny value
conditionsarray
Each itemobject
Additional propertyAny value
audienceobject
Additional propertyAny value
goalobject
No additional properties
kindstringrequired
enum: "none", "event", "reply", "conversion"
connection_idstring
format: "uuid"
configobjectrequired
Additional propertyAny value
exitobject
No additional properties
on_replyboolean
default: true
on_unsubscribeboolean
default: true
on_suppressionboolean
default: true
eventstring
maxLength: 200
approval_modestring
enum: "policy", "required"
apiobject
keystring
maxLength: 100
content_modestring
enum: "code", "managed"
identitystring
maxLength: 300
managed_contentobject
Create-only shortcut: atomically save a source-managed email draft and a Journey whose email step references it. Missing target languages queue for free translation; this does not publish or activate the Journey.
No additional properties
source_localestring
Canonical BCP 47 source locale; inherits product settings when omitted.
configured_localesarray
Source plus target locales; omitted source is added by the server.
maxItems: 100 · uniqueItems: true
Each itemstring
fallback_localestring
layout_idstring
Selected reusable layout; the server snapshots its published revision into this content revision.
format: "uuid"
localization_policyobject
No additional properties
manual_reviewboolean
default: false
journey_translationobject
Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.
No additional properties
modestringrequired
enum: "fallback", "wait"
max_wait_secondsinteger
minimum: 60 · maximum: 86400
on_timeoutstring
enum: "fallback", "discard"
sourceobjectrequired
No additional properties
subjectstringrequired
minLength: 1 · maxLength: 100000
preheaderstring
maxLength: 100000
body_textstring
Accepted for source compatibility; rendered plain text derives from final HTML.
maxLength: 100000
body_htmlstringrequired
minLength: 1 · maxLength: 100000
layoutstring
Must contain one {{ content }} slot.
maxLength: 100000
variantsobject
Optional source versions. Every version is translated automatically in the same revision.
Additional propertyobject
No additional properties
subjectstringrequired
minLength: 1 · maxLength: 100000
preheaderstring
maxLength: 100000
body_htmlstringrequired
minLength: 1 · maxLength: 100000
body_textstring
maxLength: 100000
layoutstring
maxLength: 100000
variablesobjectrequired
Additional propertyunspecified
Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.
oneOf 1object
No additional properties
typestringrequired
enum: "string", "text", "url", "image_url", "html", "date", "datetime", "number", "boolean", "money"
Further nesting omitted
requiredboolean
Further nesting omitted
descriptionstring
maxLength: 2000
Further nesting omitted
defaultunspecified
Must match the field type.
Further nesting omitted
oneOf 2object
No additional properties
typeunspecifiedrequired
const: "object"
Further nesting omitted
requiredboolean
Further nesting omitted
descriptionstring
maxLength: 2000
Further nesting omitted
defaultobject
Further nesting omitted
propertiesobjectrequired
Further nesting omitted
oneOf 3object
No additional properties
typeunspecifiedrequired
const: "list"
Further nesting omitted
requiredboolean
Further nesting omitted
descriptionstring
maxLength: 2000
Further nesting omitted
defaultarray
Further nesting omitted
itemsunspecifiedrequired
Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.
Further nesting omitted
samplesobject
Named sample value sets for preview and source validation.
Additional propertyobject
Additional propertyAny value
translationsobject
Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.
Additional propertyobject
Additional propertystring
stepsarrayrequired
maxItems: 100
Each itemobject
No additional properties
idstring
format: "uuid"
positioninteger
minimum: 1 · maximum: 100
kindstringrequired
enum: "email", "wait", "condition", "action", "split"
namestringrequired
minLength: 1 · maxLength: 200
managed_contentobject
Typed source contract and draft/published revision identity for an email step.
idstring
format: "uuid"
versioninteger
draft_revision_idstring | null
format: "uuid"
published_revision_idstring | null
format: "uuid"
published_publication_idstring | null
format: "uuid"
source_revision_idstring | null
format: "uuid"
layout_revision_idstring | null
format: "uuid"
published_layout_revision_idstring | null
format: "uuid"
source_localestring | null
configured_localesarray
Each itemstring
variablesobject
Additional propertyAny value
published_variablesobject
Additional propertyAny value
configobjectrequired
Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.
Additional propertyAny value
armsarray
minItems: 2 · maxItems: 4
Each itemobject
No additional properties
keystringrequired
enum: "A", "B", "C", "D"
labelstringrequired
maxLength: 120
allocationnumberrequired
minimum: 0 · maximum: 100
stepsarrayrequired
Each itemobject
No additional properties
Further nesting omitted
Success response 201
Journey created.
application/json
valueobject
dataunspecified
allOf 1object
No additional properties
namestringrequired
minLength: 1 · maxLength: 200
descriptionstring
maxLength: 2000
mailbox_idstring
format: "uuid"
from_local_partstring
maxLength: 64 · pattern: "^[a-z0-9][a-z0-9._+-]{0,62}$"
triggerobjectrequired
kindstringrequired
enum: "manual", "contact_created", "audience_joined", "event", "schedule", "inbound_email", "api"
connection_idstring
format: "uuid"
configobject
eventstring
once_per_personboolean
Each person enters once. Set false to let people re-enter after they finish.
default: true
reentry_daysinteger
With once_per_person false, days after a person's last entry before they may enter again.
minimum: 1 · maximum: 365
Additional propertyAny value
conditionsarray
Each itemobject
Additional propertyAny value
audienceobject
Additional propertyAny value
goalobject
No additional properties
kindstringrequired
enum: "none", "event", "reply", "conversion"
connection_idstring
format: "uuid"
configobjectrequired
Additional propertyAny value
exitobject
No additional properties
on_replyboolean
default: true
on_unsubscribeboolean
default: true
on_suppressionboolean
default: true
eventstring
maxLength: 200
approval_modestring
enum: "policy", "required"
apiobject
keystring
maxLength: 100
content_modestring
enum: "code", "managed"
identitystring
maxLength: 300
managed_contentobject
Create-only shortcut: atomically save a source-managed email draft and a Journey whose email step references it. Missing target languages queue for free translation; this does not publish or activate the Journey.
No additional properties
source_localestring
Canonical BCP 47 source locale; inherits product settings when omitted.
configured_localesarray
Source plus target locales; omitted source is added by the server.
maxItems: 100 · uniqueItems: true
Each itemstring
fallback_localestring
layout_idstring
Selected reusable layout; the server snapshots its published revision into this content revision.
format: "uuid"
localization_policyobject
No additional properties
manual_reviewboolean
default: false
journey_translationobject
Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.
No additional properties
modestringrequired
enum: "fallback", "wait"
Further nesting omitted
max_wait_secondsinteger
minimum: 60 · maximum: 86400
Further nesting omitted
on_timeoutstring
enum: "fallback", "discard"
Further nesting omitted
sourceobjectrequired
No additional properties
subjectstringrequired
minLength: 1 · maxLength: 100000
preheaderstring
maxLength: 100000
body_textstring
Accepted for source compatibility; rendered plain text derives from final HTML.
maxLength: 100000
body_htmlstringrequired
minLength: 1 · maxLength: 100000
layoutstring
Must contain one {{ content }} slot.
maxLength: 100000
variantsobject
Optional source versions. Every version is translated automatically in the same revision.
Additional propertyobject
No additional properties
Further nesting omitted
variablesobjectrequired
Additional propertyunspecified
Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.
Further nesting omitted
samplesobject
Named sample value sets for preview and source validation.
Additional propertyobject
Additional propertyAny value
translationsobject
Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.
Additional propertyobject
Additional propertystring
Further nesting omitted
stepsarrayrequired
maxItems: 100
Each itemobject
No additional properties
idstring
format: "uuid"
positioninteger
minimum: 1 · maximum: 100
kindstringrequired
enum: "email", "wait", "condition", "action", "split"
namestringrequired
minLength: 1 · maxLength: 200
managed_contentobject
Typed source contract and draft/published revision identity for an email step.
idstring
format: "uuid"
Further nesting omitted
versioninteger
Further nesting omitted
draft_revision_idstring | null
format: "uuid"
Further nesting omitted
published_revision_idstring | null
format: "uuid"
Further nesting omitted
published_publication_idstring | null
format: "uuid"
Further nesting omitted
source_revision_idstring | null
format: "uuid"
Further nesting omitted
layout_revision_idstring | null
format: "uuid"
Further nesting omitted
published_layout_revision_idstring | null
format: "uuid"
Further nesting omitted
source_localestring | null
Further nesting omitted
configured_localesarray
Further nesting omitted
variablesobject
Further nesting omitted
published_variablesobject
Further nesting omitted
configobjectrequired
Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.
Additional propertyAny value
armsarray
minItems: 2 · maxItems: 4
Each itemobject
No additional properties
Further nesting omitted
allOf 2object
idstringrequired
format: "uuid"
statusstringrequired
enum: "draft", "discovered", "active", "paused", "archived"
api_keystring | null
content_modestring | null
enum: "code", "managed", null
identitystring | null
identity_aliasesarray
Each itemstring
samplesarray
Each itemobject
Additional propertyAny value
versionintegerrequired
minimum: 1
statsobjectrequired
Additional propertyAny value
stepStatsarray
Each itemobject
Additional propertyAny value
armStatsarray
Each itemobject
Additional propertyAny value
healthobjectrequired
Additional propertyAny value
indicatorobjectrequired
Additional propertyAny value
sparklinearrayrequired
Each itemnumber
activated_atstring | null
format: "date-time"
updated_atstring
format: "date-time"
last_activity_atstring | null
format: "date-time"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Idempotency-Key: examplexxxxxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "example",
"description": "example",
"mailbox_id": "00000000-0000-4000-8000-000000000001",
"from_local_part": "example",
"trigger": {
"kind": "manual",
"connection_id": "00000000-0000-4000-8000-000000000001",
"config": {
"event": "example",
"once_per_person": true,
"reentry_days": 1
},
"conditions": [
{}
]
},
"audience": {},
"goal": {
"kind": "none",
"connection_id": "00000000-0000-4000-8000-000000000001",
"config": {}
},
"exit": {
"on_reply": true,
"on_unsubscribe": true,
"on_suppression": true,
"event": "example"
},
"approval_mode": "policy",
"api": {
"key": "example",
"content_mode": "code",
"identity": "example"
},
"managed_content": {
"source_locale": "example",
"configured_locales": [
"example"
],
"fallback_locale": "example",
"layout_id": "00000000-0000-4000-8000-000000000001",
"localization_policy": {
"manual_review": false,
"journey_translation": {
"mode": "fallback",
"max_wait_seconds": 60,
"on_timeout": "fallback"
}
},
"source": {
"subject": "example",
"preheader": "example",
"body_text": "example",
"body_html": "example",
"layout": "example",
"variants": {},
"variables": {}
},
"samples": {},
"translations": {}
},
"steps": [
{
"id": "00000000-0000-4000-8000-000000000001",
"position": 1,
"kind": "email",
"name": "example",
"config": {},
"arms": [
{
"key": "A",
"label": "example",
"allocation": 0,
"steps": [
{
"id": null,
"position": null,
"kind": null,
"name": null,
"config": null,
"arms": null
}
]
}
]
}
]
}'
GET/v1/workspaces/{workspaceId}/journeys/{journeyId}
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Journey definition, enrollment activity, and tests.
application/json
valueobject
dataunspecified
allOf 1object
No additional properties
namestringrequired
minLength: 1 · maxLength: 200
descriptionstring
maxLength: 2000
mailbox_idstring
format: "uuid"
from_local_partstring
maxLength: 64 · pattern: "^[a-z0-9][a-z0-9._+-]{0,62}$"
triggerobjectrequired
kindstringrequired
enum: "manual", "contact_created", "audience_joined", "event", "schedule", "inbound_email", "api"
connection_idstring
format: "uuid"
configobject
eventstring
once_per_personboolean
Each person enters once. Set false to let people re-enter after they finish.
default: true
reentry_daysinteger
With once_per_person false, days after a person's last entry before they may enter again.
minimum: 1 · maximum: 365
Additional propertyAny value
conditionsarray
Each itemobject
Additional propertyAny value
audienceobject
Additional propertyAny value
goalobject
No additional properties
kindstringrequired
enum: "none", "event", "reply", "conversion"
connection_idstring
format: "uuid"
configobjectrequired
Additional propertyAny value
exitobject
No additional properties
on_replyboolean
default: true
on_unsubscribeboolean
default: true
on_suppressionboolean
default: true
eventstring
maxLength: 200
approval_modestring
enum: "policy", "required"
apiobject
keystring
maxLength: 100
content_modestring
enum: "code", "managed"
identitystring
maxLength: 300
managed_contentobject
Create-only shortcut: atomically save a source-managed email draft and a Journey whose email step references it. Missing target languages queue for free translation; this does not publish or activate the Journey.
No additional properties
source_localestring
Canonical BCP 47 source locale; inherits product settings when omitted.
configured_localesarray
Source plus target locales; omitted source is added by the server.
maxItems: 100 · uniqueItems: true
Each itemstring
fallback_localestring
layout_idstring
Selected reusable layout; the server snapshots its published revision into this content revision.
format: "uuid"
localization_policyobject
No additional properties
manual_reviewboolean
default: false
journey_translationobject
Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.
No additional properties
modestringrequired
enum: "fallback", "wait"
Further nesting omitted
max_wait_secondsinteger
minimum: 60 · maximum: 86400
Further nesting omitted
on_timeoutstring
enum: "fallback", "discard"
Further nesting omitted
sourceobjectrequired
No additional properties
subjectstringrequired
minLength: 1 · maxLength: 100000
preheaderstring
maxLength: 100000
body_textstring
Accepted for source compatibility; rendered plain text derives from final HTML.
maxLength: 100000
body_htmlstringrequired
minLength: 1 · maxLength: 100000
layoutstring
Must contain one {{ content }} slot.
maxLength: 100000
variantsobject
Optional source versions. Every version is translated automatically in the same revision.
Additional propertyobject
No additional properties
Further nesting omitted
variablesobjectrequired
Additional propertyunspecified
Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.
Further nesting omitted
samplesobject
Named sample value sets for preview and source validation.
Additional propertyobject
Additional propertyAny value
translationsobject
Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.
Additional propertyobject
Additional propertystring
Further nesting omitted
stepsarrayrequired
maxItems: 100
Each itemobject
No additional properties
idstring
format: "uuid"
positioninteger
minimum: 1 · maximum: 100
kindstringrequired
enum: "email", "wait", "condition", "action", "split"
namestringrequired
minLength: 1 · maxLength: 200
managed_contentobject
Typed source contract and draft/published revision identity for an email step.
idstring
format: "uuid"
Further nesting omitted
versioninteger
Further nesting omitted
draft_revision_idstring | null
format: "uuid"
Further nesting omitted
published_revision_idstring | null
format: "uuid"
Further nesting omitted
published_publication_idstring | null
format: "uuid"
Further nesting omitted
source_revision_idstring | null
format: "uuid"
Further nesting omitted
layout_revision_idstring | null
format: "uuid"
Further nesting omitted
published_layout_revision_idstring | null
format: "uuid"
Further nesting omitted
source_localestring | null
Further nesting omitted
configured_localesarray
Further nesting omitted
variablesobject
Further nesting omitted
published_variablesobject
Further nesting omitted
configobjectrequired
Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.
Additional propertyAny value
armsarray
minItems: 2 · maxItems: 4
Each itemobject
No additional properties
Further nesting omitted
allOf 2object
idstringrequired
format: "uuid"
statusstringrequired
enum: "draft", "discovered", "active", "paused", "archived"
api_keystring | null
content_modestring | null
enum: "code", "managed", null
identitystring | null
identity_aliasesarray
Each itemstring
samplesarray
Each itemobject
Additional propertyAny value
versionintegerrequired
minimum: 1
statsobjectrequired
Additional propertyAny value
stepStatsarray
Each itemobject
Additional propertyAny value
armStatsarray
Each itemobject
Additional propertyAny value
healthobjectrequired
Additional propertyAny value
indicatorobjectrequired
Additional propertyAny value
sparklinearrayrequired
Each itemnumber
activated_atstring | null
format: "date-time"
updated_atstring
format: "date-time"
last_activity_atstring | null
format: "date-time"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}' \
--header "Authorization: Bearer $BANGER_API_KEY"
PUT/v1/workspaces/{workspaceId}/journeys/{journeyId}
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
namestringrequired
minLength: 1 · maxLength: 200
descriptionstring
maxLength: 2000
mailbox_idstring
format: "uuid"
from_local_partstring
maxLength: 64 · pattern: "^[a-z0-9][a-z0-9._+-]{0,62}$"
triggerobjectrequired
kindstringrequired
enum: "manual", "contact_created", "audience_joined", "event", "schedule", "inbound_email", "api"
connection_idstring
format: "uuid"
configobject
eventstring
once_per_personboolean
Each person enters once. Set false to let people re-enter after they finish.
default: true
reentry_daysinteger
With once_per_person false, days after a person's last entry before they may enter again.
minimum: 1 · maximum: 365
Additional propertyAny value
conditionsarray
Each itemobject
Additional propertyAny value
audienceobject
Additional propertyAny value
goalobject
No additional properties
kindstringrequired
enum: "none", "event", "reply", "conversion"
connection_idstring
format: "uuid"
configobjectrequired
Additional propertyAny value
exitobject
No additional properties
on_replyboolean
default: true
on_unsubscribeboolean
default: true
on_suppressionboolean
default: true
eventstring
maxLength: 200
approval_modestring
enum: "policy", "required"
apiobject
keystring
maxLength: 100
content_modestring
enum: "code", "managed"
identitystring
maxLength: 300
managed_contentobject
Create-only shortcut: atomically save a source-managed email draft and a Journey whose email step references it. Missing target languages queue for free translation; this does not publish or activate the Journey.
No additional properties
source_localestring
Canonical BCP 47 source locale; inherits product settings when omitted.
configured_localesarray
Source plus target locales; omitted source is added by the server.
maxItems: 100 · uniqueItems: true
Each itemstring
fallback_localestring
layout_idstring
Selected reusable layout; the server snapshots its published revision into this content revision.
format: "uuid"
localization_policyobject
No additional properties
manual_reviewboolean
default: false
journey_translationobject
Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.
No additional properties
modestringrequired
enum: "fallback", "wait"
max_wait_secondsinteger
minimum: 60 · maximum: 86400
on_timeoutstring
enum: "fallback", "discard"
sourceobjectrequired
No additional properties
subjectstringrequired
minLength: 1 · maxLength: 100000
preheaderstring
maxLength: 100000
body_textstring
Accepted for source compatibility; rendered plain text derives from final HTML.
maxLength: 100000
body_htmlstringrequired
minLength: 1 · maxLength: 100000
layoutstring
Must contain one {{ content }} slot.
maxLength: 100000
variantsobject
Optional source versions. Every version is translated automatically in the same revision.
Additional propertyobject
No additional properties
subjectstringrequired
minLength: 1 · maxLength: 100000
preheaderstring
maxLength: 100000
body_htmlstringrequired
minLength: 1 · maxLength: 100000
body_textstring
maxLength: 100000
layoutstring
maxLength: 100000
variablesobjectrequired
Additional propertyunspecified
Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.
oneOf 1object
No additional properties
typestringrequired
enum: "string", "text", "url", "image_url", "html", "date", "datetime", "number", "boolean", "money"
Further nesting omitted
requiredboolean
Further nesting omitted
descriptionstring
maxLength: 2000
Further nesting omitted
defaultunspecified
Must match the field type.
Further nesting omitted
oneOf 2object
No additional properties
typeunspecifiedrequired
const: "object"
Further nesting omitted
requiredboolean
Further nesting omitted
descriptionstring
maxLength: 2000
Further nesting omitted
defaultobject
Further nesting omitted
propertiesobjectrequired
Further nesting omitted
oneOf 3object
No additional properties
typeunspecifiedrequired
const: "list"
Further nesting omitted
requiredboolean
Further nesting omitted
descriptionstring
maxLength: 2000
Further nesting omitted
defaultarray
Further nesting omitted
itemsunspecifiedrequired
Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.
Further nesting omitted
samplesobject
Named sample value sets for preview and source validation.
Additional propertyobject
Additional propertyAny value
translationsobject
Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.
Additional propertyobject
Additional propertystring
stepsarrayrequired
maxItems: 100
Each itemobject
No additional properties
idstring
format: "uuid"
positioninteger
minimum: 1 · maximum: 100
kindstringrequired
enum: "email", "wait", "condition", "action", "split"
namestringrequired
minLength: 1 · maxLength: 200
managed_contentobject
Typed source contract and draft/published revision identity for an email step.
idstring
format: "uuid"
versioninteger
draft_revision_idstring | null
format: "uuid"
published_revision_idstring | null
format: "uuid"
published_publication_idstring | null
format: "uuid"
source_revision_idstring | null
format: "uuid"
layout_revision_idstring | null
format: "uuid"
published_layout_revision_idstring | null
format: "uuid"
source_localestring | null
configured_localesarray
Each itemstring
variablesobject
Additional propertyAny value
published_variablesobject
Additional propertyAny value
configobjectrequired
Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.
Additional propertyAny value
armsarray
minItems: 2 · maxItems: 4
Each itemobject
No additional properties
keystringrequired
enum: "A", "B", "C", "D"
labelstringrequired
maxLength: 120
allocationnumberrequired
minimum: 0 · maximum: 100
stepsarrayrequired
Each itemobject
No additional properties
Further nesting omitted
Success response 200
Journey updated.
application/json
valueobject
dataunspecified
allOf 1object
No additional properties
namestringrequired
minLength: 1 · maxLength: 200
descriptionstring
maxLength: 2000
mailbox_idstring
format: "uuid"
from_local_partstring
maxLength: 64 · pattern: "^[a-z0-9][a-z0-9._+-]{0,62}$"
triggerobjectrequired
kindstringrequired
enum: "manual", "contact_created", "audience_joined", "event", "schedule", "inbound_email", "api"
connection_idstring
format: "uuid"
configobject
eventstring
once_per_personboolean
Each person enters once. Set false to let people re-enter after they finish.
default: true
reentry_daysinteger
With once_per_person false, days after a person's last entry before they may enter again.
minimum: 1 · maximum: 365
Additional propertyAny value
conditionsarray
Each itemobject
Additional propertyAny value
audienceobject
Additional propertyAny value
goalobject
No additional properties
kindstringrequired
enum: "none", "event", "reply", "conversion"
connection_idstring
format: "uuid"
configobjectrequired
Additional propertyAny value
exitobject
No additional properties
on_replyboolean
default: true
on_unsubscribeboolean
default: true
on_suppressionboolean
default: true
eventstring
maxLength: 200
approval_modestring
enum: "policy", "required"
apiobject
keystring
maxLength: 100
content_modestring
enum: "code", "managed"
identitystring
maxLength: 300
managed_contentobject
Create-only shortcut: atomically save a source-managed email draft and a Journey whose email step references it. Missing target languages queue for free translation; this does not publish or activate the Journey.
No additional properties
source_localestring
Canonical BCP 47 source locale; inherits product settings when omitted.
configured_localesarray
Source plus target locales; omitted source is added by the server.
maxItems: 100 · uniqueItems: true
Each itemstring
fallback_localestring
layout_idstring
Selected reusable layout; the server snapshots its published revision into this content revision.
format: "uuid"
localization_policyobject
No additional properties
manual_reviewboolean
default: false
journey_translationobject
Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.
No additional properties
modestringrequired
enum: "fallback", "wait"
Further nesting omitted
max_wait_secondsinteger
minimum: 60 · maximum: 86400
Further nesting omitted
on_timeoutstring
enum: "fallback", "discard"
Further nesting omitted
sourceobjectrequired
No additional properties
subjectstringrequired
minLength: 1 · maxLength: 100000
preheaderstring
maxLength: 100000
body_textstring
Accepted for source compatibility; rendered plain text derives from final HTML.
maxLength: 100000
body_htmlstringrequired
minLength: 1 · maxLength: 100000
layoutstring
Must contain one {{ content }} slot.
maxLength: 100000
variantsobject
Optional source versions. Every version is translated automatically in the same revision.
Additional propertyobject
No additional properties
Further nesting omitted
variablesobjectrequired
Additional propertyunspecified
Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.
Further nesting omitted
samplesobject
Named sample value sets for preview and source validation.
Additional propertyobject
Additional propertyAny value
translationsobject
Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.
Additional propertyobject
Additional propertystring
Further nesting omitted
stepsarrayrequired
maxItems: 100
Each itemobject
No additional properties
idstring
format: "uuid"
positioninteger
minimum: 1 · maximum: 100
kindstringrequired
enum: "email", "wait", "condition", "action", "split"
namestringrequired
minLength: 1 · maxLength: 200
managed_contentobject
Typed source contract and draft/published revision identity for an email step.
idstring
format: "uuid"
Further nesting omitted
versioninteger
Further nesting omitted
draft_revision_idstring | null
format: "uuid"
Further nesting omitted
published_revision_idstring | null
format: "uuid"
Further nesting omitted
published_publication_idstring | null
format: "uuid"
Further nesting omitted
source_revision_idstring | null
format: "uuid"
Further nesting omitted
layout_revision_idstring | null
format: "uuid"
Further nesting omitted
published_layout_revision_idstring | null
format: "uuid"
Further nesting omitted
source_localestring | null
Further nesting omitted
configured_localesarray
Further nesting omitted
variablesobject
Further nesting omitted
published_variablesobject
Further nesting omitted
configobjectrequired
Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.
Additional propertyAny value
armsarray
minItems: 2 · maxItems: 4
Each itemobject
No additional properties
Further nesting omitted
allOf 2object
idstringrequired
format: "uuid"
statusstringrequired
enum: "draft", "discovered", "active", "paused", "archived"
api_keystring | null
content_modestring | null
enum: "code", "managed", null
identitystring | null
identity_aliasesarray
Each itemstring
samplesarray
Each itemobject
Additional propertyAny value
versionintegerrequired
minimum: 1
statsobjectrequired
Additional propertyAny value
stepStatsarray
Each itemobject
Additional propertyAny value
armStatsarray
Each itemobject
Additional propertyAny value
healthobjectrequired
Additional propertyAny value
indicatorobjectrequired
Additional propertyAny value
sparklinearrayrequired
Each itemnumber
activated_atstring | null
format: "date-time"
updated_atstring
format: "date-time"
last_activity_atstring | null
format: "date-time"
curl example
curl --request PUT --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "example",
"description": "example",
"mailbox_id": "00000000-0000-4000-8000-000000000001",
"from_local_part": "example",
"trigger": {
"kind": "manual",
"connection_id": "00000000-0000-4000-8000-000000000001",
"config": {
"event": "example",
"once_per_person": true,
"reentry_days": 1
},
"conditions": [
{}
]
},
"audience": {},
"goal": {
"kind": "none",
"connection_id": "00000000-0000-4000-8000-000000000001",
"config": {}
},
"exit": {
"on_reply": true,
"on_unsubscribe": true,
"on_suppression": true,
"event": "example"
},
"approval_mode": "policy",
"api": {
"key": "example",
"content_mode": "code",
"identity": "example"
},
"managed_content": {
"source_locale": "example",
"configured_locales": [
"example"
],
"fallback_locale": "example",
"layout_id": "00000000-0000-4000-8000-000000000001",
"localization_policy": {
"manual_review": false,
"journey_translation": {
"mode": "fallback",
"max_wait_seconds": 60,
"on_timeout": "fallback"
}
},
"source": {
"subject": "example",
"preheader": "example",
"body_text": "example",
"body_html": "example",
"layout": "example",
"variants": {},
"variables": {}
},
"samples": {},
"translations": {}
},
"steps": [
{
"id": "00000000-0000-4000-8000-000000000001",
"position": 1,
"kind": "email",
"name": "example",
"config": {},
"arms": [
{
"key": "A",
"label": "example",
"allocation": 0,
"steps": [
{
"id": null,
"position": null,
"kind": null,
"name": null,
"config": null,
"arms": null
}
]
}
]
}
]
}'
PATCH/v1/workspaces/{workspaceId}/journeys/{journeyId}
Supports name, description, mailbox_id, from_local_part, trigger, audience, goal, exit, approval_mode, api, and steps. Trigger, goal, api, and exit objects merge one level; steps replace the supplied tree. Include expected_version to reject a stale edit.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
expected_versioninteger
minimum: 1
namestring
descriptionstring
mailbox_idstring
format: "uuid"
from_local_partstring
triggerobject
Additional propertyAny value
audienceobject
Additional propertyAny value
goalobject
Additional propertyAny value
exitobject
Additional propertyAny value
approval_modestring
enum: "policy", "required"
apiobject
Additional propertyAny value
stepsarray
Each itemobject
No additional properties
idstring
format: "uuid"
positioninteger
minimum: 1 · maximum: 100
kindstringrequired
enum: "email", "wait", "condition", "action", "split"
namestringrequired
minLength: 1 · maxLength: 200
managed_contentobject
Typed source contract and draft/published revision identity for an email step.
idstring
format: "uuid"
versioninteger
draft_revision_idstring | null
format: "uuid"
published_revision_idstring | null
format: "uuid"
published_publication_idstring | null
format: "uuid"
source_revision_idstring | null
format: "uuid"
layout_revision_idstring | null
format: "uuid"
published_layout_revision_idstring | null
format: "uuid"
source_localestring | null
configured_localesarray
Each itemstring
variablesobject
Additional propertyAny value
published_variablesobject
Additional propertyAny value
configobjectrequired
Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.
Additional propertyAny value
armsarray
minItems: 2 · maxItems: 4
Each itemobject
No additional properties
keystringrequired
enum: "A", "B", "C", "D"
labelstringrequired
maxLength: 120
allocationnumberrequired
minimum: 0 · maximum: 100
stepsarrayrequired
Each itemobject
No additional properties
Further nesting omitted
Success response 200
Journey updated.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
No additional properties
namestringrequired
minLength: 1 · maxLength: 200
descriptionstring
maxLength: 2000
mailbox_idstring
format: "uuid"
from_local_partstring
maxLength: 64 · pattern: "^[a-z0-9][a-z0-9._+-]{0,62}$"
triggerobjectrequired
kindstringrequired
enum: "manual", "contact_created", "audience_joined", "event", "schedule", "inbound_email", "api"
connection_idstring
format: "uuid"
configobject
eventstring
once_per_personboolean
Each person enters once. Set false to let people re-enter after they finish.
default: true
reentry_daysinteger
With once_per_person false, days after a person's last entry before they may enter again.
minimum: 1 · maximum: 365
Additional propertyAny value
conditionsarray
Each itemobject
Additional propertyAny value
audienceobject
Additional propertyAny value
goalobject
No additional properties
kindstringrequired
enum: "none", "event", "reply", "conversion"
connection_idstring
format: "uuid"
configobjectrequired
Additional propertyAny value
exitobject
No additional properties
on_replyboolean
default: true
on_unsubscribeboolean
default: true
on_suppressionboolean
default: true
eventstring
maxLength: 200
approval_modestring
enum: "policy", "required"
apiobject
keystring
maxLength: 100
content_modestring
enum: "code", "managed"
identitystring
maxLength: 300
managed_contentobject
Create-only shortcut: atomically save a source-managed email draft and a Journey whose email step references it. Missing target languages queue for free translation; this does not publish or activate the Journey.
No additional properties
source_localestring
Canonical BCP 47 source locale; inherits product settings when omitted.
configured_localesarray
Source plus target locales; omitted source is added by the server.
maxItems: 100 · uniqueItems: true
Each itemstring
fallback_localestring
layout_idstring
Selected reusable layout; the server snapshots its published revision into this content revision.
format: "uuid"
localization_policyobject
No additional properties
manual_reviewboolean
default: false
journey_translationobject
Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.
No additional properties
modestringrequired
enum: "fallback", "wait"
Further nesting omitted
max_wait_secondsinteger
minimum: 60 · maximum: 86400
Further nesting omitted
on_timeoutstring
enum: "fallback", "discard"
Further nesting omitted
sourceobjectrequired
No additional properties
subjectstringrequired
minLength: 1 · maxLength: 100000
preheaderstring
maxLength: 100000
body_textstring
Accepted for source compatibility; rendered plain text derives from final HTML.
maxLength: 100000
body_htmlstringrequired
minLength: 1 · maxLength: 100000
layoutstring
Must contain one {{ content }} slot.
maxLength: 100000
variantsobject
Optional source versions. Every version is translated automatically in the same revision.
Additional propertyobject
No additional properties
Further nesting omitted
variablesobjectrequired
Additional propertyunspecified
Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.
Further nesting omitted
samplesobject
Named sample value sets for preview and source validation.
Additional propertyobject
Additional propertyAny value
translationsobject
Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.
Additional propertyobject
Additional propertystring
Further nesting omitted
stepsarrayrequired
maxItems: 100
Each itemobject
No additional properties
idstring
format: "uuid"
positioninteger
minimum: 1 · maximum: 100
kindstringrequired
enum: "email", "wait", "condition", "action", "split"
namestringrequired
minLength: 1 · maxLength: 200
managed_contentobject
Typed source contract and draft/published revision identity for an email step.
idstring
format: "uuid"
Further nesting omitted
versioninteger
Further nesting omitted
draft_revision_idstring | null
format: "uuid"
Further nesting omitted
published_revision_idstring | null
format: "uuid"
Further nesting omitted
published_publication_idstring | null
format: "uuid"
Further nesting omitted
source_revision_idstring | null
format: "uuid"
Further nesting omitted
layout_revision_idstring | null
format: "uuid"
Further nesting omitted
published_layout_revision_idstring | null
format: "uuid"
Further nesting omitted
source_localestring | null
Further nesting omitted
configured_localesarray
Further nesting omitted
variablesobject
Further nesting omitted
published_variablesobject
Further nesting omitted
configobjectrequired
Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.
Additional propertyAny value
armsarray
minItems: 2 · maxItems: 4
Each itemobject
No additional properties
Further nesting omitted
allOf 2object
idstringrequired
format: "uuid"
statusstringrequired
enum: "draft", "discovered", "active", "paused", "archived"
api_keystring | null
content_modestring | null
enum: "code", "managed", null
identitystring | null
identity_aliasesarray
Each itemstring
samplesarray
Each itemobject
Additional propertyAny value
versionintegerrequired
minimum: 1
statsobjectrequired
Additional propertyAny value
stepStatsarray
Each itemobject
Additional propertyAny value
armStatsarray
Each itemobject
Additional propertyAny value
healthobjectrequired
Additional propertyAny value
indicatorobjectrequired
Additional propertyAny value
sparklinearrayrequired
Each itemnumber
activated_atstring | null
format: "date-time"
updated_atstring
format: "date-time"
last_activity_atstring | null
format: "date-time"
curl example
curl --request PATCH --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"expected_version": 1,
"name": "example",
"description": "example",
"mailbox_id": "00000000-0000-4000-8000-000000000001",
"from_local_part": "example",
"trigger": {},
"audience": {},
"goal": {},
"exit": {},
"approval_mode": "policy",
"api": {},
"steps": [
{
"id": "00000000-0000-4000-8000-000000000001",
"position": 1,
"kind": "email",
"name": "example",
"config": {},
"arms": [
{
"key": "A",
"label": "example",
"allocation": 0,
"steps": [
{
"id": null,
"position": null,
"kind": null,
"name": null,
"config": null,
"arms": null
}
]
}
]
}
]
}'
DELETE/v1/workspaces/{workspaceId}/journeys/{journeyId}
Removes the journey from the default list and stops active enrollments by archiving it. Sending history is retained.
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 204
Journey removed.
No response body.
curl example
curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/journeys/{journeyId}/convert-managed
One-way conversion. For a Journey with one email step, supply contract. For multiple emails, including split arms, supply step_contents with exactly one saved step_id and prepared HTML/Liquid contract per email. The conversion is atomic and changes the Journey to draft. Every new managed content revision receives its own governed publication review; no email is sent or published during conversion. Banger never imports or executes source code.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
expected_versionintegerrequired
minimum: 1
contractobject
No additional properties
source_localestring
Canonical BCP 47 source locale; inherits product settings when omitted.
configured_localesarray
Source plus target locales; omitted source is added by the server.
maxItems: 100 · uniqueItems: true
Each itemstring
fallback_localestring
layout_idstring
Selected reusable layout; the server snapshots its published revision into this content revision.
format: "uuid"
localization_policyobject
No additional properties
manual_reviewboolean
default: false
journey_translationobject
Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.
No additional properties
modestringrequired
enum: "fallback", "wait"
max_wait_secondsinteger
minimum: 60 · maximum: 86400
on_timeoutstring
enum: "fallback", "discard"
sourceobjectrequired
No additional properties
subjectstringrequired
minLength: 1 · maxLength: 100000
preheaderstring
maxLength: 100000
body_textstring
Accepted for source compatibility; rendered plain text derives from final HTML.
maxLength: 100000
body_htmlstringrequired
minLength: 1 · maxLength: 100000
layoutstring
Must contain one {{ content }} slot.
maxLength: 100000
variantsobject
Optional source versions. Every version is translated automatically in the same revision.
Additional propertyobject
No additional properties
subjectstringrequired
minLength: 1 · maxLength: 100000
preheaderstring
maxLength: 100000
body_htmlstringrequired
minLength: 1 · maxLength: 100000
body_textstring
maxLength: 100000
layoutstring
maxLength: 100000
variablesobjectrequired
Additional propertyunspecified
Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.
oneOf 1object
No additional properties
typestringrequired
enum: "string", "text", "url", "image_url", "html", "date", "datetime", "number", "boolean", "money"
Further nesting omitted
requiredboolean
Further nesting omitted
descriptionstring
maxLength: 2000
Further nesting omitted
defaultunspecified
Must match the field type.
Further nesting omitted
oneOf 2object
No additional properties
typeunspecifiedrequired
const: "object"
Further nesting omitted
requiredboolean
Further nesting omitted
descriptionstring
maxLength: 2000
Further nesting omitted
defaultobject
Further nesting omitted
propertiesobjectrequired
Further nesting omitted
oneOf 3object
No additional properties
typeunspecifiedrequired
const: "list"
Further nesting omitted
requiredboolean
Further nesting omitted
descriptionstring
maxLength: 2000
Further nesting omitted
defaultarray
Further nesting omitted
itemsunspecifiedrequired
Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.
Further nesting omitted
samplesobject
Named sample value sets for preview and source validation.
Additional propertyobject
Additional propertyAny value
translationsobject
Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.
Additional propertyobject
Additional propertystring
step_contentsarray
minItems: 1
Each itemobject
No additional properties
step_idstringrequired
format: "uuid"
contractobjectrequired
No additional properties
source_localestring
Canonical BCP 47 source locale; inherits product settings when omitted.
configured_localesarray
Source plus target locales; omitted source is added by the server.
maxItems: 100 · uniqueItems: true
Each itemstring
fallback_localestring
layout_idstring
Selected reusable layout; the server snapshots its published revision into this content revision.
format: "uuid"
localization_policyobject
No additional properties
manual_reviewboolean
default: false
journey_translationobject
Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.
No additional properties
modestringrequired
enum: "fallback", "wait"
Further nesting omitted
max_wait_secondsinteger
minimum: 60 · maximum: 86400
Further nesting omitted
on_timeoutstring
enum: "fallback", "discard"
Further nesting omitted
sourceobjectrequired
No additional properties
subjectstringrequired
minLength: 1 · maxLength: 100000
preheaderstring
maxLength: 100000
body_textstring
Accepted for source compatibility; rendered plain text derives from final HTML.
maxLength: 100000
body_htmlstringrequired
minLength: 1 · maxLength: 100000
layoutstring
Must contain one {{ content }} slot.
maxLength: 100000
variantsobject
Optional source versions. Every version is translated automatically in the same revision.
Additional propertyobject
No additional properties
Further nesting omitted
variablesobjectrequired
Additional propertyunspecified
Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.
Further nesting omitted
samplesobject
Named sample value sets for preview and source validation.
Additional propertyobject
Additional propertyAny value
translationsobject
Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.
Additional propertyobject
Additional propertystring
Further nesting omitted
oneOf 1unspecified
oneOf 2unspecified
Success response 200
Idempotent replay of the same conversion.
application/json
valueobject
dataobjectrequired
journey_idstringrequired
format: "uuid"
statusstringrequired
enum: "draft"
review_requiredbooleanrequired
const: true
managed_content_stepsarrayrequired
Each itemobject
step_idstringrequired
format: "uuid"
managed_content_idstringrequired
format: "uuid"
content_versionintegerrequired
source_revision_idstring | nullrequired
format: "uuid"
previewobjectrequired
subjectstringrequired
preheaderstring
htmlstringrequired
textstringrequired
localestringrequired
directionstringrequired
enum: "ltr", "rtl"
warningsarray
Each itemstring
Further nesting omitted
Additional propertyAny value
translation_jobsarrayrequired
Each itemstring
format: "uuid"
managed_content_idstring
format: "uuid"
content_versioninteger
source_revision_idstring | null
format: "uuid"
previewobject
subjectstringrequired
preheaderstring
htmlstringrequired
textstringrequired
localestringrequired
directionstringrequired
enum: "ltr", "rtl"
warningsarray
Each itemstring
Additional propertyAny value
replayedbooleanrequired
approvalsarrayrequired
Each itemobject
step_idstringrequired
format: "uuid"
approvalobjectrequired
idstringrequired
format: "uuid"
requested_by_actor_idstringrequired
action_kindstringrequired
summarystringrequired
capability_scopesarrayrequired
Each itemstring
Further nesting omitted
resource_scopeobjectrequired
Additional propertyarray
Further nesting omitted
payloadobjectrequired
Additional propertyAny value
payload_sha256stringrequired
pattern: "^[0-9a-f]{64}$"
statusstringrequired
enum: "pending", "approved", "rejected", "cancelled", "expired"
missedbooleanrequired
expires_atstringrequired
format: "date-time"
decided_by_actor_idstring | null
decision_reasonstring | null
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
decided_atstring | null
format: "date-time"
execution_job_idstring
format: "uuid"
reviewobject
No additional properties
dispositionstringrequired
enum: "automatic", "human_required"
Further nesting omitted
recipient_countinteger | nullrequired
minimum: 0
Further nesting omitted
reasonsarrayrequired
Further nesting omitted
checksarrayrequired
Further nesting omitted
approvalobject
idstringrequired
format: "uuid"
requested_by_actor_idstringrequired
action_kindstringrequired
summarystringrequired
capability_scopesarrayrequired
Each itemstring
resource_scopeobjectrequired
Additional propertyarray
Each itemstring
payloadobjectrequired
Additional propertyAny value
payload_sha256stringrequired
pattern: "^[0-9a-f]{64}$"
statusstringrequired
enum: "pending", "approved", "rejected", "cancelled", "expired"
missedbooleanrequired
expires_atstringrequired
format: "date-time"
decided_by_actor_idstring | null
decision_reasonstring | null
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
decided_atstring | null
format: "date-time"
execution_job_idstring
format: "uuid"
reviewobject
No additional properties
dispositionstringrequired
enum: "automatic", "human_required"
recipient_countinteger | nullrequired
minimum: 0
reasonsarrayrequired
Each itemstring
checksarrayrequired
Each itemstring
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}/convert-managed' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
--header 'Idempotency-Key: examplexxxxxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '"example"'
POST/v1/workspaces/{workspaceId}/journeys/{journeyId}/render
Specify step_id when the Journey has multiple email steps, including split branches. Uses the selected draft or published immutable content revision.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 200
Rendered subject, HTML, plain text, locale, revision identifiers, and extraction warnings.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
subjectstringrequired
preheaderstring
htmlstringrequired
textstringrequired
localestringrequired
directionstringrequired
enum: "ltr", "rtl"
warningsarray
Each itemstring
Additional propertyAny value
allOf 2object
source_revision_idstringrequired
format: "uuid"
layout_revision_idstring | nullrequired
format: "uuid"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}/render' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
--header 'Content-Type: application/json' \
--data-raw '{
"step_id": "00000000-0000-4000-8000-000000000001",
"content_state": "draft",
"locale": "example",
"timezone": "example",
"sample_set": "example",
"variables": {}
}'
POST/v1/workspaces/{workspaceId}/journeys/{journeyId}/simulate
Read-only simulation. Omit enrollment for an after-enrollment preview, or provide an explicit trigger scenario to check the current saved contact's eligibility. Present enrollment yields scope from_trigger and a first timeline entry of kind enrollment; ineligible recipients skip Journey steps while independent broadcast candidates continue. assume_active models hypothetical activation, not governance approval. Provider event receipt/deduplication, provider delivery and latency, historical audience state, schedule and inbound-email triggers are not simulated. A discovered API Journey uses its special onboarding upsert path; later delivery suppression is separate. An active API Journey checks its saved audience before the contact upsert; simulation models that order without writing. A suppressed API recipient can therefore have an eligible enrollment entry followed by exit/suppress, with no rendered send; pending broadcasts are cancelled.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
atstringrequired
format: "date-time"
enrollment_idstring
content_statestring
default: "draft" · enum: "draft", "published"
localestring
variablesobject
Additional propertyAny value
communication_historyarray
Previous sends or reservations for this simulated recipient.
maxItems: 10000
Each itemstring
format: "date-time"
contactobjectrequired
emailstringrequired
format: "email"
display_namestringrequired
attributesobjectrequired
Additional propertyAny value
enrollmentobject
Optional trigger attempt at the top-level at timestamp. Saved contacts use current subscription, suppression and audience membership. Hypothetical API/event contacts require explicit subscribed and suppressed=false state and an all_subscribed audience.
No additional properties
kindstringrequired
enum: "manual", "api", "contact_created", "audience_joined", "event"
eventstring
maxLength: 200
assume_activeboolean
default: false
contact_statusstring
enum: "subscribed", "unsubscribed"
suppressedboolean
eventsarray
maxItems: 1000
Each itemobject
atstringrequired
format: "date-time"
kindstringrequired
enum: "attributes", "reply", "unsubscribe", "suppress", "goal"
attributesobject
Additional propertyAny value
broadcastsarray
Saved scheduled broadcasts or explicit managed-content candidates evaluated on the same recipient timeline.
maxItems: 20
Each itemobject
No additional properties
idstring
maxLength: 100
atstring
format: "date-time"
expires_atstring
format: "date-time"
campaign_idstring
format: "uuid"
content_idstring
format: "uuid"
source_revision_idstring
format: "uuid"
localestring
variablesobject
Additional propertyAny value
oneOf 1unspecified
oneOf 2unspecified
Success response 200
Ordered timeline, rendered email details, scope and simulation warnings. Enrollment outcomes include eligible, eligible_assuming_activation, trigger_mismatch, event_mismatch, journey_not_active_or_reviewed, contact_unsubscribed, recipient_hash_missing, contact_suppressed, outside_journey_audience, already_enrolled, contact_predates_enrollment_scan, saved_contact_required, contact_state_unverified and audience_unverified. Details identify the trigger and contact-state source and may note that stored trigger conditions are not evaluated by the current runtime. Saved broadcast recipients already queued for dispatch produce already_queued; already_sent is reserved for an accepted send.
application/json
valueobject
dataobjectrequired
journey_idstringrequired
format: "uuid"
journey_versionintegerrequired
content_statestringrequired
enum: "draft", "published"
scopestringrequired
enum: "from_trigger", "after_enrollment"
communication_policy_versionintegerrequired
timelinearrayrequired
Each itemobject
atstringrequired
format: "date-time"
step_idstring
format: "uuid"
kindstringrequired
outcomestringrequired
detailsunspecified
Outcome-specific simulation evidence.
emailsarrayrequired
Each itemobject
step_idstring | nullrequired
format: "uuid"
namestringrequired
armobject
split_step_idstring
format: "uuid"
keystringrequired
labelstringrequired
sourcestringrequired
enum: "managed", "design", "inline", "empty"
statusstringrequired
enum: "rendered", "blocked"
subjectstring
previewstring
codestring
messagestring
warningsarrayrequired
Each itemstring
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}/simulate' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
--header 'Content-Type: application/json' \
--data-raw '{
"at": "2026-01-01T00:00:00Z",
"enrollment_id": "example",
"content_state": "draft",
"locale": "example",
"variables": {},
"communication_history": [
"2026-01-01T00:00:00Z"
],
"contact": {
"email": "person@example.com",
"display_name": "example",
"attributes": {}
},
"enrollment": {
"kind": "manual",
"event": "example",
"assume_active": false,
"contact_status": "subscribed",
"suppressed": true
},
"events": [
{
"at": "2026-01-01T00:00:00Z",
"kind": "attributes",
"attributes": {}
}
],
"broadcasts": [
"example"
]
}'
POST/v1/workspaces/{workspaceId}/journeys/{journeyId}/status
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 200
Journey status updated.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
No additional properties
namestringrequired
minLength: 1 · maxLength: 200
descriptionstring
maxLength: 2000
mailbox_idstring
format: "uuid"
from_local_partstring
maxLength: 64 · pattern: "^[a-z0-9][a-z0-9._+-]{0,62}$"
triggerobjectrequired
kindstringrequired
enum: "manual", "contact_created", "audience_joined", "event", "schedule", "inbound_email", "api"
connection_idstring
format: "uuid"
configobject
eventstring
once_per_personboolean
Each person enters once. Set false to let people re-enter after they finish.
default: true
reentry_daysinteger
With once_per_person false, days after a person's last entry before they may enter again.
minimum: 1 · maximum: 365
Additional propertyAny value
conditionsarray
Each itemobject
Additional propertyAny value
audienceobject
Additional propertyAny value
goalobject
No additional properties
kindstringrequired
enum: "none", "event", "reply", "conversion"
connection_idstring
format: "uuid"
configobjectrequired
Additional propertyAny value
exitobject
No additional properties
on_replyboolean
default: true
on_unsubscribeboolean
default: true
on_suppressionboolean
default: true
eventstring
maxLength: 200
approval_modestring
enum: "policy", "required"
apiobject
keystring
maxLength: 100
content_modestring
enum: "code", "managed"
identitystring
maxLength: 300
managed_contentobject
Create-only shortcut: atomically save a source-managed email draft and a Journey whose email step references it. Missing target languages queue for free translation; this does not publish or activate the Journey.
No additional properties
source_localestring
Canonical BCP 47 source locale; inherits product settings when omitted.
configured_localesarray
Source plus target locales; omitted source is added by the server.
maxItems: 100 · uniqueItems: true
Each itemstring
fallback_localestring
layout_idstring
Selected reusable layout; the server snapshots its published revision into this content revision.
format: "uuid"
localization_policyobject
No additional properties
manual_reviewboolean
default: false
journey_translationobject
Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.
No additional properties
modestringrequired
enum: "fallback", "wait"
Further nesting omitted
max_wait_secondsinteger
minimum: 60 · maximum: 86400
Further nesting omitted
on_timeoutstring
enum: "fallback", "discard"
Further nesting omitted
sourceobjectrequired
No additional properties
subjectstringrequired
minLength: 1 · maxLength: 100000
preheaderstring
maxLength: 100000
body_textstring
Accepted for source compatibility; rendered plain text derives from final HTML.
maxLength: 100000
body_htmlstringrequired
minLength: 1 · maxLength: 100000
layoutstring
Must contain one {{ content }} slot.
maxLength: 100000
variantsobject
Optional source versions. Every version is translated automatically in the same revision.
Additional propertyobject
No additional properties
Further nesting omitted
variablesobjectrequired
Additional propertyunspecified
Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.
Further nesting omitted
samplesobject
Named sample value sets for preview and source validation.
Additional propertyobject
Additional propertyAny value
translationsobject
Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.
Additional propertyobject
Additional propertystring
Further nesting omitted
stepsarrayrequired
maxItems: 100
Each itemobject
No additional properties
idstring
format: "uuid"
positioninteger
minimum: 1 · maximum: 100
kindstringrequired
enum: "email", "wait", "condition", "action", "split"
namestringrequired
minLength: 1 · maxLength: 200
managed_contentobject
Typed source contract and draft/published revision identity for an email step.
idstring
format: "uuid"
Further nesting omitted
versioninteger
Further nesting omitted
draft_revision_idstring | null
format: "uuid"
Further nesting omitted
published_revision_idstring | null
format: "uuid"
Further nesting omitted
published_publication_idstring | null
format: "uuid"
Further nesting omitted
source_revision_idstring | null
format: "uuid"
Further nesting omitted
layout_revision_idstring | null
format: "uuid"
Further nesting omitted
published_layout_revision_idstring | null
format: "uuid"
Further nesting omitted
source_localestring | null
Further nesting omitted
configured_localesarray
Further nesting omitted
variablesobject
Further nesting omitted
published_variablesobject
Further nesting omitted
configobjectrequired
Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.
Additional propertyAny value
armsarray
minItems: 2 · maxItems: 4
Each itemobject
No additional properties
Further nesting omitted
allOf 2object
idstringrequired
format: "uuid"
statusstringrequired
enum: "draft", "discovered", "active", "paused", "archived"
api_keystring | null
content_modestring | null
enum: "code", "managed", null
identitystring | null
identity_aliasesarray
Each itemstring
samplesarray
Each itemobject
Additional propertyAny value
versionintegerrequired
minimum: 1
statsobjectrequired
Additional propertyAny value
stepStatsarray
Each itemobject
Additional propertyAny value
armStatsarray
Each itemobject
Additional propertyAny value
healthobjectrequired
Additional propertyAny value
indicatorobjectrequired
Additional propertyAny value
sparklinearrayrequired
Each itemnumber
activated_atstring | null
format: "date-time"
updated_atstring
format: "date-time"
last_activity_atstring | null
format: "date-time"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}/status' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"status": "draft"
}'
POST/v1/workspaces/{workspaceId}/journeys/{journeyId}/preview
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Journey audience and readiness preview.
application/json
valueobject
dataobjectrequired
sequence_idstringrequired
format: "uuid"
recipient_countintegerrequired
sample_recipientsarrayrequired
Each itemobject
idstringrequired
format: "uuid"
emailstringrequired
display_namestring | nullrequired
stepsarrayrequired
Each itemobject
No additional properties
idstring
format: "uuid"
positioninteger
minimum: 1 · maximum: 100
kindstringrequired
enum: "email", "wait", "condition", "action", "split"
namestringrequired
minLength: 1 · maxLength: 200
managed_contentobject
Typed source contract and draft/published revision identity for an email step.
idstring
format: "uuid"
versioninteger
draft_revision_idstring | null
format: "uuid"
published_revision_idstring | null
format: "uuid"
published_publication_idstring | null
format: "uuid"
source_revision_idstring | null
format: "uuid"
layout_revision_idstring | null
format: "uuid"
published_layout_revision_idstring | null
format: "uuid"
source_localestring | null
configured_localesarray
Each itemstring
Further nesting omitted
variablesobject
Additional propertyAny value
published_variablesobject
Additional propertyAny value
configobjectrequired
Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.
Additional propertyAny value
armsarray
minItems: 2 · maxItems: 4
Each itemobject
No additional properties
keystringrequired
enum: "A", "B", "C", "D"
Further nesting omitted
labelstringrequired
maxLength: 120
Further nesting omitted
allocationnumberrequired
minimum: 0 · maximum: 100
Further nesting omitted
stepsarrayrequired
Further nesting omitted
readybooleanrequired
exit_configobjectrequired
No additional properties
on_replyboolean
default: true
on_unsubscribeboolean
default: true
on_suppressionboolean
default: true
eventstring
maxLength: 200
emailsarrayrequired
Each itemobject
step_idstring | nullrequired
format: "uuid"
namestringrequired
armobject
split_step_idstring
format: "uuid"
keystringrequired
labelstringrequired
sourcestringrequired
enum: "managed", "design", "inline", "empty"
template_idstring
format: "uuid"
managed_content_idstring
format: "uuid"
subjectstringrequired
previewstringrequired
blockersarrayrequired
Each itemobject
codestringrequired
Further nesting omitted
messagestringrequired
Further nesting omitted
blockersarrayrequired
Each itemobject
codestringrequired
messagestringrequired
step_idstring | nullrequired
format: "uuid"
step_namestringrequired
armstring
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}/preview' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/journeys/{journeyId}/enroll
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response
No success response is specified in the contract.
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}/enroll' \
--header "Authorization: Bearer $BANGER_API_KEY"
GET/v1/workspaces/{workspaceId}/journeys/{journeyId}/executions
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Journey step executions.
application/json
valueobject
dataarrayrequired
Each itemobject
enrollment_idstringrequired
format: "uuid"
step_idstringrequired
format: "uuid"
positionintegerrequired
kindstringrequired
namestringrequired
statusstringrequired
attempt_countintegerrequired
send_intent_idstring | nullrequired
format: "uuid"
error_codestring | nullrequired
started_atstring | nullrequired
format: "date-time"
completed_atstring | nullrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}/executions' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/journeys/{journeyKey}/send
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
expires_atstring
format: "date-time"
expires_after_secondsinteger
minimum: 1 · maximum: 604800
Additional propertyAny value
Success response 202
Journey email accepted.
application/json
valueobject
dataobjectrequired
action_kindstringrequired
enum: "transactional.send"
idstring
format: "uuid"
send_intent_idstring
format: "uuid"
provider_attempt_idstring
format: "uuid"
statusstringrequired
replayedboolean
journeyunspecifiedrequired
anyOf 1object
journey_idstringrequired
format: "uuid"
enrollment_idstringrequired
format: "uuid"
step_idstringrequired
format: "uuid"
step_positionintegerrequired
originstring
enum: "journey"
journey_identitystring
anyOf 2null
ignored_variablesarrayrequired
Each itemstring
scheduled_atstring
format: "date-time"
reasonstring
communication_reservation_idstring
format: "uuid"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyKey}/send' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Idempotency-Key: examplexxxxxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"expires_at": "2026-01-01T00:00:00Z",
"expires_after_seconds": 1
}'
POST/v1/workspaces/{workspaceId}/journeys/{journeyId}/claim
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
namestringrequired
minLength: 1 · maxLength: 200
mailbox_idstringrequired
format: "uuid"
delivery_classstringrequired
enum: "product", "broadcast"
content_modestringrequired
enum: "code", "managed"
template_idstring
format: "uuid"
from_sampleboolean
variablesarray
maxItems: 50
Each itemobject
literalstringrequired
minLength: 1 · maxLength: 10000
namestringrequired
pattern: "^[a-z][a-z0-9_]{0,63}$"
activateboolean
Success response 200
Discovered Journey claimed.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
No additional properties
namestringrequired
minLength: 1 · maxLength: 200
descriptionstring
maxLength: 2000
mailbox_idstring
format: "uuid"
from_local_partstring
maxLength: 64 · pattern: "^[a-z0-9][a-z0-9._+-]{0,62}$"
triggerobjectrequired
kindstringrequired
enum: "manual", "contact_created", "audience_joined", "event", "schedule", "inbound_email", "api"
connection_idstring
format: "uuid"
configobject
eventstring
once_per_personboolean
Each person enters once. Set false to let people re-enter after they finish.
default: true
reentry_daysinteger
With once_per_person false, days after a person's last entry before they may enter again.
minimum: 1 · maximum: 365
Additional propertyAny value
conditionsarray
Each itemobject
Additional propertyAny value
audienceobject
Additional propertyAny value
goalobject
No additional properties
kindstringrequired
enum: "none", "event", "reply", "conversion"
connection_idstring
format: "uuid"
configobjectrequired
Additional propertyAny value
exitobject
No additional properties
on_replyboolean
default: true
on_unsubscribeboolean
default: true
on_suppressionboolean
default: true
eventstring
maxLength: 200
approval_modestring
enum: "policy", "required"
apiobject
keystring
maxLength: 100
content_modestring
enum: "code", "managed"
identitystring
maxLength: 300
managed_contentobject
Create-only shortcut: atomically save a source-managed email draft and a Journey whose email step references it. Missing target languages queue for free translation; this does not publish or activate the Journey.
No additional properties
source_localestring
Canonical BCP 47 source locale; inherits product settings when omitted.
configured_localesarray
Source plus target locales; omitted source is added by the server.
maxItems: 100 · uniqueItems: true
Each itemstring
fallback_localestring
layout_idstring
Selected reusable layout; the server snapshots its published revision into this content revision.
format: "uuid"
localization_policyobject
No additional properties
manual_reviewboolean
default: false
journey_translationobject
Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.
No additional properties
modestringrequired
enum: "fallback", "wait"
Further nesting omitted
max_wait_secondsinteger
minimum: 60 · maximum: 86400
Further nesting omitted
on_timeoutstring
enum: "fallback", "discard"
Further nesting omitted
sourceobjectrequired
No additional properties
subjectstringrequired
minLength: 1 · maxLength: 100000
preheaderstring
maxLength: 100000
body_textstring
Accepted for source compatibility; rendered plain text derives from final HTML.
maxLength: 100000
body_htmlstringrequired
minLength: 1 · maxLength: 100000
layoutstring
Must contain one {{ content }} slot.
maxLength: 100000
variantsobject
Optional source versions. Every version is translated automatically in the same revision.
Additional propertyobject
No additional properties
Further nesting omitted
variablesobjectrequired
Additional propertyunspecified
Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.
Further nesting omitted
samplesobject
Named sample value sets for preview and source validation.
Additional propertyobject
Additional propertyAny value
translationsobject
Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.
Additional propertyobject
Additional propertystring
Further nesting omitted
stepsarrayrequired
maxItems: 100
Each itemobject
No additional properties
idstring
format: "uuid"
positioninteger
minimum: 1 · maximum: 100
kindstringrequired
enum: "email", "wait", "condition", "action", "split"
namestringrequired
minLength: 1 · maxLength: 200
managed_contentobject
Typed source contract and draft/published revision identity for an email step.
idstring
format: "uuid"
Further nesting omitted
versioninteger
Further nesting omitted
draft_revision_idstring | null
format: "uuid"
Further nesting omitted
published_revision_idstring | null
format: "uuid"
Further nesting omitted
published_publication_idstring | null
format: "uuid"
Further nesting omitted
source_revision_idstring | null
format: "uuid"
Further nesting omitted
layout_revision_idstring | null
format: "uuid"
Further nesting omitted
published_layout_revision_idstring | null
format: "uuid"
Further nesting omitted
source_localestring | null
Further nesting omitted
configured_localesarray
Further nesting omitted
variablesobject
Further nesting omitted
published_variablesobject
Further nesting omitted
configobjectrequired
Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.
Additional propertyAny value
armsarray
minItems: 2 · maxItems: 4
Each itemobject
No additional properties
Further nesting omitted
allOf 2object
idstringrequired
format: "uuid"
statusstringrequired
enum: "draft", "discovered", "active", "paused", "archived"
api_keystring | null
content_modestring | null
enum: "code", "managed", null
identitystring | null
identity_aliasesarray
Each itemstring
samplesarray
Each itemobject
Additional propertyAny value
versionintegerrequired
minimum: 1
statsobjectrequired
Additional propertyAny value
stepStatsarray
Each itemobject
Additional propertyAny value
armStatsarray
Each itemobject
Additional propertyAny value
healthobjectrequired
Additional propertyAny value
indicatorobjectrequired
Additional propertyAny value
sparklinearrayrequired
Each itemnumber
activated_atstring | null
format: "date-time"
updated_atstring
format: "date-time"
last_activity_atstring | null
format: "date-time"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}/claim' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "example",
"mailbox_id": "00000000-0000-4000-8000-000000000001",
"delivery_class": "product",
"content_mode": "code",
"template_id": "00000000-0000-4000-8000-000000000001",
"from_sample": true,
"variables": [
{
"literal": "example",
"name": "example"
}
],
"activate": true
}'
POST/v1/workspaces/{workspaceId}/journeys/{journeyId}/merge
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
loser_idstringrequired
format: "uuid"
Success response 200
Journeys merged.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
No additional properties
namestringrequired
minLength: 1 · maxLength: 200
descriptionstring
maxLength: 2000
mailbox_idstring
format: "uuid"
from_local_partstring
maxLength: 64 · pattern: "^[a-z0-9][a-z0-9._+-]{0,62}$"
triggerobjectrequired
kindstringrequired
enum: "manual", "contact_created", "audience_joined", "event", "schedule", "inbound_email", "api"
connection_idstring
format: "uuid"
configobject
eventstring
once_per_personboolean
Each person enters once. Set false to let people re-enter after they finish.
default: true
reentry_daysinteger
With once_per_person false, days after a person's last entry before they may enter again.
minimum: 1 · maximum: 365
Additional propertyAny value
conditionsarray
Each itemobject
Additional propertyAny value
audienceobject
Additional propertyAny value
goalobject
No additional properties
kindstringrequired
enum: "none", "event", "reply", "conversion"
connection_idstring
format: "uuid"
configobjectrequired
Additional propertyAny value
exitobject
No additional properties
on_replyboolean
default: true
on_unsubscribeboolean
default: true
on_suppressionboolean
default: true
eventstring
maxLength: 200
approval_modestring
enum: "policy", "required"
apiobject
keystring
maxLength: 100
content_modestring
enum: "code", "managed"
identitystring
maxLength: 300
managed_contentobject
Create-only shortcut: atomically save a source-managed email draft and a Journey whose email step references it. Missing target languages queue for free translation; this does not publish or activate the Journey.
No additional properties
source_localestring
Canonical BCP 47 source locale; inherits product settings when omitted.
configured_localesarray
Source plus target locales; omitted source is added by the server.
maxItems: 100 · uniqueItems: true
Each itemstring
fallback_localestring
layout_idstring
Selected reusable layout; the server snapshots its published revision into this content revision.
format: "uuid"
localization_policyobject
No additional properties
manual_reviewboolean
default: false
journey_translationobject
Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.
No additional properties
modestringrequired
enum: "fallback", "wait"
Further nesting omitted
max_wait_secondsinteger
minimum: 60 · maximum: 86400
Further nesting omitted
on_timeoutstring
enum: "fallback", "discard"
Further nesting omitted
sourceobjectrequired
No additional properties
subjectstringrequired
minLength: 1 · maxLength: 100000
preheaderstring
maxLength: 100000
body_textstring
Accepted for source compatibility; rendered plain text derives from final HTML.
maxLength: 100000
body_htmlstringrequired
minLength: 1 · maxLength: 100000
layoutstring
Must contain one {{ content }} slot.
maxLength: 100000
variantsobject
Optional source versions. Every version is translated automatically in the same revision.
Additional propertyobject
No additional properties
Further nesting omitted
variablesobjectrequired
Additional propertyunspecified
Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.
Further nesting omitted
samplesobject
Named sample value sets for preview and source validation.
Additional propertyobject
Additional propertyAny value
translationsobject
Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.
Additional propertyobject
Additional propertystring
Further nesting omitted
stepsarrayrequired
maxItems: 100
Each itemobject
No additional properties
idstring
format: "uuid"
positioninteger
minimum: 1 · maximum: 100
kindstringrequired
enum: "email", "wait", "condition", "action", "split"
namestringrequired
minLength: 1 · maxLength: 200
managed_contentobject
Typed source contract and draft/published revision identity for an email step.
idstring
format: "uuid"
Further nesting omitted
versioninteger
Further nesting omitted
draft_revision_idstring | null
format: "uuid"
Further nesting omitted
published_revision_idstring | null
format: "uuid"
Further nesting omitted
published_publication_idstring | null
format: "uuid"
Further nesting omitted
source_revision_idstring | null
format: "uuid"
Further nesting omitted
layout_revision_idstring | null
format: "uuid"
Further nesting omitted
published_layout_revision_idstring | null
format: "uuid"
Further nesting omitted
source_localestring | null
Further nesting omitted
configured_localesarray
Further nesting omitted
variablesobject
Further nesting omitted
published_variablesobject
Further nesting omitted
configobjectrequired
Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.
Additional propertyAny value
armsarray
minItems: 2 · maxItems: 4
Each itemobject
No additional properties
Further nesting omitted
allOf 2object
idstringrequired
format: "uuid"
statusstringrequired
enum: "draft", "discovered", "active", "paused", "archived"
api_keystring | null
content_modestring | null
enum: "code", "managed", null
identitystring | null
identity_aliasesarray
Each itemstring
samplesarray
Each itemobject
Additional propertyAny value
versionintegerrequired
minimum: 1
statsobjectrequired
Additional propertyAny value
stepStatsarray
Each itemobject
Additional propertyAny value
armStatsarray
Each itemobject
Additional propertyAny value
healthobjectrequired
Additional propertyAny value
indicatorobjectrequired
Additional propertyAny value
sparklinearrayrequired
Each itemnumber
activated_atstring | null
format: "date-time"
updated_atstring
format: "date-time"
last_activity_atstring | null
format: "date-time"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}/merge' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"loser_id": "00000000-0000-4000-8000-000000000001"
}'
POST/v1/workspaces/{workspaceId}/journeys/{journeyId}/splits/{stepId}/decide
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
arm_keystringrequired
Success response 200
Winning arm promoted.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
No additional properties
namestringrequired
minLength: 1 · maxLength: 200
descriptionstring
maxLength: 2000
mailbox_idstring
format: "uuid"
from_local_partstring
maxLength: 64 · pattern: "^[a-z0-9][a-z0-9._+-]{0,62}$"
triggerobjectrequired
kindstringrequired
enum: "manual", "contact_created", "audience_joined", "event", "schedule", "inbound_email", "api"
connection_idstring
format: "uuid"
configobject
eventstring
once_per_personboolean
Each person enters once. Set false to let people re-enter after they finish.
default: true
reentry_daysinteger
With once_per_person false, days after a person's last entry before they may enter again.
minimum: 1 · maximum: 365
Additional propertyAny value
conditionsarray
Each itemobject
Additional propertyAny value
audienceobject
Additional propertyAny value
goalobject
No additional properties
kindstringrequired
enum: "none", "event", "reply", "conversion"
connection_idstring
format: "uuid"
configobjectrequired
Additional propertyAny value
exitobject
No additional properties
on_replyboolean
default: true
on_unsubscribeboolean
default: true
on_suppressionboolean
default: true
eventstring
maxLength: 200
approval_modestring
enum: "policy", "required"
apiobject
keystring
maxLength: 100
content_modestring
enum: "code", "managed"
identitystring
maxLength: 300
managed_contentobject
Create-only shortcut: atomically save a source-managed email draft and a Journey whose email step references it. Missing target languages queue for free translation; this does not publish or activate the Journey.
No additional properties
source_localestring
Canonical BCP 47 source locale; inherits product settings when omitted.
configured_localesarray
Source plus target locales; omitted source is added by the server.
maxItems: 100 · uniqueItems: true
Each itemstring
fallback_localestring
layout_idstring
Selected reusable layout; the server snapshots its published revision into this content revision.
format: "uuid"
localization_policyobject
No additional properties
manual_reviewboolean
default: false
journey_translationobject
Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.
No additional properties
modestringrequired
enum: "fallback", "wait"
Further nesting omitted
max_wait_secondsinteger
minimum: 60 · maximum: 86400
Further nesting omitted
on_timeoutstring
enum: "fallback", "discard"
Further nesting omitted
sourceobjectrequired
No additional properties
subjectstringrequired
minLength: 1 · maxLength: 100000
preheaderstring
maxLength: 100000
body_textstring
Accepted for source compatibility; rendered plain text derives from final HTML.
maxLength: 100000
body_htmlstringrequired
minLength: 1 · maxLength: 100000
layoutstring
Must contain one {{ content }} slot.
maxLength: 100000
variantsobject
Optional source versions. Every version is translated automatically in the same revision.
Additional propertyobject
No additional properties
Further nesting omitted
variablesobjectrequired
Additional propertyunspecified
Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.
Further nesting omitted
samplesobject
Named sample value sets for preview and source validation.
Additional propertyobject
Additional propertyAny value
translationsobject
Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.
Additional propertyobject
Additional propertystring
Further nesting omitted
stepsarrayrequired
maxItems: 100
Each itemobject
No additional properties
idstring
format: "uuid"
positioninteger
minimum: 1 · maximum: 100
kindstringrequired
enum: "email", "wait", "condition", "action", "split"
namestringrequired
minLength: 1 · maxLength: 200
managed_contentobject
Typed source contract and draft/published revision identity for an email step.
idstring
format: "uuid"
Further nesting omitted
versioninteger
Further nesting omitted
draft_revision_idstring | null
format: "uuid"
Further nesting omitted
published_revision_idstring | null
format: "uuid"
Further nesting omitted
published_publication_idstring | null
format: "uuid"
Further nesting omitted
source_revision_idstring | null
format: "uuid"
Further nesting omitted
layout_revision_idstring | null
format: "uuid"
Further nesting omitted
published_layout_revision_idstring | null
format: "uuid"
Further nesting omitted
source_localestring | null
Further nesting omitted
configured_localesarray
Further nesting omitted
variablesobject
Further nesting omitted
published_variablesobject
Further nesting omitted
configobjectrequired
Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.
Additional propertyAny value
armsarray
minItems: 2 · maxItems: 4
Each itemobject
No additional properties
Further nesting omitted
allOf 2object
idstringrequired
format: "uuid"
statusstringrequired
enum: "draft", "discovered", "active", "paused", "archived"
api_keystring | null
content_modestring | null
enum: "code", "managed", null
identitystring | null
identity_aliasesarray
Each itemstring
samplesarray
Each itemobject
Additional propertyAny value
versionintegerrequired
minimum: 1
statsobjectrequired
Additional propertyAny value
stepStatsarray
Each itemobject
Additional propertyAny value
armStatsarray
Each itemobject
Additional propertyAny value
healthobjectrequired
Additional propertyAny value
indicatorobjectrequired
Additional propertyAny value
sparklinearrayrequired
Each itemnumber
activated_atstring | null
format: "date-time"
updated_atstring
format: "date-time"
last_activity_atstring | null
format: "date-time"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}/splits/{stepId}/decide' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"arm_key": "example"
}'
GET/v1/workspaces/{workspaceId}/journeys/{journeyId}/splits/recommend
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Recommended test arm count and decision time.
application/json
valueobject
dataobjectrequired
arms_maxintegerrequired
weekly_arrivalsintegerrequired
per_arm_eta_daysobjectrequired
Additional propertynumber
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}/splits/recommend?position=1' \
--header "Authorization: Bearer $BANGER_API_KEY"
Approvals
GET/v1/workspaces/{workspaceId}/approvals/{approvalId}/managed-layout-preview/{contentId}
Rebuilds from immutable revisions and verifies both source hashes against the approval snapshot. No locale override is accepted.
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Full hash-verified before and after subject, HTML, and plain text.
application/json
valueobject
dataobjectrequired
content_idstringrequired
format: "uuid"
sample_namestring | nullrequired
localestringrequired
old_source_hashstringrequired
new_source_hashstringrequired
beforeobjectrequired
subjectstringrequired
htmlstringrequired
textstringrequired
afterobjectrequired
subjectstringrequired
htmlstringrequired
textstringrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/approvals/{approvalId}/managed-layout-preview/{contentId}?sample=example' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
GET/v1/workspaces/{workspaceId}/approvals/{approvalId}/journey-preview
Emails render with sample personalization from the exact reviewed definition (saved designs by their immutable HTML key, pinned managed revisions), never the live Journey. Also names the audience lists, segments and trigger/goal connections the snapshot references.
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Rendered emails keyed by step position (arm steps as parent.arm.position), plus audience and connection names.
application/json
valueobject
dataobjectrequired
approval_idstringrequired
format: "uuid"
sequence_idstring | null
format: "uuid"
emailsarrayrequired
Each itemobject
keystringrequired
positionintegerrequired
parent_positioninteger | nullrequired
arm_keystring | nullrequired
sourcestringrequired
enum: "managed", "design", "inline", "empty"
subjectstringrequired
preview_textstringrequired
body_htmlstring
body_textstringrequired
publishedboolean
errorstring
listsarrayrequired
Each itemobject
idstringrequired
namestringrequired
member_countintegerrequired
segmentsarrayrequired
Each itemobject
idstringrequired
namestringrequired
connectionsarrayrequired
Each itemobject
idstringrequired
namestringrequired
image_assetsobjectrequired
Additional propertystring
sample_valuesbooleanrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/approvals/{approvalId}/journey-preview' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
GET/v1/workspaces/{workspaceId}/approvals
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Automatic and human review audit inbox for the workspace.
application/json
valueobject
dataarrayrequired
Each itemobject
idstringrequired
format: "uuid"
requested_by_actor_idstringrequired
action_kindstringrequired
summarystringrequired
capability_scopesarrayrequired
Each itemstring
resource_scopeobjectrequired
Additional propertyarray
Each itemstring
payloadobjectrequired
Additional propertyAny value
payload_sha256stringrequired
pattern: "^[0-9a-f]{64}$"
statusstringrequired
enum: "pending", "approved", "rejected", "cancelled", "expired"
missedbooleanrequired
expires_atstringrequired
format: "date-time"
decided_by_actor_idstring | null
decision_reasonstring | null
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
decided_atstring | null
format: "date-time"
execution_job_idstring
format: "uuid"
reviewobject
No additional properties
dispositionstringrequired
enum: "automatic", "human_required"
recipient_countinteger | nullrequired
minimum: 0
reasonsarrayrequired
Each itemstring
checksarrayrequired
Each itemstring
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/approvals?status=undecided' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/approvals
For canonical Banger actions, Banger derives exact scopes, applies the workspace review policy, records an immutable audit request, and automatically queues actions within the configured limit. To publish managed email source, use action_kind managed_email.publish and payload {content_id, expected_version}; Banger binds the source revision/hash and enforces human review when required. Generic approval kinds always remain pending and must provide summary, capabilities, and resources.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
action_kindstringrequired
minLength: 1 · maxLength: 100
summarystring
minLength: 1 · maxLength: 500
capabilitiesarray
minItems: 1 · maxItems: 50
Each itemstring
maxLength: 100
resourcesobject
Additional propertyarray
maxItems: 500
Each itemstring
maxLength: 200
payloadobjectrequired
Additional propertyAny value
expires_in_secondsinteger
minimum: 60 · maximum: 86400 · default: 3600
Success response 201
Governed request created; it may already be automatically approved and queued.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
requested_by_actor_idstringrequired
action_kindstringrequired
summarystringrequired
capability_scopesarrayrequired
Each itemstring
resource_scopeobjectrequired
Additional propertyarray
Each itemstring
payloadobjectrequired
Additional propertyAny value
payload_sha256stringrequired
pattern: "^[0-9a-f]{64}$"
statusstringrequired
enum: "pending", "approved", "rejected", "cancelled", "expired"
missedbooleanrequired
expires_atstringrequired
format: "date-time"
decided_by_actor_idstring | null
decision_reasonstring | null
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
decided_atstring | null
format: "date-time"
execution_job_idstring
format: "uuid"
reviewobject
No additional properties
dispositionstringrequired
enum: "automatic", "human_required"
recipient_countinteger | nullrequired
minimum: 0
reasonsarrayrequired
Each itemstring
checksarrayrequired
Each itemstring
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/approvals' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Idempotency-Key: examplexxxxxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"action_kind": "example",
"summary": "example",
"capabilities": [
"example"
],
"resources": {},
"payload": {},
"expires_in_seconds": 3600
}'
GET/v1/workspaces/{workspaceId}/approvals/count
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Product-scoped undecided approval counts.
application/json
valueobject
dataobjectrequired
No additional properties
pendingintegerrequired
minimum: 0
missedintegerrequired
minimum: 0
totalintegerrequired
minimum: 0
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/approvals/count' \
--header "Authorization: Bearer $BANGER_API_KEY"
GET/v1/workspaces/{workspaceId}/approvals/{approvalId}
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Exact approval request and bound action payload.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
requested_by_actor_idstringrequired
action_kindstringrequired
summarystringrequired
capability_scopesarrayrequired
Each itemstring
resource_scopeobjectrequired
Additional propertyarray
Each itemstring
payloadobjectrequired
Additional propertyAny value
payload_sha256stringrequired
pattern: "^[0-9a-f]{64}$"
statusstringrequired
enum: "pending", "approved", "rejected", "cancelled", "expired"
missedbooleanrequired
expires_atstringrequired
format: "date-time"
decided_by_actor_idstring | null
decision_reasonstring | null
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
decided_atstring | null
format: "date-time"
execution_job_idstring
format: "uuid"
reviewobject
No additional properties
dispositionstringrequired
enum: "automatic", "human_required"
recipient_countinteger | nullrequired
minimum: 0
reasonsarrayrequired
Each itemstring
checksarrayrequired
Each itemstring
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/approvals/{approvalId}' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/approvals/{approvalId}/decision
Human browser sessions only. Workspace API keys cannot decide approvals.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
decisionstringrequired
enum: "approved", "rejected"
reasonstring
maxLength: 500
expected_payload_sha256string
Hash of the exact approval payload displayed to the reviewer; a mismatch returns 409.
pattern: "^[a-f0-9]{64}$"
Success response 200
Approval decision recorded.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
requested_by_actor_idstringrequired
action_kindstringrequired
summarystringrequired
capability_scopesarrayrequired
Each itemstring
resource_scopeobjectrequired
Additional propertyarray
Each itemstring
payloadobjectrequired
Additional propertyAny value
payload_sha256stringrequired
pattern: "^[0-9a-f]{64}$"
statusstringrequired
enum: "pending", "approved", "rejected", "cancelled", "expired"
missedbooleanrequired
expires_atstringrequired
format: "date-time"
decided_by_actor_idstring | null
decision_reasonstring | null
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
decided_atstring | null
format: "date-time"
execution_job_idstring
format: "uuid"
reviewobject
No additional properties
dispositionstringrequired
enum: "automatic", "human_required"
recipient_countinteger | nullrequired
minimum: 0
reasonsarrayrequired
Each itemstring
checksarrayrequired
Each itemstring
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/approvals/{approvalId}/decision' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"decision": "approved",
"reason": "example",
"expected_payload_sha256": "example"
}'
POST/v1/workspaces/{workspaceId}/approvals/{approvalId}/cancel
Cancel a still-pending approval without executing it. Human browser sessions only.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
reasonstring
maxLength: 500
Success response 200
Approval cancelled and any waiting agent run resumed without the action.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
requested_by_actor_idstringrequired
action_kindstringrequired
summarystringrequired
capability_scopesarrayrequired
Each itemstring
resource_scopeobjectrequired
Additional propertyarray
Each itemstring
payloadobjectrequired
Additional propertyAny value
payload_sha256stringrequired
pattern: "^[0-9a-f]{64}$"
statusstringrequired
enum: "pending", "approved", "rejected", "cancelled", "expired"
missedbooleanrequired
expires_atstringrequired
format: "date-time"
decided_by_actor_idstring | null
decision_reasonstring | null
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
decided_atstring | null
format: "date-time"
execution_job_idstring
format: "uuid"
reviewobject
No additional properties
dispositionstringrequired
enum: "automatic", "human_required"
recipient_countinteger | nullrequired
minimum: 0
reasonsarrayrequired
Each itemstring
checksarrayrequired
Each itemstring
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/approvals/{approvalId}/cancel' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"reason": "example"
}'
POST/v1/workspaces/{workspaceId}/approvals/{approvalId}/dismiss
Dismiss an approval whose decision window was missed. Human browser sessions only.
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Missed approval dismissed and recorded as cancelled.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
requested_by_actor_idstringrequired
action_kindstringrequired
summarystringrequired
capability_scopesarrayrequired
Each itemstring
resource_scopeobjectrequired
Additional propertyarray
Each itemstring
payloadobjectrequired
Additional propertyAny value
payload_sha256stringrequired
pattern: "^[0-9a-f]{64}$"
statusstringrequired
enum: "pending", "approved", "rejected", "cancelled", "expired"
missedbooleanrequired
expires_atstringrequired
format: "date-time"
decided_by_actor_idstring | null
decision_reasonstring | null
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
decided_atstring | null
format: "date-time"
execution_job_idstring
format: "uuid"
reviewobject
No additional properties
dispositionstringrequired
enum: "automatic", "human_required"
recipient_countinteger | nullrequired
minimum: 0
reasonsarrayrequired
Each itemstring
checksarrayrequired
Each itemstring
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/approvals/{approvalId}/dismiss' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/approvals/{approvalId}/rerequest
Clone a missed approval with a fresh decision window and cancel the old request. Human browser sessions only.
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 201
Fresh approval request created.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
requested_by_actor_idstringrequired
action_kindstringrequired
summarystringrequired
capability_scopesarrayrequired
Each itemstring
resource_scopeobjectrequired
Additional propertyarray
Each itemstring
payloadobjectrequired
Additional propertyAny value
payload_sha256stringrequired
pattern: "^[0-9a-f]{64}$"
statusstringrequired
enum: "pending", "approved", "rejected", "cancelled", "expired"
missedbooleanrequired
expires_atstringrequired
format: "date-time"
decided_by_actor_idstring | null
decision_reasonstring | null
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
decided_atstring | null
format: "date-time"
execution_job_idstring
format: "uuid"
reviewobject
No additional properties
dispositionstringrequired
enum: "automatic", "human_required"
recipient_countinteger | nullrequired
minimum: 0
reasonsarrayrequired
Each itemstring
checksarrayrequired
Each itemstring
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/approvals/{approvalId}/rerequest' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/approvals/{approvalId}/revise
Replace a pending governed Banger action with a newly canonicalized approval. The previous request remains in history as cancelled.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 201
Replacement approval created for human review.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
requested_by_actor_idstringrequired
action_kindstringrequired
summarystringrequired
capability_scopesarrayrequired
Each itemstring
resource_scopeobjectrequired
Additional propertyarray
Each itemstring
payloadobjectrequired
Additional propertyAny value
payload_sha256stringrequired
pattern: "^[0-9a-f]{64}$"
statusstringrequired
enum: "pending", "approved", "rejected", "cancelled", "expired"
missedbooleanrequired
expires_atstringrequired
format: "date-time"
decided_by_actor_idstring | null
decision_reasonstring | null
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
decided_atstring | null
format: "date-time"
execution_job_idstring
format: "uuid"
reviewobject
No additional properties
dispositionstringrequired
enum: "automatic", "human_required"
recipient_countinteger | nullrequired
minimum: 0
reasonsarrayrequired
Each itemstring
checksarrayrequired
Each itemstring
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/approvals/{approvalId}/revise' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Idempotency-Key: examplexxxxxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"payload": {}
}'
Feedback
GET/v1/workspaces/{workspaceId}/feedback
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Feedback availability for the authenticated workspace.
application/json
valueobject
dataobject
availablebooleanrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/feedback' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/feedback
Creates one internal Linear issue and sends a Slack team alert. Retry an interrupted submission with the same submission_id.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
kindstringrequired
enum: "bug", "feedback", "feature"
titlestringrequired
minLength: 1 · maxLength: 160
descriptionstringrequired
minLength: 1 · maxLength: 10000
submission_idstringrequired
format: "uuid"
attachment_idsarray
Completed private uploads owned by this reporter and workspace. Unsubmitted uploads expire after 24 hours; files can belong to only one report.
maxItems: 5 · uniqueItems: true
Each itemstring
format: "uuid"
Success response 201
Linear issue and Slack alert completed, including an idempotent replay.
application/json
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/feedback' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'x-banger-product-id: 00000000-0000-4000-8000-000000000001' \
--header 'Content-Type: application/json' \
--data-raw '{
"kind": "bug",
"title": "example",
"description": "example",
"submission_id": "00000000-0000-4000-8000-000000000001",
"attachment_ids": [
"00000000-0000-4000-8000-000000000001"
]
}'
POST/v1/workspaces/{workspaceId}/feedback/attachments
Binary uploads support up to 25 MiB. JSON base64 uploads support up to 2 MiB. Reuse attachment_id when retrying the same file. Requires automation:execute for API keys.
Authentication: Bearer workspace API key.
Parameters
Request body required
image/png
valuestring
format: "binary"
image/jpeg
valuestring
format: "binary"
image/gif
valuestring
format: "binary"
image/webp
valuestring
format: "binary"
video/mp4
valuestring
format: "binary"
video/webm
valuestring
format: "binary"
video/quicktime
valuestring
format: "binary"
application/json
valueobject
attachment_idstringrequired
format: "uuid"
filenamestringrequired
minLength: 1 · maxLength: 200
mime_typestringrequired
enum: "image/png", "image/jpeg", "image/gif", "image/webp", "video/mp4", "video/webm", "video/quicktime"
base64stringrequired
minLength: 4 · maxLength: 2796204
Success response 200
Existing completed attachment.
application/json
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/feedback/attachments?attachment_id=00000000-0000-4000-8000-000000000001' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'x-banger-filename: example' \
--header 'Content-Type: application/json' \
--data-raw '{
"attachment_id": "00000000-0000-4000-8000-000000000001",
"filename": "example",
"mime_type": "image/png",
"base64": "example"
}'
POST/v1/workspaces/{workspaceId}/feedback/attachments/prepare
Returns a temporary signed PUT URL and required upload headers. Send file bytes with those headers, without Banger credentials, then complete the upload. Do not upload directly from browsers; use the authenticated binary proxy. Up to 30 uploads and 250 MiB per reporter per day.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
attachment_idstringrequired
format: "uuid"
filenamestringrequired
minLength: 1 · maxLength: 200
mime_typestringrequired
enum: "image/png", "image/jpeg", "image/gif", "image/webp", "video/mp4", "video/webm", "video/quicktime"
size_bytesintegerrequired
minimum: 1 · maximum: 26214400
Success response 201
data contains attachment_id, status, and upload with signed url, method PUT, and headers when uploading. If ready, no upload is needed.
application/json
valueobject
dataobjectrequired
attachment_idstringrequired
format: "uuid"
filenamestringrequired
mime_typestringrequired
size_bytesintegerrequired
statusstringrequired
enum: "ready", "uploading"
uploadobject
urlstringrequired
methodstringrequired
enum: "PUT"
headersobjectrequired
Additional propertystring
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/feedback/attachments/prepare' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"attachment_id": "00000000-0000-4000-8000-000000000001",
"filename": "example",
"mime_type": "image/png",
"size_bytes": 1
}'
POST/v1/workspaces/{workspaceId}/feedback/attachments/{attachmentId}/complete
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
data contains attachment_id and status ready. Completion is idempotent.
application/json
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/feedback/attachments/{attachmentId}/complete' \
--header "Authorization: Bearer $BANGER_API_KEY"
Managed content
GET/v1/workspaces/{workspaceId}/managed-content
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Product content inventory and optional next cursor.
application/json
valueobject
dataobjectrequired
itemsarrayrequired
Each itemobject
idstringrequired
format: "uuid"
namestringrequired
versionintegerrequired
minimum: 1
review_requiredbooleanrequired
draft_revision_idstring | null
format: "uuid"
submitted_revision_idstring | null
format: "uuid"
approved_revision_idstring | null
format: "uuid"
published_revision_idstring | null
format: "uuid"
published_publication_idstring | null
format: "uuid"
source_revisionobject
Additional propertyAny value
translationsarray
Each itemobject
Additional propertyAny value
translation_jobsarray
Each itemobject
Additional propertyAny value
next_cursorstring | nullrequired
format: "uuid"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/managed-content?limit=50&cursor=00000000-0000-4000-8000-000000000001' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
POST/v1/workspaces/{workspaceId}/managed-content
Does not send or publish. Translation preparation has no per-language charge.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
namestringrequired
minLength: 1 · maxLength: 200
contractobjectrequired
No additional properties
source_localestring
Canonical BCP 47 source locale; inherits product settings when omitted.
configured_localesarray
Source plus target locales; omitted source is added by the server.
maxItems: 100 · uniqueItems: true
Each itemstring
fallback_localestring
layout_idstring
Selected reusable layout; the server snapshots its published revision into this content revision.
format: "uuid"
localization_policyobject
No additional properties
manual_reviewboolean
default: false
journey_translationobject
Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.
No additional properties
modestringrequired
enum: "fallback", "wait"
max_wait_secondsinteger
minimum: 60 · maximum: 86400
on_timeoutstring
enum: "fallback", "discard"
sourceobjectrequired
No additional properties
subjectstringrequired
minLength: 1 · maxLength: 100000
preheaderstring
maxLength: 100000
body_textstring
Accepted for source compatibility; rendered plain text derives from final HTML.
maxLength: 100000
body_htmlstringrequired
minLength: 1 · maxLength: 100000
layoutstring
Must contain one {{ content }} slot.
maxLength: 100000
variantsobject
Optional source versions. Every version is translated automatically in the same revision.
Additional propertyobject
No additional properties
subjectstringrequired
minLength: 1 · maxLength: 100000
preheaderstring
maxLength: 100000
body_htmlstringrequired
minLength: 1 · maxLength: 100000
body_textstring
maxLength: 100000
layoutstring
maxLength: 100000
variablesobjectrequired
Additional propertyunspecified
Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.
oneOf 1object
No additional properties
typestringrequired
enum: "string", "text", "url", "image_url", "html", "date", "datetime", "number", "boolean", "money"
Further nesting omitted
requiredboolean
Further nesting omitted
descriptionstring
maxLength: 2000
Further nesting omitted
defaultunspecified
Must match the field type.
Further nesting omitted
oneOf 2object
No additional properties
typeunspecifiedrequired
const: "object"
Further nesting omitted
requiredboolean
Further nesting omitted
descriptionstring
maxLength: 2000
Further nesting omitted
defaultobject
Further nesting omitted
propertiesobjectrequired
Further nesting omitted
oneOf 3object
No additional properties
typeunspecifiedrequired
const: "list"
Further nesting omitted
requiredboolean
Further nesting omitted
descriptionstring
maxLength: 2000
Further nesting omitted
defaultarray
Further nesting omitted
itemsunspecifiedrequired
Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.
Further nesting omitted
samplesobject
Named sample value sets for preview and source validation.
Additional propertyobject
Additional propertyAny value
translationsobject
Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.
Additional propertyobject
Additional propertystring
Success response 201
Draft source and queued translation jobs.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
namestringrequired
versionintegerrequired
minimum: 1
review_requiredbooleanrequired
draft_revision_idstring | null
format: "uuid"
submitted_revision_idstring | null
format: "uuid"
approved_revision_idstring | null
format: "uuid"
published_revision_idstring | null
format: "uuid"
published_publication_idstring | null
format: "uuid"
source_revisionobject
Additional propertyAny value
translationsarray
Each itemobject
Additional propertyAny value
translation_jobsarray
Each itemobject
Additional propertyAny value
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/managed-content' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
--header 'Idempotency-Key: example' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "example",
"contract": {
"source_locale": "example",
"configured_locales": [
"example"
],
"fallback_locale": "example",
"layout_id": "00000000-0000-4000-8000-000000000001",
"localization_policy": {
"manual_review": false,
"journey_translation": {
"mode": "fallback",
"max_wait_seconds": 60,
"on_timeout": "fallback"
}
},
"source": {
"subject": "example",
"preheader": "example",
"body_text": "example",
"body_html": "example",
"layout": "example",
"variants": {},
"variables": {}
},
"samples": {},
"translations": {}
}
}'
GET/v1/workspaces/{workspaceId}/managed-content/{contentId}
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Current content state.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
idstringrequired
format: "uuid"
namestringrequired
versionintegerrequired
minimum: 1
review_requiredbooleanrequired
draft_revision_idstring | null
format: "uuid"
submitted_revision_idstring | null
format: "uuid"
approved_revision_idstring | null
format: "uuid"
published_revision_idstring | null
format: "uuid"
published_publication_idstring | null
format: "uuid"
source_revisionobject
Additional propertyAny value
translationsarray
Each itemobject
Additional propertyAny value
translation_jobsarray
Each itemobject
Additional propertyAny value
allOf 2object
source_revisionobjectrequired
idstringrequired
format: "uuid"
content_idstringrequired
format: "uuid"
revisionintegerrequired
source_localestringrequired
configured_localesarrayrequired
Each itemstring
fallback_localestring | nullrequired
localization_policyobjectrequired
No additional properties
manual_reviewboolean
default: false
journey_translationobject
Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.
No additional properties
modestringrequired
enum: "fallback", "wait"
Further nesting omitted
max_wait_secondsinteger
minimum: 60 · maximum: 86400
Further nesting omitted
on_timeoutstring
enum: "fallback", "discard"
Further nesting omitted
sourceobjectrequired
No additional properties
subjectstringrequired
minLength: 1 · maxLength: 100000
preheaderstring
maxLength: 100000
body_textstring
Accepted for source compatibility; rendered plain text derives from final HTML.
maxLength: 100000
body_htmlstringrequired
minLength: 1 · maxLength: 100000
layoutstring
Must contain one {{ content }} slot.
maxLength: 100000
variantsobject
Optional source versions. Every version is translated automatically in the same revision.
Additional propertyobject
No additional properties
Further nesting omitted
variablesobjectrequired
Additional propertyunspecified
Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.
Further nesting omitted
source_messagesobjectrequired
Additional propertystring
layout_idstring | nullrequired
format: "uuid"
layout_revision_idstring | nullrequired
format: "uuid"
samplesobjectrequired
Additional propertyobject
Additional propertyAny value
restored_from_revision_idstring | nullrequired
format: "uuid"
translationsarrayrequired
Each itemunspecified
allOf 1object
source_revision_idstringrequired
format: "uuid"
Further nesting omitted
localestringrequired
Further nesting omitted
stringsobjectrequired
Further nesting omitted
provenancestringrequired
enum: "supplied", "generated", "reviewed"
Further nesting omitted
statusstringrequired
enum: "ready", "needs_review"
Further nesting omitted
allOf 2object
strings_sha256stringrequired
Further nesting omitted
translation_jobsarrayrequired
Each itemobject
idstringrequired
format: "uuid"
source_revision_idstringrequired
format: "uuid"
localestringrequired
statusstringrequired
attempt_countintegerrequired
error_codestring | nullrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/managed-content/{contentId}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
PATCH/v1/workspaces/{workspaceId}/managed-content/{contentId}
A breaking variable change cannot publish over this content ID. Create and publish new managed content, change each Journey or draft Broadcast reference to the new ID, then review/activate the Journey or schedule the Broadcast. Existing accepted sends and scheduled Broadcast recipients retain their pinned revisions.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
expected_versionintegerrequired
minimum: 1
contractobjectrequired
No additional properties
source_localestring
Canonical BCP 47 source locale; inherits product settings when omitted.
configured_localesarray
Source plus target locales; omitted source is added by the server.
maxItems: 100 · uniqueItems: true
Each itemstring
fallback_localestring
layout_idstring
Selected reusable layout; the server snapshots its published revision into this content revision.
format: "uuid"
localization_policyobject
No additional properties
manual_reviewboolean
default: false
journey_translationobject
Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.
No additional properties
modestringrequired
enum: "fallback", "wait"
max_wait_secondsinteger
minimum: 60 · maximum: 86400
on_timeoutstring
enum: "fallback", "discard"
sourceobjectrequired
No additional properties
subjectstringrequired
minLength: 1 · maxLength: 100000
preheaderstring
maxLength: 100000
body_textstring
Accepted for source compatibility; rendered plain text derives from final HTML.
maxLength: 100000
body_htmlstringrequired
minLength: 1 · maxLength: 100000
layoutstring
Must contain one {{ content }} slot.
maxLength: 100000
variantsobject
Optional source versions. Every version is translated automatically in the same revision.
Additional propertyobject
No additional properties
subjectstringrequired
minLength: 1 · maxLength: 100000
preheaderstring
maxLength: 100000
body_htmlstringrequired
minLength: 1 · maxLength: 100000
body_textstring
maxLength: 100000
layoutstring
maxLength: 100000
variablesobjectrequired
Additional propertyunspecified
Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.
oneOf 1object
No additional properties
typestringrequired
enum: "string", "text", "url", "image_url", "html", "date", "datetime", "number", "boolean", "money"
Further nesting omitted
requiredboolean
Further nesting omitted
descriptionstring
maxLength: 2000
Further nesting omitted
defaultunspecified
Must match the field type.
Further nesting omitted
oneOf 2object
No additional properties
typeunspecifiedrequired
const: "object"
Further nesting omitted
requiredboolean
Further nesting omitted
descriptionstring
maxLength: 2000
Further nesting omitted
defaultobject
Further nesting omitted
propertiesobjectrequired
Further nesting omitted
oneOf 3object
No additional properties
typeunspecifiedrequired
const: "list"
Further nesting omitted
requiredboolean
Further nesting omitted
descriptionstring
maxLength: 2000
Further nesting omitted
defaultarray
Further nesting omitted
itemsunspecifiedrequired
Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.
Further nesting omitted
samplesobject
Named sample value sets for preview and source validation.
Additional propertyobject
Additional propertyAny value
translationsobject
Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.
Additional propertyobject
Additional propertystring
Success response 200
New draft revision and queued translation jobs.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
namestringrequired
versionintegerrequired
minimum: 1
review_requiredbooleanrequired
draft_revision_idstring | null
format: "uuid"
submitted_revision_idstring | null
format: "uuid"
approved_revision_idstring | null
format: "uuid"
published_revision_idstring | null
format: "uuid"
published_publication_idstring | null
format: "uuid"
source_revisionobject
Additional propertyAny value
translationsarray
Each itemobject
Additional propertyAny value
translation_jobsarray
Each itemobject
Additional propertyAny value
curl example
curl --request PATCH --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/managed-content/{contentId}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
--header 'Content-Type: application/json' \
--data-raw '{
"expected_version": 1,
"contract": {
"source_locale": "example",
"configured_locales": [
"example"
],
"fallback_locale": "example",
"layout_id": "00000000-0000-4000-8000-000000000001",
"localization_policy": {
"manual_review": false,
"journey_translation": {
"mode": "fallback",
"max_wait_seconds": 60,
"on_timeout": "fallback"
}
},
"source": {
"subject": "example",
"preheader": "example",
"body_text": "example",
"body_html": "example",
"layout": "example",
"variants": {},
"variables": {}
},
"samples": {},
"translations": {}
}
}'
POST/v1/workspaces/{workspaceId}/managed-content/{contentId}/render
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
Use either sample_set or variables, never both. Defaults to the first named sample.
No additional properties
source_revision_idstring
format: "uuid"
variantstring
Source A/B version key.
localestring
timezonestring
IANA timezone; defaults to UTC.
sample_setstring
variablesobject
Additional propertyAny value
Success response 200
Deterministic subject, preheader, HTML, derived plain text, locale, and direction.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
subjectstringrequired
preheaderstring
htmlstringrequired
textstringrequired
localestringrequired
directionstringrequired
enum: "ltr", "rtl"
warningsarray
Each itemstring
Additional propertyAny value
allOf 2object
source_revision_idstringrequired
format: "uuid"
layout_revision_idstring | nullrequired
format: "uuid"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/managed-content/{contentId}/render' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
--header 'Content-Type: application/json' \
--data-raw '{
"source_revision_id": "00000000-0000-4000-8000-000000000001",
"variant": "example",
"locale": "example",
"timezone": "example",
"sample_set": "example",
"variables": {}
}'
POST/v1/workspaces/{workspaceId}/managed-content/{contentId}/translations/{locale}/retry
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Translation retry queued.
application/json
valueobject
databooleanrequired
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/managed-content/{contentId}/translations/{locale}/retry' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
GET/v1/workspaces/{workspaceId}/managed-content/{contentId}/translations
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Current content state including translations and jobs.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
idstringrequired
format: "uuid"
namestringrequired
versionintegerrequired
minimum: 1
review_requiredbooleanrequired
draft_revision_idstring | null
format: "uuid"
submitted_revision_idstring | null
format: "uuid"
approved_revision_idstring | null
format: "uuid"
published_revision_idstring | null
format: "uuid"
published_publication_idstring | null
format: "uuid"
source_revisionobject
Additional propertyAny value
translationsarray
Each itemobject
Additional propertyAny value
translation_jobsarray
Each itemobject
Additional propertyAny value
allOf 2object
source_revisionobjectrequired
idstringrequired
format: "uuid"
content_idstringrequired
format: "uuid"
revisionintegerrequired
source_localestringrequired
configured_localesarrayrequired
Each itemstring
fallback_localestring | nullrequired
localization_policyobjectrequired
No additional properties
manual_reviewboolean
default: false
journey_translationobject
Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.
No additional properties
modestringrequired
enum: "fallback", "wait"
Further nesting omitted
max_wait_secondsinteger
minimum: 60 · maximum: 86400
Further nesting omitted
on_timeoutstring
enum: "fallback", "discard"
Further nesting omitted
sourceobjectrequired
No additional properties
subjectstringrequired
minLength: 1 · maxLength: 100000
preheaderstring
maxLength: 100000
body_textstring
Accepted for source compatibility; rendered plain text derives from final HTML.
maxLength: 100000
body_htmlstringrequired
minLength: 1 · maxLength: 100000
layoutstring
Must contain one {{ content }} slot.
maxLength: 100000
variantsobject
Optional source versions. Every version is translated automatically in the same revision.
Additional propertyobject
No additional properties
Further nesting omitted
variablesobjectrequired
Additional propertyunspecified
Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.
Further nesting omitted
source_messagesobjectrequired
Additional propertystring
layout_idstring | nullrequired
format: "uuid"
layout_revision_idstring | nullrequired
format: "uuid"
samplesobjectrequired
Additional propertyobject
Additional propertyAny value
restored_from_revision_idstring | nullrequired
format: "uuid"
translationsarrayrequired
Each itemunspecified
allOf 1object
source_revision_idstringrequired
format: "uuid"
Further nesting omitted
localestringrequired
Further nesting omitted
stringsobjectrequired
Further nesting omitted
provenancestringrequired
enum: "supplied", "generated", "reviewed"
Further nesting omitted
statusstringrequired
enum: "ready", "needs_review"
Further nesting omitted
allOf 2object
strings_sha256stringrequired
Further nesting omitted
translation_jobsarrayrequired
Each itemobject
idstringrequired
format: "uuid"
source_revision_idstringrequired
format: "uuid"
localestringrequired
statusstringrequired
attempt_countintegerrequired
error_codestring | nullrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/managed-content/{contentId}/translations' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
POST/v1/workspaces/{workspaceId}/managed-content/{contentId}/translations/{locale}/review
Requires the catalog SHA-256 from current readback. Corrected strings are optional; the source is not published by this operation.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
source_revision_idstringrequired
format: "uuid"
expected_translation_sha256stringrequired
pattern: "^[a-f0-9]{64}$"
stringsobject
Additional propertystring
Success response 200
Reviewed catalog and its new SHA-256.
application/json
valueobject
dataobjectrequired
source_revision_idstringrequired
format: "uuid"
localestringrequired
stringsobjectrequired
Additional propertystring
provenancestringrequired
enum: "reviewed"
statusstringrequired
enum: "ready"
strings_sha256stringrequired
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/managed-content/{contentId}/translations/{locale}/review' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
--header 'Content-Type: application/json' \
--data-raw '{
"source_revision_id": "00000000-0000-4000-8000-000000000001",
"expected_translation_sha256": "example",
"strings": {}
}'
GET/v1/workspaces/{workspaceId}/managed-content/{contentId}/versions
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Publication records.
application/json
valueobject
dataobjectrequired
versionsarrayrequired
Each itemobject
idstringrequired
format: "uuid"
revisionintegerrequired
source_localestringrequired
configured_localesarrayrequired
Each itemstring
sourceobjectrequired
No additional properties
subjectstringrequired
minLength: 1 · maxLength: 100000
preheaderstring
maxLength: 100000
body_textstring
Accepted for source compatibility; rendered plain text derives from final HTML.
maxLength: 100000
body_htmlstringrequired
minLength: 1 · maxLength: 100000
layoutstring
Must contain one {{ content }} slot.
maxLength: 100000
variantsobject
Optional source versions. Every version is translated automatically in the same revision.
Additional propertyobject
No additional properties
Further nesting omitted
variablesobjectrequired
Additional propertyunspecified
Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.
Further nesting omitted
source_messagesobjectrequired
Additional propertystring
samplesobjectrequired
Additional propertyobject
Additional propertyAny value
restored_from_revision_idstring | nullrequired
format: "uuid"
created_by_actor_idstringrequired
created_atstringrequired
format: "date-time"
publicationsarrayrequired
Each itemobject
idstringrequired
format: "uuid"
source_revision_idstringrequired
format: "uuid"
approval_idstring | nullrequired
format: "uuid"
published_by_actor_idstringrequired
published_atstringrequired
format: "date-time"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/managed-content/{contentId}/versions' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
POST/v1/workspaces/{workspaceId}/managed-content/{contentId}/restore
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 200
Restored draft state.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
namestringrequired
versionintegerrequired
minimum: 1
review_requiredbooleanrequired
draft_revision_idstring | null
format: "uuid"
submitted_revision_idstring | null
format: "uuid"
approved_revision_idstring | null
format: "uuid"
published_revision_idstring | null
format: "uuid"
published_publication_idstring | null
format: "uuid"
source_revisionobject
Additional propertyAny value
translationsarray
Each itemobject
Additional propertyAny value
translation_jobsarray
Each itemobject
Additional propertyAny value
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/managed-content/{contentId}/restore' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
--header 'Content-Type: application/json' \
--data-raw '{
"source_revision_id": "00000000-0000-4000-8000-000000000001",
"expected_version": 1
}'
Managed layouts
GET/v1/workspaces/{workspaceId}/managed-layouts
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Product layouts.
application/json
valueobject
dataarrayrequired
Each itemobject
idstringrequired
format: "uuid"
namestringrequired
versionintegerrequired
draft_revision_idstring | nullrequired
format: "uuid"
published_revision_idstring | nullrequired
format: "uuid"
published_publication_idstring | nullrequired
format: "uuid"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/managed-layouts' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
POST/v1/workspaces/{workspaceId}/managed-layouts
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
namestringrequired
minLength: 1 · maxLength: 200
htmlstring
Must contain exactly one content slot.
source_localestring
source_messagesobject
Additional propertystring
translationsobject
Additional propertyobject
Additional propertystring
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
namestringrequired
versionintegerrequired
draft_revision_idstring | nullrequired
format: "uuid"
published_revision_idstring | nullrequired
format: "uuid"
published_publication_idstring | nullrequired
format: "uuid"
replayedbooleanrequired
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/managed-layouts' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
--header 'Idempotency-Key: example' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "example",
"html": "example",
"source_locale": "example",
"source_messages": {},
"translations": {}
}'
GET/v1/workspaces/{workspaceId}/managed-layouts/{layoutId}
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Layout and draft revision.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
namestringrequired
versionintegerrequired
draft_revision_idstring | nullrequired
format: "uuid"
published_revision_idstring | nullrequired
format: "uuid"
published_publication_idstring | nullrequired
format: "uuid"
draft_revisionunspecifiedrequired
anyOf 1object
idstringrequired
format: "uuid"
layout_idstring
format: "uuid"
revisionintegerrequired
htmlstringrequired
brand_snapshotobjectrequired
company_namestring
maxLength: 160
logo_urlstring
maxLength: 2000
wordmark_urlstring
maxLength: 2000
website_urlstring
maxLength: 2000
primary_colorstring
maxLength: 7
accent_colorstring
maxLength: 7
background_colorstring
maxLength: 7
surface_colorstring
maxLength: 7
text_colorstring
maxLength: 7
muted_text_colorstring
maxLength: 7
heading_font_familystring
maxLength: 200
body_font_familystring
maxLength: 200
tonestring
maxLength: 1000
footer_addressstring
maxLength: 500
email_stylestring
maxLength: 20
source_localestringrequired
source_messagesobjectrequired
Additional propertystring
translationsobjectrequired
Additional propertyobject
Additional propertystring
Further nesting omitted
restored_from_revision_idstring | nullrequired
format: "uuid"
created_by_actor_idstring
created_atstring
format: "date-time"
anyOf 2null
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/managed-layouts/{layoutId}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
PATCH/v1/workspaces/{workspaceId}/managed-layouts/{layoutId}
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
expected_versionintegerrequired
minimum: 1
htmlstringrequired
Must contain exactly one content slot.
source_localestring
source_messagesobject
Additional propertystring
translationsobject
Additional propertyobject
Additional propertystring
Success response 200
New draft revision.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
namestringrequired
versionintegerrequired
draft_revision_idstring | nullrequired
format: "uuid"
published_revision_idstring | nullrequired
format: "uuid"
published_publication_idstring | nullrequired
format: "uuid"
curl example
curl --request PATCH --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/managed-layouts/{layoutId}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
--header 'Content-Type: application/json' \
--data-raw '{
"expected_version": 1,
"html": "example",
"source_locale": "example",
"source_messages": {},
"translations": {}
}'
GET/v1/workspaces/{workspaceId}/managed-layouts/{layoutId}/versions
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Layout revisions.
application/json
valueobject
dataarrayrequired
Each itemobject
idstringrequired
format: "uuid"
layout_idstring
format: "uuid"
revisionintegerrequired
htmlstringrequired
brand_snapshotobjectrequired
company_namestring
maxLength: 160
logo_urlstring
maxLength: 2000
wordmark_urlstring
maxLength: 2000
website_urlstring
maxLength: 2000
primary_colorstring
maxLength: 7
accent_colorstring
maxLength: 7
background_colorstring
maxLength: 7
surface_colorstring
maxLength: 7
text_colorstring
maxLength: 7
muted_text_colorstring
maxLength: 7
heading_font_familystring
maxLength: 200
body_font_familystring
maxLength: 200
tonestring
maxLength: 1000
footer_addressstring
maxLength: 500
email_stylestring
maxLength: 20
source_localestringrequired
source_messagesobjectrequired
Additional propertystring
translationsobjectrequired
Additional propertyobject
Additional propertystring
restored_from_revision_idstring | nullrequired
format: "uuid"
created_by_actor_idstring
created_atstring
format: "date-time"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/managed-layouts/{layoutId}/versions' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
GET/v1/workspaces/{workspaceId}/managed-layouts/{layoutId}/impact
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Layout dependency impact.
application/json
valueobject
dataobjectrequired
layout_idstringrequired
format: "uuid"
layout_revision_idstringrequired
format: "uuid"
layout_versionintegerrequired
affected_contentsarrayrequired
Each itemobject
content_idstringrequired
format: "uuid"
versionintegerrequired
published_revision_idstringrequired
format: "uuid"
active_journeysarrayrequired
Each itemobject
journey_idstringrequired
format: "uuid"
versionintegerrequired
definition_sha256stringrequired
manifest_sha256stringrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/managed-layouts/{layoutId}/impact' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
POST/v1/workspaces/{workspaceId}/managed-layouts/{layoutId}/restore
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 200
Restored draft revision.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
namestringrequired
versionintegerrequired
draft_revision_idstring | nullrequired
format: "uuid"
published_revision_idstring | nullrequired
format: "uuid"
published_publication_idstring | nullrequired
format: "uuid"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/managed-layouts/{layoutId}/restore' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
--header 'Content-Type: application/json' \
--data-raw '{
"layout_revision_id": "00000000-0000-4000-8000-000000000001",
"expected_version": 1
}'
Triage rules
GET/v1/workspaces/{workspaceId}/triage-rules
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
valueobject
dataarrayrequired
Each itemobject
idstringrequired
format: "uuid"
mailbox_idstringrequired
format: "uuid"
namestringrequired
auto_set_for_label_idstring | nullrequired
format: "uuid"
descriptionstring | nullrequired
exact_conditionsobjectrequired
No additional properties
fromarray
maxItems: 50
Each itemstring
maxLength: 320
toarray
maxItems: 50
Each itemstring
maxLength: 320
subject_containsarray
maxItems: 50
Each itemstring
maxLength: 320
has_wordsarray
maxItems: 50
Each itemstring
maxLength: 320
excludes_wordsarray
maxItems: 50
Each itemstring
maxLength: 320
has_attachmentboolean
has_label_idsarrayrequired
Each itemstring
format: "uuid"
actionsarrayrequired
Each itemobject
typestringrequired
enum: "apply_label", "archive", "mark_read", "star"
label_idstring
format: "uuid"
enabledbooleanrequired
versionintegerrequired
error_codestring | nullrequired
example_countintegerrequired
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/triage-rules?mailbox_id=00000000-0000-4000-8000-000000000001' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/triage-rules
Create a Triage rule for incoming mail (every plan; enabled rules count toward the plan amount). When = description (judged by Jev) and/or exact_conditions and/or has_label_ids; Then = actions.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueunspecified
allOf 1object
namestring
maxLength: 120
descriptionstring | null
maxLength: 2000
exact_conditionsobject
No additional properties
fromarray
maxItems: 50
Each itemstring
maxLength: 320
toarray
maxItems: 50
Each itemstring
maxLength: 320
subject_containsarray
maxItems: 50
Each itemstring
maxLength: 320
has_wordsarray
maxItems: 50
Each itemstring
maxLength: 320
excludes_wordsarray
maxItems: 50
Each itemstring
maxLength: 320
has_attachmentboolean
has_label_idsarray
maxItems: 50
Each itemstring
format: "uuid"
actionsarray
minItems: 1 · maxItems: 8
Each itemobject
typestringrequired
enum: "apply_label", "archive", "mark_read", "star"
label_idstring
format: "uuid"
enabledboolean
allOf 2object
mailbox_idstringrequired
format: "uuid"
Success response 201
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
mailbox_idstringrequired
format: "uuid"
namestringrequired
auto_set_for_label_idstring | nullrequired
format: "uuid"
descriptionstring | nullrequired
exact_conditionsobjectrequired
No additional properties
fromarray
maxItems: 50
Each itemstring
maxLength: 320
toarray
maxItems: 50
Each itemstring
maxLength: 320
subject_containsarray
maxItems: 50
Each itemstring
maxLength: 320
has_wordsarray
maxItems: 50
Each itemstring
maxLength: 320
excludes_wordsarray
maxItems: 50
Each itemstring
maxLength: 320
has_attachmentboolean
has_label_idsarrayrequired
Each itemstring
format: "uuid"
actionsarrayrequired
Each itemobject
typestringrequired
enum: "apply_label", "archive", "mark_read", "star"
label_idstring
format: "uuid"
enabledbooleanrequired
versionintegerrequired
error_codestring | nullrequired
example_countintegerrequired
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/triage-rules' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Idempotency-Key: example' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "example",
"description": "example",
"exact_conditions": {
"from": [
"example"
],
"to": [
"example"
],
"subject_contains": [
"example"
],
"has_words": [
"example"
],
"excludes_words": [
"example"
],
"has_attachment": true
},
"has_label_ids": [
"00000000-0000-4000-8000-000000000001"
],
"actions": [
{
"type": "apply_label",
"label_id": "00000000-0000-4000-8000-000000000001"
}
],
"enabled": true,
"mailbox_id": "00000000-0000-4000-8000-000000000001"
}'
POST/v1/workspaces/{workspaceId}/triage-rules/preview
Which recent threads a When would match. Read-only; returns no scores.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
scannedintegerrequired
matchesarrayrequired
Each itemobject
thread_idstringrequired
format: "uuid"
subjectstringrequired
fromstring
received_atstring
format: "date-time"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/triage-rules/preview' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"mailbox_id": "00000000-0000-4000-8000-000000000001",
"rule_id": "00000000-0000-4000-8000-000000000001",
"description": "example",
"exact_conditions": {
"from": [
"example"
],
"to": [
"example"
],
"subject_contains": [
"example"
],
"has_words": [
"example"
],
"excludes_words": [
"example"
],
"has_attachment": true
},
"has_label_ids": [
"00000000-0000-4000-8000-000000000001"
],
"limit": 1
}'
POST/v1/workspaces/{workspaceId}/triage-rules/run-past-mail
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 202
Successful response.
application/json
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/triage-rules/run-past-mail' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"mailbox_id": "00000000-0000-4000-8000-000000000001",
"rule_ids": [
"00000000-0000-4000-8000-000000000001"
],
"days": 1,
"include_other_actions": true
}'
GET/v1/workspaces/{workspaceId}/triage-rules/{ruleId}
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
mailbox_idstringrequired
format: "uuid"
namestringrequired
auto_set_for_label_idstring | nullrequired
format: "uuid"
descriptionstring | nullrequired
exact_conditionsobjectrequired
No additional properties
fromarray
maxItems: 50
Each itemstring
maxLength: 320
toarray
maxItems: 50
Each itemstring
maxLength: 320
subject_containsarray
maxItems: 50
Each itemstring
maxLength: 320
has_wordsarray
maxItems: 50
Each itemstring
maxLength: 320
excludes_wordsarray
maxItems: 50
Each itemstring
maxLength: 320
has_attachmentboolean
has_label_idsarrayrequired
Each itemstring
format: "uuid"
actionsarrayrequired
Each itemobject
typestringrequired
enum: "apply_label", "archive", "mark_read", "star"
label_idstring
format: "uuid"
enabledbooleanrequired
versionintegerrequired
error_codestring | nullrequired
example_countintegerrequired
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/triage-rules/{ruleId}' \
--header "Authorization: Bearer $BANGER_API_KEY"
PATCH/v1/workspaces/{workspaceId}/triage-rules/{ruleId}
A label's auto-set rule can only be edited through updateLabel.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
namestring
maxLength: 120
descriptionstring | null
maxLength: 2000
exact_conditionsobject
No additional properties
fromarray
maxItems: 50
Each itemstring
maxLength: 320
toarray
maxItems: 50
Each itemstring
maxLength: 320
subject_containsarray
maxItems: 50
Each itemstring
maxLength: 320
has_wordsarray
maxItems: 50
Each itemstring
maxLength: 320
excludes_wordsarray
maxItems: 50
Each itemstring
maxLength: 320
has_attachmentboolean
has_label_idsarray
maxItems: 50
Each itemstring
format: "uuid"
actionsarray
minItems: 1 · maxItems: 8
Each itemobject
typestringrequired
enum: "apply_label", "archive", "mark_read", "star"
label_idstring
format: "uuid"
enabledboolean
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
mailbox_idstringrequired
format: "uuid"
namestringrequired
auto_set_for_label_idstring | nullrequired
format: "uuid"
descriptionstring | nullrequired
exact_conditionsobjectrequired
No additional properties
fromarray
maxItems: 50
Each itemstring
maxLength: 320
toarray
maxItems: 50
Each itemstring
maxLength: 320
subject_containsarray
maxItems: 50
Each itemstring
maxLength: 320
has_wordsarray
maxItems: 50
Each itemstring
maxLength: 320
excludes_wordsarray
maxItems: 50
Each itemstring
maxLength: 320
has_attachmentboolean
has_label_idsarrayrequired
Each itemstring
format: "uuid"
actionsarrayrequired
Each itemobject
typestringrequired
enum: "apply_label", "archive", "mark_read", "star"
label_idstring
format: "uuid"
enabledbooleanrequired
versionintegerrequired
error_codestring | nullrequired
example_countintegerrequired
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
curl example
curl --request PATCH --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/triage-rules/{ruleId}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Idempotency-Key: example' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "example",
"description": "example",
"exact_conditions": {
"from": [
"example"
],
"to": [
"example"
],
"subject_contains": [
"example"
],
"has_words": [
"example"
],
"excludes_words": [
"example"
],
"has_attachment": true
},
"has_label_ids": [
"00000000-0000-4000-8000-000000000001"
],
"actions": [
{
"type": "apply_label",
"label_id": "00000000-0000-4000-8000-000000000001"
}
],
"enabled": true
}'
DELETE/v1/workspaces/{workspaceId}/triage-rules/{ruleId}
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 204
Triage rule deleted.
No response body.
curl example
curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/triage-rules/{ruleId}' \
--header "Authorization: Bearer $BANGER_API_KEY"
Connections
GET/v1/workspaces/{workspaceId}/connections
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Connection metadata and capabilities. Credential material is never returned.
application/json
valueobject
dataarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
adapter_keystringrequired
categorystringrequired
enum: "email", "customer", "product", "work", "data"
display_namestringrequired
statusstringrequired
enum: "pending_validation", "active", "error", "disabled"
auth_kindstringrequired
enum: "api_key", "oauth2", "service_account", "none"
freshness_modestringrequired
enum: "webhook", "poll", "on_demand", "hybrid"
capabilitiesarrayrequired
Each itemstring
resource_scopeobjectrequired
Additional propertyAny value
configobjectrequired
Non-secret adapter configuration such as a cloud host and project ID.
Additional propertyAny value
active_credential_versioninteger | null
external_account_idstring | null
external_account_namestring | null
last_validated_atstring | null
format: "date-time"
last_success_atstring | null
format: "date-time"
last_error_codestring | null
disabled_atstring | null
format: "date-time"
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/connections' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/connections/adapters/{adapterKey}
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
api_keystringrequired
API key or provider service-account JSON.
minLength: 12 · maxLength: 10000
display_namestring
maxLength: 100
configobject
Additional propertyAny value
Success response 200
Idempotent replay of an existing connection request.
application/json
valueobject
dataobjectrequired
No additional properties
idstringrequired
format: "uuid"
adapter_keystringrequired
categorystringrequired
enum: "email", "customer", "product", "work", "data"
display_namestringrequired
statusstringrequired
enum: "pending_validation", "active", "error", "disabled"
auth_kindstringrequired
enum: "api_key", "oauth2", "service_account", "none"
freshness_modestringrequired
enum: "webhook", "poll", "on_demand", "hybrid"
capabilitiesarrayrequired
Each itemstring
resource_scopeobjectrequired
Additional propertyAny value
configobjectrequired
Non-secret adapter configuration such as a cloud host and project ID.
Additional propertyAny value
active_credential_versioninteger | null
external_account_idstring | null
external_account_namestring | null
last_validated_atstring | null
format: "date-time"
last_success_atstring | null
format: "date-time"
last_error_codestring | null
disabled_atstring | null
format: "date-time"
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/connections/adapters/{adapterKey}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Idempotency-Key: examplexxxxxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"api_key": "examplexxxxx",
"display_name": "example",
"config": {}
}'
DELETE/v1/workspaces/{workspaceId}/connections/{connectionId}
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 204
Connection, credential, sync state, and grants revoked.
No response body.
curl example
curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/connections/{connectionId}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Idempotency-Key: examplexxxxxxxxx'
POST/v1/workspaces/{workspaceId}/connections/{connectionId}/validate
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Connection credential is valid.
application/json
valueobject
dataobjectrequired
No additional properties
idstringrequired
format: "uuid"
adapter_keystringrequired
categorystringrequired
enum: "email", "customer", "product", "work", "data"
display_namestringrequired
statusstringrequired
enum: "pending_validation", "active", "error", "disabled"
auth_kindstringrequired
enum: "api_key", "oauth2", "service_account", "none"
freshness_modestringrequired
enum: "webhook", "poll", "on_demand", "hybrid"
capabilitiesarrayrequired
Each itemstring
resource_scopeobjectrequired
Additional propertyAny value
configobjectrequired
Non-secret adapter configuration such as a cloud host and project ID.
Additional propertyAny value
active_credential_versioninteger | null
external_account_idstring | null
external_account_namestring | null
last_validated_atstring | null
format: "date-time"
last_success_atstring | null
format: "date-time"
last_error_codestring | null
disabled_atstring | null
format: "date-time"
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/connections/{connectionId}/validate' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/connections/{connectionId}/credential
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
api_keystringrequired
API key or provider service-account JSON.
minLength: 12 · maxLength: 10000
display_namestring
maxLength: 100
configobject
Additional propertyAny value
Success response 200
Idempotent replay of a previous rotation.
application/json
valueobject
dataobjectrequired
No additional properties
idstringrequired
format: "uuid"
adapter_keystringrequired
categorystringrequired
enum: "email", "customer", "product", "work", "data"
display_namestringrequired
statusstringrequired
enum: "pending_validation", "active", "error", "disabled"
auth_kindstringrequired
enum: "api_key", "oauth2", "service_account", "none"
freshness_modestringrequired
enum: "webhook", "poll", "on_demand", "hybrid"
capabilitiesarrayrequired
Each itemstring
resource_scopeobjectrequired
Additional propertyAny value
configobjectrequired
Non-secret adapter configuration such as a cloud host and project ID.
Additional propertyAny value
active_credential_versioninteger | null
external_account_idstring | null
external_account_namestring | null
last_validated_atstring | null
format: "date-time"
last_success_atstring | null
format: "date-time"
last_error_codestring | null
disabled_atstring | null
format: "date-time"
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/connections/{connectionId}/credential' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Idempotency-Key: examplexxxxxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"api_key": "examplexxxxx",
"display_name": "example",
"config": {}
}'
POST/v1/workspaces/{workspaceId}/connections/{connectionId}/query
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
adapter_keystringrequired
enum: "figma", "github", "google-analytics", "google-calendar", "hubspot", "linear", "mailchimp", "notion", "slack", "snowflake", "zendesk"
operationstringrequired
enum: "audiences.list", "blocks.children.list", "campaigns.list", "changelog.brief", "channels.list", "comments.list", "commits.list", "companies.list", "contacts.list", "cohorts.list", "customer.brief", "customers.list", "deals.list", "events.list", "file.summary", "funnels.list", "images.render", "invoices.list", "issues.list", "launch.brief", "messages.history", "messages.search", "nodes.get", "notifications.list", "pages.retrieve", "payment_intents.list", "persons.list", "profiles.list", "queries.execute", "queries.list", "releases.list", "reports.list", "reports.run", "repositories.list", "search.list", "subscriptions.list"
parametersobject
Additional propertyAny value
Success response 200
An authenticated, typed response from the connected source.
application/json
valueobject
dataobjectrequired
No additional properties
adapter_keystringrequired
enum: "figma", "github", "google-analytics", "google-calendar", "hubspot", "linear", "mailchimp", "notion", "slack", "snowflake", "zendesk"
operationstringrequired
capabilitystringrequired
sourceobjectrequired
No additional properties
external_account_idstringrequired
external_account_namestringrequired
fetched_atstringrequired
format: "date-time"
freshnessstringrequired
const: "live"
dataobjectrequired
Additional propertyAny value
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/connections/{connectionId}/query' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"adapter_key": "figma",
"operation": "audiences.list",
"parameters": {}
}'
GET/v1/workspaces/{workspaceId}/connections/{connectionId}/grants
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Active grants for the connection.
application/json
valueobject
dataarrayrequired
Each itemobject
No additional properties
connection_idstringrequired
format: "uuid"
principal_kindstringrequired
enum: "agent", "automation", "api_key"
principal_idstringrequired
capabilitiesarrayrequired
Each itemstring
resource_scopeobjectrequired
Additional propertyAny value
created_by_actor_idstringrequired
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
expires_atstring | null
format: "date-time"
revoked_atstring | null
format: "date-time"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/connections/{connectionId}/grants' \
--header "Authorization: Bearer $BANGER_API_KEY"
PUT/v1/workspaces/{workspaceId}/connections/{connectionId}/grants/{principalKind}/{principalId}
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
capabilitiesarrayrequired
minItems: 1 · uniqueItems: true
Each itemstring
resource_scopeobject
Additional propertyAny value
expires_atstring
format: "date-time"
Success response 200
Connection access granted or replaced.
application/json
valueobject
dataobjectrequired
No additional properties
connection_idstringrequired
format: "uuid"
principal_kindstringrequired
enum: "agent", "automation", "api_key"
principal_idstringrequired
capabilitiesarrayrequired
Each itemstring
resource_scopeobjectrequired
Additional propertyAny value
created_by_actor_idstringrequired
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
expires_atstring | null
format: "date-time"
revoked_atstring | null
format: "date-time"
curl example
curl --request PUT --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/connections/{connectionId}/grants/{principalKind}/{principalId}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"capabilities": [
"example"
],
"resource_scope": {},
"expires_at": "2026-01-01T00:00:00Z"
}'
DELETE/v1/workspaces/{workspaceId}/connections/{connectionId}/grants/{principalKind}/{principalId}
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 204
Connection grant revoked.
No response body.
curl example
curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/connections/{connectionId}/grants/{principalKind}/{principalId}' \
--header "Authorization: Bearer $BANGER_API_KEY"
Sending domains
GET/v1/workspaces/{workspaceId}/sending-domains
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Banger-native sending domains for the workspace.
application/json
valueobject
dataarrayrequired
Each itemobject
No additional properties
domain_idstringrequired
format: "uuid"
product_idstringrequired
format: "uuid"
root_domainstringrequired
setup_modestring
enum: "simple", "advanced"
domain_statusstringrequired
enum: "pending", "verified", "failed", "disabled", "deleting", "deleted"
lanesarrayrequired
minItems: 1 · maxItems: 3
Each itemobject
No additional properties
idstringrequired
format: "uuid"
kindstringrequired
enum: "mailbox", "product", "broadcast"
display_namestringrequired
from_domainstringrequired
mail_from_domainstring | nullrequired
inbound_domainstring | nullrequired
route_providerstringrequired
enum: "banger", "resend"
selected_provider_connection_idstring | nullrequired
format: "uuid"
inbound_providerstring | nullrequired
enum: "banger", null
statusstringrequired
enum: "pending", "active", "paused", "deleting", "deleted"
status_reasonstring | nullrequired
desired_revisionintegerrequired
minimum: 1
observed_revisionintegerrequired
minimum: 0
dns_readybooleanrequired
provider_readybooleanrequired
inbound_readybooleanrequired
outbound_readybooleanrequired
banger_transport_readybooleanrequired
banger_mail_from_domainstring | nullrequired
provisioning_job_idstring | nullrequired
format: "uuid"
provisioning_statusstringrequired
enum: "pending", "provisioning", "waiting_dns", "active", "failed", "deleting", "deleted", "not_required"
provisioning_error_codestring | null
provisioning_next_attempt_atstring | null
provisioning_last_checked_atstring | null
provider_identity_statusstring | null
provider_dkim_statusstring | null
dns_recordsarrayrequired
Each itemobject
No additional properties
Further nesting omitted
dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
lane_idstringrequired
format: "uuid"
providerstringrequired
enum: "banger", "resend"
purposestringrequired
typestringrequired
enum: "TXT", "MX", "CNAME"
namestringrequired
valuestringrequired
priorityinteger | nullrequired
requiredbooleanrequired
statusstringrequired
enum: "pending", "verified", "error"
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
first_observed_atstring | nullrequired
format: "date-time"
last_checked_atstring | nullrequired
format: "date-time"
errorobjectrequired
Additional propertyAny value
provider_referencestring | nullrequired
deletionobject | nullrequired
No additional properties
job_idstringrequired
format: "uuid"
statusstringrequired
enum: "pending", "processing", "waiting_provider", "completed", "failed"
last_error_codestring | nullrequired
cleanup_recordsarrayrequired
Exact DNS records the user may remove after teardown completes.
Each itemobject
No additional properties
idstringrequired
format: "uuid"
Further nesting omitted
lane_idstringrequired
format: "uuid"
Further nesting omitted
providerstringrequired
enum: "banger", "resend"
Further nesting omitted
purposestringrequired
Further nesting omitted
typestringrequired
enum: "TXT", "MX", "CNAME"
Further nesting omitted
namestringrequired
Further nesting omitted
valuestringrequired
Further nesting omitted
priorityinteger | nullrequired
Further nesting omitted
requiredbooleanrequired
Further nesting omitted
statusstringrequired
enum: "pending", "verified", "error"
Further nesting omitted
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
Further nesting omitted
first_observed_atstring | nullrequired
format: "date-time"
Further nesting omitted
last_checked_atstring | nullrequired
format: "date-time"
Further nesting omitted
errorobjectrequired
Further nesting omitted
provider_referencestring | nullrequired
Further nesting omitted
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/sending-domains' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/sending-domains
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
domainstringrequired
The product's exact domain or subdomain. By default Banger derives three separate lane subdomains.
minLength: 3 · maxLength: 253
setup_modestring
Simple provisions one mailbox transport for receiving and sending from selected mailbox addresses, including Broadcasts and Journeys. Advanced provisions separate sending lanes.
default: "advanced" · enum: "simple", "advanced"
mailbox_modestring
Simple setup defaults to the root when no mailbox prefix is supplied; advanced defaults to a subdomain. Subdomain preserves existing domain mail. Migrate requests Mailboxes at the exact domain. An occupied exact domain or lane requires a request through sending-domain-migrations followed by authorization in the signed-in Banger Approvals panel. Agent credentials cannot authorize migration. No old messages are imported and DNS is never changed automatically.
enum: "subdomain", "migrate"
root_dmarc_confirmedboolean
True only after the domain owner confirms all services sending from the root From domain authenticate with aligned SPF or DKIM. Required when Banger must prepare a new root DMARC p=reject policy. Dedicated subdomains do not need this confirmation.
lane_prefixesobject
No additional properties
mailboxstring
minLength: 1 · maxLength: 63 · default: "mail"
productstring
minLength: 1 · maxLength: 63 · default: "tx"
broadcaststring
minLength: 1 · maxLength: 63 · default: "broadcast"
route_providersobject
Resend is accepted only when Banger already detected it in this domain's DNS and the selected product has an active connection. Clients must never advertise it otherwise.
No additional properties
productstring
default: "banger" · enum: "banger", "resend"
broadcaststring
default: "banger" · enum: "banger", "resend"
route_domainsobject
Exact verified domains synchronized from Resend. Required for each lane that keeps Resend.
No additional properties
productstring
minLength: 3 · maxLength: 253
broadcaststring
minLength: 3 · maxLength: 253
Success response 200
Idempotent replay of a Banger-native sending-domain request.
application/json
valueobject
dataobjectrequired
No additional properties
domain_idstringrequired
format: "uuid"
product_idstringrequired
format: "uuid"
root_domainstringrequired
setup_modestring
enum: "simple", "advanced"
domain_statusstringrequired
enum: "pending", "verified", "failed", "disabled", "deleting", "deleted"
lanesarrayrequired
minItems: 1 · maxItems: 3
Each itemobject
No additional properties
idstringrequired
format: "uuid"
kindstringrequired
enum: "mailbox", "product", "broadcast"
display_namestringrequired
from_domainstringrequired
mail_from_domainstring | nullrequired
inbound_domainstring | nullrequired
route_providerstringrequired
enum: "banger", "resend"
selected_provider_connection_idstring | nullrequired
format: "uuid"
inbound_providerstring | nullrequired
enum: "banger", null
statusstringrequired
enum: "pending", "active", "paused", "deleting", "deleted"
status_reasonstring | nullrequired
desired_revisionintegerrequired
minimum: 1
observed_revisionintegerrequired
minimum: 0
dns_readybooleanrequired
provider_readybooleanrequired
inbound_readybooleanrequired
outbound_readybooleanrequired
banger_transport_readybooleanrequired
banger_mail_from_domainstring | nullrequired
provisioning_job_idstring | nullrequired
format: "uuid"
provisioning_statusstringrequired
enum: "pending", "provisioning", "waiting_dns", "active", "failed", "deleting", "deleted", "not_required"
provisioning_error_codestring | null
provisioning_next_attempt_atstring | null
provisioning_last_checked_atstring | null
provider_identity_statusstring | null
provider_dkim_statusstring | null
dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
Further nesting omitted
lane_idstringrequired
format: "uuid"
Further nesting omitted
providerstringrequired
enum: "banger", "resend"
Further nesting omitted
purposestringrequired
Further nesting omitted
typestringrequired
enum: "TXT", "MX", "CNAME"
Further nesting omitted
namestringrequired
Further nesting omitted
valuestringrequired
Further nesting omitted
priorityinteger | nullrequired
Further nesting omitted
requiredbooleanrequired
Further nesting omitted
statusstringrequired
enum: "pending", "verified", "error"
Further nesting omitted
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
Further nesting omitted
first_observed_atstring | nullrequired
format: "date-time"
Further nesting omitted
last_checked_atstring | nullrequired
format: "date-time"
Further nesting omitted
errorobjectrequired
Further nesting omitted
provider_referencestring | nullrequired
Further nesting omitted
dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
lane_idstringrequired
format: "uuid"
providerstringrequired
enum: "banger", "resend"
purposestringrequired
typestringrequired
enum: "TXT", "MX", "CNAME"
namestringrequired
valuestringrequired
priorityinteger | nullrequired
requiredbooleanrequired
statusstringrequired
enum: "pending", "verified", "error"
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
first_observed_atstring | nullrequired
format: "date-time"
last_checked_atstring | nullrequired
format: "date-time"
errorobjectrequired
Additional propertyAny value
provider_referencestring | nullrequired
deletionobject | nullrequired
No additional properties
job_idstringrequired
format: "uuid"
statusstringrequired
enum: "pending", "processing", "waiting_provider", "completed", "failed"
last_error_codestring | nullrequired
cleanup_recordsarrayrequired
Exact DNS records the user may remove after teardown completes.
Each itemobject
No additional properties
idstringrequired
format: "uuid"
lane_idstringrequired
format: "uuid"
providerstringrequired
enum: "banger", "resend"
purposestringrequired
typestringrequired
enum: "TXT", "MX", "CNAME"
namestringrequired
valuestringrequired
priorityinteger | nullrequired
requiredbooleanrequired
statusstringrequired
enum: "pending", "verified", "error"
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
first_observed_atstring | nullrequired
format: "date-time"
last_checked_atstring | nullrequired
format: "date-time"
errorobjectrequired
Additional propertyAny value
provider_referencestring | nullrequired
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/sending-domains' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Idempotency-Key: examplexxxxxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"domain": "example",
"setup_mode": "advanced",
"mailbox_mode": "subdomain",
"root_dmarc_confirmed": true,
"lane_prefixes": {
"mailbox": "mail",
"product": "tx",
"broadcast": "broadcast"
},
"route_providers": {
"product": "banger",
"broadcast": "banger"
},
"route_domains": {
"product": "example",
"broadcast": "example"
}
}'
GET/v1/workspaces/{workspaceId}/sending-domains/{sendingDomainId}
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Current domain, stream, provisioning, and required DNS state.
application/json
valueobject
dataobjectrequired
No additional properties
domain_idstringrequired
format: "uuid"
product_idstringrequired
format: "uuid"
root_domainstringrequired
setup_modestring
enum: "simple", "advanced"
domain_statusstringrequired
enum: "pending", "verified", "failed", "disabled", "deleting", "deleted"
lanesarrayrequired
minItems: 1 · maxItems: 3
Each itemobject
No additional properties
idstringrequired
format: "uuid"
kindstringrequired
enum: "mailbox", "product", "broadcast"
display_namestringrequired
from_domainstringrequired
mail_from_domainstring | nullrequired
inbound_domainstring | nullrequired
route_providerstringrequired
enum: "banger", "resend"
selected_provider_connection_idstring | nullrequired
format: "uuid"
inbound_providerstring | nullrequired
enum: "banger", null
statusstringrequired
enum: "pending", "active", "paused", "deleting", "deleted"
status_reasonstring | nullrequired
desired_revisionintegerrequired
minimum: 1
observed_revisionintegerrequired
minimum: 0
dns_readybooleanrequired
provider_readybooleanrequired
inbound_readybooleanrequired
outbound_readybooleanrequired
banger_transport_readybooleanrequired
banger_mail_from_domainstring | nullrequired
provisioning_job_idstring | nullrequired
format: "uuid"
provisioning_statusstringrequired
enum: "pending", "provisioning", "waiting_dns", "active", "failed", "deleting", "deleted", "not_required"
provisioning_error_codestring | null
provisioning_next_attempt_atstring | null
provisioning_last_checked_atstring | null
provider_identity_statusstring | null
provider_dkim_statusstring | null
dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
Further nesting omitted
lane_idstringrequired
format: "uuid"
Further nesting omitted
providerstringrequired
enum: "banger", "resend"
Further nesting omitted
purposestringrequired
Further nesting omitted
typestringrequired
enum: "TXT", "MX", "CNAME"
Further nesting omitted
namestringrequired
Further nesting omitted
valuestringrequired
Further nesting omitted
priorityinteger | nullrequired
Further nesting omitted
requiredbooleanrequired
Further nesting omitted
statusstringrequired
enum: "pending", "verified", "error"
Further nesting omitted
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
Further nesting omitted
first_observed_atstring | nullrequired
format: "date-time"
Further nesting omitted
last_checked_atstring | nullrequired
format: "date-time"
Further nesting omitted
errorobjectrequired
Further nesting omitted
provider_referencestring | nullrequired
Further nesting omitted
dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
lane_idstringrequired
format: "uuid"
providerstringrequired
enum: "banger", "resend"
purposestringrequired
typestringrequired
enum: "TXT", "MX", "CNAME"
namestringrequired
valuestringrequired
priorityinteger | nullrequired
requiredbooleanrequired
statusstringrequired
enum: "pending", "verified", "error"
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
first_observed_atstring | nullrequired
format: "date-time"
last_checked_atstring | nullrequired
format: "date-time"
errorobjectrequired
Additional propertyAny value
provider_referencestring | nullrequired
deletionobject | nullrequired
No additional properties
job_idstringrequired
format: "uuid"
statusstringrequired
enum: "pending", "processing", "waiting_provider", "completed", "failed"
last_error_codestring | nullrequired
cleanup_recordsarrayrequired
Exact DNS records the user may remove after teardown completes.
Each itemobject
No additional properties
idstringrequired
format: "uuid"
lane_idstringrequired
format: "uuid"
providerstringrequired
enum: "banger", "resend"
purposestringrequired
typestringrequired
enum: "TXT", "MX", "CNAME"
namestringrequired
valuestringrequired
priorityinteger | nullrequired
requiredbooleanrequired
statusstringrequired
enum: "pending", "verified", "error"
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
first_observed_atstring | nullrequired
format: "date-time"
last_checked_atstring | nullrequired
format: "date-time"
errorobjectrequired
Additional propertyAny value
provider_referencestring | nullrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/sending-domains/{sendingDomainId}' \
--header "Authorization: Bearer $BANGER_API_KEY"
DELETE/v1/workspaces/{workspaceId}/sending-domains/{sendingDomainId}
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
confirm_domainstringrequired
Must exactly match the root domain being deleted.
minLength: 3 · maxLength: 253
Success response 202
Sending and receiving are stopped and idempotent provider teardown is queued. Email history and audit records are preserved.
application/json
valueobject
dataobjectrequired
No additional properties
domain_idstringrequired
format: "uuid"
product_idstringrequired
format: "uuid"
root_domainstringrequired
setup_modestring
enum: "simple", "advanced"
domain_statusstringrequired
enum: "pending", "verified", "failed", "disabled", "deleting", "deleted"
lanesarrayrequired
minItems: 1 · maxItems: 3
Each itemobject
No additional properties
idstringrequired
format: "uuid"
kindstringrequired
enum: "mailbox", "product", "broadcast"
display_namestringrequired
from_domainstringrequired
mail_from_domainstring | nullrequired
inbound_domainstring | nullrequired
route_providerstringrequired
enum: "banger", "resend"
selected_provider_connection_idstring | nullrequired
format: "uuid"
inbound_providerstring | nullrequired
enum: "banger", null
statusstringrequired
enum: "pending", "active", "paused", "deleting", "deleted"
status_reasonstring | nullrequired
desired_revisionintegerrequired
minimum: 1
observed_revisionintegerrequired
minimum: 0
dns_readybooleanrequired
provider_readybooleanrequired
inbound_readybooleanrequired
outbound_readybooleanrequired
banger_transport_readybooleanrequired
banger_mail_from_domainstring | nullrequired
provisioning_job_idstring | nullrequired
format: "uuid"
provisioning_statusstringrequired
enum: "pending", "provisioning", "waiting_dns", "active", "failed", "deleting", "deleted", "not_required"
provisioning_error_codestring | null
provisioning_next_attempt_atstring | null
provisioning_last_checked_atstring | null
provider_identity_statusstring | null
provider_dkim_statusstring | null
dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
Further nesting omitted
lane_idstringrequired
format: "uuid"
Further nesting omitted
providerstringrequired
enum: "banger", "resend"
Further nesting omitted
purposestringrequired
Further nesting omitted
typestringrequired
enum: "TXT", "MX", "CNAME"
Further nesting omitted
namestringrequired
Further nesting omitted
valuestringrequired
Further nesting omitted
priorityinteger | nullrequired
Further nesting omitted
requiredbooleanrequired
Further nesting omitted
statusstringrequired
enum: "pending", "verified", "error"
Further nesting omitted
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
Further nesting omitted
first_observed_atstring | nullrequired
format: "date-time"
Further nesting omitted
last_checked_atstring | nullrequired
format: "date-time"
Further nesting omitted
errorobjectrequired
Further nesting omitted
provider_referencestring | nullrequired
Further nesting omitted
dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
lane_idstringrequired
format: "uuid"
providerstringrequired
enum: "banger", "resend"
purposestringrequired
typestringrequired
enum: "TXT", "MX", "CNAME"
namestringrequired
valuestringrequired
priorityinteger | nullrequired
requiredbooleanrequired
statusstringrequired
enum: "pending", "verified", "error"
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
first_observed_atstring | nullrequired
format: "date-time"
last_checked_atstring | nullrequired
format: "date-time"
errorobjectrequired
Additional propertyAny value
provider_referencestring | nullrequired
deletionobject | nullrequired
No additional properties
job_idstringrequired
format: "uuid"
statusstringrequired
enum: "pending", "processing", "waiting_provider", "completed", "failed"
last_error_codestring | nullrequired
cleanup_recordsarrayrequired
Exact DNS records the user may remove after teardown completes.
Each itemobject
No additional properties
idstringrequired
format: "uuid"
lane_idstringrequired
format: "uuid"
providerstringrequired
enum: "banger", "resend"
purposestringrequired
typestringrequired
enum: "TXT", "MX", "CNAME"
namestringrequired
valuestringrequired
priorityinteger | nullrequired
requiredbooleanrequired
statusstringrequired
enum: "pending", "verified", "error"
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
first_observed_atstring | nullrequired
format: "date-time"
last_checked_atstring | nullrequired
format: "date-time"
errorobjectrequired
Additional propertyAny value
provider_referencestring | nullrequired
curl example
curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/sending-domains/{sendingDomainId}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"confirm_domain": "example"
}'
DELETE/v1/workspaces/{workspaceId}/sending-domains/{sendingDomainId}/lanes/{laneKind}
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 202
Only the selected lane is stopped and queued for removal. Other lanes and message history are preserved.
application/json
valueobject
dataobjectrequired
No additional properties
domain_idstringrequired
format: "uuid"
product_idstringrequired
format: "uuid"
root_domainstringrequired
setup_modestring
enum: "simple", "advanced"
domain_statusstringrequired
enum: "pending", "verified", "failed", "disabled", "deleting", "deleted"
lanesarrayrequired
minItems: 1 · maxItems: 3
Each itemobject
No additional properties
idstringrequired
format: "uuid"
kindstringrequired
enum: "mailbox", "product", "broadcast"
display_namestringrequired
from_domainstringrequired
mail_from_domainstring | nullrequired
inbound_domainstring | nullrequired
route_providerstringrequired
enum: "banger", "resend"
selected_provider_connection_idstring | nullrequired
format: "uuid"
inbound_providerstring | nullrequired
enum: "banger", null
statusstringrequired
enum: "pending", "active", "paused", "deleting", "deleted"
status_reasonstring | nullrequired
desired_revisionintegerrequired
minimum: 1
observed_revisionintegerrequired
minimum: 0
dns_readybooleanrequired
provider_readybooleanrequired
inbound_readybooleanrequired
outbound_readybooleanrequired
banger_transport_readybooleanrequired
banger_mail_from_domainstring | nullrequired
provisioning_job_idstring | nullrequired
format: "uuid"
provisioning_statusstringrequired
enum: "pending", "provisioning", "waiting_dns", "active", "failed", "deleting", "deleted", "not_required"
provisioning_error_codestring | null
provisioning_next_attempt_atstring | null
provisioning_last_checked_atstring | null
provider_identity_statusstring | null
provider_dkim_statusstring | null
dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
Further nesting omitted
lane_idstringrequired
format: "uuid"
Further nesting omitted
providerstringrequired
enum: "banger", "resend"
Further nesting omitted
purposestringrequired
Further nesting omitted
typestringrequired
enum: "TXT", "MX", "CNAME"
Further nesting omitted
namestringrequired
Further nesting omitted
valuestringrequired
Further nesting omitted
priorityinteger | nullrequired
Further nesting omitted
requiredbooleanrequired
Further nesting omitted
statusstringrequired
enum: "pending", "verified", "error"
Further nesting omitted
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
Further nesting omitted
first_observed_atstring | nullrequired
format: "date-time"
Further nesting omitted
last_checked_atstring | nullrequired
format: "date-time"
Further nesting omitted
errorobjectrequired
Further nesting omitted
provider_referencestring | nullrequired
Further nesting omitted
dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
lane_idstringrequired
format: "uuid"
providerstringrequired
enum: "banger", "resend"
purposestringrequired
typestringrequired
enum: "TXT", "MX", "CNAME"
namestringrequired
valuestringrequired
priorityinteger | nullrequired
requiredbooleanrequired
statusstringrequired
enum: "pending", "verified", "error"
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
first_observed_atstring | nullrequired
format: "date-time"
last_checked_atstring | nullrequired
format: "date-time"
errorobjectrequired
Additional propertyAny value
provider_referencestring | nullrequired
deletionobject | nullrequired
No additional properties
job_idstringrequired
format: "uuid"
statusstringrequired
enum: "pending", "processing", "waiting_provider", "completed", "failed"
last_error_codestring | nullrequired
cleanup_recordsarrayrequired
Exact DNS records the user may remove after teardown completes.
Each itemobject
No additional properties
idstringrequired
format: "uuid"
lane_idstringrequired
format: "uuid"
providerstringrequired
enum: "banger", "resend"
purposestringrequired
typestringrequired
enum: "TXT", "MX", "CNAME"
namestringrequired
valuestringrequired
priorityinteger | nullrequired
requiredbooleanrequired
statusstringrequired
enum: "pending", "verified", "error"
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
first_observed_atstring | nullrequired
format: "date-time"
last_checked_atstring | nullrequired
format: "date-time"
errorobjectrequired
Additional propertyAny value
provider_referencestring | nullrequired
curl example
curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/sending-domains/{sendingDomainId}/lanes/{laneKind}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"confirm_domain": "example"
}'
POST/v1/workspaces/{workspaceId}/sending-domains/{sendingDomainId}/lanes/{laneKind}/pause
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
The selected lane is paused without changing its DNS or another lane.
application/json
valueobject
dataobjectrequired
No additional properties
domain_idstringrequired
format: "uuid"
product_idstringrequired
format: "uuid"
root_domainstringrequired
setup_modestring
enum: "simple", "advanced"
domain_statusstringrequired
enum: "pending", "verified", "failed", "disabled", "deleting", "deleted"
lanesarrayrequired
minItems: 1 · maxItems: 3
Each itemobject
No additional properties
idstringrequired
format: "uuid"
kindstringrequired
enum: "mailbox", "product", "broadcast"
display_namestringrequired
from_domainstringrequired
mail_from_domainstring | nullrequired
inbound_domainstring | nullrequired
route_providerstringrequired
enum: "banger", "resend"
selected_provider_connection_idstring | nullrequired
format: "uuid"
inbound_providerstring | nullrequired
enum: "banger", null
statusstringrequired
enum: "pending", "active", "paused", "deleting", "deleted"
status_reasonstring | nullrequired
desired_revisionintegerrequired
minimum: 1
observed_revisionintegerrequired
minimum: 0
dns_readybooleanrequired
provider_readybooleanrequired
inbound_readybooleanrequired
outbound_readybooleanrequired
banger_transport_readybooleanrequired
banger_mail_from_domainstring | nullrequired
provisioning_job_idstring | nullrequired
format: "uuid"
provisioning_statusstringrequired
enum: "pending", "provisioning", "waiting_dns", "active", "failed", "deleting", "deleted", "not_required"
provisioning_error_codestring | null
provisioning_next_attempt_atstring | null
provisioning_last_checked_atstring | null
provider_identity_statusstring | null
provider_dkim_statusstring | null
dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
Further nesting omitted
lane_idstringrequired
format: "uuid"
Further nesting omitted
providerstringrequired
enum: "banger", "resend"
Further nesting omitted
purposestringrequired
Further nesting omitted
typestringrequired
enum: "TXT", "MX", "CNAME"
Further nesting omitted
namestringrequired
Further nesting omitted
valuestringrequired
Further nesting omitted
priorityinteger | nullrequired
Further nesting omitted
requiredbooleanrequired
Further nesting omitted
statusstringrequired
enum: "pending", "verified", "error"
Further nesting omitted
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
Further nesting omitted
first_observed_atstring | nullrequired
format: "date-time"
Further nesting omitted
last_checked_atstring | nullrequired
format: "date-time"
Further nesting omitted
errorobjectrequired
Further nesting omitted
provider_referencestring | nullrequired
Further nesting omitted
dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
lane_idstringrequired
format: "uuid"
providerstringrequired
enum: "banger", "resend"
purposestringrequired
typestringrequired
enum: "TXT", "MX", "CNAME"
namestringrequired
valuestringrequired
priorityinteger | nullrequired
requiredbooleanrequired
statusstringrequired
enum: "pending", "verified", "error"
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
first_observed_atstring | nullrequired
format: "date-time"
last_checked_atstring | nullrequired
format: "date-time"
errorobjectrequired
Additional propertyAny value
provider_referencestring | nullrequired
deletionobject | nullrequired
No additional properties
job_idstringrequired
format: "uuid"
statusstringrequired
enum: "pending", "processing", "waiting_provider", "completed", "failed"
last_error_codestring | nullrequired
cleanup_recordsarrayrequired
Exact DNS records the user may remove after teardown completes.
Each itemobject
No additional properties
idstringrequired
format: "uuid"
lane_idstringrequired
format: "uuid"
providerstringrequired
enum: "banger", "resend"
purposestringrequired
typestringrequired
enum: "TXT", "MX", "CNAME"
namestringrequired
valuestringrequired
priorityinteger | nullrequired
requiredbooleanrequired
statusstringrequired
enum: "pending", "verified", "error"
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
first_observed_atstring | nullrequired
format: "date-time"
last_checked_atstring | nullrequired
format: "date-time"
errorobjectrequired
Additional propertyAny value
provider_referencestring | nullrequired
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/sending-domains/{sendingDomainId}/lanes/{laneKind}/pause' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/sending-domains/{sendingDomainId}/lanes/{laneKind}/resume
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
The selected lane resumes when its saved DNS and provider state are ready.
application/json
valueobject
dataobjectrequired
No additional properties
domain_idstringrequired
format: "uuid"
product_idstringrequired
format: "uuid"
root_domainstringrequired
setup_modestring
enum: "simple", "advanced"
domain_statusstringrequired
enum: "pending", "verified", "failed", "disabled", "deleting", "deleted"
lanesarrayrequired
minItems: 1 · maxItems: 3
Each itemobject
No additional properties
idstringrequired
format: "uuid"
kindstringrequired
enum: "mailbox", "product", "broadcast"
display_namestringrequired
from_domainstringrequired
mail_from_domainstring | nullrequired
inbound_domainstring | nullrequired
route_providerstringrequired
enum: "banger", "resend"
selected_provider_connection_idstring | nullrequired
format: "uuid"
inbound_providerstring | nullrequired
enum: "banger", null
statusstringrequired
enum: "pending", "active", "paused", "deleting", "deleted"
status_reasonstring | nullrequired
desired_revisionintegerrequired
minimum: 1
observed_revisionintegerrequired
minimum: 0
dns_readybooleanrequired
provider_readybooleanrequired
inbound_readybooleanrequired
outbound_readybooleanrequired
banger_transport_readybooleanrequired
banger_mail_from_domainstring | nullrequired
provisioning_job_idstring | nullrequired
format: "uuid"
provisioning_statusstringrequired
enum: "pending", "provisioning", "waiting_dns", "active", "failed", "deleting", "deleted", "not_required"
provisioning_error_codestring | null
provisioning_next_attempt_atstring | null
provisioning_last_checked_atstring | null
provider_identity_statusstring | null
provider_dkim_statusstring | null
dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
Further nesting omitted
lane_idstringrequired
format: "uuid"
Further nesting omitted
providerstringrequired
enum: "banger", "resend"
Further nesting omitted
purposestringrequired
Further nesting omitted
typestringrequired
enum: "TXT", "MX", "CNAME"
Further nesting omitted
namestringrequired
Further nesting omitted
valuestringrequired
Further nesting omitted
priorityinteger | nullrequired
Further nesting omitted
requiredbooleanrequired
Further nesting omitted
statusstringrequired
enum: "pending", "verified", "error"
Further nesting omitted
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
Further nesting omitted
first_observed_atstring | nullrequired
format: "date-time"
Further nesting omitted
last_checked_atstring | nullrequired
format: "date-time"
Further nesting omitted
errorobjectrequired
Further nesting omitted
provider_referencestring | nullrequired
Further nesting omitted
dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
lane_idstringrequired
format: "uuid"
providerstringrequired
enum: "banger", "resend"
purposestringrequired
typestringrequired
enum: "TXT", "MX", "CNAME"
namestringrequired
valuestringrequired
priorityinteger | nullrequired
requiredbooleanrequired
statusstringrequired
enum: "pending", "verified", "error"
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
first_observed_atstring | nullrequired
format: "date-time"
last_checked_atstring | nullrequired
format: "date-time"
errorobjectrequired
Additional propertyAny value
provider_referencestring | nullrequired
deletionobject | nullrequired
No additional properties
job_idstringrequired
format: "uuid"
statusstringrequired
enum: "pending", "processing", "waiting_provider", "completed", "failed"
last_error_codestring | nullrequired
cleanup_recordsarrayrequired
Exact DNS records the user may remove after teardown completes.
Each itemobject
No additional properties
idstringrequired
format: "uuid"
lane_idstringrequired
format: "uuid"
providerstringrequired
enum: "banger", "resend"
purposestringrequired
typestringrequired
enum: "TXT", "MX", "CNAME"
namestringrequired
valuestringrequired
priorityinteger | nullrequired
requiredbooleanrequired
statusstringrequired
enum: "pending", "verified", "error"
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
first_observed_atstring | nullrequired
format: "date-time"
last_checked_atstring | nullrequired
format: "date-time"
errorobjectrequired
Additional propertyAny value
provider_referencestring | nullrequired
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/sending-domains/{sendingDomainId}/lanes/{laneKind}/resume' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/sending-domains/{sendingDomainId}/verify
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Banger identity and DNS verification were safely rechecked.
application/json
valueobject
dataobjectrequired
No additional properties
domain_idstringrequired
format: "uuid"
product_idstringrequired
format: "uuid"
root_domainstringrequired
setup_modestring
enum: "simple", "advanced"
domain_statusstringrequired
enum: "pending", "verified", "failed", "disabled", "deleting", "deleted"
lanesarrayrequired
minItems: 1 · maxItems: 3
Each itemobject
No additional properties
idstringrequired
format: "uuid"
kindstringrequired
enum: "mailbox", "product", "broadcast"
display_namestringrequired
from_domainstringrequired
mail_from_domainstring | nullrequired
inbound_domainstring | nullrequired
route_providerstringrequired
enum: "banger", "resend"
selected_provider_connection_idstring | nullrequired
format: "uuid"
inbound_providerstring | nullrequired
enum: "banger", null
statusstringrequired
enum: "pending", "active", "paused", "deleting", "deleted"
status_reasonstring | nullrequired
desired_revisionintegerrequired
minimum: 1
observed_revisionintegerrequired
minimum: 0
dns_readybooleanrequired
provider_readybooleanrequired
inbound_readybooleanrequired
outbound_readybooleanrequired
banger_transport_readybooleanrequired
banger_mail_from_domainstring | nullrequired
provisioning_job_idstring | nullrequired
format: "uuid"
provisioning_statusstringrequired
enum: "pending", "provisioning", "waiting_dns", "active", "failed", "deleting", "deleted", "not_required"
provisioning_error_codestring | null
provisioning_next_attempt_atstring | null
provisioning_last_checked_atstring | null
provider_identity_statusstring | null
provider_dkim_statusstring | null
dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
Further nesting omitted
lane_idstringrequired
format: "uuid"
Further nesting omitted
providerstringrequired
enum: "banger", "resend"
Further nesting omitted
purposestringrequired
Further nesting omitted
typestringrequired
enum: "TXT", "MX", "CNAME"
Further nesting omitted
namestringrequired
Further nesting omitted
valuestringrequired
Further nesting omitted
priorityinteger | nullrequired
Further nesting omitted
requiredbooleanrequired
Further nesting omitted
statusstringrequired
enum: "pending", "verified", "error"
Further nesting omitted
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
Further nesting omitted
first_observed_atstring | nullrequired
format: "date-time"
Further nesting omitted
last_checked_atstring | nullrequired
format: "date-time"
Further nesting omitted
errorobjectrequired
Further nesting omitted
provider_referencestring | nullrequired
Further nesting omitted
dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
lane_idstringrequired
format: "uuid"
providerstringrequired
enum: "banger", "resend"
purposestringrequired
typestringrequired
enum: "TXT", "MX", "CNAME"
namestringrequired
valuestringrequired
priorityinteger | nullrequired
requiredbooleanrequired
statusstringrequired
enum: "pending", "verified", "error"
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
first_observed_atstring | nullrequired
format: "date-time"
last_checked_atstring | nullrequired
format: "date-time"
errorobjectrequired
Additional propertyAny value
provider_referencestring | nullrequired
deletionobject | nullrequired
No additional properties
job_idstringrequired
format: "uuid"
statusstringrequired
enum: "pending", "processing", "waiting_provider", "completed", "failed"
last_error_codestring | nullrequired
cleanup_recordsarrayrequired
Exact DNS records the user may remove after teardown completes.
Each itemobject
No additional properties
idstringrequired
format: "uuid"
lane_idstringrequired
format: "uuid"
providerstringrequired
enum: "banger", "resend"
purposestringrequired
typestringrequired
enum: "TXT", "MX", "CNAME"
namestringrequired
valuestringrequired
priorityinteger | nullrequired
requiredbooleanrequired
statusstringrequired
enum: "pending", "verified", "error"
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
first_observed_atstring | nullrequired
format: "date-time"
last_checked_atstring | nullrequired
format: "date-time"
errorobjectrequired
Additional propertyAny value
provider_referencestring | nullrequired
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/sending-domains/{sendingDomainId}/verify' \
--header "Authorization: Bearer $BANGER_API_KEY"
Webhooks
GET/v1/workspaces/{workspaceId}/webhooks
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Workspace webhook endpoints.
application/json
valueobject
dataarrayrequired
Each itemobject
idstringrequired
format: "uuid"
kindstringrequired
enum: "outbound", "inbound"
source_keystringrequired
pattern: "^[a-z0-9][a-z0-9_-]{0,62}$"
namestringrequired
endpoint_urlstring | null
format: "uri"
statusstringrequired
enum: "active", "disabled", "error"
event_typesarrayrequired
Each itemstring
connection_idstring | null
format: "uuid"
delivered_countintegerrequired
minimum: 0
failed_countintegerrequired
minimum: 0
last_delivered_atstring | null
format: "date-time"
last_received_atstring | null
format: "date-time"
last_error_codestring | null
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/webhooks' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/webhooks
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
kindstringrequired
enum: "outbound", "inbound"
namestringrequired
minLength: 1 · maxLength: 120
source_keystring
pattern: "^[a-z0-9][a-z0-9_-]{0,62}$" · default: "custom"
source_configobject
Source-specific deterministic event evaluation and delivery mapping. Supported for Zendesk and Supabase Auth.
No additional properties
vip_tagsarray
minItems: 1 · maxItems: 20 · uniqueItems: true
Each itemstring
pattern: "^[a-z0-9][a-z0-9_-]{0,63}$"
sla_warning_minutesinteger
minimum: 1 · maximum: 10080
project_urlstring
Supabase project URL.
format: "uri"
mailbox_idstring
Active Banger sending address used for Supabase Auth email.
format: "uuid"
template_idsobject
Banger template selected for each Supabase Auth email action.
No additional properties
signupstringrequired
format: "uuid"
invitestringrequired
format: "uuid"
magiclinkstringrequired
format: "uuid"
recoverystringrequired
format: "uuid"
email_changestringrequired
format: "uuid"
reauthenticationstringrequired
format: "uuid"
password_changed_notificationstringrequired
format: "uuid"
email_changed_notificationstringrequired
format: "uuid"
phone_changed_notificationstringrequired
format: "uuid"
identity_linked_notificationstringrequired
format: "uuid"
identity_unlinked_notificationstringrequired
format: "uuid"
mfa_factor_enrolled_notificationstringrequired
format: "uuid"
mfa_factor_unenrolled_notificationstringrequired
format: "uuid"
signing_secretstring
Supabase Send Email Hook secret. Accepted only for an inbound Supabase source and encrypted at rest.
minLength: 20 · maxLength: 500
endpoint_urlstring
Required for outbound destinations only.
format: "uri"
event_typesarray
minItems: 1 · maxItems: 100 · uniqueItems: true
Each itemstring
Success response 201
Webhook created. Outbound signing secrets are shown once; inbound credential options can be reopened by authorized callers.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
idstringrequired
format: "uuid"
kindstringrequired
enum: "outbound", "inbound"
source_keystringrequired
pattern: "^[a-z0-9][a-z0-9_-]{0,62}$"
namestringrequired
endpoint_urlstring | null
format: "uri"
statusstringrequired
enum: "active", "disabled", "error"
event_typesarrayrequired
Each itemstring
connection_idstring | null
format: "uuid"
delivered_countintegerrequired
minimum: 0
failed_countintegerrequired
minimum: 0
last_delivered_atstring | null
format: "date-time"
last_received_atstring | null
format: "date-time"
last_error_codestring | null
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
allOf 2object
signing_secretstring
Outbound request signing secret
source_urlstring
Inbound event URL containing its unguessable secret.
format: "uri"
webhook_urlstring
Public inbound URL to use with the Authorization header.
format: "uri"
bearer_tokenstring
Secret endpoint token to send as Authorization Bearer.
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/webhooks' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"kind": "outbound",
"name": "example",
"source_key": "custom",
"source_config": {
"vip_tags": [
"example"
],
"sla_warning_minutes": 1,
"project_url": "https://example.com",
"mailbox_id": "00000000-0000-4000-8000-000000000001",
"template_ids": {
"signup": "00000000-0000-4000-8000-000000000001",
"invite": "00000000-0000-4000-8000-000000000001",
"magiclink": "00000000-0000-4000-8000-000000000001",
"recovery": "00000000-0000-4000-8000-000000000001",
"email_change": "00000000-0000-4000-8000-000000000001",
"reauthentication": "00000000-0000-4000-8000-000000000001",
"password_changed_notification": "00000000-0000-4000-8000-000000000001",
"email_changed_notification": "00000000-0000-4000-8000-000000000001",
"phone_changed_notification": "00000000-0000-4000-8000-000000000001",
"identity_linked_notification": "00000000-0000-4000-8000-000000000001",
"identity_unlinked_notification": "00000000-0000-4000-8000-000000000001",
"mfa_factor_enrolled_notification": "00000000-0000-4000-8000-000000000001",
"mfa_factor_unenrolled_notification": "00000000-0000-4000-8000-000000000001"
}
},
"signing_secret": "examplexxxxxxxxxxxxx",
"endpoint_url": "https://example.com",
"event_types": [
"example"
]
}'
PATCH/v1/workspaces/{workspaceId}/webhooks/{endpointId}
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
statusstringrequired
enum: "active"
Success response 200
Webhook re-enabled.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
kindstringrequired
enum: "outbound", "inbound"
source_keystringrequired
pattern: "^[a-z0-9][a-z0-9_-]{0,62}$"
namestringrequired
endpoint_urlstring | null
format: "uri"
statusstringrequired
enum: "active", "disabled", "error"
event_typesarrayrequired
Each itemstring
connection_idstring | null
format: "uuid"
delivered_countintegerrequired
minimum: 0
failed_countintegerrequired
minimum: 0
last_delivered_atstring | null
format: "date-time"
last_received_atstring | null
format: "date-time"
last_error_codestring | null
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
curl example
curl --request PATCH --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/webhooks/{endpointId}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"status": "active"
}'
DELETE/v1/workspaces/{workspaceId}/webhooks/{endpointId}
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 204
Webhook disabled.
No response body.
curl example
curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/webhooks/{endpointId}' \
--header "Authorization: Bearer $BANGER_API_KEY"
GET/v1/workspaces/{workspaceId}/webhooks/{endpointId}/credentials
Requires automation:execute. Returns the same secret without creating or rotating resources. Never cache or log this response.
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Private source URL, public webhook URL, and separate bearer token.
application/json
valueobject
dataunspecified
allOf 1object
idstringrequired
format: "uuid"
kindstringrequired
enum: "outbound", "inbound"
source_keystringrequired
pattern: "^[a-z0-9][a-z0-9_-]{0,62}$"
namestringrequired
endpoint_urlstring | null
format: "uri"
statusstringrequired
enum: "active", "disabled", "error"
event_typesarrayrequired
Each itemstring
connection_idstring | null
format: "uuid"
delivered_countintegerrequired
minimum: 0
failed_countintegerrequired
minimum: 0
last_delivered_atstring | null
format: "date-time"
last_received_atstring | null
format: "date-time"
last_error_codestring | null
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
allOf 2object
signing_secretstring
Outbound request signing secret
source_urlstring
Inbound event URL containing its unguessable secret.
format: "uri"
webhook_urlstring
Public inbound URL to use with the Authorization header.
format: "uri"
bearer_tokenstring
Secret endpoint token to send as Authorization Bearer.
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/webhooks/{endpointId}/credentials' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'x-banger-product-id: 00000000-0000-4000-8000-000000000001'
GET/v1/workspaces/{workspaceId}/webhooks/{endpointId}/deliveries
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Recent delivery attempts.
application/json
valueobject
dataarrayrequired
Each itemobject
idstringrequired
format: "uuid"
event_typestringrequired
statusstringrequired
enum: "pending", "delivering", "delivered", "failed"
attempt_countintegerrequired
minimum: 0
http_statusinteger | null
minimum: 100 · maximum: 599
last_error_codestring | null
delivered_atstring | null
format: "date-time"
created_atstringrequired
format: "date-time"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/webhooks/{endpointId}/deliveries' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/webhooks/{endpointId}/test
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 202
Signed test event queued.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
statusstringrequired
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/webhooks/{endpointId}/test' \
--header "Authorization: Bearer $BANGER_API_KEY"
Onboarding
PUT/v1/workspaces/{workspaceId}/onboarding/path
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
pathstringrequired
enum: "starter_identity", "company_domain", "resend_gateway", "banger_native_sending", "work_mailbox", "gmail", "native_mailbox", "existing_provider"
Success response 200
The server-authoritative onboarding path was selected.
application/json
valueobject
dataobjectrequired
pathstringrequired
enum: "starter_identity", "company_domain", "resend_gateway", "banger_native_sending", "work_mailbox", "gmail", "native_mailbox", "existing_provider"
curl example
curl --request PUT --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/path' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"path": "starter_identity"
}'
GET/v1/workspaces/{workspaceId}/onboarding/guided
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Persisted progress and independently verified capabilities.
application/json
valueobject
dataobjectrequired
product_idstringrequired
format: "uuid"
lessonobject
stepstringrequired
purposestringrequired
setupstringrequired
boundarystringrequired
example_requeststringrequired
resultstringrequired
choicestringrequired
skipstring | nullrequired
guidancestring
current_stepstringrequired
enum: "connect", "mailbox", "business", "journey", "broadcast", "identity", "sending"
completed_countintegerrequired
total_stepsintegerrequired
enum: 4, 7
completebooleanrequired
shared_education_completeboolean
outcomestringrequired
enum: "in_progress", "production_deferred", "production_ready"
recommended_actionstringrequired
readinessobjectrequired
Additional propertyboolean
progressobjectrequired
Additional propertyAny value
stepsarrayrequired
Each itemobject
idstringrequired
titlestringrequired
explanationstring
statusstringrequired
enum: "not_started", "in_progress", "waiting", "needs_attention", "complete", "skipped"
blocking_dependencystring | null
recommended_actionstring
actionsarrayrequired
Each itemstring
resource_idsarrayrequired
Each itemstring
evidenceobjectrequired
Additional propertyAny value
Additional propertyAny value
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/guided?details=1' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'x-banger-product-id: 00000000-0000-4000-8000-000000000001'
POST/v1/workspaces/{workspaceId}/onboarding/guided
Sends target only the authorizing user's verified signup address. Journeys stay inactive and Broadcasts stay unsent. Existing migration approval boundaries apply.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
actionstringrequired
enum: "create_mailbox", "send_first", "skip_reply", "save_business", "discover_brand", "save_journey", "skip_journey", "save_broadcast", "skip_broadcast", "choose_identity", "defer_identity", "setup_receiving", "defer_receiving", "setup_sending", "verify_dns", "continue_domain", "add_inboxes", "skip_inboxes", "send_samples", "finish_for_now", "finish"
dataobject
Business fields company_name, primary_goal, website_url and brand; draft fields name, subject, preview_text, body_text and edit; identity fields domain and local_part. Recipient input is never accepted.
Additional propertyAny value
Success response 200
Refreshed canonical state after the requested operation.
application/json
valueobject
dataobjectrequired
product_idstringrequired
format: "uuid"
lessonobject
stepstringrequired
purposestringrequired
setupstringrequired
boundarystringrequired
example_requeststringrequired
resultstringrequired
choicestringrequired
skipstring | nullrequired
guidancestring
current_stepstringrequired
enum: "connect", "mailbox", "business", "journey", "broadcast", "identity", "sending"
completed_countintegerrequired
total_stepsintegerrequired
enum: 4, 7
completebooleanrequired
shared_education_completeboolean
outcomestringrequired
enum: "in_progress", "production_deferred", "production_ready"
recommended_actionstringrequired
readinessobjectrequired
Additional propertyboolean
progressobjectrequired
Additional propertyAny value
stepsarrayrequired
Each itemobject
idstringrequired
titlestringrequired
explanationstring
statusstringrequired
enum: "not_started", "in_progress", "waiting", "needs_attention", "complete", "skipped"
blocking_dependencystring | null
recommended_actionstring
actionsarrayrequired
Each itemstring
resource_idsarrayrequired
Each itemstring
evidenceobjectrequired
Additional propertyAny value
Additional propertyAny value
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/guided' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'x-banger-product-id: 00000000-0000-4000-8000-000000000001' \
--header 'Content-Type: application/json' \
--data-raw '{
"action": "create_mailbox",
"data": {}
}'
GET/v1/workspaces/{workspaceId}/onboarding/agent-state
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Current server-owned onboarding state.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
workspace_idstringrequired
format: "uuid"
statusstringrequired
enum: "choose_agent", "discovering", "planning", "implementing", "validating", "ready", "complete"
entry_surfacestring | nullrequired
enum: "codex", "chatgpt", "claude", "grok", "other_agent", "browser", null
agent_statusstringrequired
enum: "not_connected", "connecting", "connected", "browser_only"
agent_client_namestring | nullrequired
domain_choicestringrequired
enum: "undecided", "company_domain", "no_domain"
company_domainstring | nullrequired
domain_chosen_atstring | nullrequired
format: "date-time"
business_contextobjectrequired
Additional propertyAny value
opportunity_planarrayrequired
Each itemobject
Additional propertyAny value
implementation_summaryobjectrequired
Additional propertyAny value
validation_summaryobjectrequired
Additional propertyAny value
journey_metadataobjectrequired
Additional propertyAny value
context_reviewed_atstring | nullrequired
format: "date-time"
plan_proposed_atstring | nullrequired
format: "date-time"
plan_approved_atstring | nullrequired
format: "date-time"
completed_atstring | nullrequired
format: "date-time"
versionintegerrequired
format: "int64" · minimum: 1
updated_atstringrequired
format: "date-time"
allOf 2object
domain_discoveryunspecifiedrequired
oneOf 1object
domainstringrequired
scan_statusstringrequired
enum: "complete", "partial", "failed"
companyobjectrequired
domainstringrequired
Further nesting omitted
website_urlstring | nullrequired
format: "uri"
Further nesting omitted
website_statusstringrequired
enum: "available", "missing", "blocked", "error"
Further nesting omitted
company_namestringrequired
Further nesting omitted
summarystringrequired
Further nesting omitted
audiencestringrequired
Further nesting omitted
offeringsarrayrequired
Further nesting omitted
logo_urlstring | nullrequired
format: "uri"
Further nesting omitted
favicon_urlstring | nullrequired
format: "uri"
Further nesting omitted
visual_identityobjectrequired
Further nesting omitted
source_snapshotobjectrequired
Further nesting omitted
dns_signalsarrayrequired
Each itemobject
Further nesting omitted
dns_providerunspecifiedrequired
oneOf 1object
No additional properties
Further nesting omitted
oneOf 2null
Further nesting omitted
provider_detectionsarrayrequired
Each itemobject
Further nesting omitted
capability_summaryarrayrequired
Each itemobject
Further nesting omitted
recommended_connectionsarrayrequired
Each itemobject
No additional properties
Further nesting omitted
connection_planarrayrequired
Each itemobject
No additional properties
Further nesting omitted
limitationsarrayrequired
Each itemstring
Further nesting omitted
scanned_atstringrequired
format: "date-time"
confirmed_atstring | nullrequired
format: "date-time"
oneOf 2null
recommended_connectionsarrayrequired
Each itemobject
No additional properties
keystringrequired
namestringrequired
categorystringrequired
enum: "email", "customer", "product", "work", "data"
prioritystringrequired
enum: "required", "recommended"
reasonstringrequired
sourcestringrequired
enum: "dns", "business_context", "opportunity_plan", "banger_recommendation"
setup_modestringrequired
enum: "oauth", "secure_credentials"
availablebooleanrequired
provider_keystring
evidencearrayrequired
Each itemobject
Further nesting omitted
domain_bundleobject | nullrequired
Additional propertyAny value
growthobjectrequired
Additional propertyAny value
activationobjectrequired
modestringrequired
enum: "hosted", "company_domain", "starter"
statusstringrequired
enum: "hosted_mailbox_required", "hosted_mailbox_proving", "hosted_mailbox_ready", "needs_context", "needs_provisioning", "provisioning", "dns_required", "ready_for_proof", "proving", "activated", "starter_required", "starter_proving", "starter_ready"
domainstring | nullrequired
sending_domain_idstring | nullrequired
format: "uuid"
mailbox_idstring | nullrequired
format: "uuid"
mailbox_addressstring | nullrequired
format: "email"
exact_dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
Further nesting omitted
lane_idstringrequired
format: "uuid"
Further nesting omitted
providerstringrequired
enum: "banger", "resend"
Further nesting omitted
purposestringrequired
Further nesting omitted
typestringrequired
enum: "TXT", "MX", "CNAME"
Further nesting omitted
namestringrequired
Further nesting omitted
valuestringrequired
Further nesting omitted
priorityinteger | nullrequired
Further nesting omitted
requiredbooleanrequired
Further nesting omitted
statusstringrequired
enum: "pending", "verified", "error"
Further nesting omitted
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
Further nesting omitted
first_observed_atstring | nullrequired
format: "date-time"
Further nesting omitted
last_checked_atstring | nullrequired
format: "date-time"
Further nesting omitted
errorobjectrequired
Further nesting omitted
provider_referencestring | nullrequired
Further nesting omitted
checkpointsarrayrequired
Each itemobject
keystringrequired
enum: "domain", "provider", "infrastructure", "dns", "mailbox", "product", "broadcast"
Further nesting omitted
labelstringrequired
Further nesting omitted
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
lanesobjectrequired
mailboxobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
transactionalobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
marketingobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
proofunspecifiedrequired
oneOf 1object
proof_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_addressstringrequired
format: "email"
Further nesting omitted
command_idstringrequired
format: "uuid"
Further nesting omitted
phasestringrequired
enum: "sending", "sent", "received", "checked", "failed"
Further nesting omitted
send_completebooleanrequired
Further nesting omitted
receive_completebooleanrequired
Further nesting omitted
round_trip_check_completebooleanrequired
Further nesting omitted
agent_check_completebooleanrequired
Further nesting omitted
completebooleanrequired
Further nesting omitted
expected_subjectstringrequired
Further nesting omitted
expected_body_textstringrequired
Further nesting omitted
received_message_idstring
format: "uuid"
Further nesting omitted
received_thread_idstring
format: "uuid"
Further nesting omitted
received_subjectstring
Further nesting omitted
received_body_textstring
Further nesting omitted
received_atstring
format: "date-time"
Further nesting omitted
agent_labelstring
Further nesting omitted
agent_suggested_actionstring
Further nesting omitted
error_codestring
Further nesting omitted
replayedbooleanrequired
Further nesting omitted
oneOf 2object
proof_idstringrequired
format: "uuid"
Further nesting omitted
domain_idstringrequired
format: "uuid"
Further nesting omitted
native_domain_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_addressstringrequired
format: "email"
Further nesting omitted
transactional_send_intent_idstring
format: "uuid"
Further nesting omitted
marketing_send_intent_idstring
format: "uuid"
Further nesting omitted
transactional_subjectstringrequired
Further nesting omitted
marketing_subjectstringrequired
Further nesting omitted
phasestringrequired
enum: "sending", "receiving", "received", "checked", "failed"
Further nesting omitted
send_completebooleanrequired
Further nesting omitted
transactional_receivedbooleanrequired
Further nesting omitted
marketing_receivedbooleanrequired
Further nesting omitted
receive_completebooleanrequired
Further nesting omitted
agent_check_completebooleanrequired
Further nesting omitted
completebooleanrequired
Further nesting omitted
error_codestring
Further nesting omitted
replayedbooleanrequired
Further nesting omitted
oneOf 3null
overall_readybooleanrequired
production_readybooleanrequired
completedbooleanrequired
pendingbooleanrequired
next_actionstringrequired
enum: "choose_agent", "provision_hosted_mailbox", "send_aha_1", "wait_for_aha_1", "offer_custom_domain", "review_domain_bundle", "provision_domain_bundle", "wait_for_dns_records", "ask_computer_use_permission", "configure_dns_with_computer_use", "present_manual_dns_instructions", "wait_for_dns_propagation", "send_aha_2", "wait_for_aha_2", "create_starter_mailbox", "run_starter_proof", "wait_for_starter_proof", "collect_business_context", "build_lifecycle_map", "review_growth_system", "connect_required_services", "explain_persistent_mcp", "offer_autopilot", "activate_autopilot", "validate", "complete", "open_dashboard"
action_requiredobjectrequired
typestringrequired
requiredbooleanrequired
actionstringrequired
enum: "choose_agent", "provision_hosted_mailbox", "send_aha_1", "wait_for_aha_1", "offer_custom_domain", "review_domain_bundle", "provision_domain_bundle", "wait_for_dns_records", "ask_computer_use_permission", "configure_dns_with_computer_use", "present_manual_dns_instructions", "wait_for_dns_propagation", "send_aha_2", "wait_for_aha_2", "create_starter_mailbox", "run_starter_proof", "wait_for_starter_proof", "collect_business_context", "build_lifecycle_map", "review_growth_system", "connect_required_services", "explain_persistent_mcp", "offer_autopilot", "activate_autopilot", "validate", "complete", "open_dashboard"
urlstring | nullrequired
format: "uri"
instructionsstring | nullrequired
secure_urlstring | nullrequired
format: "uri"
mcp_urlstringrequired
format: "uri"
dashboard_urlstringrequired
format: "uri"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/agent-state' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/onboarding/agent-state/start
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
entry_surfacestringrequired
enum: "codex", "chatgpt", "claude", "grok", "other_agent", "browser"
client_namestring
minLength: 1 · maxLength: 100
Success response 200
Journey started or resumed.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
workspace_idstringrequired
format: "uuid"
statusstringrequired
enum: "choose_agent", "discovering", "planning", "implementing", "validating", "ready", "complete"
entry_surfacestring | nullrequired
enum: "codex", "chatgpt", "claude", "grok", "other_agent", "browser", null
agent_statusstringrequired
enum: "not_connected", "connecting", "connected", "browser_only"
agent_client_namestring | nullrequired
domain_choicestringrequired
enum: "undecided", "company_domain", "no_domain"
company_domainstring | nullrequired
domain_chosen_atstring | nullrequired
format: "date-time"
business_contextobjectrequired
Additional propertyAny value
opportunity_planarrayrequired
Each itemobject
Additional propertyAny value
implementation_summaryobjectrequired
Additional propertyAny value
validation_summaryobjectrequired
Additional propertyAny value
journey_metadataobjectrequired
Additional propertyAny value
context_reviewed_atstring | nullrequired
format: "date-time"
plan_proposed_atstring | nullrequired
format: "date-time"
plan_approved_atstring | nullrequired
format: "date-time"
completed_atstring | nullrequired
format: "date-time"
versionintegerrequired
format: "int64" · minimum: 1
updated_atstringrequired
format: "date-time"
allOf 2object
domain_discoveryunspecifiedrequired
oneOf 1object
domainstringrequired
scan_statusstringrequired
enum: "complete", "partial", "failed"
companyobjectrequired
domainstringrequired
Further nesting omitted
website_urlstring | nullrequired
format: "uri"
Further nesting omitted
website_statusstringrequired
enum: "available", "missing", "blocked", "error"
Further nesting omitted
company_namestringrequired
Further nesting omitted
summarystringrequired
Further nesting omitted
audiencestringrequired
Further nesting omitted
offeringsarrayrequired
Further nesting omitted
logo_urlstring | nullrequired
format: "uri"
Further nesting omitted
favicon_urlstring | nullrequired
format: "uri"
Further nesting omitted
visual_identityobjectrequired
Further nesting omitted
source_snapshotobjectrequired
Further nesting omitted
dns_signalsarrayrequired
Each itemobject
Further nesting omitted
dns_providerunspecifiedrequired
oneOf 1object
No additional properties
Further nesting omitted
oneOf 2null
Further nesting omitted
provider_detectionsarrayrequired
Each itemobject
Further nesting omitted
capability_summaryarrayrequired
Each itemobject
Further nesting omitted
recommended_connectionsarrayrequired
Each itemobject
No additional properties
Further nesting omitted
connection_planarrayrequired
Each itemobject
No additional properties
Further nesting omitted
limitationsarrayrequired
Each itemstring
Further nesting omitted
scanned_atstringrequired
format: "date-time"
confirmed_atstring | nullrequired
format: "date-time"
oneOf 2null
recommended_connectionsarrayrequired
Each itemobject
No additional properties
keystringrequired
namestringrequired
categorystringrequired
enum: "email", "customer", "product", "work", "data"
prioritystringrequired
enum: "required", "recommended"
reasonstringrequired
sourcestringrequired
enum: "dns", "business_context", "opportunity_plan", "banger_recommendation"
setup_modestringrequired
enum: "oauth", "secure_credentials"
availablebooleanrequired
provider_keystring
evidencearrayrequired
Each itemobject
Further nesting omitted
domain_bundleobject | nullrequired
Additional propertyAny value
growthobjectrequired
Additional propertyAny value
activationobjectrequired
modestringrequired
enum: "hosted", "company_domain", "starter"
statusstringrequired
enum: "hosted_mailbox_required", "hosted_mailbox_proving", "hosted_mailbox_ready", "needs_context", "needs_provisioning", "provisioning", "dns_required", "ready_for_proof", "proving", "activated", "starter_required", "starter_proving", "starter_ready"
domainstring | nullrequired
sending_domain_idstring | nullrequired
format: "uuid"
mailbox_idstring | nullrequired
format: "uuid"
mailbox_addressstring | nullrequired
format: "email"
exact_dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
Further nesting omitted
lane_idstringrequired
format: "uuid"
Further nesting omitted
providerstringrequired
enum: "banger", "resend"
Further nesting omitted
purposestringrequired
Further nesting omitted
typestringrequired
enum: "TXT", "MX", "CNAME"
Further nesting omitted
namestringrequired
Further nesting omitted
valuestringrequired
Further nesting omitted
priorityinteger | nullrequired
Further nesting omitted
requiredbooleanrequired
Further nesting omitted
statusstringrequired
enum: "pending", "verified", "error"
Further nesting omitted
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
Further nesting omitted
first_observed_atstring | nullrequired
format: "date-time"
Further nesting omitted
last_checked_atstring | nullrequired
format: "date-time"
Further nesting omitted
errorobjectrequired
Further nesting omitted
provider_referencestring | nullrequired
Further nesting omitted
checkpointsarrayrequired
Each itemobject
keystringrequired
enum: "domain", "provider", "infrastructure", "dns", "mailbox", "product", "broadcast"
Further nesting omitted
labelstringrequired
Further nesting omitted
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
lanesobjectrequired
mailboxobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
transactionalobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
marketingobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
proofunspecifiedrequired
oneOf 1object
proof_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_addressstringrequired
format: "email"
Further nesting omitted
command_idstringrequired
format: "uuid"
Further nesting omitted
phasestringrequired
enum: "sending", "sent", "received", "checked", "failed"
Further nesting omitted
send_completebooleanrequired
Further nesting omitted
receive_completebooleanrequired
Further nesting omitted
round_trip_check_completebooleanrequired
Further nesting omitted
agent_check_completebooleanrequired
Further nesting omitted
completebooleanrequired
Further nesting omitted
expected_subjectstringrequired
Further nesting omitted
expected_body_textstringrequired
Further nesting omitted
received_message_idstring
format: "uuid"
Further nesting omitted
received_thread_idstring
format: "uuid"
Further nesting omitted
received_subjectstring
Further nesting omitted
received_body_textstring
Further nesting omitted
received_atstring
format: "date-time"
Further nesting omitted
agent_labelstring
Further nesting omitted
agent_suggested_actionstring
Further nesting omitted
error_codestring
Further nesting omitted
replayedbooleanrequired
Further nesting omitted
oneOf 2object
proof_idstringrequired
format: "uuid"
Further nesting omitted
domain_idstringrequired
format: "uuid"
Further nesting omitted
native_domain_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_addressstringrequired
format: "email"
Further nesting omitted
transactional_send_intent_idstring
format: "uuid"
Further nesting omitted
marketing_send_intent_idstring
format: "uuid"
Further nesting omitted
transactional_subjectstringrequired
Further nesting omitted
marketing_subjectstringrequired
Further nesting omitted
phasestringrequired
enum: "sending", "receiving", "received", "checked", "failed"
Further nesting omitted
send_completebooleanrequired
Further nesting omitted
transactional_receivedbooleanrequired
Further nesting omitted
marketing_receivedbooleanrequired
Further nesting omitted
receive_completebooleanrequired
Further nesting omitted
agent_check_completebooleanrequired
Further nesting omitted
completebooleanrequired
Further nesting omitted
error_codestring
Further nesting omitted
replayedbooleanrequired
Further nesting omitted
oneOf 3null
overall_readybooleanrequired
production_readybooleanrequired
completedbooleanrequired
pendingbooleanrequired
next_actionstringrequired
enum: "choose_agent", "provision_hosted_mailbox", "send_aha_1", "wait_for_aha_1", "offer_custom_domain", "review_domain_bundle", "provision_domain_bundle", "wait_for_dns_records", "ask_computer_use_permission", "configure_dns_with_computer_use", "present_manual_dns_instructions", "wait_for_dns_propagation", "send_aha_2", "wait_for_aha_2", "create_starter_mailbox", "run_starter_proof", "wait_for_starter_proof", "collect_business_context", "build_lifecycle_map", "review_growth_system", "connect_required_services", "explain_persistent_mcp", "offer_autopilot", "activate_autopilot", "validate", "complete", "open_dashboard"
action_requiredobjectrequired
typestringrequired
requiredbooleanrequired
actionstringrequired
enum: "choose_agent", "provision_hosted_mailbox", "send_aha_1", "wait_for_aha_1", "offer_custom_domain", "review_domain_bundle", "provision_domain_bundle", "wait_for_dns_records", "ask_computer_use_permission", "configure_dns_with_computer_use", "present_manual_dns_instructions", "wait_for_dns_propagation", "send_aha_2", "wait_for_aha_2", "create_starter_mailbox", "run_starter_proof", "wait_for_starter_proof", "collect_business_context", "build_lifecycle_map", "review_growth_system", "connect_required_services", "explain_persistent_mcp", "offer_autopilot", "activate_autopilot", "validate", "complete", "open_dashboard"
urlstring | nullrequired
format: "uri"
instructionsstring | nullrequired
secure_urlstring | nullrequired
format: "uri"
mcp_urlstringrequired
format: "uri"
dashboard_urlstringrequired
format: "uri"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/agent-state/start' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"entry_surface": "codex",
"client_name": "example"
}'
POST/v1/workspaces/{workspaceId}/onboarding/agent-state/aha-one
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
The hosted mailbox and its existing proof were resumed.
application/json
valueobject
dataobjectrequired
proof_idstringrequired
format: "uuid"
mailbox_idstringrequired
format: "uuid"
mailbox_addressstringrequired
format: "email"
command_idstringrequired
format: "uuid"
phasestringrequired
enum: "sending", "sent", "received", "checked", "failed"
send_completebooleanrequired
receive_completebooleanrequired
round_trip_check_completebooleanrequired
agent_check_completebooleanrequired
completebooleanrequired
expected_subjectstringrequired
expected_body_textstringrequired
received_message_idstring
format: "uuid"
received_thread_idstring
format: "uuid"
received_subjectstring
received_body_textstring
received_atstring
format: "date-time"
agent_labelstring
agent_suggested_actionstring
error_codestring
replayedbooleanrequired
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/agent-state/aha-one' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/onboarding/agent-state/agent-proof
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
The same OAuth grant replayed or already completed the proof.
application/json
valueobject
dataobjectrequired
statusstringrequired
enum: "pending", "verified"
attempt_idstringrequired
format: "uuid"
oauth_grant_idstringrequired
oauth_client_idstring | nullrequired
client_namestring | nullrequired
mailbox_idstringrequired
format: "uuid"
mailbox_addressstringrequired
format: "email"
expected_subjectstringrequired
initiated_atstringrequired
format: "date-time"
command_idstring
format: "uuid"
send_statusstring
dispatch_statusstring
enum: "completed", "already-running", "already-settled"
replayedboolean
message_idstring
format: "uuid"
thread_idstring
format: "uuid"
received_atstring
format: "date-time"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/agent-state/agent-proof' \
--header "Authorization: Bearer $BANGER_API_KEY"
PUT/v1/workspaces/{workspaceId}/onboarding/agent-state/decision
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
decisionstringrequired
enum: "agent_connection_skipped", "goals_chosen", "domain_bundle_approved", "dns_computer_use_authorized", "dns_manual_selected", "dns_records_applied", "services_reviewed", "persistent_mcp_acknowledged", "autopilot_proposed", "autopilot_skipped", "autopilot_activated"
detailsobject
Additional propertyAny value
Success response 200
The choice is persisted in the canonical journey.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
workspace_idstringrequired
format: "uuid"
statusstringrequired
enum: "choose_agent", "discovering", "planning", "implementing", "validating", "ready", "complete"
entry_surfacestring | nullrequired
enum: "codex", "chatgpt", "claude", "grok", "other_agent", "browser", null
agent_statusstringrequired
enum: "not_connected", "connecting", "connected", "browser_only"
agent_client_namestring | nullrequired
domain_choicestringrequired
enum: "undecided", "company_domain", "no_domain"
company_domainstring | nullrequired
domain_chosen_atstring | nullrequired
format: "date-time"
business_contextobjectrequired
Additional propertyAny value
opportunity_planarrayrequired
Each itemobject
Additional propertyAny value
implementation_summaryobjectrequired
Additional propertyAny value
validation_summaryobjectrequired
Additional propertyAny value
journey_metadataobjectrequired
Additional propertyAny value
context_reviewed_atstring | nullrequired
format: "date-time"
plan_proposed_atstring | nullrequired
format: "date-time"
plan_approved_atstring | nullrequired
format: "date-time"
completed_atstring | nullrequired
format: "date-time"
versionintegerrequired
format: "int64" · minimum: 1
updated_atstringrequired
format: "date-time"
allOf 2object
domain_discoveryunspecifiedrequired
oneOf 1object
domainstringrequired
scan_statusstringrequired
enum: "complete", "partial", "failed"
companyobjectrequired
domainstringrequired
Further nesting omitted
website_urlstring | nullrequired
format: "uri"
Further nesting omitted
website_statusstringrequired
enum: "available", "missing", "blocked", "error"
Further nesting omitted
company_namestringrequired
Further nesting omitted
summarystringrequired
Further nesting omitted
audiencestringrequired
Further nesting omitted
offeringsarrayrequired
Further nesting omitted
logo_urlstring | nullrequired
format: "uri"
Further nesting omitted
favicon_urlstring | nullrequired
format: "uri"
Further nesting omitted
visual_identityobjectrequired
Further nesting omitted
source_snapshotobjectrequired
Further nesting omitted
dns_signalsarrayrequired
Each itemobject
Further nesting omitted
dns_providerunspecifiedrequired
oneOf 1object
No additional properties
Further nesting omitted
oneOf 2null
Further nesting omitted
provider_detectionsarrayrequired
Each itemobject
Further nesting omitted
capability_summaryarrayrequired
Each itemobject
Further nesting omitted
recommended_connectionsarrayrequired
Each itemobject
No additional properties
Further nesting omitted
connection_planarrayrequired
Each itemobject
No additional properties
Further nesting omitted
limitationsarrayrequired
Each itemstring
Further nesting omitted
scanned_atstringrequired
format: "date-time"
confirmed_atstring | nullrequired
format: "date-time"
oneOf 2null
recommended_connectionsarrayrequired
Each itemobject
No additional properties
keystringrequired
namestringrequired
categorystringrequired
enum: "email", "customer", "product", "work", "data"
prioritystringrequired
enum: "required", "recommended"
reasonstringrequired
sourcestringrequired
enum: "dns", "business_context", "opportunity_plan", "banger_recommendation"
setup_modestringrequired
enum: "oauth", "secure_credentials"
availablebooleanrequired
provider_keystring
evidencearrayrequired
Each itemobject
Further nesting omitted
domain_bundleobject | nullrequired
Additional propertyAny value
growthobjectrequired
Additional propertyAny value
activationobjectrequired
modestringrequired
enum: "hosted", "company_domain", "starter"
statusstringrequired
enum: "hosted_mailbox_required", "hosted_mailbox_proving", "hosted_mailbox_ready", "needs_context", "needs_provisioning", "provisioning", "dns_required", "ready_for_proof", "proving", "activated", "starter_required", "starter_proving", "starter_ready"
domainstring | nullrequired
sending_domain_idstring | nullrequired
format: "uuid"
mailbox_idstring | nullrequired
format: "uuid"
mailbox_addressstring | nullrequired
format: "email"
exact_dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
Further nesting omitted
lane_idstringrequired
format: "uuid"
Further nesting omitted
providerstringrequired
enum: "banger", "resend"
Further nesting omitted
purposestringrequired
Further nesting omitted
typestringrequired
enum: "TXT", "MX", "CNAME"
Further nesting omitted
namestringrequired
Further nesting omitted
valuestringrequired
Further nesting omitted
priorityinteger | nullrequired
Further nesting omitted
requiredbooleanrequired
Further nesting omitted
statusstringrequired
enum: "pending", "verified", "error"
Further nesting omitted
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
Further nesting omitted
first_observed_atstring | nullrequired
format: "date-time"
Further nesting omitted
last_checked_atstring | nullrequired
format: "date-time"
Further nesting omitted
errorobjectrequired
Further nesting omitted
provider_referencestring | nullrequired
Further nesting omitted
checkpointsarrayrequired
Each itemobject
keystringrequired
enum: "domain", "provider", "infrastructure", "dns", "mailbox", "product", "broadcast"
Further nesting omitted
labelstringrequired
Further nesting omitted
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
lanesobjectrequired
mailboxobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
transactionalobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
marketingobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
proofunspecifiedrequired
oneOf 1object
proof_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_addressstringrequired
format: "email"
Further nesting omitted
command_idstringrequired
format: "uuid"
Further nesting omitted
phasestringrequired
enum: "sending", "sent", "received", "checked", "failed"
Further nesting omitted
send_completebooleanrequired
Further nesting omitted
receive_completebooleanrequired
Further nesting omitted
round_trip_check_completebooleanrequired
Further nesting omitted
agent_check_completebooleanrequired
Further nesting omitted
completebooleanrequired
Further nesting omitted
expected_subjectstringrequired
Further nesting omitted
expected_body_textstringrequired
Further nesting omitted
received_message_idstring
format: "uuid"
Further nesting omitted
received_thread_idstring
format: "uuid"
Further nesting omitted
received_subjectstring
Further nesting omitted
received_body_textstring
Further nesting omitted
received_atstring
format: "date-time"
Further nesting omitted
agent_labelstring
Further nesting omitted
agent_suggested_actionstring
Further nesting omitted
error_codestring
Further nesting omitted
replayedbooleanrequired
Further nesting omitted
oneOf 2object
proof_idstringrequired
format: "uuid"
Further nesting omitted
domain_idstringrequired
format: "uuid"
Further nesting omitted
native_domain_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_addressstringrequired
format: "email"
Further nesting omitted
transactional_send_intent_idstring
format: "uuid"
Further nesting omitted
marketing_send_intent_idstring
format: "uuid"
Further nesting omitted
transactional_subjectstringrequired
Further nesting omitted
marketing_subjectstringrequired
Further nesting omitted
phasestringrequired
enum: "sending", "receiving", "received", "checked", "failed"
Further nesting omitted
send_completebooleanrequired
Further nesting omitted
transactional_receivedbooleanrequired
Further nesting omitted
marketing_receivedbooleanrequired
Further nesting omitted
receive_completebooleanrequired
Further nesting omitted
agent_check_completebooleanrequired
Further nesting omitted
completebooleanrequired
Further nesting omitted
error_codestring
Further nesting omitted
replayedbooleanrequired
Further nesting omitted
oneOf 3null
overall_readybooleanrequired
production_readybooleanrequired
completedbooleanrequired
pendingbooleanrequired
next_actionstringrequired
enum: "choose_agent", "provision_hosted_mailbox", "send_aha_1", "wait_for_aha_1", "offer_custom_domain", "review_domain_bundle", "provision_domain_bundle", "wait_for_dns_records", "ask_computer_use_permission", "configure_dns_with_computer_use", "present_manual_dns_instructions", "wait_for_dns_propagation", "send_aha_2", "wait_for_aha_2", "create_starter_mailbox", "run_starter_proof", "wait_for_starter_proof", "collect_business_context", "build_lifecycle_map", "review_growth_system", "connect_required_services", "explain_persistent_mcp", "offer_autopilot", "activate_autopilot", "validate", "complete", "open_dashboard"
action_requiredobjectrequired
typestringrequired
requiredbooleanrequired
actionstringrequired
enum: "choose_agent", "provision_hosted_mailbox", "send_aha_1", "wait_for_aha_1", "offer_custom_domain", "review_domain_bundle", "provision_domain_bundle", "wait_for_dns_records", "ask_computer_use_permission", "configure_dns_with_computer_use", "present_manual_dns_instructions", "wait_for_dns_propagation", "send_aha_2", "wait_for_aha_2", "create_starter_mailbox", "run_starter_proof", "wait_for_starter_proof", "collect_business_context", "build_lifecycle_map", "review_growth_system", "connect_required_services", "explain_persistent_mcp", "offer_autopilot", "activate_autopilot", "validate", "complete", "open_dashboard"
urlstring | nullrequired
format: "uri"
instructionsstring | nullrequired
secure_urlstring | nullrequired
format: "uri"
mcp_urlstringrequired
format: "uri"
dashboard_urlstringrequired
format: "uri"
curl example
curl --request PUT --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/agent-state/decision' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"decision": "agent_connection_skipped",
"details": {}
}'
PUT/v1/workspaces/{workspaceId}/onboarding/agent-state/domain-choice
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 200
Domain decision stored and journey resumed.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
workspace_idstringrequired
format: "uuid"
statusstringrequired
enum: "choose_agent", "discovering", "planning", "implementing", "validating", "ready", "complete"
entry_surfacestring | nullrequired
enum: "codex", "chatgpt", "claude", "grok", "other_agent", "browser", null
agent_statusstringrequired
enum: "not_connected", "connecting", "connected", "browser_only"
agent_client_namestring | nullrequired
domain_choicestringrequired
enum: "undecided", "company_domain", "no_domain"
company_domainstring | nullrequired
domain_chosen_atstring | nullrequired
format: "date-time"
business_contextobjectrequired
Additional propertyAny value
opportunity_planarrayrequired
Each itemobject
Additional propertyAny value
implementation_summaryobjectrequired
Additional propertyAny value
validation_summaryobjectrequired
Additional propertyAny value
journey_metadataobjectrequired
Additional propertyAny value
context_reviewed_atstring | nullrequired
format: "date-time"
plan_proposed_atstring | nullrequired
format: "date-time"
plan_approved_atstring | nullrequired
format: "date-time"
completed_atstring | nullrequired
format: "date-time"
versionintegerrequired
format: "int64" · minimum: 1
updated_atstringrequired
format: "date-time"
allOf 2object
domain_discoveryunspecifiedrequired
oneOf 1object
domainstringrequired
scan_statusstringrequired
enum: "complete", "partial", "failed"
companyobjectrequired
domainstringrequired
Further nesting omitted
website_urlstring | nullrequired
format: "uri"
Further nesting omitted
website_statusstringrequired
enum: "available", "missing", "blocked", "error"
Further nesting omitted
company_namestringrequired
Further nesting omitted
summarystringrequired
Further nesting omitted
audiencestringrequired
Further nesting omitted
offeringsarrayrequired
Further nesting omitted
logo_urlstring | nullrequired
format: "uri"
Further nesting omitted
favicon_urlstring | nullrequired
format: "uri"
Further nesting omitted
visual_identityobjectrequired
Further nesting omitted
source_snapshotobjectrequired
Further nesting omitted
dns_signalsarrayrequired
Each itemobject
Further nesting omitted
dns_providerunspecifiedrequired
oneOf 1object
No additional properties
Further nesting omitted
oneOf 2null
Further nesting omitted
provider_detectionsarrayrequired
Each itemobject
Further nesting omitted
capability_summaryarrayrequired
Each itemobject
Further nesting omitted
recommended_connectionsarrayrequired
Each itemobject
No additional properties
Further nesting omitted
connection_planarrayrequired
Each itemobject
No additional properties
Further nesting omitted
limitationsarrayrequired
Each itemstring
Further nesting omitted
scanned_atstringrequired
format: "date-time"
confirmed_atstring | nullrequired
format: "date-time"
oneOf 2null
recommended_connectionsarrayrequired
Each itemobject
No additional properties
keystringrequired
namestringrequired
categorystringrequired
enum: "email", "customer", "product", "work", "data"
prioritystringrequired
enum: "required", "recommended"
reasonstringrequired
sourcestringrequired
enum: "dns", "business_context", "opportunity_plan", "banger_recommendation"
setup_modestringrequired
enum: "oauth", "secure_credentials"
availablebooleanrequired
provider_keystring
evidencearrayrequired
Each itemobject
Further nesting omitted
domain_bundleobject | nullrequired
Additional propertyAny value
growthobjectrequired
Additional propertyAny value
activationobjectrequired
modestringrequired
enum: "hosted", "company_domain", "starter"
statusstringrequired
enum: "hosted_mailbox_required", "hosted_mailbox_proving", "hosted_mailbox_ready", "needs_context", "needs_provisioning", "provisioning", "dns_required", "ready_for_proof", "proving", "activated", "starter_required", "starter_proving", "starter_ready"
domainstring | nullrequired
sending_domain_idstring | nullrequired
format: "uuid"
mailbox_idstring | nullrequired
format: "uuid"
mailbox_addressstring | nullrequired
format: "email"
exact_dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
Further nesting omitted
lane_idstringrequired
format: "uuid"
Further nesting omitted
providerstringrequired
enum: "banger", "resend"
Further nesting omitted
purposestringrequired
Further nesting omitted
typestringrequired
enum: "TXT", "MX", "CNAME"
Further nesting omitted
namestringrequired
Further nesting omitted
valuestringrequired
Further nesting omitted
priorityinteger | nullrequired
Further nesting omitted
requiredbooleanrequired
Further nesting omitted
statusstringrequired
enum: "pending", "verified", "error"
Further nesting omitted
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
Further nesting omitted
first_observed_atstring | nullrequired
format: "date-time"
Further nesting omitted
last_checked_atstring | nullrequired
format: "date-time"
Further nesting omitted
errorobjectrequired
Further nesting omitted
provider_referencestring | nullrequired
Further nesting omitted
checkpointsarrayrequired
Each itemobject
keystringrequired
enum: "domain", "provider", "infrastructure", "dns", "mailbox", "product", "broadcast"
Further nesting omitted
labelstringrequired
Further nesting omitted
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
lanesobjectrequired
mailboxobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
transactionalobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
marketingobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
proofunspecifiedrequired
oneOf 1object
proof_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_addressstringrequired
format: "email"
Further nesting omitted
command_idstringrequired
format: "uuid"
Further nesting omitted
phasestringrequired
enum: "sending", "sent", "received", "checked", "failed"
Further nesting omitted
send_completebooleanrequired
Further nesting omitted
receive_completebooleanrequired
Further nesting omitted
round_trip_check_completebooleanrequired
Further nesting omitted
agent_check_completebooleanrequired
Further nesting omitted
completebooleanrequired
Further nesting omitted
expected_subjectstringrequired
Further nesting omitted
expected_body_textstringrequired
Further nesting omitted
received_message_idstring
format: "uuid"
Further nesting omitted
received_thread_idstring
format: "uuid"
Further nesting omitted
received_subjectstring
Further nesting omitted
received_body_textstring
Further nesting omitted
received_atstring
format: "date-time"
Further nesting omitted
agent_labelstring
Further nesting omitted
agent_suggested_actionstring
Further nesting omitted
error_codestring
Further nesting omitted
replayedbooleanrequired
Further nesting omitted
oneOf 2object
proof_idstringrequired
format: "uuid"
Further nesting omitted
domain_idstringrequired
format: "uuid"
Further nesting omitted
native_domain_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_addressstringrequired
format: "email"
Further nesting omitted
transactional_send_intent_idstring
format: "uuid"
Further nesting omitted
marketing_send_intent_idstring
format: "uuid"
Further nesting omitted
transactional_subjectstringrequired
Further nesting omitted
marketing_subjectstringrequired
Further nesting omitted
phasestringrequired
enum: "sending", "receiving", "received", "checked", "failed"
Further nesting omitted
send_completebooleanrequired
Further nesting omitted
transactional_receivedbooleanrequired
Further nesting omitted
marketing_receivedbooleanrequired
Further nesting omitted
receive_completebooleanrequired
Further nesting omitted
agent_check_completebooleanrequired
Further nesting omitted
completebooleanrequired
Further nesting omitted
error_codestring
Further nesting omitted
replayedbooleanrequired
Further nesting omitted
oneOf 3null
overall_readybooleanrequired
production_readybooleanrequired
completedbooleanrequired
pendingbooleanrequired
next_actionstringrequired
enum: "choose_agent", "provision_hosted_mailbox", "send_aha_1", "wait_for_aha_1", "offer_custom_domain", "review_domain_bundle", "provision_domain_bundle", "wait_for_dns_records", "ask_computer_use_permission", "configure_dns_with_computer_use", "present_manual_dns_instructions", "wait_for_dns_propagation", "send_aha_2", "wait_for_aha_2", "create_starter_mailbox", "run_starter_proof", "wait_for_starter_proof", "collect_business_context", "build_lifecycle_map", "review_growth_system", "connect_required_services", "explain_persistent_mcp", "offer_autopilot", "activate_autopilot", "validate", "complete", "open_dashboard"
action_requiredobjectrequired
typestringrequired
requiredbooleanrequired
actionstringrequired
enum: "choose_agent", "provision_hosted_mailbox", "send_aha_1", "wait_for_aha_1", "offer_custom_domain", "review_domain_bundle", "provision_domain_bundle", "wait_for_dns_records", "ask_computer_use_permission", "configure_dns_with_computer_use", "present_manual_dns_instructions", "wait_for_dns_propagation", "send_aha_2", "wait_for_aha_2", "create_starter_mailbox", "run_starter_proof", "wait_for_starter_proof", "collect_business_context", "build_lifecycle_map", "review_growth_system", "connect_required_services", "explain_persistent_mcp", "offer_autopilot", "activate_autopilot", "validate", "complete", "open_dashboard"
urlstring | nullrequired
format: "uri"
instructionsstring | nullrequired
secure_urlstring | nullrequired
format: "uri"
mcp_urlstringrequired
format: "uri"
dashboard_urlstringrequired
format: "uri"
curl example
curl --request PUT --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/agent-state/domain-choice' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"choice": "company_domain",
"domain": "example"
}'
PUT/v1/workspaces/{workspaceId}/onboarding/agent-state/context
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
contextobjectrequired
Additional propertyAny value
company_domainstring
Compatibility bridge for cached connectors that predate chooseAgentOnboardingDomain. The agent must still ask the user first.
minLength: 3 · maxLength: 253
client_namestring
minLength: 1 · maxLength: 100
Success response 200
Context accepted.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
workspace_idstringrequired
format: "uuid"
statusstringrequired
enum: "choose_agent", "discovering", "planning", "implementing", "validating", "ready", "complete"
entry_surfacestring | nullrequired
enum: "codex", "chatgpt", "claude", "grok", "other_agent", "browser", null
agent_statusstringrequired
enum: "not_connected", "connecting", "connected", "browser_only"
agent_client_namestring | nullrequired
domain_choicestringrequired
enum: "undecided", "company_domain", "no_domain"
company_domainstring | nullrequired
domain_chosen_atstring | nullrequired
format: "date-time"
business_contextobjectrequired
Additional propertyAny value
opportunity_planarrayrequired
Each itemobject
Additional propertyAny value
implementation_summaryobjectrequired
Additional propertyAny value
validation_summaryobjectrequired
Additional propertyAny value
journey_metadataobjectrequired
Additional propertyAny value
context_reviewed_atstring | nullrequired
format: "date-time"
plan_proposed_atstring | nullrequired
format: "date-time"
plan_approved_atstring | nullrequired
format: "date-time"
completed_atstring | nullrequired
format: "date-time"
versionintegerrequired
format: "int64" · minimum: 1
updated_atstringrequired
format: "date-time"
allOf 2object
domain_discoveryunspecifiedrequired
oneOf 1object
domainstringrequired
scan_statusstringrequired
enum: "complete", "partial", "failed"
companyobjectrequired
domainstringrequired
Further nesting omitted
website_urlstring | nullrequired
format: "uri"
Further nesting omitted
website_statusstringrequired
enum: "available", "missing", "blocked", "error"
Further nesting omitted
company_namestringrequired
Further nesting omitted
summarystringrequired
Further nesting omitted
audiencestringrequired
Further nesting omitted
offeringsarrayrequired
Further nesting omitted
logo_urlstring | nullrequired
format: "uri"
Further nesting omitted
favicon_urlstring | nullrequired
format: "uri"
Further nesting omitted
visual_identityobjectrequired
Further nesting omitted
source_snapshotobjectrequired
Further nesting omitted
dns_signalsarrayrequired
Each itemobject
Further nesting omitted
dns_providerunspecifiedrequired
oneOf 1object
No additional properties
Further nesting omitted
oneOf 2null
Further nesting omitted
provider_detectionsarrayrequired
Each itemobject
Further nesting omitted
capability_summaryarrayrequired
Each itemobject
Further nesting omitted
recommended_connectionsarrayrequired
Each itemobject
No additional properties
Further nesting omitted
connection_planarrayrequired
Each itemobject
No additional properties
Further nesting omitted
limitationsarrayrequired
Each itemstring
Further nesting omitted
scanned_atstringrequired
format: "date-time"
confirmed_atstring | nullrequired
format: "date-time"
oneOf 2null
recommended_connectionsarrayrequired
Each itemobject
No additional properties
keystringrequired
namestringrequired
categorystringrequired
enum: "email", "customer", "product", "work", "data"
prioritystringrequired
enum: "required", "recommended"
reasonstringrequired
sourcestringrequired
enum: "dns", "business_context", "opportunity_plan", "banger_recommendation"
setup_modestringrequired
enum: "oauth", "secure_credentials"
availablebooleanrequired
provider_keystring
evidencearrayrequired
Each itemobject
Further nesting omitted
domain_bundleobject | nullrequired
Additional propertyAny value
growthobjectrequired
Additional propertyAny value
activationobjectrequired
modestringrequired
enum: "hosted", "company_domain", "starter"
statusstringrequired
enum: "hosted_mailbox_required", "hosted_mailbox_proving", "hosted_mailbox_ready", "needs_context", "needs_provisioning", "provisioning", "dns_required", "ready_for_proof", "proving", "activated", "starter_required", "starter_proving", "starter_ready"
domainstring | nullrequired
sending_domain_idstring | nullrequired
format: "uuid"
mailbox_idstring | nullrequired
format: "uuid"
mailbox_addressstring | nullrequired
format: "email"
exact_dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
Further nesting omitted
lane_idstringrequired
format: "uuid"
Further nesting omitted
providerstringrequired
enum: "banger", "resend"
Further nesting omitted
purposestringrequired
Further nesting omitted
typestringrequired
enum: "TXT", "MX", "CNAME"
Further nesting omitted
namestringrequired
Further nesting omitted
valuestringrequired
Further nesting omitted
priorityinteger | nullrequired
Further nesting omitted
requiredbooleanrequired
Further nesting omitted
statusstringrequired
enum: "pending", "verified", "error"
Further nesting omitted
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
Further nesting omitted
first_observed_atstring | nullrequired
format: "date-time"
Further nesting omitted
last_checked_atstring | nullrequired
format: "date-time"
Further nesting omitted
errorobjectrequired
Further nesting omitted
provider_referencestring | nullrequired
Further nesting omitted
checkpointsarrayrequired
Each itemobject
keystringrequired
enum: "domain", "provider", "infrastructure", "dns", "mailbox", "product", "broadcast"
Further nesting omitted
labelstringrequired
Further nesting omitted
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
lanesobjectrequired
mailboxobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
transactionalobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
marketingobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
proofunspecifiedrequired
oneOf 1object
proof_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_addressstringrequired
format: "email"
Further nesting omitted
command_idstringrequired
format: "uuid"
Further nesting omitted
phasestringrequired
enum: "sending", "sent", "received", "checked", "failed"
Further nesting omitted
send_completebooleanrequired
Further nesting omitted
receive_completebooleanrequired
Further nesting omitted
round_trip_check_completebooleanrequired
Further nesting omitted
agent_check_completebooleanrequired
Further nesting omitted
completebooleanrequired
Further nesting omitted
expected_subjectstringrequired
Further nesting omitted
expected_body_textstringrequired
Further nesting omitted
received_message_idstring
format: "uuid"
Further nesting omitted
received_thread_idstring
format: "uuid"
Further nesting omitted
received_subjectstring
Further nesting omitted
received_body_textstring
Further nesting omitted
received_atstring
format: "date-time"
Further nesting omitted
agent_labelstring
Further nesting omitted
agent_suggested_actionstring
Further nesting omitted
error_codestring
Further nesting omitted
replayedbooleanrequired
Further nesting omitted
oneOf 2object
proof_idstringrequired
format: "uuid"
Further nesting omitted
domain_idstringrequired
format: "uuid"
Further nesting omitted
native_domain_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_addressstringrequired
format: "email"
Further nesting omitted
transactional_send_intent_idstring
format: "uuid"
Further nesting omitted
marketing_send_intent_idstring
format: "uuid"
Further nesting omitted
transactional_subjectstringrequired
Further nesting omitted
marketing_subjectstringrequired
Further nesting omitted
phasestringrequired
enum: "sending", "receiving", "received", "checked", "failed"
Further nesting omitted
send_completebooleanrequired
Further nesting omitted
transactional_receivedbooleanrequired
Further nesting omitted
marketing_receivedbooleanrequired
Further nesting omitted
receive_completebooleanrequired
Further nesting omitted
agent_check_completebooleanrequired
Further nesting omitted
completebooleanrequired
Further nesting omitted
error_codestring
Further nesting omitted
replayedbooleanrequired
Further nesting omitted
oneOf 3null
overall_readybooleanrequired
production_readybooleanrequired
completedbooleanrequired
pendingbooleanrequired
next_actionstringrequired
enum: "choose_agent", "provision_hosted_mailbox", "send_aha_1", "wait_for_aha_1", "offer_custom_domain", "review_domain_bundle", "provision_domain_bundle", "wait_for_dns_records", "ask_computer_use_permission", "configure_dns_with_computer_use", "present_manual_dns_instructions", "wait_for_dns_propagation", "send_aha_2", "wait_for_aha_2", "create_starter_mailbox", "run_starter_proof", "wait_for_starter_proof", "collect_business_context", "build_lifecycle_map", "review_growth_system", "connect_required_services", "explain_persistent_mcp", "offer_autopilot", "activate_autopilot", "validate", "complete", "open_dashboard"
action_requiredobjectrequired
typestringrequired
requiredbooleanrequired
actionstringrequired
enum: "choose_agent", "provision_hosted_mailbox", "send_aha_1", "wait_for_aha_1", "offer_custom_domain", "review_domain_bundle", "provision_domain_bundle", "wait_for_dns_records", "ask_computer_use_permission", "configure_dns_with_computer_use", "present_manual_dns_instructions", "wait_for_dns_propagation", "send_aha_2", "wait_for_aha_2", "create_starter_mailbox", "run_starter_proof", "wait_for_starter_proof", "collect_business_context", "build_lifecycle_map", "review_growth_system", "connect_required_services", "explain_persistent_mcp", "offer_autopilot", "activate_autopilot", "validate", "complete", "open_dashboard"
urlstring | nullrequired
format: "uri"
instructionsstring | nullrequired
secure_urlstring | nullrequired
format: "uri"
mcp_urlstringrequired
format: "uri"
dashboard_urlstringrequired
format: "uri"
curl example
curl --request PUT --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/agent-state/context' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"context": {},
"company_domain": "example",
"client_name": "example"
}'
PUT/v1/workspaces/{workspaceId}/onboarding/agent-state/plan
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
opportunitiesarrayrequired
minItems: 1 · maxItems: 100
Each itemobject
Additional propertyAny value
Success response 200
Opportunity plan accepted.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
workspace_idstringrequired
format: "uuid"
statusstringrequired
enum: "choose_agent", "discovering", "planning", "implementing", "validating", "ready", "complete"
entry_surfacestring | nullrequired
enum: "codex", "chatgpt", "claude", "grok", "other_agent", "browser", null
agent_statusstringrequired
enum: "not_connected", "connecting", "connected", "browser_only"
agent_client_namestring | nullrequired
domain_choicestringrequired
enum: "undecided", "company_domain", "no_domain"
company_domainstring | nullrequired
domain_chosen_atstring | nullrequired
format: "date-time"
business_contextobjectrequired
Additional propertyAny value
opportunity_planarrayrequired
Each itemobject
Additional propertyAny value
implementation_summaryobjectrequired
Additional propertyAny value
validation_summaryobjectrequired
Additional propertyAny value
journey_metadataobjectrequired
Additional propertyAny value
context_reviewed_atstring | nullrequired
format: "date-time"
plan_proposed_atstring | nullrequired
format: "date-time"
plan_approved_atstring | nullrequired
format: "date-time"
completed_atstring | nullrequired
format: "date-time"
versionintegerrequired
format: "int64" · minimum: 1
updated_atstringrequired
format: "date-time"
allOf 2object
domain_discoveryunspecifiedrequired
oneOf 1object
domainstringrequired
scan_statusstringrequired
enum: "complete", "partial", "failed"
companyobjectrequired
domainstringrequired
Further nesting omitted
website_urlstring | nullrequired
format: "uri"
Further nesting omitted
website_statusstringrequired
enum: "available", "missing", "blocked", "error"
Further nesting omitted
company_namestringrequired
Further nesting omitted
summarystringrequired
Further nesting omitted
audiencestringrequired
Further nesting omitted
offeringsarrayrequired
Further nesting omitted
logo_urlstring | nullrequired
format: "uri"
Further nesting omitted
favicon_urlstring | nullrequired
format: "uri"
Further nesting omitted
visual_identityobjectrequired
Further nesting omitted
source_snapshotobjectrequired
Further nesting omitted
dns_signalsarrayrequired
Each itemobject
Further nesting omitted
dns_providerunspecifiedrequired
oneOf 1object
No additional properties
Further nesting omitted
oneOf 2null
Further nesting omitted
provider_detectionsarrayrequired
Each itemobject
Further nesting omitted
capability_summaryarrayrequired
Each itemobject
Further nesting omitted
recommended_connectionsarrayrequired
Each itemobject
No additional properties
Further nesting omitted
connection_planarrayrequired
Each itemobject
No additional properties
Further nesting omitted
limitationsarrayrequired
Each itemstring
Further nesting omitted
scanned_atstringrequired
format: "date-time"
confirmed_atstring | nullrequired
format: "date-time"
oneOf 2null
recommended_connectionsarrayrequired
Each itemobject
No additional properties
keystringrequired
namestringrequired
categorystringrequired
enum: "email", "customer", "product", "work", "data"
prioritystringrequired
enum: "required", "recommended"
reasonstringrequired
sourcestringrequired
enum: "dns", "business_context", "opportunity_plan", "banger_recommendation"
setup_modestringrequired
enum: "oauth", "secure_credentials"
availablebooleanrequired
provider_keystring
evidencearrayrequired
Each itemobject
Further nesting omitted
domain_bundleobject | nullrequired
Additional propertyAny value
growthobjectrequired
Additional propertyAny value
activationobjectrequired
modestringrequired
enum: "hosted", "company_domain", "starter"
statusstringrequired
enum: "hosted_mailbox_required", "hosted_mailbox_proving", "hosted_mailbox_ready", "needs_context", "needs_provisioning", "provisioning", "dns_required", "ready_for_proof", "proving", "activated", "starter_required", "starter_proving", "starter_ready"
domainstring | nullrequired
sending_domain_idstring | nullrequired
format: "uuid"
mailbox_idstring | nullrequired
format: "uuid"
mailbox_addressstring | nullrequired
format: "email"
exact_dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
Further nesting omitted
lane_idstringrequired
format: "uuid"
Further nesting omitted
providerstringrequired
enum: "banger", "resend"
Further nesting omitted
purposestringrequired
Further nesting omitted
typestringrequired
enum: "TXT", "MX", "CNAME"
Further nesting omitted
namestringrequired
Further nesting omitted
valuestringrequired
Further nesting omitted
priorityinteger | nullrequired
Further nesting omitted
requiredbooleanrequired
Further nesting omitted
statusstringrequired
enum: "pending", "verified", "error"
Further nesting omitted
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
Further nesting omitted
first_observed_atstring | nullrequired
format: "date-time"
Further nesting omitted
last_checked_atstring | nullrequired
format: "date-time"
Further nesting omitted
errorobjectrequired
Further nesting omitted
provider_referencestring | nullrequired
Further nesting omitted
checkpointsarrayrequired
Each itemobject
keystringrequired
enum: "domain", "provider", "infrastructure", "dns", "mailbox", "product", "broadcast"
Further nesting omitted
labelstringrequired
Further nesting omitted
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
lanesobjectrequired
mailboxobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
transactionalobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
marketingobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
proofunspecifiedrequired
oneOf 1object
proof_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_addressstringrequired
format: "email"
Further nesting omitted
command_idstringrequired
format: "uuid"
Further nesting omitted
phasestringrequired
enum: "sending", "sent", "received", "checked", "failed"
Further nesting omitted
send_completebooleanrequired
Further nesting omitted
receive_completebooleanrequired
Further nesting omitted
round_trip_check_completebooleanrequired
Further nesting omitted
agent_check_completebooleanrequired
Further nesting omitted
completebooleanrequired
Further nesting omitted
expected_subjectstringrequired
Further nesting omitted
expected_body_textstringrequired
Further nesting omitted
received_message_idstring
format: "uuid"
Further nesting omitted
received_thread_idstring
format: "uuid"
Further nesting omitted
received_subjectstring
Further nesting omitted
received_body_textstring
Further nesting omitted
received_atstring
format: "date-time"
Further nesting omitted
agent_labelstring
Further nesting omitted
agent_suggested_actionstring
Further nesting omitted
error_codestring
Further nesting omitted
replayedbooleanrequired
Further nesting omitted
oneOf 2object
proof_idstringrequired
format: "uuid"
Further nesting omitted
domain_idstringrequired
format: "uuid"
Further nesting omitted
native_domain_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_addressstringrequired
format: "email"
Further nesting omitted
transactional_send_intent_idstring
format: "uuid"
Further nesting omitted
marketing_send_intent_idstring
format: "uuid"
Further nesting omitted
transactional_subjectstringrequired
Further nesting omitted
marketing_subjectstringrequired
Further nesting omitted
phasestringrequired
enum: "sending", "receiving", "received", "checked", "failed"
Further nesting omitted
send_completebooleanrequired
Further nesting omitted
transactional_receivedbooleanrequired
Further nesting omitted
marketing_receivedbooleanrequired
Further nesting omitted
receive_completebooleanrequired
Further nesting omitted
agent_check_completebooleanrequired
Further nesting omitted
completebooleanrequired
Further nesting omitted
error_codestring
Further nesting omitted
replayedbooleanrequired
Further nesting omitted
oneOf 3null
overall_readybooleanrequired
production_readybooleanrequired
completedbooleanrequired
pendingbooleanrequired
next_actionstringrequired
enum: "choose_agent", "provision_hosted_mailbox", "send_aha_1", "wait_for_aha_1", "offer_custom_domain", "review_domain_bundle", "provision_domain_bundle", "wait_for_dns_records", "ask_computer_use_permission", "configure_dns_with_computer_use", "present_manual_dns_instructions", "wait_for_dns_propagation", "send_aha_2", "wait_for_aha_2", "create_starter_mailbox", "run_starter_proof", "wait_for_starter_proof", "collect_business_context", "build_lifecycle_map", "review_growth_system", "connect_required_services", "explain_persistent_mcp", "offer_autopilot", "activate_autopilot", "validate", "complete", "open_dashboard"
action_requiredobjectrequired
typestringrequired
requiredbooleanrequired
actionstringrequired
enum: "choose_agent", "provision_hosted_mailbox", "send_aha_1", "wait_for_aha_1", "offer_custom_domain", "review_domain_bundle", "provision_domain_bundle", "wait_for_dns_records", "ask_computer_use_permission", "configure_dns_with_computer_use", "present_manual_dns_instructions", "wait_for_dns_propagation", "send_aha_2", "wait_for_aha_2", "create_starter_mailbox", "run_starter_proof", "wait_for_starter_proof", "collect_business_context", "build_lifecycle_map", "review_growth_system", "connect_required_services", "explain_persistent_mcp", "offer_autopilot", "activate_autopilot", "validate", "complete", "open_dashboard"
urlstring | nullrequired
format: "uri"
instructionsstring | nullrequired
secure_urlstring | nullrequired
format: "uri"
mcp_urlstringrequired
format: "uri"
dashboard_urlstringrequired
format: "uri"
curl example
curl --request PUT --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/agent-state/plan' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"opportunities": [
{}
]
}'
POST/v1/workspaces/{workspaceId}/onboarding/agent-state/apply
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 200
Implementation summary recorded.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
workspace_idstringrequired
format: "uuid"
statusstringrequired
enum: "choose_agent", "discovering", "planning", "implementing", "validating", "ready", "complete"
entry_surfacestring | nullrequired
enum: "codex", "chatgpt", "claude", "grok", "other_agent", "browser", null
agent_statusstringrequired
enum: "not_connected", "connecting", "connected", "browser_only"
agent_client_namestring | nullrequired
domain_choicestringrequired
enum: "undecided", "company_domain", "no_domain"
company_domainstring | nullrequired
domain_chosen_atstring | nullrequired
format: "date-time"
business_contextobjectrequired
Additional propertyAny value
opportunity_planarrayrequired
Each itemobject
Additional propertyAny value
implementation_summaryobjectrequired
Additional propertyAny value
validation_summaryobjectrequired
Additional propertyAny value
journey_metadataobjectrequired
Additional propertyAny value
context_reviewed_atstring | nullrequired
format: "date-time"
plan_proposed_atstring | nullrequired
format: "date-time"
plan_approved_atstring | nullrequired
format: "date-time"
completed_atstring | nullrequired
format: "date-time"
versionintegerrequired
format: "int64" · minimum: 1
updated_atstringrequired
format: "date-time"
allOf 2object
domain_discoveryunspecifiedrequired
oneOf 1object
domainstringrequired
scan_statusstringrequired
enum: "complete", "partial", "failed"
companyobjectrequired
domainstringrequired
Further nesting omitted
website_urlstring | nullrequired
format: "uri"
Further nesting omitted
website_statusstringrequired
enum: "available", "missing", "blocked", "error"
Further nesting omitted
company_namestringrequired
Further nesting omitted
summarystringrequired
Further nesting omitted
audiencestringrequired
Further nesting omitted
offeringsarrayrequired
Further nesting omitted
logo_urlstring | nullrequired
format: "uri"
Further nesting omitted
favicon_urlstring | nullrequired
format: "uri"
Further nesting omitted
visual_identityobjectrequired
Further nesting omitted
source_snapshotobjectrequired
Further nesting omitted
dns_signalsarrayrequired
Each itemobject
Further nesting omitted
dns_providerunspecifiedrequired
oneOf 1object
No additional properties
Further nesting omitted
oneOf 2null
Further nesting omitted
provider_detectionsarrayrequired
Each itemobject
Further nesting omitted
capability_summaryarrayrequired
Each itemobject
Further nesting omitted
recommended_connectionsarrayrequired
Each itemobject
No additional properties
Further nesting omitted
connection_planarrayrequired
Each itemobject
No additional properties
Further nesting omitted
limitationsarrayrequired
Each itemstring
Further nesting omitted
scanned_atstringrequired
format: "date-time"
confirmed_atstring | nullrequired
format: "date-time"
oneOf 2null
recommended_connectionsarrayrequired
Each itemobject
No additional properties
keystringrequired
namestringrequired
categorystringrequired
enum: "email", "customer", "product", "work", "data"
prioritystringrequired
enum: "required", "recommended"
reasonstringrequired
sourcestringrequired
enum: "dns", "business_context", "opportunity_plan", "banger_recommendation"
setup_modestringrequired
enum: "oauth", "secure_credentials"
availablebooleanrequired
provider_keystring
evidencearrayrequired
Each itemobject
Further nesting omitted
domain_bundleobject | nullrequired
Additional propertyAny value
growthobjectrequired
Additional propertyAny value
activationobjectrequired
modestringrequired
enum: "hosted", "company_domain", "starter"
statusstringrequired
enum: "hosted_mailbox_required", "hosted_mailbox_proving", "hosted_mailbox_ready", "needs_context", "needs_provisioning", "provisioning", "dns_required", "ready_for_proof", "proving", "activated", "starter_required", "starter_proving", "starter_ready"
domainstring | nullrequired
sending_domain_idstring | nullrequired
format: "uuid"
mailbox_idstring | nullrequired
format: "uuid"
mailbox_addressstring | nullrequired
format: "email"
exact_dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
Further nesting omitted
lane_idstringrequired
format: "uuid"
Further nesting omitted
providerstringrequired
enum: "banger", "resend"
Further nesting omitted
purposestringrequired
Further nesting omitted
typestringrequired
enum: "TXT", "MX", "CNAME"
Further nesting omitted
namestringrequired
Further nesting omitted
valuestringrequired
Further nesting omitted
priorityinteger | nullrequired
Further nesting omitted
requiredbooleanrequired
Further nesting omitted
statusstringrequired
enum: "pending", "verified", "error"
Further nesting omitted
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
Further nesting omitted
first_observed_atstring | nullrequired
format: "date-time"
Further nesting omitted
last_checked_atstring | nullrequired
format: "date-time"
Further nesting omitted
errorobjectrequired
Further nesting omitted
provider_referencestring | nullrequired
Further nesting omitted
checkpointsarrayrequired
Each itemobject
keystringrequired
enum: "domain", "provider", "infrastructure", "dns", "mailbox", "product", "broadcast"
Further nesting omitted
labelstringrequired
Further nesting omitted
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
lanesobjectrequired
mailboxobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
transactionalobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
marketingobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
proofunspecifiedrequired
oneOf 1object
proof_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_addressstringrequired
format: "email"
Further nesting omitted
command_idstringrequired
format: "uuid"
Further nesting omitted
phasestringrequired
enum: "sending", "sent", "received", "checked", "failed"
Further nesting omitted
send_completebooleanrequired
Further nesting omitted
receive_completebooleanrequired
Further nesting omitted
round_trip_check_completebooleanrequired
Further nesting omitted
agent_check_completebooleanrequired
Further nesting omitted
completebooleanrequired
Further nesting omitted
expected_subjectstringrequired
Further nesting omitted
expected_body_textstringrequired
Further nesting omitted
received_message_idstring
format: "uuid"
Further nesting omitted
received_thread_idstring
format: "uuid"
Further nesting omitted
received_subjectstring
Further nesting omitted
received_body_textstring
Further nesting omitted
received_atstring
format: "date-time"
Further nesting omitted
agent_labelstring
Further nesting omitted
agent_suggested_actionstring
Further nesting omitted
error_codestring
Further nesting omitted
replayedbooleanrequired
Further nesting omitted
oneOf 2object
proof_idstringrequired
format: "uuid"
Further nesting omitted
domain_idstringrequired
format: "uuid"
Further nesting omitted
native_domain_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_addressstringrequired
format: "email"
Further nesting omitted
transactional_send_intent_idstring
format: "uuid"
Further nesting omitted
marketing_send_intent_idstring
format: "uuid"
Further nesting omitted
transactional_subjectstringrequired
Further nesting omitted
marketing_subjectstringrequired
Further nesting omitted
phasestringrequired
enum: "sending", "receiving", "received", "checked", "failed"
Further nesting omitted
send_completebooleanrequired
Further nesting omitted
transactional_receivedbooleanrequired
Further nesting omitted
marketing_receivedbooleanrequired
Further nesting omitted
receive_completebooleanrequired
Further nesting omitted
agent_check_completebooleanrequired
Further nesting omitted
completebooleanrequired
Further nesting omitted
error_codestring
Further nesting omitted
replayedbooleanrequired
Further nesting omitted
oneOf 3null
overall_readybooleanrequired
production_readybooleanrequired
completedbooleanrequired
pendingbooleanrequired
next_actionstringrequired
enum: "choose_agent", "provision_hosted_mailbox", "send_aha_1", "wait_for_aha_1", "offer_custom_domain", "review_domain_bundle", "provision_domain_bundle", "wait_for_dns_records", "ask_computer_use_permission", "configure_dns_with_computer_use", "present_manual_dns_instructions", "wait_for_dns_propagation", "send_aha_2", "wait_for_aha_2", "create_starter_mailbox", "run_starter_proof", "wait_for_starter_proof", "collect_business_context", "build_lifecycle_map", "review_growth_system", "connect_required_services", "explain_persistent_mcp", "offer_autopilot", "activate_autopilot", "validate", "complete", "open_dashboard"
action_requiredobjectrequired
typestringrequired
requiredbooleanrequired
actionstringrequired
enum: "choose_agent", "provision_hosted_mailbox", "send_aha_1", "wait_for_aha_1", "offer_custom_domain", "review_domain_bundle", "provision_domain_bundle", "wait_for_dns_records", "ask_computer_use_permission", "configure_dns_with_computer_use", "present_manual_dns_instructions", "wait_for_dns_propagation", "send_aha_2", "wait_for_aha_2", "create_starter_mailbox", "run_starter_proof", "wait_for_starter_proof", "collect_business_context", "build_lifecycle_map", "review_growth_system", "connect_required_services", "explain_persistent_mcp", "offer_autopilot", "activate_autopilot", "validate", "complete", "open_dashboard"
urlstring | nullrequired
format: "uri"
instructionsstring | nullrequired
secure_urlstring | nullrequired
format: "uri"
mcp_urlstringrequired
format: "uri"
dashboard_urlstringrequired
format: "uri"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/agent-state/apply' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"summary": {}
}'
POST/v1/workspaces/{workspaceId}/onboarding/agent-state/plan/approve
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Opportunity plan approved by the authenticated workspace administrator.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
workspace_idstringrequired
format: "uuid"
statusstringrequired
enum: "choose_agent", "discovering", "planning", "implementing", "validating", "ready", "complete"
entry_surfacestring | nullrequired
enum: "codex", "chatgpt", "claude", "grok", "other_agent", "browser", null
agent_statusstringrequired
enum: "not_connected", "connecting", "connected", "browser_only"
agent_client_namestring | nullrequired
domain_choicestringrequired
enum: "undecided", "company_domain", "no_domain"
company_domainstring | nullrequired
domain_chosen_atstring | nullrequired
format: "date-time"
business_contextobjectrequired
Additional propertyAny value
opportunity_planarrayrequired
Each itemobject
Additional propertyAny value
implementation_summaryobjectrequired
Additional propertyAny value
validation_summaryobjectrequired
Additional propertyAny value
journey_metadataobjectrequired
Additional propertyAny value
context_reviewed_atstring | nullrequired
format: "date-time"
plan_proposed_atstring | nullrequired
format: "date-time"
plan_approved_atstring | nullrequired
format: "date-time"
completed_atstring | nullrequired
format: "date-time"
versionintegerrequired
format: "int64" · minimum: 1
updated_atstringrequired
format: "date-time"
allOf 2object
domain_discoveryunspecifiedrequired
oneOf 1object
domainstringrequired
scan_statusstringrequired
enum: "complete", "partial", "failed"
companyobjectrequired
domainstringrequired
Further nesting omitted
website_urlstring | nullrequired
format: "uri"
Further nesting omitted
website_statusstringrequired
enum: "available", "missing", "blocked", "error"
Further nesting omitted
company_namestringrequired
Further nesting omitted
summarystringrequired
Further nesting omitted
audiencestringrequired
Further nesting omitted
offeringsarrayrequired
Further nesting omitted
logo_urlstring | nullrequired
format: "uri"
Further nesting omitted
favicon_urlstring | nullrequired
format: "uri"
Further nesting omitted
visual_identityobjectrequired
Further nesting omitted
source_snapshotobjectrequired
Further nesting omitted
dns_signalsarrayrequired
Each itemobject
Further nesting omitted
dns_providerunspecifiedrequired
oneOf 1object
No additional properties
Further nesting omitted
oneOf 2null
Further nesting omitted
provider_detectionsarrayrequired
Each itemobject
Further nesting omitted
capability_summaryarrayrequired
Each itemobject
Further nesting omitted
recommended_connectionsarrayrequired
Each itemobject
No additional properties
Further nesting omitted
connection_planarrayrequired
Each itemobject
No additional properties
Further nesting omitted
limitationsarrayrequired
Each itemstring
Further nesting omitted
scanned_atstringrequired
format: "date-time"
confirmed_atstring | nullrequired
format: "date-time"
oneOf 2null
recommended_connectionsarrayrequired
Each itemobject
No additional properties
keystringrequired
namestringrequired
categorystringrequired
enum: "email", "customer", "product", "work", "data"
prioritystringrequired
enum: "required", "recommended"
reasonstringrequired
sourcestringrequired
enum: "dns", "business_context", "opportunity_plan", "banger_recommendation"
setup_modestringrequired
enum: "oauth", "secure_credentials"
availablebooleanrequired
provider_keystring
evidencearrayrequired
Each itemobject
Further nesting omitted
domain_bundleobject | nullrequired
Additional propertyAny value
growthobjectrequired
Additional propertyAny value
activationobjectrequired
modestringrequired
enum: "hosted", "company_domain", "starter"
statusstringrequired
enum: "hosted_mailbox_required", "hosted_mailbox_proving", "hosted_mailbox_ready", "needs_context", "needs_provisioning", "provisioning", "dns_required", "ready_for_proof", "proving", "activated", "starter_required", "starter_proving", "starter_ready"
domainstring | nullrequired
sending_domain_idstring | nullrequired
format: "uuid"
mailbox_idstring | nullrequired
format: "uuid"
mailbox_addressstring | nullrequired
format: "email"
exact_dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
Further nesting omitted
lane_idstringrequired
format: "uuid"
Further nesting omitted
providerstringrequired
enum: "banger", "resend"
Further nesting omitted
purposestringrequired
Further nesting omitted
typestringrequired
enum: "TXT", "MX", "CNAME"
Further nesting omitted
namestringrequired
Further nesting omitted
valuestringrequired
Further nesting omitted
priorityinteger | nullrequired
Further nesting omitted
requiredbooleanrequired
Further nesting omitted
statusstringrequired
enum: "pending", "verified", "error"
Further nesting omitted
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
Further nesting omitted
first_observed_atstring | nullrequired
format: "date-time"
Further nesting omitted
last_checked_atstring | nullrequired
format: "date-time"
Further nesting omitted
errorobjectrequired
Further nesting omitted
provider_referencestring | nullrequired
Further nesting omitted
checkpointsarrayrequired
Each itemobject
keystringrequired
enum: "domain", "provider", "infrastructure", "dns", "mailbox", "product", "broadcast"
Further nesting omitted
labelstringrequired
Further nesting omitted
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
lanesobjectrequired
mailboxobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
transactionalobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
marketingobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
proofunspecifiedrequired
oneOf 1object
proof_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_addressstringrequired
format: "email"
Further nesting omitted
command_idstringrequired
format: "uuid"
Further nesting omitted
phasestringrequired
enum: "sending", "sent", "received", "checked", "failed"
Further nesting omitted
send_completebooleanrequired
Further nesting omitted
receive_completebooleanrequired
Further nesting omitted
round_trip_check_completebooleanrequired
Further nesting omitted
agent_check_completebooleanrequired
Further nesting omitted
completebooleanrequired
Further nesting omitted
expected_subjectstringrequired
Further nesting omitted
expected_body_textstringrequired
Further nesting omitted
received_message_idstring
format: "uuid"
Further nesting omitted
received_thread_idstring
format: "uuid"
Further nesting omitted
received_subjectstring
Further nesting omitted
received_body_textstring
Further nesting omitted
received_atstring
format: "date-time"
Further nesting omitted
agent_labelstring
Further nesting omitted
agent_suggested_actionstring
Further nesting omitted
error_codestring
Further nesting omitted
replayedbooleanrequired
Further nesting omitted
oneOf 2object
proof_idstringrequired
format: "uuid"
Further nesting omitted
domain_idstringrequired
format: "uuid"
Further nesting omitted
native_domain_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_addressstringrequired
format: "email"
Further nesting omitted
transactional_send_intent_idstring
format: "uuid"
Further nesting omitted
marketing_send_intent_idstring
format: "uuid"
Further nesting omitted
transactional_subjectstringrequired
Further nesting omitted
marketing_subjectstringrequired
Further nesting omitted
phasestringrequired
enum: "sending", "receiving", "received", "checked", "failed"
Further nesting omitted
send_completebooleanrequired
Further nesting omitted
transactional_receivedbooleanrequired
Further nesting omitted
marketing_receivedbooleanrequired
Further nesting omitted
receive_completebooleanrequired
Further nesting omitted
agent_check_completebooleanrequired
Further nesting omitted
completebooleanrequired
Further nesting omitted
error_codestring
Further nesting omitted
replayedbooleanrequired
Further nesting omitted
oneOf 3null
overall_readybooleanrequired
production_readybooleanrequired
completedbooleanrequired
pendingbooleanrequired
next_actionstringrequired
enum: "choose_agent", "provision_hosted_mailbox", "send_aha_1", "wait_for_aha_1", "offer_custom_domain", "review_domain_bundle", "provision_domain_bundle", "wait_for_dns_records", "ask_computer_use_permission", "configure_dns_with_computer_use", "present_manual_dns_instructions", "wait_for_dns_propagation", "send_aha_2", "wait_for_aha_2", "create_starter_mailbox", "run_starter_proof", "wait_for_starter_proof", "collect_business_context", "build_lifecycle_map", "review_growth_system", "connect_required_services", "explain_persistent_mcp", "offer_autopilot", "activate_autopilot", "validate", "complete", "open_dashboard"
action_requiredobjectrequired
typestringrequired
requiredbooleanrequired
actionstringrequired
enum: "choose_agent", "provision_hosted_mailbox", "send_aha_1", "wait_for_aha_1", "offer_custom_domain", "review_domain_bundle", "provision_domain_bundle", "wait_for_dns_records", "ask_computer_use_permission", "configure_dns_with_computer_use", "present_manual_dns_instructions", "wait_for_dns_propagation", "send_aha_2", "wait_for_aha_2", "create_starter_mailbox", "run_starter_proof", "wait_for_starter_proof", "collect_business_context", "build_lifecycle_map", "review_growth_system", "connect_required_services", "explain_persistent_mcp", "offer_autopilot", "activate_autopilot", "validate", "complete", "open_dashboard"
urlstring | nullrequired
format: "uri"
instructionsstring | nullrequired
secure_urlstring | nullrequired
format: "uri"
mcp_urlstringrequired
format: "uri"
dashboard_urlstringrequired
format: "uri"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/agent-state/plan/approve' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/onboarding/agent-state/validate
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 200
Validation result recorded.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
workspace_idstringrequired
format: "uuid"
statusstringrequired
enum: "choose_agent", "discovering", "planning", "implementing", "validating", "ready", "complete"
entry_surfacestring | nullrequired
enum: "codex", "chatgpt", "claude", "grok", "other_agent", "browser", null
agent_statusstringrequired
enum: "not_connected", "connecting", "connected", "browser_only"
agent_client_namestring | nullrequired
domain_choicestringrequired
enum: "undecided", "company_domain", "no_domain"
company_domainstring | nullrequired
domain_chosen_atstring | nullrequired
format: "date-time"
business_contextobjectrequired
Additional propertyAny value
opportunity_planarrayrequired
Each itemobject
Additional propertyAny value
implementation_summaryobjectrequired
Additional propertyAny value
validation_summaryobjectrequired
Additional propertyAny value
journey_metadataobjectrequired
Additional propertyAny value
context_reviewed_atstring | nullrequired
format: "date-time"
plan_proposed_atstring | nullrequired
format: "date-time"
plan_approved_atstring | nullrequired
format: "date-time"
completed_atstring | nullrequired
format: "date-time"
versionintegerrequired
format: "int64" · minimum: 1
updated_atstringrequired
format: "date-time"
allOf 2object
domain_discoveryunspecifiedrequired
oneOf 1object
domainstringrequired
scan_statusstringrequired
enum: "complete", "partial", "failed"
companyobjectrequired
domainstringrequired
Further nesting omitted
website_urlstring | nullrequired
format: "uri"
Further nesting omitted
website_statusstringrequired
enum: "available", "missing", "blocked", "error"
Further nesting omitted
company_namestringrequired
Further nesting omitted
summarystringrequired
Further nesting omitted
audiencestringrequired
Further nesting omitted
offeringsarrayrequired
Further nesting omitted
logo_urlstring | nullrequired
format: "uri"
Further nesting omitted
favicon_urlstring | nullrequired
format: "uri"
Further nesting omitted
visual_identityobjectrequired
Further nesting omitted
source_snapshotobjectrequired
Further nesting omitted
dns_signalsarrayrequired
Each itemobject
Further nesting omitted
dns_providerunspecifiedrequired
oneOf 1object
No additional properties
Further nesting omitted
oneOf 2null
Further nesting omitted
provider_detectionsarrayrequired
Each itemobject
Further nesting omitted
capability_summaryarrayrequired
Each itemobject
Further nesting omitted
recommended_connectionsarrayrequired
Each itemobject
No additional properties
Further nesting omitted
connection_planarrayrequired
Each itemobject
No additional properties
Further nesting omitted
limitationsarrayrequired
Each itemstring
Further nesting omitted
scanned_atstringrequired
format: "date-time"
confirmed_atstring | nullrequired
format: "date-time"
oneOf 2null
recommended_connectionsarrayrequired
Each itemobject
No additional properties
keystringrequired
namestringrequired
categorystringrequired
enum: "email", "customer", "product", "work", "data"
prioritystringrequired
enum: "required", "recommended"
reasonstringrequired
sourcestringrequired
enum: "dns", "business_context", "opportunity_plan", "banger_recommendation"
setup_modestringrequired
enum: "oauth", "secure_credentials"
availablebooleanrequired
provider_keystring
evidencearrayrequired
Each itemobject
Further nesting omitted
domain_bundleobject | nullrequired
Additional propertyAny value
growthobjectrequired
Additional propertyAny value
activationobjectrequired
modestringrequired
enum: "hosted", "company_domain", "starter"
statusstringrequired
enum: "hosted_mailbox_required", "hosted_mailbox_proving", "hosted_mailbox_ready", "needs_context", "needs_provisioning", "provisioning", "dns_required", "ready_for_proof", "proving", "activated", "starter_required", "starter_proving", "starter_ready"
domainstring | nullrequired
sending_domain_idstring | nullrequired
format: "uuid"
mailbox_idstring | nullrequired
format: "uuid"
mailbox_addressstring | nullrequired
format: "email"
exact_dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
Further nesting omitted
lane_idstringrequired
format: "uuid"
Further nesting omitted
providerstringrequired
enum: "banger", "resend"
Further nesting omitted
purposestringrequired
Further nesting omitted
typestringrequired
enum: "TXT", "MX", "CNAME"
Further nesting omitted
namestringrequired
Further nesting omitted
valuestringrequired
Further nesting omitted
priorityinteger | nullrequired
Further nesting omitted
requiredbooleanrequired
Further nesting omitted
statusstringrequired
enum: "pending", "verified", "error"
Further nesting omitted
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
Further nesting omitted
first_observed_atstring | nullrequired
format: "date-time"
Further nesting omitted
last_checked_atstring | nullrequired
format: "date-time"
Further nesting omitted
errorobjectrequired
Further nesting omitted
provider_referencestring | nullrequired
Further nesting omitted
checkpointsarrayrequired
Each itemobject
keystringrequired
enum: "domain", "provider", "infrastructure", "dns", "mailbox", "product", "broadcast"
Further nesting omitted
labelstringrequired
Further nesting omitted
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
lanesobjectrequired
mailboxobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
transactionalobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
marketingobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
proofunspecifiedrequired
oneOf 1object
proof_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_addressstringrequired
format: "email"
Further nesting omitted
command_idstringrequired
format: "uuid"
Further nesting omitted
phasestringrequired
enum: "sending", "sent", "received", "checked", "failed"
Further nesting omitted
send_completebooleanrequired
Further nesting omitted
receive_completebooleanrequired
Further nesting omitted
round_trip_check_completebooleanrequired
Further nesting omitted
agent_check_completebooleanrequired
Further nesting omitted
completebooleanrequired
Further nesting omitted
expected_subjectstringrequired
Further nesting omitted
expected_body_textstringrequired
Further nesting omitted
received_message_idstring
format: "uuid"
Further nesting omitted
received_thread_idstring
format: "uuid"
Further nesting omitted
received_subjectstring
Further nesting omitted
received_body_textstring
Further nesting omitted
received_atstring
format: "date-time"
Further nesting omitted
agent_labelstring
Further nesting omitted
agent_suggested_actionstring
Further nesting omitted
error_codestring
Further nesting omitted
replayedbooleanrequired
Further nesting omitted
oneOf 2object
proof_idstringrequired
format: "uuid"
Further nesting omitted
domain_idstringrequired
format: "uuid"
Further nesting omitted
native_domain_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_addressstringrequired
format: "email"
Further nesting omitted
transactional_send_intent_idstring
format: "uuid"
Further nesting omitted
marketing_send_intent_idstring
format: "uuid"
Further nesting omitted
transactional_subjectstringrequired
Further nesting omitted
marketing_subjectstringrequired
Further nesting omitted
phasestringrequired
enum: "sending", "receiving", "received", "checked", "failed"
Further nesting omitted
send_completebooleanrequired
Further nesting omitted
transactional_receivedbooleanrequired
Further nesting omitted
marketing_receivedbooleanrequired
Further nesting omitted
receive_completebooleanrequired
Further nesting omitted
agent_check_completebooleanrequired
Further nesting omitted
completebooleanrequired
Further nesting omitted
error_codestring
Further nesting omitted
replayedbooleanrequired
Further nesting omitted
oneOf 3null
overall_readybooleanrequired
production_readybooleanrequired
completedbooleanrequired
pendingbooleanrequired
next_actionstringrequired
enum: "choose_agent", "provision_hosted_mailbox", "send_aha_1", "wait_for_aha_1", "offer_custom_domain", "review_domain_bundle", "provision_domain_bundle", "wait_for_dns_records", "ask_computer_use_permission", "configure_dns_with_computer_use", "present_manual_dns_instructions", "wait_for_dns_propagation", "send_aha_2", "wait_for_aha_2", "create_starter_mailbox", "run_starter_proof", "wait_for_starter_proof", "collect_business_context", "build_lifecycle_map", "review_growth_system", "connect_required_services", "explain_persistent_mcp", "offer_autopilot", "activate_autopilot", "validate", "complete", "open_dashboard"
action_requiredobjectrequired
typestringrequired
requiredbooleanrequired
actionstringrequired
enum: "choose_agent", "provision_hosted_mailbox", "send_aha_1", "wait_for_aha_1", "offer_custom_domain", "review_domain_bundle", "provision_domain_bundle", "wait_for_dns_records", "ask_computer_use_permission", "configure_dns_with_computer_use", "present_manual_dns_instructions", "wait_for_dns_propagation", "send_aha_2", "wait_for_aha_2", "create_starter_mailbox", "run_starter_proof", "wait_for_starter_proof", "collect_business_context", "build_lifecycle_map", "review_growth_system", "connect_required_services", "explain_persistent_mcp", "offer_autopilot", "activate_autopilot", "validate", "complete", "open_dashboard"
urlstring | nullrequired
format: "uri"
instructionsstring | nullrequired
secure_urlstring | nullrequired
format: "uri"
mcp_urlstringrequired
format: "uri"
dashboard_urlstringrequired
format: "uri"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/agent-state/validate' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"summary": {}
}'
POST/v1/workspaces/{workspaceId}/onboarding/agent-state/complete
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Onboarding completed.
application/json
valueobject
dataunspecifiedrequired
allOf 1object
workspace_idstringrequired
format: "uuid"
statusstringrequired
enum: "choose_agent", "discovering", "planning", "implementing", "validating", "ready", "complete"
entry_surfacestring | nullrequired
enum: "codex", "chatgpt", "claude", "grok", "other_agent", "browser", null
agent_statusstringrequired
enum: "not_connected", "connecting", "connected", "browser_only"
agent_client_namestring | nullrequired
domain_choicestringrequired
enum: "undecided", "company_domain", "no_domain"
company_domainstring | nullrequired
domain_chosen_atstring | nullrequired
format: "date-time"
business_contextobjectrequired
Additional propertyAny value
opportunity_planarrayrequired
Each itemobject
Additional propertyAny value
implementation_summaryobjectrequired
Additional propertyAny value
validation_summaryobjectrequired
Additional propertyAny value
journey_metadataobjectrequired
Additional propertyAny value
context_reviewed_atstring | nullrequired
format: "date-time"
plan_proposed_atstring | nullrequired
format: "date-time"
plan_approved_atstring | nullrequired
format: "date-time"
completed_atstring | nullrequired
format: "date-time"
versionintegerrequired
format: "int64" · minimum: 1
updated_atstringrequired
format: "date-time"
allOf 2object
domain_discoveryunspecifiedrequired
oneOf 1object
domainstringrequired
scan_statusstringrequired
enum: "complete", "partial", "failed"
companyobjectrequired
domainstringrequired
Further nesting omitted
website_urlstring | nullrequired
format: "uri"
Further nesting omitted
website_statusstringrequired
enum: "available", "missing", "blocked", "error"
Further nesting omitted
company_namestringrequired
Further nesting omitted
summarystringrequired
Further nesting omitted
audiencestringrequired
Further nesting omitted
offeringsarrayrequired
Further nesting omitted
logo_urlstring | nullrequired
format: "uri"
Further nesting omitted
favicon_urlstring | nullrequired
format: "uri"
Further nesting omitted
visual_identityobjectrequired
Further nesting omitted
source_snapshotobjectrequired
Further nesting omitted
dns_signalsarrayrequired
Each itemobject
Further nesting omitted
dns_providerunspecifiedrequired
oneOf 1object
No additional properties
Further nesting omitted
oneOf 2null
Further nesting omitted
provider_detectionsarrayrequired
Each itemobject
Further nesting omitted
capability_summaryarrayrequired
Each itemobject
Further nesting omitted
recommended_connectionsarrayrequired
Each itemobject
No additional properties
Further nesting omitted
connection_planarrayrequired
Each itemobject
No additional properties
Further nesting omitted
limitationsarrayrequired
Each itemstring
Further nesting omitted
scanned_atstringrequired
format: "date-time"
confirmed_atstring | nullrequired
format: "date-time"
oneOf 2null
recommended_connectionsarrayrequired
Each itemobject
No additional properties
keystringrequired
namestringrequired
categorystringrequired
enum: "email", "customer", "product", "work", "data"
prioritystringrequired
enum: "required", "recommended"
reasonstringrequired
sourcestringrequired
enum: "dns", "business_context", "opportunity_plan", "banger_recommendation"
setup_modestringrequired
enum: "oauth", "secure_credentials"
availablebooleanrequired
provider_keystring
evidencearrayrequired
Each itemobject
Further nesting omitted
domain_bundleobject | nullrequired
Additional propertyAny value
growthobjectrequired
Additional propertyAny value
activationobjectrequired
modestringrequired
enum: "hosted", "company_domain", "starter"
statusstringrequired
enum: "hosted_mailbox_required", "hosted_mailbox_proving", "hosted_mailbox_ready", "needs_context", "needs_provisioning", "provisioning", "dns_required", "ready_for_proof", "proving", "activated", "starter_required", "starter_proving", "starter_ready"
domainstring | nullrequired
sending_domain_idstring | nullrequired
format: "uuid"
mailbox_idstring | nullrequired
format: "uuid"
mailbox_addressstring | nullrequired
format: "email"
exact_dns_recordsarrayrequired
Each itemobject
No additional properties
idstringrequired
format: "uuid"
Further nesting omitted
lane_idstringrequired
format: "uuid"
Further nesting omitted
providerstringrequired
enum: "banger", "resend"
Further nesting omitted
purposestringrequired
Further nesting omitted
typestringrequired
enum: "TXT", "MX", "CNAME"
Further nesting omitted
namestringrequired
Further nesting omitted
valuestringrequired
Further nesting omitted
priorityinteger | nullrequired
Further nesting omitted
requiredbooleanrequired
Further nesting omitted
statusstringrequired
enum: "pending", "verified", "error"
Further nesting omitted
provider_statusstringrequired
enum: "pending", "verified", "error", "not_applicable"
Further nesting omitted
first_observed_atstring | nullrequired
format: "date-time"
Further nesting omitted
last_checked_atstring | nullrequired
format: "date-time"
Further nesting omitted
errorobjectrequired
Further nesting omitted
provider_referencestring | nullrequired
Further nesting omitted
checkpointsarrayrequired
Each itemobject
keystringrequired
enum: "domain", "provider", "infrastructure", "dns", "mailbox", "product", "broadcast"
Further nesting omitted
labelstringrequired
Further nesting omitted
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
lanesobjectrequired
mailboxobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
transactionalobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
marketingobjectrequired
statusstringrequired
enum: "pending", "working", "action_required", "verified"
Further nesting omitted
detailstringrequired
Further nesting omitted
proofunspecifiedrequired
oneOf 1object
proof_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_addressstringrequired
format: "email"
Further nesting omitted
command_idstringrequired
format: "uuid"
Further nesting omitted
phasestringrequired
enum: "sending", "sent", "received", "checked", "failed"
Further nesting omitted
send_completebooleanrequired
Further nesting omitted
receive_completebooleanrequired
Further nesting omitted
round_trip_check_completebooleanrequired
Further nesting omitted
agent_check_completebooleanrequired
Further nesting omitted
completebooleanrequired
Further nesting omitted
expected_subjectstringrequired
Further nesting omitted
expected_body_textstringrequired
Further nesting omitted
received_message_idstring
format: "uuid"
Further nesting omitted
received_thread_idstring
format: "uuid"
Further nesting omitted
received_subjectstring
Further nesting omitted
received_body_textstring
Further nesting omitted
received_atstring
format: "date-time"
Further nesting omitted
agent_labelstring
Further nesting omitted
agent_suggested_actionstring
Further nesting omitted
error_codestring
Further nesting omitted
replayedbooleanrequired
Further nesting omitted
oneOf 2object
proof_idstringrequired
format: "uuid"
Further nesting omitted
domain_idstringrequired
format: "uuid"
Further nesting omitted
native_domain_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_idstringrequired
format: "uuid"
Further nesting omitted
mailbox_addressstringrequired
format: "email"
Further nesting omitted
transactional_send_intent_idstring
format: "uuid"
Further nesting omitted
marketing_send_intent_idstring
format: "uuid"
Further nesting omitted
transactional_subjectstringrequired
Further nesting omitted
marketing_subjectstringrequired
Further nesting omitted
phasestringrequired
enum: "sending", "receiving", "received", "checked", "failed"
Further nesting omitted
send_completebooleanrequired
Further nesting omitted
transactional_receivedbooleanrequired
Further nesting omitted
marketing_receivedbooleanrequired
Further nesting omitted
receive_completebooleanrequired
Further nesting omitted
agent_check_completebooleanrequired
Further nesting omitted
completebooleanrequired
Further nesting omitted
error_codestring
Further nesting omitted
replayedbooleanrequired
Further nesting omitted
oneOf 3null
overall_readybooleanrequired
production_readybooleanrequired
completedbooleanrequired
pendingbooleanrequired
next_actionstringrequired
enum: "choose_agent", "provision_hosted_mailbox", "send_aha_1", "wait_for_aha_1", "offer_custom_domain", "review_domain_bundle", "provision_domain_bundle", "wait_for_dns_records", "ask_computer_use_permission", "configure_dns_with_computer_use", "present_manual_dns_instructions", "wait_for_dns_propagation", "send_aha_2", "wait_for_aha_2", "create_starter_mailbox", "run_starter_proof", "wait_for_starter_proof", "collect_business_context", "build_lifecycle_map", "review_growth_system", "connect_required_services", "explain_persistent_mcp", "offer_autopilot", "activate_autopilot", "validate", "complete", "open_dashboard"
action_requiredobjectrequired
typestringrequired
requiredbooleanrequired
actionstringrequired
enum: "choose_agent", "provision_hosted_mailbox", "send_aha_1", "wait_for_aha_1", "offer_custom_domain", "review_domain_bundle", "provision_domain_bundle", "wait_for_dns_records", "ask_computer_use_permission", "configure_dns_with_computer_use", "present_manual_dns_instructions", "wait_for_dns_propagation", "send_aha_2", "wait_for_aha_2", "create_starter_mailbox", "run_starter_proof", "wait_for_starter_proof", "collect_business_context", "build_lifecycle_map", "review_growth_system", "connect_required_services", "explain_persistent_mcp", "offer_autopilot", "activate_autopilot", "validate", "complete", "open_dashboard"
urlstring | nullrequired
format: "uri"
instructionsstring | nullrequired
secure_urlstring | nullrequired
format: "uri"
mcp_urlstringrequired
format: "uri"
dashboard_urlstringrequired
format: "uri"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/agent-state/complete' \
--header "Authorization: Bearer $BANGER_API_KEY"
GET/v1/workspaces/{workspaceId}/onboarding/starter-proof
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Current proof status.
application/json
valueobject
dataobjectrequired
proof_idstringrequired
format: "uuid"
mailbox_idstringrequired
format: "uuid"
mailbox_addressstringrequired
format: "email"
command_idstringrequired
format: "uuid"
phasestringrequired
enum: "sending", "sent", "received", "checked", "failed"
send_completebooleanrequired
receive_completebooleanrequired
round_trip_check_completebooleanrequired
agent_check_completebooleanrequired
completebooleanrequired
expected_subjectstringrequired
expected_body_textstringrequired
received_message_idstring
format: "uuid"
received_thread_idstring
format: "uuid"
received_subjectstring
received_body_textstring
received_atstring
format: "date-time"
agent_labelstring
agent_suggested_actionstring
error_codestring
replayedbooleanrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/starter-proof?mailbox_id=00000000-0000-4000-8000-000000000001' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/onboarding/starter-proof
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
mailbox_idstringrequired
format: "uuid"
Success response 200
The existing proof was resumed.
application/json
valueobject
dataobjectrequired
proof_idstringrequired
format: "uuid"
mailbox_idstringrequired
format: "uuid"
mailbox_addressstringrequired
format: "email"
command_idstringrequired
format: "uuid"
phasestringrequired
enum: "sending", "sent", "received", "checked", "failed"
send_completebooleanrequired
receive_completebooleanrequired
round_trip_check_completebooleanrequired
agent_check_completebooleanrequired
completebooleanrequired
expected_subjectstringrequired
expected_body_textstringrequired
received_message_idstring
format: "uuid"
received_thread_idstring
format: "uuid"
received_subjectstring
received_body_textstring
received_atstring
format: "date-time"
agent_labelstring
agent_suggested_actionstring
error_codestring
replayedbooleanrequired
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/starter-proof' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"mailbox_id": "00000000-0000-4000-8000-000000000001"
}'
GET/v1/workspaces/{workspaceId}/onboarding/domain-proof
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Current proof status.
application/json
valueobject
dataobjectrequired
proof_idstringrequired
format: "uuid"
domain_idstringrequired
format: "uuid"
native_domain_idstringrequired
format: "uuid"
mailbox_idstringrequired
format: "uuid"
mailbox_addressstringrequired
format: "email"
transactional_send_intent_idstring
format: "uuid"
marketing_send_intent_idstring
format: "uuid"
transactional_subjectstringrequired
marketing_subjectstringrequired
phasestringrequired
enum: "sending", "receiving", "received", "checked", "failed"
send_completebooleanrequired
transactional_receivedbooleanrequired
marketing_receivedbooleanrequired
receive_completebooleanrequired
agent_check_completebooleanrequired
completebooleanrequired
error_codestring
replayedbooleanrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/domain-proof' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/onboarding/domain-proof
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 200
The existing proof was resumed.
application/json
valueobject
dataobjectrequired
proof_idstringrequired
format: "uuid"
domain_idstringrequired
format: "uuid"
native_domain_idstringrequired
format: "uuid"
mailbox_idstringrequired
format: "uuid"
mailbox_addressstringrequired
format: "email"
transactional_send_intent_idstring
format: "uuid"
marketing_send_intent_idstring
format: "uuid"
transactional_subjectstringrequired
marketing_subjectstringrequired
phasestringrequired
enum: "sending", "receiving", "received", "checked", "failed"
send_completebooleanrequired
transactional_receivedbooleanrequired
marketing_receivedbooleanrequired
receive_completebooleanrequired
agent_check_completebooleanrequired
completebooleanrequired
error_codestring
replayedbooleanrequired
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/domain-proof' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"native_domain_id": "00000000-0000-4000-8000-000000000001"
}'
PUT/v1/workspaces/{workspaceId}/onboarding/goal
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 200
The first outcome is selected and the guided run may open in the product shell.
application/json
curl example
curl --request PUT --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/goal' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"goal": "work_inbox"
}'
GET/v1/workspaces/{workspaceId}/onboarding/discovery
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
The current company and email-stack discovery.
application/json
valueobject
dataobjectrequired
domainstringrequired
scan_statusstringrequired
enum: "complete", "partial", "failed"
companyobjectrequired
domainstringrequired
website_urlstring | nullrequired
format: "uri"
website_statusstringrequired
enum: "available", "missing", "blocked", "error"
company_namestringrequired
summarystringrequired
audiencestringrequired
offeringsarrayrequired
Each itemstring
logo_urlstring | nullrequired
format: "uri"
favicon_urlstring | nullrequired
format: "uri"
visual_identityobjectrequired
colorsarrayrequired
maxItems: 6
Each itemstring
fontsarrayrequired
maxItems: 6
Each itemstring
tonearrayrequired
maxItems: 6
Each itemstring
source_confidencestringrequired
enum: "high", "medium", "low"
hero_image_urlstring
format: "uri"
palettearrayrequired
maxItems: 6
Each itemobject
No additional properties
valuestringrequired
Further nesting omitted
rolestringrequired
enum: "primary", "accent", "background", "surface", "text", "other"
Further nesting omitted
namestringrequired
Further nesting omitted
typographyarrayrequired
maxItems: 6
Each itemobject
No additional properties
familystringrequired
Further nesting omitted
rolestringrequired
enum: "heading", "body", "mono", "other"
Further nesting omitted
weightsarrayrequired
Further nesting omitted
assetsarrayrequired
maxItems: 8
Each itemobject
No additional properties
urlstringrequired
format: "uri"
Further nesting omitted
kindstringrequired
enum: "logo", "wordmark", "favicon", "hero"
Further nesting omitted
sourcestringrequired
Further nesting omitted
brand_summarystringrequired
imagery_stylearrayrequired
maxItems: 6
Each itemstring
source_snapshotobjectrequired
Additional propertyAny value
dns_signalsarrayrequired
Each itemobject
namestringrequired
typestringrequired
enum: "MX", "TXT", "CNAME", "NS"
valuestringrequired
ttlintegerrequired
minimum: 0
dns_providerunspecifiedrequired
oneOf 1object
No additional properties
keystringrequired
namestringrequired
confidencestringrequired
enum: "high", "medium", "low"
dashboard_urlstringrequired
format: "uri"
evidencearrayrequired
Each itemobject
namestringrequired
Further nesting omitted
typestringrequired
enum: "MX", "TXT", "CNAME", "NS"
Further nesting omitted
valuestringrequired
Further nesting omitted
ttlintegerrequired
minimum: 0
Further nesting omitted
oneOf 2null
provider_detectionsarrayrequired
Each itemobject
keystringrequired
namestringrequired
categoriesarrayrequired
Each itemstring
enum: "work_mailbox", "transactional", "marketing", "deliverability"
confidencestringrequired
enum: "high", "medium", "low"
evidencearrayrequired
Each itemobject
namestringrequired
Further nesting omitted
typestringrequired
enum: "MX", "TXT", "CNAME", "NS"
Further nesting omitted
valuestringrequired
Further nesting omitted
ttlintegerrequired
minimum: 0
Further nesting omitted
capability_summaryarrayrequired
Each itemobject
kindstringrequired
enum: "work_mailbox", "transactional", "marketing", "deliverability"
labelstringrequired
statusstringrequired
enum: "detected", "missing", "needs_review"
provider_keysarrayrequired
Each itemstring
recommendationstringrequired
enum: "connect", "setup_banger", "review"
recommended_connectionsarrayrequired
Each itemobject
No additional properties
keystringrequired
namestringrequired
categorystringrequired
enum: "email", "customer", "product", "work", "data"
prioritystringrequired
enum: "required", "recommended"
reasonstringrequired
sourcestringrequired
enum: "dns", "business_context", "opportunity_plan", "banger_recommendation"
setup_modestringrequired
enum: "oauth", "secure_credentials"
availablebooleanrequired
provider_keystring
evidencearrayrequired
Each itemobject
namestringrequired
Further nesting omitted
typestringrequired
enum: "MX", "TXT", "CNAME", "NS"
Further nesting omitted
valuestringrequired
Further nesting omitted
ttlintegerrequired
minimum: 0
Further nesting omitted
connection_planarrayrequired
Each itemobject
No additional properties
capabilitystringrequired
enum: "work_mailbox", "transactional", "marketing", "deliverability"
provider_keystring
actionstringrequired
enum: "connect", "setup_banger", "review"
domainstring
minLength: 3 · maxLength: 253
limitationsarrayrequired
Each itemstring
scanned_atstringrequired
format: "date-time"
confirmed_atstring | nullrequired
format: "date-time"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/discovery' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/onboarding/discovery
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
domainstringrequired
minLength: 3 · maxLength: 253
stream_kindstring
default: "default" · enum: "default", "transactional", "marketing"
Success response 201
Public DNS and website discovery completed and was persisted.
application/json
valueobject
dataobjectrequired
domainstringrequired
scan_statusstringrequired
enum: "complete", "partial", "failed"
companyobjectrequired
domainstringrequired
website_urlstring | nullrequired
format: "uri"
website_statusstringrequired
enum: "available", "missing", "blocked", "error"
company_namestringrequired
summarystringrequired
audiencestringrequired
offeringsarrayrequired
Each itemstring
logo_urlstring | nullrequired
format: "uri"
favicon_urlstring | nullrequired
format: "uri"
visual_identityobjectrequired
colorsarrayrequired
maxItems: 6
Each itemstring
fontsarrayrequired
maxItems: 6
Each itemstring
tonearrayrequired
maxItems: 6
Each itemstring
source_confidencestringrequired
enum: "high", "medium", "low"
hero_image_urlstring
format: "uri"
palettearrayrequired
maxItems: 6
Each itemobject
No additional properties
valuestringrequired
Further nesting omitted
rolestringrequired
enum: "primary", "accent", "background", "surface", "text", "other"
Further nesting omitted
namestringrequired
Further nesting omitted
typographyarrayrequired
maxItems: 6
Each itemobject
No additional properties
familystringrequired
Further nesting omitted
rolestringrequired
enum: "heading", "body", "mono", "other"
Further nesting omitted
weightsarrayrequired
Further nesting omitted
assetsarrayrequired
maxItems: 8
Each itemobject
No additional properties
urlstringrequired
format: "uri"
Further nesting omitted
kindstringrequired
enum: "logo", "wordmark", "favicon", "hero"
Further nesting omitted
sourcestringrequired
Further nesting omitted
brand_summarystringrequired
imagery_stylearrayrequired
maxItems: 6
Each itemstring
source_snapshotobjectrequired
Additional propertyAny value
dns_signalsarrayrequired
Each itemobject
namestringrequired
typestringrequired
enum: "MX", "TXT", "CNAME", "NS"
valuestringrequired
ttlintegerrequired
minimum: 0
dns_providerunspecifiedrequired
oneOf 1object
No additional properties
keystringrequired
namestringrequired
confidencestringrequired
enum: "high", "medium", "low"
dashboard_urlstringrequired
format: "uri"
evidencearrayrequired
Each itemobject
namestringrequired
Further nesting omitted
typestringrequired
enum: "MX", "TXT", "CNAME", "NS"
Further nesting omitted
valuestringrequired
Further nesting omitted
ttlintegerrequired
minimum: 0
Further nesting omitted
oneOf 2null
provider_detectionsarrayrequired
Each itemobject
keystringrequired
namestringrequired
categoriesarrayrequired
Each itemstring
enum: "work_mailbox", "transactional", "marketing", "deliverability"
confidencestringrequired
enum: "high", "medium", "low"
evidencearrayrequired
Each itemobject
namestringrequired
Further nesting omitted
typestringrequired
enum: "MX", "TXT", "CNAME", "NS"
Further nesting omitted
valuestringrequired
Further nesting omitted
ttlintegerrequired
minimum: 0
Further nesting omitted
capability_summaryarrayrequired
Each itemobject
kindstringrequired
enum: "work_mailbox", "transactional", "marketing", "deliverability"
labelstringrequired
statusstringrequired
enum: "detected", "missing", "needs_review"
provider_keysarrayrequired
Each itemstring
recommendationstringrequired
enum: "connect", "setup_banger", "review"
recommended_connectionsarrayrequired
Each itemobject
No additional properties
keystringrequired
namestringrequired
categorystringrequired
enum: "email", "customer", "product", "work", "data"
prioritystringrequired
enum: "required", "recommended"
reasonstringrequired
sourcestringrequired
enum: "dns", "business_context", "opportunity_plan", "banger_recommendation"
setup_modestringrequired
enum: "oauth", "secure_credentials"
availablebooleanrequired
provider_keystring
evidencearrayrequired
Each itemobject
namestringrequired
Further nesting omitted
typestringrequired
enum: "MX", "TXT", "CNAME", "NS"
Further nesting omitted
valuestringrequired
Further nesting omitted
ttlintegerrequired
minimum: 0
Further nesting omitted
connection_planarrayrequired
Each itemobject
No additional properties
capabilitystringrequired
enum: "work_mailbox", "transactional", "marketing", "deliverability"
provider_keystring
actionstringrequired
enum: "connect", "setup_banger", "review"
domainstring
minLength: 3 · maxLength: 253
limitationsarrayrequired
Each itemstring
scanned_atstringrequired
format: "date-time"
confirmed_atstring | nullrequired
format: "date-time"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/discovery' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"domain": "example",
"stream_kind": "default"
}'
PUT/v1/workspaces/{workspaceId}/onboarding/discovery
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
company_namestringrequired
minLength: 1 · maxLength: 200
summarystringrequired
minLength: 1 · maxLength: 4000
audiencestring
maxLength: 2000
offeringsarray
maxItems: 8
Each itemstring
maxLength: 120
website_urlstring | null
format: "uri"
connection_planarrayrequired
maxItems: 30
Each itemobject
No additional properties
capabilitystringrequired
enum: "work_mailbox", "transactional", "marketing", "deliverability"
provider_keystring
actionstringrequired
enum: "connect", "setup_banger", "review"
domainstring
minLength: 3 · maxLength: 253
Success response 200
Company context and the suggested connection plan were confirmed.
application/json
valueobject
dataobjectrequired
domainstringrequired
scan_statusstringrequired
enum: "complete", "partial", "failed"
companyobjectrequired
domainstringrequired
website_urlstring | nullrequired
format: "uri"
website_statusstringrequired
enum: "available", "missing", "blocked", "error"
company_namestringrequired
summarystringrequired
audiencestringrequired
offeringsarrayrequired
Each itemstring
logo_urlstring | nullrequired
format: "uri"
favicon_urlstring | nullrequired
format: "uri"
visual_identityobjectrequired
colorsarrayrequired
maxItems: 6
Each itemstring
fontsarrayrequired
maxItems: 6
Each itemstring
tonearrayrequired
maxItems: 6
Each itemstring
source_confidencestringrequired
enum: "high", "medium", "low"
hero_image_urlstring
format: "uri"
palettearrayrequired
maxItems: 6
Each itemobject
No additional properties
valuestringrequired
Further nesting omitted
rolestringrequired
enum: "primary", "accent", "background", "surface", "text", "other"
Further nesting omitted
namestringrequired
Further nesting omitted
typographyarrayrequired
maxItems: 6
Each itemobject
No additional properties
familystringrequired
Further nesting omitted
rolestringrequired
enum: "heading", "body", "mono", "other"
Further nesting omitted
weightsarrayrequired
Further nesting omitted
assetsarrayrequired
maxItems: 8
Each itemobject
No additional properties
urlstringrequired
format: "uri"
Further nesting omitted
kindstringrequired
enum: "logo", "wordmark", "favicon", "hero"
Further nesting omitted
sourcestringrequired
Further nesting omitted
brand_summarystringrequired
imagery_stylearrayrequired
maxItems: 6
Each itemstring
source_snapshotobjectrequired
Additional propertyAny value
dns_signalsarrayrequired
Each itemobject
namestringrequired
typestringrequired
enum: "MX", "TXT", "CNAME", "NS"
valuestringrequired
ttlintegerrequired
minimum: 0
dns_providerunspecifiedrequired
oneOf 1object
No additional properties
keystringrequired
namestringrequired
confidencestringrequired
enum: "high", "medium", "low"
dashboard_urlstringrequired
format: "uri"
evidencearrayrequired
Each itemobject
namestringrequired
Further nesting omitted
typestringrequired
enum: "MX", "TXT", "CNAME", "NS"
Further nesting omitted
valuestringrequired
Further nesting omitted
ttlintegerrequired
minimum: 0
Further nesting omitted
oneOf 2null
provider_detectionsarrayrequired
Each itemobject
keystringrequired
namestringrequired
categoriesarrayrequired
Each itemstring
enum: "work_mailbox", "transactional", "marketing", "deliverability"
confidencestringrequired
enum: "high", "medium", "low"
evidencearrayrequired
Each itemobject
namestringrequired
Further nesting omitted
typestringrequired
enum: "MX", "TXT", "CNAME", "NS"
Further nesting omitted
valuestringrequired
Further nesting omitted
ttlintegerrequired
minimum: 0
Further nesting omitted
capability_summaryarrayrequired
Each itemobject
kindstringrequired
enum: "work_mailbox", "transactional", "marketing", "deliverability"
labelstringrequired
statusstringrequired
enum: "detected", "missing", "needs_review"
provider_keysarrayrequired
Each itemstring
recommendationstringrequired
enum: "connect", "setup_banger", "review"
recommended_connectionsarrayrequired
Each itemobject
No additional properties
keystringrequired
namestringrequired
categorystringrequired
enum: "email", "customer", "product", "work", "data"
prioritystringrequired
enum: "required", "recommended"
reasonstringrequired
sourcestringrequired
enum: "dns", "business_context", "opportunity_plan", "banger_recommendation"
setup_modestringrequired
enum: "oauth", "secure_credentials"
availablebooleanrequired
provider_keystring
evidencearrayrequired
Each itemobject
namestringrequired
Further nesting omitted
typestringrequired
enum: "MX", "TXT", "CNAME", "NS"
Further nesting omitted
valuestringrequired
Further nesting omitted
ttlintegerrequired
minimum: 0
Further nesting omitted
connection_planarrayrequired
Each itemobject
No additional properties
capabilitystringrequired
enum: "work_mailbox", "transactional", "marketing", "deliverability"
provider_keystring
actionstringrequired
enum: "connect", "setup_banger", "review"
domainstring
minLength: 3 · maxLength: 253
limitationsarrayrequired
Each itemstring
scanned_atstringrequired
format: "date-time"
confirmed_atstring | nullrequired
format: "date-time"
curl example
curl --request PUT --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/discovery' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"company_name": "example",
"summary": "example",
"audience": "example",
"offerings": [
"example"
],
"website_url": "https://example.com",
"connection_plan": [
{
"capability": "work_mailbox",
"provider_key": "example",
"action": "connect",
"domain": "example"
}
]
}'
POST/v1/workspaces/{workspaceId}/onboarding/agent-state/confirm-connection
Requires the OAuth credential installed in the current agent client and automation:read scope.
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Successful response.
application/json
valueobject
dataobjectrequired
statusstringrequired
enum: "connected"
messagestringrequired
workspace_idstringrequired
format: "uuid"
client_namestringrequired
confirmed_atstringrequired
format: "date-time"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/agent-state/confirm-connection' \
--header "Authorization: Bearer $BANGER_API_KEY"