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
The icon: the mark on its own, used small (email footer, slide-in forms) and as the header when there is no wordmark.
maxLength: 2000
wordmark_urlstring
The wordmark: the company name as drawn, shown alone at the top of every email.
maxLength: 2000
wordmark_inkstring
The color the wordmark is drawn in, measured from the image on save. A header the mark wouldn't read on gets a plate behind it. Absent for opaque images.
maxLength: 7
logo_inkstring
The color the icon is drawn in, measured from the image on save.
maxLength: 7
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
deleting: deleted by a person; restorable until delete_after, then removed for good.
enum: "active", "archived", "deleting"
delete_afterstring | null
When a deleting product is removed for good.
format: "date-time"
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
The icon: the mark on its own, used small (email footer, slide-in forms) and as the header when there is no wordmark.
maxLength: 2000
wordmark_urlstring
The wordmark: the company name as drawn, shown alone at the top of every email.
maxLength: 2000
wordmark_inkstring
The color the wordmark is drawn in, measured from the image on save. A header the mark wouldn't read on gets a plate behind it. Absent for opaque images.
maxLength: 7
logo_inkstring
The color the icon is drawn in, measured from the image on save.
maxLength: 7
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
deleting: deleted by a person; restorable until delete_after, then removed for good.
enum: "active", "archived", "deleting"
delete_afterstring | null
When a deleting product is removed for good.
format: "date-time"
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
The icon: the mark on its own, used small (email footer, slide-in forms) and as the header when there is no wordmark.
maxLength: 2000
wordmark_urlstring
The wordmark: the company name as drawn, shown alone at the top of every email.
maxLength: 2000
wordmark_inkstring
The color the wordmark is drawn in, measured from the image on save. A header the mark wouldn't read on gets a plate behind it. Absent for opaque images.
maxLength: 7
logo_inkstring
The color the icon is drawn in, measured from the image on save.
maxLength: 7
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
deleting: deleted by a person; restorable until delete_after, then removed for good.
enum: "active", "archived", "deleting"
delete_afterstring | null
When a deleting product is removed for good.
format: "date-time"
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
The icon: the mark on its own, used small (email footer, slide-in forms) and as the header when there is no wordmark.
maxLength: 2000
wordmark_urlstring
The wordmark: the company name as drawn, shown alone at the top of every email.
maxLength: 2000
wordmark_inkstring
The color the wordmark is drawn in, measured from the image on save. A header the mark wouldn't read on gets a plate behind it. Absent for opaque images.
maxLength: 7
logo_inkstring
The color the icon is drawn in, measured from the image on save.
maxLength: 7
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
The icon: the mark on its own, used small (email footer, slide-in forms) and as the header when there is no wordmark.
maxLength: 2000
wordmark_urlstring
The wordmark: the company name as drawn, shown alone at the top of every email.
maxLength: 2000
wordmark_inkstring
The color the wordmark is drawn in, measured from the image on save. A header the mark wouldn't read on gets a plate behind it. Absent for opaque images.
maxLength: 7
logo_inkstring
The color the icon is drawn in, measured from the image on save.
maxLength: 7
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
deleting: deleted by a person; restorable until delete_after, then removed for good.
enum: "active", "archived", "deleting"
delete_afterstring | null
When a deleting product is removed for good.
format: "date-time"
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"
}'
DELETE/v1/workspaces/{workspaceId}/products/{productId}
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
confirm_namestringrequired
The exact product name.
minLength: 1 · maxLength: 160
preview_tokenstringrequired
minLength: 64 · maxLength: 64
Success response 202
The product is out of use and is deleted for good at delete_after unless restored first. An idempotent replay returns the same result.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
namestringrequired
statusstringrequired
enum: "deleting"
delete_afterstringrequired
When the product is deleted for good; until then it can be restored.
format: "date-time"
next_product_idstringrequired
The workspace's default product now.
format: "uuid"
replayedboolean
curl example
curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/products/{productId}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Idempotency-Key: examplexxxxxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"confirm_name": "example",
"preview_token": "examplexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}'
GET/v1/workspaces/{workspaceId}/products/{productId}/deletion-preview
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
What deleting the product removes and stops.
application/json
valueobject
dataobjectrequired
productobjectrequired
idstringrequired
format: "uuid"
namestringrequired
is_defaultbooleanrequired
next_default_productunspecifiedrequired
The product that becomes the workspace default when the default is deleted.
oneOf 1null
oneOf 2object
idstringrequired
format: "uuid"
namestringrequired
last_productbooleanrequired
The only active product cannot be deleted.
mailboxesarrayrequired
Each itemobject
idstringrequired
format: "uuid"
addressstringrequired
domainsarrayrequired
Sending domains Banger removes once the restore window has passed.
Each itemobject
idstringrequired
format: "uuid"
domainstringrequired
journeysintegerrequired
broadcastsintegerrequired
signup_formsintegerrequired
contactsintegerrequired
api_keysintegerrequired
webhooksintegerrequired
pending_sendsintegerrequired
impactarrayrequired
Each itemstring
preview_tokenstringrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/products/{productId}/deletion-preview' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/products/{productId}/restore
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
The product is active again.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
namestringrequired
statusstringrequired
enum: "active"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/products/{productId}/restore' \
--header "Authorization: Bearer $BANGER_API_KEY"
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
The icon: the mark on its own, used small (email footer, slide-in forms) and as the header when there is no wordmark.
maxLength: 2000
wordmark_urlstring
The wordmark: the company name as drawn, shown alone at the top of every email.
maxLength: 2000
wordmark_inkstring
The color the wordmark is drawn in, measured from the image on save. A header the mark wouldn't read on gets a plate behind it. Absent for opaque images.
maxLength: 7
logo_inkstring
The color the icon is drawn in, measured from the image on save.
maxLength: 7
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
deleting: deleted by a person; restorable until delete_after, then removed for good.
enum: "active", "archived", "deleting"
delete_afterstring | null
When a deleting product is removed for good.
format: "date-time"
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"
}'
Mailboxes
GET/v1/workspaces/{workspaceId}/mailboxes
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Mailboxes visible to the actor.
application/json
valueobject
dataarrayrequired
Each itemobject
idstringrequired
format: "uuid"
workspace_idstringrequired
format: "uuid"
product_idstring | null
The product (project) the mailbox belongs to. Clients group mailboxes and build web-app links with it.
format: "uuid"
domain_idstring | null
format: "uuid"
addressstringrequired
The email address, or for an SMS inbox its phone number in E.164 (+15551234567).
display_namestringrequired
providerstringrequired
enum: "gmail", "smtp", "twilio"
channelstring
email; sms for an SMS inbox on Twilio; whatsapp for a WhatsApp inbox, a WhatsApp sender on Twilio for the business's WhatsApp Business account.
enum: "email", "sms", "whatsapp"
sms_verificationobject | null
A number from Banger, carriers' answer on its toll-free verification. It sends once approved; null for every other mailbox.
statusstring
enum: "pending_review", "in_review", "approved", "rejected"
reasonstring | null
Carriers' reason when rejected.
statusstringrequired
enum: "pending", "active", "suspended", "reconnect_required", "disabled"
status_reasonstring | null
suspended_atstring | null
mailbox_kindstringrequired
enum: "domain", "starter"
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/mailboxes' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/mailboxes
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 200
Idempotent replay of a native mailbox creation.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
workspace_idstringrequired
format: "uuid"
product_idstring | null
The product (project) the mailbox belongs to. Clients group mailboxes and build web-app links with it.
format: "uuid"
domain_idstring | null
format: "uuid"
addressstringrequired
The email address, or for an SMS inbox its phone number in E.164 (+15551234567).
display_namestringrequired
providerstringrequired
enum: "gmail", "smtp", "twilio"
channelstring
email; sms for an SMS inbox on Twilio; whatsapp for a WhatsApp inbox, a WhatsApp sender on Twilio for the business's WhatsApp Business account.
enum: "email", "sms", "whatsapp"
sms_verificationobject | null
A number from Banger, carriers' answer on its toll-free verification. It sends once approved; null for every other mailbox.
statusstring
enum: "pending_review", "in_review", "approved", "rejected"
reasonstring | null
Carriers' reason when rejected.
statusstringrequired
enum: "pending", "active", "suspended", "reconnect_required", "disabled"
status_reasonstring | null
suspended_atstring | null
mailbox_kindstringrequired
enum: "domain", "starter"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/mailboxes' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Idempotency-Key: examplexxxxxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"domain_id": "00000000-0000-4000-8000-000000000001",
"local_part": "example",
"display_name": "example"
}'
POST/v1/workspaces/{workspaceId}/mailboxes/sms
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
account_sidstringrequired
pattern: "^AC[0-9a-f]{32}$"
auth_tokenstringrequired
minLength: 16 · maxLength: 128
phone_numberstringrequired
The Twilio number in E.164.
display_namestring
maxLength: 200
Success response 201
The SMS inbox.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
workspace_idstringrequired
format: "uuid"
product_idstring | null
The product (project) the mailbox belongs to. Clients group mailboxes and build web-app links with it.
format: "uuid"
domain_idstring | null
format: "uuid"
addressstringrequired
The email address, or for an SMS inbox its phone number in E.164 (+15551234567).
display_namestringrequired
providerstringrequired
enum: "gmail", "smtp", "twilio"
channelstring
email; sms for an SMS inbox on Twilio; whatsapp for a WhatsApp inbox, a WhatsApp sender on Twilio for the business's WhatsApp Business account.
enum: "email", "sms", "whatsapp"
sms_verificationobject | null
A number from Banger, carriers' answer on its toll-free verification. It sends once approved; null for every other mailbox.
statusstring
enum: "pending_review", "in_review", "approved", "rejected"
reasonstring | null
Carriers' reason when rejected.
statusstringrequired
enum: "pending", "active", "suspended", "reconnect_required", "disabled"
status_reasonstring | null
suspended_atstring | null
mailbox_kindstringrequired
enum: "domain", "starter"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/mailboxes/sms' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"account_sid": "example",
"auth_token": "examplexxxxxxxxx",
"phone_number": "example",
"display_name": "example"
}'
GET/v1/workspaces/{workspaceId}/mailboxes/whatsapp/signup
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Banger's Meta app and its Embedded Signup configuration.
application/json
valueobject
dataobjectrequired
app_idstringrequired
config_idstringrequired
solution_idstringrequired
Twilio's Partner Solution id for Banger's Meta app.
graph_versionstringrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/mailboxes/whatsapp/signup' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/mailboxes/whatsapp
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
waba_idstringrequired
phone_numberstringrequired
The number the business chose in the signup
display_namestring
The name WhatsApp shows; required for a number from Banger.
maxLength: 200
Success response 201
The WhatsApp inbox.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
workspace_idstringrequired
format: "uuid"
product_idstring | null
The product (project) the mailbox belongs to. Clients group mailboxes and build web-app links with it.
format: "uuid"
domain_idstring | null
format: "uuid"
addressstringrequired
The email address, or for an SMS inbox its phone number in E.164 (+15551234567).
display_namestringrequired
providerstringrequired
enum: "gmail", "smtp", "twilio"
channelstring
email; sms for an SMS inbox on Twilio; whatsapp for a WhatsApp inbox, a WhatsApp sender on Twilio for the business's WhatsApp Business account.
enum: "email", "sms", "whatsapp"
sms_verificationobject | null
A number from Banger, carriers' answer on its toll-free verification. It sends once approved; null for every other mailbox.
statusstring
enum: "pending_review", "in_review", "approved", "rejected"
reasonstring | null
Carriers' reason when rejected.
statusstringrequired
enum: "pending", "active", "suspended", "reconnect_required", "disabled"
status_reasonstring | null
suspended_atstring | null
mailbox_kindstringrequired
enum: "domain", "starter"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/mailboxes/whatsapp' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"waba_id": "example",
"phone_number": "example",
"display_name": "example"
}'
GET/v1/workspaces/{workspaceId}/mailboxes/sms/available-numbers
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Numbers to pick from.
application/json
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/mailboxes/sms/available-numbers' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/mailboxes/sms/numbers
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
phone_numberstringrequired
display_namestring
maxLength: 200
businessobjectrequired
legal_namestringrequired
maxLength: 200
websitestringrequired
maxLength: 500
typestringrequired
enum: "private_profit", "public_profit", "sole_proprietor", "non_profit", "government"
registration_numberstring
EIN in the US
maxLength: 64
countrystringrequired
enum: "US", "CA"
streetstringrequired
maxLength: 200
street2string
maxLength: 200
citystringrequired
maxLength: 100
regionstringrequired
maxLength: 100
postal_codestringrequired
maxLength: 20
contact_first_namestringrequired
maxLength: 100
contact_last_namestringrequired
maxLength: 100
contact_emailstringrequired
maxLength: 320
contact_phonestringrequired
maxLength: 32
opt_in_urlstringrequired
The page where customers find this number.
maxLength: 500
use_case_summarystring
maxLength: 1000
message_samplestring
maxLength: 1000
Success response 201
The SMS inbox, pending until carriers approve the number.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
workspace_idstringrequired
format: "uuid"
product_idstring | null
The product (project) the mailbox belongs to. Clients group mailboxes and build web-app links with it.
format: "uuid"
domain_idstring | null
format: "uuid"
addressstringrequired
The email address, or for an SMS inbox its phone number in E.164 (+15551234567).
display_namestringrequired
providerstringrequired
enum: "gmail", "smtp", "twilio"
channelstring
email; sms for an SMS inbox on Twilio; whatsapp for a WhatsApp inbox, a WhatsApp sender on Twilio for the business's WhatsApp Business account.
enum: "email", "sms", "whatsapp"
sms_verificationobject | null
A number from Banger, carriers' answer on its toll-free verification. It sends once approved; null for every other mailbox.
statusstring
enum: "pending_review", "in_review", "approved", "rejected"
reasonstring | null
Carriers' reason when rejected.
statusstringrequired
enum: "pending", "active", "suspended", "reconnect_required", "disabled"
status_reasonstring | null
suspended_atstring | null
mailbox_kindstringrequired
enum: "domain", "starter"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/mailboxes/sms/numbers' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"phone_number": "example",
"display_name": "example",
"business": {
"legal_name": "example",
"website": "example",
"type": "private_profit",
"registration_number": "example",
"country": "US",
"street": "example",
"street2": "example",
"city": "example",
"region": "example",
"postal_code": "example",
"contact_first_name": "example",
"contact_last_name": "example",
"contact_email": "example",
"contact_phone": "example",
"opt_in_url": "example",
"use_case_summary": "example",
"message_sample": "example"
}
}'
GET/v1/workspaces/{workspaceId}/mailboxes/{mailboxId}/deletion-preview
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Exact mailbox and current deletion impact, without deleting anything.
application/json
valueobject
dataobjectrequired
mailboxobjectrequired
idstringrequired
format: "uuid"
addressstringrequired
providerstringrequired
domain_idstring | nullrequired
format: "uuid"
provider_connection_idstring | nullrequired
format: "uuid"
messagesintegerrequired
draftsintegerrequired
pending_sendsintegerrequired
broadcastsarrayrequired
Each itemobject
idstringrequired
format: "uuid"
namestringrequired
statusstringrequired
journeysarrayrequired
Each itemobject
idstringrequired
format: "uuid"
namestringrequired
statusstringrequired
signup_formsarrayrequired
Each itemobject
idstringrequired
format: "uuid"
namestringrequired
statusstringrequired
impactarrayrequired
Each itemstring
preview_tokenstringrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/mailboxes/{mailboxId}/deletion-preview' \
--header "Authorization: Bearer $BANGER_API_KEY"
PATCH/v1/workspaces/{workspaceId}/mailboxes/{mailboxId}
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 200
The mailbox with its sender name.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
workspace_idstringrequired
format: "uuid"
product_idstring | null
The product (project) the mailbox belongs to. Clients group mailboxes and build web-app links with it.
format: "uuid"
domain_idstring | null
format: "uuid"
addressstringrequired
The email address, or for an SMS inbox its phone number in E.164 (+15551234567).
display_namestringrequired
providerstringrequired
enum: "gmail", "smtp", "twilio"
channelstring
email; sms for an SMS inbox on Twilio; whatsapp for a WhatsApp inbox, a WhatsApp sender on Twilio for the business's WhatsApp Business account.
enum: "email", "sms", "whatsapp"
sms_verificationobject | null
A number from Banger, carriers' answer on its toll-free verification. It sends once approved; null for every other mailbox.
statusstring
enum: "pending_review", "in_review", "approved", "rejected"
reasonstring | null
Carriers' reason when rejected.
statusstringrequired
enum: "pending", "active", "suspended", "reconnect_required", "disabled"
status_reasonstring | null
suspended_atstring | null
mailbox_kindstringrequired
enum: "domain", "starter"
curl example
curl --request PATCH --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/mailboxes/{mailboxId}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"display_name": "example"
}'
DELETE/v1/workspaces/{workspaceId}/mailboxes/{mailboxId}
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
confirm_addressstringrequired
minLength: 3 · maxLength: 320
preview_tokenstringrequired
minLength: 64 · maxLength: 64
Success response 200
Deleted or idempotent replay. Stored files are queued for permanent cleanup.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
addressstringrequired
deletedbooleanrequired
replayedboolean
curl example
curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/mailboxes/{mailboxId}' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Idempotency-Key: examplexxxxxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"confirm_address": "example",
"preview_token": "examplexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}'
POST/v1/workspaces/{workspaceId}/mailboxes/starter
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
create_newboolean
Create an additional hosted mailbox instead of resuming the initial one.
local_partstring
Name before @bangermail.com. Without it the mailbox gets a word name such as quiet-maple-harbor.
minLength: 3 · maxLength: 40
display_namestring
maxLength: 200
Success response 200
Idempotent replay of starter identity creation.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
workspace_idstringrequired
format: "uuid"
product_idstring | null
The product (project) the mailbox belongs to. Clients group mailboxes and build web-app links with it.
format: "uuid"
domain_idstring | null
format: "uuid"
addressstringrequired
The email address, or for an SMS inbox its phone number in E.164 (+15551234567).
display_namestringrequired
providerstringrequired
enum: "gmail", "smtp", "twilio"
channelstring
email; sms for an SMS inbox on Twilio; whatsapp for a WhatsApp inbox, a WhatsApp sender on Twilio for the business's WhatsApp Business account.
enum: "email", "sms", "whatsapp"
sms_verificationobject | null
A number from Banger, carriers' answer on its toll-free verification. It sends once approved; null for every other mailbox.
statusstring
enum: "pending_review", "in_review", "approved", "rejected"
reasonstring | null
Carriers' reason when rejected.
statusstringrequired
enum: "pending", "active", "suspended", "reconnect_required", "disabled"
status_reasonstring | null
suspended_atstring | null
mailbox_kindstringrequired
enum: "domain", "starter"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/mailboxes/starter' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Idempotency-Key: examplexxxxxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"create_new": true,
"local_part": "example",
"display_name": "example"
}'
POST/v1/workspaces/{workspaceId}/mailboxes/{mailboxId}/reactivate
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 200
Mailbox reactivated, or already active after a prior successful request.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
workspace_idstringrequired
format: "uuid"
product_idstring | null
The product (project) the mailbox belongs to. Clients group mailboxes and build web-app links with it.
format: "uuid"
domain_idstring | null
format: "uuid"
addressstringrequired
The email address, or for an SMS inbox its phone number in E.164 (+15551234567).
display_namestringrequired
providerstringrequired
enum: "gmail", "smtp", "twilio"
channelstring
email; sms for an SMS inbox on Twilio; whatsapp for a WhatsApp inbox, a WhatsApp sender on Twilio for the business's WhatsApp Business account.
enum: "email", "sms", "whatsapp"
sms_verificationobject | null
A number from Banger, carriers' answer on its toll-free verification. It sends once approved; null for every other mailbox.
statusstring
enum: "pending_review", "in_review", "approved", "rejected"
reasonstring | null
Carriers' reason when rejected.
statusstringrequired
enum: "pending", "active", "suspended", "reconnect_required", "disabled"
status_reasonstring | null
suspended_atstring | null
mailbox_kindstringrequired
enum: "domain", "starter"
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/mailboxes/{mailboxId}/reactivate' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"acknowledge_recipient_complaint": true,
"reason": "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
Sends the draft from its mailbox, which must be one the caller reaches. A caller whose sends need approval gets a pending approval instead; a person who could send the draft directly decides it.
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 202
The send is queued, or waits for approval.
application/json
valueobject
dataunspecifiedrequired
oneOf 1object
idstringrequired
format: "uuid"
typestringrequired
statusstringrequired
enum: "accepted", "executing", "succeeded", "failed"
workspace_revisionintegerrequired
format: "int64"
created_atstringrequired
format: "date-time"
oneOf 2object
No additional properties
approvalobjectrequired
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"
qa_automationobject | null
Server-recorded dedicated QA automation provenance; never evidence of a human payload review. The run and global authorization are rechecked at execution.
kindstring
enum: "dedicated_qa_automation"
authorization_referencestring
run_idstring
operation_keystring
recipientsarray
Each itemstring
format: "email"
Further nesting omitted
approval_sha256string
resource_sha256string
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
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"
Transactional sending
GET/v1/workspaces/{workspaceId}/transactional-sends
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_idstring | nullrequired
format: "uuid"
command_idstring | nullrequired
format: "uuid"
statusstringrequired
command_statusstring | nullrequired
subjectstring
recipientsarray
Each itemobject
emailstringrequired
namestring
recipient_countintegerrequired
error_codestring | null
send_intent_idstring
format: "uuid"
providerstring | null
route_kindstring | null
sourcestring
from_addressstring
recipient_statesobject
Additional propertyinteger
provider_message_idstring | null
languageunspecified
The language this email went out in; null when it was not translated.
anyOf 1object
The language a person got an email in. Only translated (managed-content) emails have one.
localestringrequired
BCP 47 tag of the language the email was written in.
requested_localestring
Present only on an older send that went out in another language: the language the person should have got.
fallback_reasonstring
enum: "translation_missing", "translation_pending", "translation_review_required", "translation_failed", "translation_timeout"
anyOf 2null
journeyobject | null
The Journey step and enrollment that sent this email; null for other sends.
journey_idstringrequired
format: "uuid"
step_idstringrequired
format: "uuid"
enrollment_idstringrequired
format: "uuid"
experimentobject | null
The experiment variant this email was; null when none applied.
experiment_idstringrequired
format: "uuid"
variant_keystringrequired
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
completed_atstring | nullrequired
format: "date-time"
template_idstring | null
format: "uuid"
template_versioninteger | null
workspace_revisioninteger | null
command_resultobject
Additional propertyAny value
command_started_atstring | null
format: "date-time"
command_completed_atstring | null
format: "date-time"
body_textstring
body_htmlstring
reply_toarray
Each itemobject
emailstringrequired
namestring
headersobject
Additional propertystring
tagsarray
Each itemobject
namestringrequired
valuestringrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/transactional-sends?limit=200' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/transactional-sends
One recipient per Journey send. To takes one recipient in any RecipientInput shape ("a@example.com", "Pat <a@example.com>", { email, name }, or a one-element list); Cc and Bcc must be empty. reply_to defaults to the Journey's mailbox (an empty list also means the default); Product email needs exactly one. A new API Journey defaults to managed source content; legacy code Journeys retain complete-content sends. A refusal (4xx) leaves nothing frozen for the recipient, so a corrected call with a new idempotency key sends.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
journeystring
Key of the Journey this email belongs to, such as welcome. A key Banger has not seen yet records a new Journey from this email and sends it; claim that Journey later to manage its content. The key of a Journey you created sends once that Journey is approved and on. Without a key the send is refused with 422 journey_key_required, unless the workspace accepts sends without one. POST /journeys/{journeyKey}/send is the same send with the key in the path.
minLength: 1 · maxLength: 100
mailbox_idstring
Sender mailbox. Optional when the named Journey has one, which then sends.
format: "uuid"
tounspecifiedrequired
Recipients for to, cc, bcc and reply_to: an address ("a@example.com" or "Pat <a@example.com>"), an { email, name } object, or a list mixing both. Banger stores them as { email, name } objects with the email lowercased. The idempotency hash covers the body as sent, so retry with the same shape.
oneOf 1string
minLength: 3 · maxLength: 1000
oneOf 2object
namestring
emailstringrequired
format: "email"
oneOf 3array
maxItems: 500
Each itemunspecified
oneOf 1string
minLength: 3 · maxLength: 1000
oneOf 2object
namestring
emailstringrequired
format: "email"
ccarray
maxItems: 0
Each itemobject
namestring
emailstringrequired
format: "email"
bccarray
maxItems: 0
Each itemobject
namestring
emailstringrequired
format: "email"
subjectstring
maxLength: 10000
expires_atstring
Discard a deferred Journey send after this instant; at most seven days from the original request.
format: "date-time"
expires_after_secondsinteger
minimum: 1 · maximum: 604800
body_textstring
maxLength: 2000000
body_htmlstring
maxLength: 2000000
reply_tounspecified
Recipients for to, cc, bcc and reply_to: an address ("a@example.com" or "Pat <a@example.com>"), an { email, name } object, or a list mixing both. Banger stores them as { email, name } objects with the email lowercased. The idempotency hash covers the body as sent, so retry with the same shape.
oneOf 1string
minLength: 3 · maxLength: 1000
oneOf 2object
namestring
emailstringrequired
format: "email"
oneOf 3array
maxItems: 500
Each itemunspecified
oneOf 1string
minLength: 3 · maxLength: 1000
oneOf 2object
namestring
emailstringrequired
format: "email"
headersobject
Additional propertystring
maxLength: 5000
tagsarray
maxItems: 49
Each itemobject
No additional properties
namestringrequired
minLength: 1 · maxLength: 256
valuestringrequired
minLength: 1 · maxLength: 256
attachmentsarray
Files sent with the email, in managed and code Journeys alike. Their base64 content may total 10 MiB (about 7.5 MiB of files).
maxItems: 20
Each itemobject
No additional properties
filenamestringrequired
Name the recipient sees, on one line.
minLength: 1 · maxLength: 500
contentstringrequired
The file encoded as base64; whitespace is ignored.
minLength: 4
content_typestring
Media type such as application/pdf, without parameters. Defaults to application/octet-stream.
maxLength: 255
content_idstring
Content-ID an HTML body can reference as cid:<content_id>.
minLength: 1 · maxLength: 500
Success response 202
Successful response.
application/json
valueobject
dataobjectrequired
action_kindstringrequired
enum: "transactional.send"
idstring
format: "uuid"
send_intent_idstring
format: "uuid"
provider_attempt_idstring
format: "uuid"
statusstringrequired
sent/queued states from delivery, or for a frozen request: deferred (scheduled by policy or a translation wait), processing (being sent), discarded.
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}/transactional-sends' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Idempotency-Key: examplexxxxxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"journey": "example",
"mailbox_id": "00000000-0000-4000-8000-000000000001",
"to": "example",
"cc": [
{
"name": "example",
"email": "person@example.com"
}
],
"bcc": [
{
"name": "example",
"email": "person@example.com"
}
],
"subject": "example",
"expires_at": "2026-01-01T00:00:00Z",
"expires_after_seconds": 1,
"body_text": "example",
"body_html": "example",
"reply_to": "example",
"headers": {},
"tags": [
{
"name": "example",
"value": "example"
}
],
"attachments": [
{
"filename": "example",
"content": "example",
"content_type": "example",
"content_id": "example"
}
]
}'
GET/v1/workspaces/{workspaceId}/transactional-sends/{transactionalSendId}
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_idstring | nullrequired
format: "uuid"
command_idstring | nullrequired
format: "uuid"
statusstringrequired
command_statusstring | nullrequired
subjectstring
recipientsarray
Each itemobject
emailstringrequired
namestring
recipient_countintegerrequired
error_codestring | null
send_intent_idstring
format: "uuid"
providerstring | null
route_kindstring | null
sourcestring
from_addressstring
recipient_statesobject
Additional propertyinteger
provider_message_idstring | null
languageunspecified
The language this email went out in; null when it was not translated.
anyOf 1object
The language a person got an email in. Only translated (managed-content) emails have one.
localestringrequired
BCP 47 tag of the language the email was written in.
requested_localestring
Present only on an older send that went out in another language: the language the person should have got.
fallback_reasonstring
enum: "translation_missing", "translation_pending", "translation_review_required", "translation_failed", "translation_timeout"
anyOf 2null
journeyobject | null
The Journey step and enrollment that sent this email; null for other sends.
journey_idstringrequired
format: "uuid"
step_idstringrequired
format: "uuid"
enrollment_idstringrequired
format: "uuid"
experimentobject | null
The experiment variant this email was; null when none applied.
experiment_idstringrequired
format: "uuid"
variant_keystringrequired
created_atstringrequired
format: "date-time"
updated_atstringrequired
format: "date-time"
completed_atstring | nullrequired
format: "date-time"
template_idstring | null
format: "uuid"
template_versioninteger | null
workspace_revisioninteger | null
command_resultobject
Additional propertyAny value
command_started_atstring | null
format: "date-time"
command_completed_atstring | null
format: "date-time"
body_textstring
body_htmlstring
reply_toarray
Each itemobject
emailstringrequired
namestring
headersobject
Additional propertystring
tagsarray
Each itemobject
namestringrequired
valuestringrequired
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/transactional-sends/{transactionalSendId}' \
--header "Authorization: Bearer $BANGER_API_KEY"
GET/v1/workspaces/{workspaceId}/transactional-sends/{transactionalSendId}/timeline
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Ordered acceptance, provider-attempt, and recipient-event timeline.
application/json
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/transactional-sends/{transactionalSendId}/timeline' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/transactional-sends/{transactionalSendId}/retry
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
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}/transactional-sends/{transactionalSendId}/retry' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Idempotency-Key: examplexxxxxxxxx'
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 with an email is subscribed.
phone_channelsarray
The channels the rows' phone numbers are subscribed on. Required when any row has a phone. Banger takes an imported number as consented and keeps no proof, so no import or send is refused for lack of a consent record: the importer needs each person's consent before texting them. The number of a row marked unsubscribed is not subscribed, and numbers that opted out stay opted out.
maxItems: 2 · uniqueItems: true
Each itemstring
enum: "sms", "whatsapp"
phone_countrystring
Two-letter country code of the phone numbers written without a country code.
minLength: 2 · maxLength: 2
rowsarrayrequired
minItems: 1 · maxItems: 5000
Each itemobject
A person by email, by phone, or both.
emailstring
format: "email"
phonestring
Mobile number, with its country code (+5511999998888) or as a number of phone_country.
maxLength: 60
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,
"phone_channels": [
"sms"
],
"phone_country": "ex",
"rows": [
{
"email": "person@example.com",
"phone": "example",
"display_name": "example",
"status": "subscribed",
"attributes": {}
}
]
}'
PATCH/v1/workspaces/{workspaceId}/contacts/{contactId}/attributes
Requires contacts:write and contacts:read. Updates an existing contact only. Omitted attributes are preserved, explicit false is stored, and null removes a field. Supply verified source facts; absent data is not false. Subscription, suppression, identity and source history are unchanged.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 200
Current contact read-back; replayed is true when this mutation was already applied.
application/json
valueobject
dataobjectrequired
idstringrequired
format: "uuid"
attributesobjectrequired
Additional propertyAny value
statusstringrequired
enum: "subscribed", "unsubscribed", "bounced", "complained"
replayedbooleanrequired
Additional propertyAny value
curl example
curl --request PATCH --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/contacts/{contactId}/attributes' \
--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 '{
"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
A person by email (with its status), by phone, or both.
No additional properties
emailstring
format: "email" · maxLength: 320
phonestring
Mobile number, with its country code (+5511999998888) or as a number of phone_country. A row with only a phone needs no consent confirmation and no status: it is subscribed unless its status says unsubscribed, and a number brought so is not subscribed by a later import.
maxLength: 60
display_namestring
minLength: 0 · maxLength: 1000
attributesobject
Additional propertyAny value
statusstring
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
phone_channelsarray
The channels the rows' phone numbers are subscribed on. Required when any row has a phone. Banger takes an imported number as consented and keeps no proof, so no import or send is refused for lack of a consent record: the importer needs each person's consent before texting them. The number of a row marked unsubscribed is not subscribed, and numbers that opted out stay opted out.
maxItems: 2 · uniqueItems: true
Each itemstring
enum: "sms", "whatsapp"
phone_countrystring
Two-letter country code of the phone numbers written without a country code.
minLength: 2 · maxLength: 2
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
validbooleanrequired
total_rowsintegerrequired
valid_rowsintegerrequired
errorsarrayrequired
Each itemobject
rowintegerrequired
codestringrequired
messagestringrequired
phone_rowsinteger
Valid rows that bring a phone number. Present when there is one.
phone_channelsarray
Each itemstring
enum: "sms", "whatsapp"
phone_consent_noticestring
What to tell the importer about consent for the numbers. Present when a row brings one.
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",
"phone": "example",
"display_name": "example",
"attributes": {},
"status": "subscribed",
"consent_evidence": {
"source": "example",
"reference": "example",
"observed_at": "2026-01-01T00:00:00Z",
"statement": "example"
}
}
],
"consent_confirmed": true,
"phone_channels": [
"sms"
],
"phone_country": "ex"
}'
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", "phone", "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
phone_channelsarray
The channels a phone column's numbers are for, chosen by the importer. A column is matched to phone only in a workspace whose contacts hold numbers.
maxItems: 2 · uniqueItems: true
Each itemstring
enum: "sms", "whatsapp"
phone_countrystring
Two-letter country code of the numbers written without a country code.
minLength: 2 · maxLength: 2
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
}
]
}'
GET/v1/workspaces/{workspaceId}/contact-lists
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}/contact-lists' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/contact-lists
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 201
Successful response.
application/json
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/contact-lists' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "example",
"description": "example"
}'
GET/v1/workspaces/{workspaceId}/contact-lists/{listId}
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"
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}/contact-lists/{listId}' \
--header "Authorization: Bearer $BANGER_API_KEY"
DELETE/v1/workspaces/{workspaceId}/contact-lists/{listId}
Delete this list and contacts exclusive to it. Contacts belonging to other lists are preserved. Requires contacts:write.
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Counts of exclusive contacts deleted (or to delete) and shared contacts kept.
application/json
curl example
curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/contact-lists/{listId}' \
--header "Authorization: Bearer $BANGER_API_KEY"
GET/v1/workspaces/{workspaceId}/contact-lists/{listId}/deletion-preview
Preview list deletion counts. Memberships are rechecked when deleting. Requires contacts:read.
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Counts of exclusive contacts deleted (or to delete) and shared contacts kept.
application/json
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/contact-lists/{listId}/deletion-preview' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/contact-lists/{listId}/members
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
contact_idsarrayrequired
maxItems: 1000
Each itemstring
format: "uuid"
Success response 204
List membership updated.
No response body.
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/contact-lists/{listId}/members' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"contact_ids": [
"00000000-0000-4000-8000-000000000001"
]
}'
DELETE/v1/workspaces/{workspaceId}/contact-lists/{listId}/members
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
contact_idsarrayrequired
maxItems: 1000
Each itemstring
format: "uuid"
Success response 204
List membership updated.
No response body.
curl example
curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/contact-lists/{listId}/members' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"contact_ids": [
"00000000-0000-4000-8000-000000000001"
]
}'
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"
qa_automationobject | null
Server-recorded dedicated QA automation provenance; never evidence of a human payload review. The run and global authorization are rechecked at execution.
kindstring
enum: "dedicated_qa_automation"
authorization_referencestring
run_idstring
operation_keystring
recipientsarray
Each itemstring
format: "email"
Further nesting omitted
approval_sha256string
resource_sha256string
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"
qa_automationobject | null
Server-recorded dedicated QA automation provenance; never evidence of a human payload review. The run and global authorization are rechecked at execution.
kindstring
enum: "dedicated_qa_automation"
authorization_referencestring
run_idstring
operation_keystring
recipientsarray
Each itemstring
format: "email"
approval_sha256string
resource_sha256string
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
text_channelsarray
Texts (needs the customers feature): the channels the form asks consent for. The form then asks for a mobile number and shows one unticked box per channel under text_consent_wording. A ticked box makes the number the contact's subscribed address on that channel, kept with what the form showed, and a new SMS subscriber gets one confirmation text from the product's SMS inbox. Empty (the default) asks for no number. Not shown on bars.
maxItems: 2 · uniqueItems: true
Each itemstring
enum: "sms", "whatsapp"
phone_placeholderstring
maxLength: 60
text_consent_wordingstring
What ticking a box agrees to, shown above the consent boxes and kept with each consent as it was shown. {company} in it becomes the brand's company name.
maxLength: 600
sms_consent_labelstring
maxLength: 120
whatsapp_consent_labelstring
maxLength: 120
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
text_channelsarray
Texts (needs the customers feature): the channels the form asks consent for. The form then asks for a mobile number and shows one unticked box per channel under text_consent_wording. A ticked box makes the number the contact's subscribed address on that channel, kept with what the form showed, and a new SMS subscriber gets one confirmation text from the product's SMS inbox. Empty (the default) asks for no number. Not shown on bars.
maxItems: 2 · uniqueItems: true
Each itemstring
enum: "sms", "whatsapp"
phone_placeholderstring
maxLength: 60
text_consent_wordingstring
What ticking a box agrees to, shown above the consent boxes and kept with each consent as it was shown. {company} in it becomes the brand's company name.
maxLength: 600
sms_consent_labelstring
maxLength: 120
whatsapp_consent_labelstring
maxLength: 120
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
text_channelsarray
Texts (needs the customers feature): the channels the form asks consent for. The form then asks for a mobile number and shows one unticked box per channel under text_consent_wording. A ticked box makes the number the contact's subscribed address on that channel, kept with what the form showed, and a new SMS subscriber gets one confirmation text from the product's SMS inbox. Empty (the default) asks for no number. Not shown on bars.
maxItems: 2 · uniqueItems: true
Each itemstring
enum: "sms", "whatsapp"
phone_placeholderstring
maxLength: 60
text_consent_wordingstring
What ticking a box agrees to, shown above the consent boxes and kept with each consent as it was shown. {company} in it becomes the brand's company name.
maxLength: 600
sms_consent_labelstring
maxLength: 120
whatsapp_consent_labelstring
maxLength: 120
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",
"text_channels": [
"sms"
],
"phone_placeholder": "example",
"text_consent_wording": "example",
"sms_consent_label": "example",
"whatsapp_consent_label": "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
text_channelsarray
Texts (needs the customers feature): the channels the form asks consent for. The form then asks for a mobile number and shows one unticked box per channel under text_consent_wording. A ticked box makes the number the contact's subscribed address on that channel, kept with what the form showed, and a new SMS subscriber gets one confirmation text from the product's SMS inbox. Empty (the default) asks for no number. Not shown on bars.
maxItems: 2 · uniqueItems: true
Each itemstring
enum: "sms", "whatsapp"
phone_placeholderstring
maxLength: 60
text_consent_wordingstring
What ticking a box agrees to, shown above the consent boxes and kept with each consent as it was shown. {company} in it becomes the brand's company name.
maxLength: 600
sms_consent_labelstring
maxLength: 120
whatsapp_consent_labelstring
maxLength: 120
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",
"text_channels": [
"sms"
],
"phone_placeholder": "example",
"text_consent_wording": "example",
"sms_consent_label": "example",
"whatsapp_consent_label": "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
text_channelsarray
Texts (needs the customers feature): the channels the form asks consent for. The form then asks for a mobile number and shows one unticked box per channel under text_consent_wording. A ticked box makes the number the contact's subscribed address on that channel, kept with what the form showed, and a new SMS subscriber gets one confirmation text from the product's SMS inbox. Empty (the default) asks for no number. Not shown on bars.
maxItems: 2 · uniqueItems: true
Each itemstring
enum: "sms", "whatsapp"
phone_placeholderstring
maxLength: 60
text_consent_wordingstring
What ticking a box agrees to, shown above the consent boxes and kept with each consent as it was shown. {company} in it becomes the brand's company name.
maxLength: 600
sms_consent_labelstring
maxLength: 120
whatsapp_consent_labelstring
maxLength: 120
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
text_channelsarray
Texts (needs the customers feature): the channels the form asks consent for. The form then asks for a mobile number and shows one unticked box per channel under text_consent_wording. A ticked box makes the number the contact's subscribed address on that channel, kept with what the form showed, and a new SMS subscriber gets one confirmation text from the product's SMS inbox. Empty (the default) asks for no number. Not shown on bars.
maxItems: 2 · uniqueItems: true
Each itemstring
enum: "sms", "whatsapp"
phone_placeholderstring
maxLength: 60
text_consent_wordingstring
What ticking a box agrees to, shown above the consent boxes and kept with each consent as it was shown. {company} in it becomes the brand's company name.
maxLength: 600
sms_consent_labelstring
maxLength: 120
whatsapp_consent_labelstring
maxLength: 120
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
text_channelsarray
Texts (needs the customers feature): the channels the form asks consent for. The form then asks for a mobile number and shows one unticked box per channel under text_consent_wording. A ticked box makes the number the contact's subscribed address on that channel, kept with what the form showed, and a new SMS subscriber gets one confirmation text from the product's SMS inbox. Empty (the default) asks for no number. Not shown on bars.
maxItems: 2 · uniqueItems: true
Each itemstring
enum: "sms", "whatsapp"
phone_placeholderstring
maxLength: 60
text_consent_wordingstring
What ticking a box agrees to, shown above the consent boxes and kept with each consent as it was shown. {company} in it becomes the brand's company name.
maxLength: 600
sms_consent_labelstring
maxLength: 120
whatsapp_consent_labelstring
maxLength: 120
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",
"text_channels": [
"sms"
],
"phone_placeholder": "example",
"text_consent_wording": "example",
"sms_consent_label": "example",
"whatsapp_consent_label": "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
text_channelsarray
Texts (needs the customers feature): the channels the form asks consent for. The form then asks for a mobile number and shows one unticked box per channel under text_consent_wording. A ticked box makes the number the contact's subscribed address on that channel, kept with what the form showed, and a new SMS subscriber gets one confirmation text from the product's SMS inbox. Empty (the default) asks for no number. Not shown on bars.
maxItems: 2 · uniqueItems: true
Each itemstring
enum: "sms", "whatsapp"
phone_placeholderstring
maxLength: 60
text_consent_wordingstring
What ticking a box agrees to, shown above the consent boxes and kept with each consent as it was shown. {company} in it becomes the brand's company name.
maxLength: 600
sms_consent_labelstring
maxLength: 120
whatsapp_consent_labelstring
maxLength: 120
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",
"text_channels": [
"sms"
],
"phone_placeholder": "example",
"text_consent_wording": "example",
"sms_consent_label": "example",
"whatsapp_consent_label": "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
phonestring
A mobile number in international format (+ and the country code), on a form that asks for one. Needed only with a consent box; without one it is not kept.
maxLength: 40
sms_consentstring
The visitor ticked the SMS box: the number becomes their subscribed SMS address, with what the form showed.
enum: "yes"
whatsapp_consentstring
The visitor ticked the WhatsApp box: the number becomes their subscribed WhatsApp address, with what the form showed.
enum: "yes"
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
phonestring
A mobile number in international format (+ and the country code), on a form that asks for one. Needed only with a consent box; without one it is not kept.
maxLength: 40
sms_consentstring
The visitor ticked the SMS box: the number becomes their subscribed SMS address, with what the form showed.
enum: "yes"
whatsapp_consentstring
The visitor ticked the WhatsApp box: the number becomes their subscribed WhatsApp address, with what the form showed.
enum: "yes"
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",
"phone": "example",
"sms_consent": "yes",
"whatsapp_consent": "yes"
}'
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
An existing contact email. Unknown addresses return sample_recipient_not_found. Omit to use sample or audience values.
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
An existing contact email. Unknown addresses return sample_recipient_not_found. Omit to use sample or audience values.
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
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_idstring
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
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
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
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
variant_keystring | null
Persisted Broadcast experiment arm, or holdback before a winner is chosen. Null for a Broadcast without an experiment.
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
valueobject
No additional properties
expected_versioninteger
minimum: 1
expected_design_versioninteger
minimum: 1
recipient_selectionobject
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"
scheduled_atstring
format: "date-time"
send_nowboolean
const: true
approve_as_launcherboolean
A person pressing Send approves this exact request when the review policy needs a person. Ignored for API keys and agents, which wait in Approvals.
oneOf 1unspecified
oneOf 2unspecified
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"
qa_automationobject | null
Server-recorded dedicated QA automation provenance; never evidence of a human payload review. The run and global authorization are rechecked at execution.
kindstring
enum: "dedicated_qa_automation"
authorization_referencestring
run_idstring
operation_keystring
recipientsarray
Each itemstring
format: "email"
approval_sha256string
resource_sha256string
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
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_idstring
Existing sender address. Omit to use the onboarding sender, then an active custom mailbox, then hosted.
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
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
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
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
Audience languages still translating never hold the Broadcast. Their readers get it once their translation is ready, and are skipped (translation_failed, translation_awaiting_review or translation_still_preparing) if it is not ready within a day of sending.
requestedarrayrequired
Each itemobject
localestringrequired
Further nesting omitted
countintegerrequired
Further nesting omitted
pending_localesarrayrequired
Each itemstring
waiting_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
variant_keystring | null
Persisted Broadcast experiment arm, or holdback before a winner is chosen. Null for a Broadcast without an experiment.
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
Existing sender. Omit to prefer the onboarding sender then an active custom mailbox then hosted. Saved and explicit senders remain unchanged.
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", "email_replied", "api"
connection_idstring
format: "uuid"
configobject
eventstring
Further nesting omitted
everyinteger
For schedule triggers, calendar interval from the activation-local date.
minimum: 1 · maximum: 366 · default: 1
Further nesting omitted
unitstring
For schedule triggers. Months clamp to the last day without changing the original anchor day.
default: "weeks" · enum: "days", "weeks", "months"
Further nesting omitted
timestring
Schedule wall-clock time. The first occurrence is strictly after activation; DST gaps are skipped and repeated wall times run once.
pattern: "^([01][0-9]|2[0-3]):[0-5][0-9]$" · default: "09:00"
Further nesting omitted
timezonestring
IANA zone for schedule triggers. Only the latest due occurrence is recovered after downtime; times missed while paused are skipped. Trigger conditions must be empty; select contacts with audience. Normal review, suppression and re-entry rules still apply.
default: "UTC"
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
A Journey email goes out only in the person's own language: it waits for their translation, about a minute for receipts, codes and security notices and up to a day for other email, and is not sent if the translation is not ready by then.
No additional properties
manual_reviewboolean
default: false
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. Every email step sets delivery_class: product (transactional email, such as receipts and account mail) or broadcast (marketing, which carries an unsubscribe link and needs the product Brand's company name and mailing address); a step without it is refused with 400 journey_delivery_class_required. 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
Existing sender. Omit to prefer the onboarding sender then an active custom mailbox then hosted. Saved and explicit senders remain unchanged.
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", "email_replied", "api"
connection_idstring
format: "uuid"
configobject
eventstring
everyinteger
For schedule triggers, calendar interval from the activation-local date.
minimum: 1 · maximum: 366 · default: 1
unitstring
For schedule triggers. Months clamp to the last day without changing the original anchor day.
default: "weeks" · enum: "days", "weeks", "months"
timestring
Schedule wall-clock time. The first occurrence is strictly after activation; DST gaps are skipped and repeated wall times run once.
pattern: "^([01][0-9]|2[0-3]):[0-5][0-9]$" · default: "09:00"
timezonestring
IANA zone for schedule triggers. Only the latest due occurrence is recovered after downtime; times missed while paused are skipped. Trigger conditions must be empty; select contacts with audience. Normal review, suppression and re-entry rules still apply.
default: "UTC"
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
A Journey email goes out only in the person's own language: it waits for their translation, about a minute for receipts, codes and security notices and up to a day for other email, and is not sent if the translation is not ready by then.
No additional properties
manual_reviewboolean
default: false
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. Every email step sets delivery_class: product (transactional email, such as receipts and account mail) or broadcast (marketing, which carries an unsubscribe link and needs the product Brand's company name and mailing address); a step without it is refused with 400 journey_delivery_class_required. 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
Existing sender. Omit to prefer the onboarding sender then an active custom mailbox then hosted. Saved and explicit senders remain unchanged.
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", "email_replied", "api"
connection_idstring
format: "uuid"
configobject
eventstring
everyinteger
For schedule triggers, calendar interval from the activation-local date.
minimum: 1 · maximum: 366 · default: 1
unitstring
For schedule triggers. Months clamp to the last day without changing the original anchor day.
default: "weeks" · enum: "days", "weeks", "months"
timestring
Schedule wall-clock time. The first occurrence is strictly after activation; DST gaps are skipped and repeated wall times run once.
pattern: "^([01][0-9]|2[0-3]):[0-5][0-9]$" · default: "09:00"
timezonestring
IANA zone for schedule triggers. Only the latest due occurrence is recovered after downtime; times missed while paused are skipped. Trigger conditions must be empty; select contacts with audience. Normal review, suppression and re-entry rules still apply.
default: "UTC"
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
A Journey email goes out only in the person's own language: it waits for their translation, about a minute for receipts, codes and security notices and up to a day for other email, and is not sent if the translation is not ready by then.
No additional properties
manual_reviewboolean
default: false
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. Every email step sets delivery_class: product (transactional email, such as receipts and account mail) or broadcast (marketing, which carries an unsubscribe link and needs the product Brand's company name and mailing address); a step without it is refused with 400 journey_delivery_class_required. 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",
"every": 1,
"unit": "weeks",
"time": "09:00",
"timezone": "UTC",
"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
},
"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
Existing sender. Omit to prefer the onboarding sender then an active custom mailbox then hosted. Saved and explicit senders remain unchanged.
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", "email_replied", "api"
connection_idstring
format: "uuid"
configobject
eventstring
everyinteger
For schedule triggers, calendar interval from the activation-local date.
minimum: 1 · maximum: 366 · default: 1
unitstring
For schedule triggers. Months clamp to the last day without changing the original anchor day.
default: "weeks" · enum: "days", "weeks", "months"
timestring
Schedule wall-clock time. The first occurrence is strictly after activation; DST gaps are skipped and repeated wall times run once.
pattern: "^([01][0-9]|2[0-3]):[0-5][0-9]$" · default: "09:00"
timezonestring
IANA zone for schedule triggers. Only the latest due occurrence is recovered after downtime; times missed while paused are skipped. Trigger conditions must be empty; select contacts with audience. Normal review, suppression and re-entry rules still apply.
default: "UTC"
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
A Journey email goes out only in the person's own language: it waits for their translation, about a minute for receipts, codes and security notices and up to a day for other email, and is not sent if the translation is not ready by then.
No additional properties
manual_reviewboolean
default: false
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. Every email step sets delivery_class: product (transactional email, such as receipts and account mail) or broadcast (marketing, which carries an unsubscribe link and needs the product Brand's company name and mailing address); a step without it is refused with 400 journey_delivery_class_required. 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
Existing sender. Omit to prefer the onboarding sender then an active custom mailbox then hosted. Saved and explicit senders remain unchanged.
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", "email_replied", "api"
connection_idstring
format: "uuid"
configobject
eventstring
everyinteger
For schedule triggers, calendar interval from the activation-local date.
minimum: 1 · maximum: 366 · default: 1
unitstring
For schedule triggers. Months clamp to the last day without changing the original anchor day.
default: "weeks" · enum: "days", "weeks", "months"
timestring
Schedule wall-clock time. The first occurrence is strictly after activation; DST gaps are skipped and repeated wall times run once.
pattern: "^([01][0-9]|2[0-3]):[0-5][0-9]$" · default: "09:00"
timezonestring
IANA zone for schedule triggers. Only the latest due occurrence is recovered after downtime; times missed while paused are skipped. Trigger conditions must be empty; select contacts with audience. Normal review, suppression and re-entry rules still apply.
default: "UTC"
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
A Journey email goes out only in the person's own language: it waits for their translation, about a minute for receipts, codes and security notices and up to a day for other email, and is not sent if the translation is not ready by then.
No additional properties
manual_reviewboolean
default: false
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. Every email step sets delivery_class: product (transactional email, such as receipts and account mail) or broadcast (marketing, which carries an unsubscribe link and needs the product Brand's company name and mailing address); a step without it is refused with 400 journey_delivery_class_required. 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
Existing sender. Omit to prefer the onboarding sender then an active custom mailbox then hosted. Saved and explicit senders remain unchanged.
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", "email_replied", "api"
connection_idstring
format: "uuid"
configobject
eventstring
everyinteger
For schedule triggers, calendar interval from the activation-local date.
minimum: 1 · maximum: 366 · default: 1
unitstring
For schedule triggers. Months clamp to the last day without changing the original anchor day.
default: "weeks" · enum: "days", "weeks", "months"
timestring
Schedule wall-clock time. The first occurrence is strictly after activation; DST gaps are skipped and repeated wall times run once.
pattern: "^([01][0-9]|2[0-3]):[0-5][0-9]$" · default: "09:00"
timezonestring
IANA zone for schedule triggers. Only the latest due occurrence is recovered after downtime; times missed while paused are skipped. Trigger conditions must be empty; select contacts with audience. Normal review, suppression and re-entry rules still apply.
default: "UTC"
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
A Journey email goes out only in the person's own language: it waits for their translation, about a minute for receipts, codes and security notices and up to a day for other email, and is not sent if the translation is not ready by then.
No additional properties
manual_reviewboolean
default: false
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. Every email step sets delivery_class: product (transactional email, such as receipts and account mail) or broadcast (marketing, which carries an unsubscribe link and needs the product Brand's company name and mailing address); a step without it is refused with 400 journey_delivery_class_required. 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",
"every": 1,
"unit": "weeks",
"time": "09:00",
"timezone": "UTC",
"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
},
"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. Every email step sets delivery_class: product (transactional email, such as receipts and account mail) or broadcast (marketing, which carries an unsubscribe link and needs the product Brand's company name and mailing address); a step without it is refused with 400 journey_delivery_class_required. 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
Existing sender. Omit to prefer the onboarding sender then an active custom mailbox then hosted. Saved and explicit senders remain unchanged.
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", "email_replied", "api"
connection_idstring
format: "uuid"
configobject
eventstring
everyinteger
For schedule triggers, calendar interval from the activation-local date.
minimum: 1 · maximum: 366 · default: 1
unitstring
For schedule triggers. Months clamp to the last day without changing the original anchor day.
default: "weeks" · enum: "days", "weeks", "months"
timestring
Schedule wall-clock time. The first occurrence is strictly after activation; DST gaps are skipped and repeated wall times run once.
pattern: "^([01][0-9]|2[0-3]):[0-5][0-9]$" · default: "09:00"
timezonestring
IANA zone for schedule triggers. Only the latest due occurrence is recovered after downtime; times missed while paused are skipped. Trigger conditions must be empty; select contacts with audience. Normal review, suppression and re-entry rules still apply.
default: "UTC"
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
A Journey email goes out only in the person's own language: it waits for their translation, about a minute for receipts, codes and security notices and up to a day for other email, and is not sent if the translation is not ready by then.
No additional properties
manual_reviewboolean
default: false
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. Every email step sets delivery_class: product (transactional email, such as receipts and account mail) or broadcast (marketing, which carries an unsubscribe link and needs the product Brand's company name and mailing address); a step without it is refused with 400 journey_delivery_class_required. 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
A Journey email goes out only in the person's own language: it waits for their translation, about a minute for receipts, codes and security notices and up to a day for other email, and is not sent if the translation is not ready by then.
No additional properties
manual_reviewboolean
default: false
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
A Journey email goes out only in the person's own language: it waits for their translation, about a minute for receipts, codes and security notices and up to a day for other email, and is not sent if the translation is not ready by then.
No additional properties
manual_reviewboolean
default: false
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"
qa_automationobject | null
Server-recorded dedicated QA automation provenance; never evidence of a human payload review. The run and global authorization are rechecked at execution.
kindstring
enum: "dedicated_qa_automation"
Further nesting omitted
authorization_referencestring
Further nesting omitted
run_idstring
Further nesting omitted
operation_keystring
Further nesting omitted
recipientsarray
Further nesting omitted
approval_sha256string
Further nesting omitted
resource_sha256string
Further nesting omitted
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"
qa_automationobject | null
Server-recorded dedicated QA automation provenance; never evidence of a human payload review. The run and global authorization are rechecked at execution.
kindstring
enum: "dedicated_qa_automation"
authorization_referencestring
run_idstring
operation_keystring
recipientsarray
Each itemstring
format: "email"
approval_sha256string
resource_sha256string
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}/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
Existing sender. Omit to prefer the onboarding sender then an active custom mailbox then hosted. Saved and explicit senders remain unchanged.
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", "email_replied", "api"
connection_idstring
format: "uuid"
configobject
eventstring
everyinteger
For schedule triggers, calendar interval from the activation-local date.
minimum: 1 · maximum: 366 · default: 1
unitstring
For schedule triggers. Months clamp to the last day without changing the original anchor day.
default: "weeks" · enum: "days", "weeks", "months"
timestring
Schedule wall-clock time. The first occurrence is strictly after activation; DST gaps are skipped and repeated wall times run once.
pattern: "^([01][0-9]|2[0-3]):[0-5][0-9]$" · default: "09:00"
timezonestring
IANA zone for schedule triggers. Only the latest due occurrence is recovered after downtime; times missed while paused are skipped. Trigger conditions must be empty; select contacts with audience. Normal review, suppression and re-entry rules still apply.
default: "UTC"
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
A Journey email goes out only in the person's own language: it waits for their translation, about a minute for receipts, codes and security notices and up to a day for other email, and is not sent if the translation is not ready by then.
No additional properties
manual_reviewboolean
default: false
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. Every email step sets delivery_class: product (transactional email, such as receipts and account mail) or broadcast (marketing, which carries an unsubscribe link and needs the product Brand's company name and mailing address); a step without it is refused with 400 journey_delivery_class_required. 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. Every email step sets delivery_class: product (transactional email, such as receipts and account mail) or broadcast (marketing, which carries an unsubscribe link and needs the product Brand's company name and mailing address); a step without it is refused with 400 journey_delivery_class_required. 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
Alias of POST /approvals with action_kind sequence.enroll and payload {sequence_id, contact_ids, sequence_version?, sequence_definition_sha256?}. It uses the same Idempotency-Key, so the same key returns the same approval from either route. Requires campaigns:send and a product.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
contact_idsarrayrequired
minItems: 1 · maxItems: 2000
Each itemstring
format: "uuid"
sequence_versioninteger
minimum: 1
sequence_definition_sha256string
pattern: "^[a-f0-9]{64}$"
Success response 200
The same Idempotency-Key replayed an existing approval.
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"
qa_automationobject | null
Server-recorded dedicated QA automation provenance; never evidence of a human payload review. The run and global authorization are rechecked at execution.
kindstring
enum: "dedicated_qa_automation"
authorization_referencestring
run_idstring
operation_keystring
recipientsarray
Each itemstring
format: "email"
approval_sha256string
resource_sha256string
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}/enroll' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'Idempotency-Key: examplexxxxxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"contact_ids": [
"00000000-0000-4000-8000-000000000001"
],
"sequence_version": 1,
"sequence_definition_sha256": "example"
}'
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"
GET/v1/workspaces/{workspaceId}/journeys/{journeyId}/people
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
The people in the Journey, newest entry first, with each email step's outcome.
application/json
valueobject
dataobjectrequired
stepsobjectrequired
Keyed by step id, for every step anyone has reached.
Additional propertyobject
receivedintegerrequired
skippedintegerrequired
failedintegerrequired
nowintegerrequired
emailsarrayrequired
Each itemobject
step_idstringrequired
format: "uuid"
namestringrequired
subjectstringrequired
split_step_idstring
format: "uuid"
arm_keystring
countsobjectrequired
allintegerrequired
in_progressintegerrequired
finishedintegerrequired
goal_reachedintegerrequired
exitedintegerrequired
failedintegerrequired
peoplearrayrequired
Each itemobject
enrollment_idstringrequired
format: "uuid"
contact_idstringrequired
format: "uuid"
emailstringrequired
display_namestringrequired
statestringrequired
enum: "in_progress", "finished", "goal_reached", "exited", "failed"
stop_reasonstring
error_codestring
current_stepobject
idstringrequired
format: "uuid"
namestringrequired
kindstringrequired
next_action_atstring
format: "date-time"
enrolled_atstringrequired
format: "date-time"
completed_atstring
format: "date-time"
pathsobjectrequired
Additional propertystring
emailsobjectrequired
Keyed by email step id. A step with no entry has not been reached.
Additional propertyobject
statestringrequired
translating means the email waits for the person's translation. skipped carries error_code translation_failed, translation_awaiting_review or translation_still_preparing (why the translation was not ready in time), and none when the milestone was reached first.
enum: "pending", "translating", "skipped", "failed", "queued", "sent", "delivered", "opened", "clicked", "replied", "bounced", "complained"
Further nesting omitted
atstringrequired
format: "date-time"
Further nesting omitted
send_intent_idstring
Read the exact message this person received with GET /transactional-sends/{send_intent_id}.
format: "uuid"
Further nesting omitted
error_codestring
Further nesting omitted
languageunspecified
The language the person got this email in, or, while translating, the one it waits for.
Further nesting omitted
variant_keystring
The experiment variant of this email the person got, when the step runs an experiment.
Further nesting omitted
pageobjectrequired
has_morebooleanrequired
next_cursorstring
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}/people?cursor=example&limit=50&state=in_progress&query=example&step_id=00000000-0000-4000-8000-000000000001&at=now' \
--header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/journeys/{journeyKey}/send
Sends one email through the Journey. A key Banger has not seen yet records a new Journey from this email and sends it; the key of a Journey you created sends once that Journey is approved and on. reply_to defaults to the Journey's mailbox; an empty list also means the default. A refusal (4xx) leaves nothing frozen for the recipient, so a corrected call with a new idempotency key sends.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
tounspecified
Recipients for to, cc, bcc and reply_to: an address ("a@example.com" or "Pat <a@example.com>"), an { email, name } object, or a list mixing both. Banger stores them as { email, name } objects with the email lowercased. The idempotency hash covers the body as sent, so retry with the same shape.
oneOf 1string
minLength: 3 · maxLength: 1000
oneOf 2object
namestring
emailstringrequired
format: "email"
oneOf 3array
maxItems: 500
Each itemunspecified
oneOf 1string
minLength: 3 · maxLength: 1000
oneOf 2object
namestring
emailstringrequired
format: "email"
reply_tounspecified
Recipients for to, cc, bcc and reply_to: an address ("a@example.com" or "Pat <a@example.com>"), an { email, name } object, or a list mixing both. Banger stores them as { email, name } objects with the email lowercased. The idempotency hash covers the body as sent, so retry with the same shape.
oneOf 1string
minLength: 3 · maxLength: 1000
oneOf 2object
namestring
emailstringrequired
format: "email"
oneOf 3array
maxItems: 500
Each itemunspecified
oneOf 1string
minLength: 3 · maxLength: 1000
oneOf 2object
namestring
emailstringrequired
format: "email"
expires_atstring
format: "date-time"
expires_after_secondsinteger
minimum: 1 · maximum: 604800
attachmentsarray
Files sent with the email; their base64 content may total 10 MiB.
maxItems: 20
Each itemobject
No additional properties
filenamestringrequired
Name the recipient sees, on one line.
minLength: 1 · maxLength: 500
contentstringrequired
The file encoded as base64; whitespace is ignored.
minLength: 4
content_typestring
Media type such as application/pdf, without parameters. Defaults to application/octet-stream.
maxLength: 255
content_idstring
Content-ID an HTML body can reference as cid:<content_id>.
minLength: 1 · maxLength: 500
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
sent/queued states from delivery, or for a frozen request: deferred (scheduled by policy or a translation wait), processing (being sent), discarded.
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 '{
"to": "example",
"reply_to": "example",
"expires_at": "2026-01-01T00:00:00Z",
"expires_after_seconds": 1,
"attachments": [
{
"filename": "example",
"content": "example",
"content_type": "example",
"content_id": "example"
}
]
}'
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
Existing sender. Omit to prefer the onboarding sender then an active custom mailbox then hosted. Saved and explicit senders remain unchanged.
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", "email_replied", "api"
connection_idstring
format: "uuid"
configobject
eventstring
everyinteger
For schedule triggers, calendar interval from the activation-local date.
minimum: 1 · maximum: 366 · default: 1
unitstring
For schedule triggers. Months clamp to the last day without changing the original anchor day.
default: "weeks" · enum: "days", "weeks", "months"
timestring
Schedule wall-clock time. The first occurrence is strictly after activation; DST gaps are skipped and repeated wall times run once.
pattern: "^([01][0-9]|2[0-3]):[0-5][0-9]$" · default: "09:00"
timezonestring
IANA zone for schedule triggers. Only the latest due occurrence is recovered after downtime; times missed while paused are skipped. Trigger conditions must be empty; select contacts with audience. Normal review, suppression and re-entry rules still apply.
default: "UTC"
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
A Journey email goes out only in the person's own language: it waits for their translation, about a minute for receipts, codes and security notices and up to a day for other email, and is not sent if the translation is not ready by then.
No additional properties
manual_reviewboolean
default: false
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. Every email step sets delivery_class: product (transactional email, such as receipts and account mail) or broadcast (marketing, which carries an unsubscribe link and needs the product Brand's company name and mailing address); a step without it is refused with 400 journey_delivery_class_required. 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
Existing sender. Omit to prefer the onboarding sender then an active custom mailbox then hosted. Saved and explicit senders remain unchanged.
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", "email_replied", "api"
connection_idstring
format: "uuid"
configobject
eventstring
everyinteger
For schedule triggers, calendar interval from the activation-local date.
minimum: 1 · maximum: 366 · default: 1
unitstring
For schedule triggers. Months clamp to the last day without changing the original anchor day.
default: "weeks" · enum: "days", "weeks", "months"
timestring
Schedule wall-clock time. The first occurrence is strictly after activation; DST gaps are skipped and repeated wall times run once.
pattern: "^([01][0-9]|2[0-3]):[0-5][0-9]$" · default: "09:00"
timezonestring
IANA zone for schedule triggers. Only the latest due occurrence is recovered after downtime; times missed while paused are skipped. Trigger conditions must be empty; select contacts with audience. Normal review, suppression and re-entry rules still apply.
default: "UTC"
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
A Journey email goes out only in the person's own language: it waits for their translation, about a minute for receipts, codes and security notices and up to a day for other email, and is not sent if the translation is not ready by then.
No additional properties
manual_reviewboolean
default: false
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. Every email step sets delivery_class: product (transactional email, such as receipts and account mail) or broadcast (marketing, which carries an unsubscribe link and needs the product Brand's company name and mailing address); a step without it is refused with 400 journey_delivery_class_required. 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
Existing sender. Omit to prefer the onboarding sender then an active custom mailbox then hosted. Saved and explicit senders remain unchanged.
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", "email_replied", "api"
connection_idstring
format: "uuid"
configobject
eventstring
everyinteger
For schedule triggers, calendar interval from the activation-local date.
minimum: 1 · maximum: 366 · default: 1
unitstring
For schedule triggers. Months clamp to the last day without changing the original anchor day.
default: "weeks" · enum: "days", "weeks", "months"
timestring
Schedule wall-clock time. The first occurrence is strictly after activation; DST gaps are skipped and repeated wall times run once.
pattern: "^([01][0-9]|2[0-3]):[0-5][0-9]$" · default: "09:00"
timezonestring
IANA zone for schedule triggers. Only the latest due occurrence is recovered after downtime; times missed while paused are skipped. Trigger conditions must be empty; select contacts with audience. Normal review, suppression and re-entry rules still apply.
default: "UTC"
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
A Journey email goes out only in the person's own language: it waits for their translation, about a minute for receipts, codes and security notices and up to a day for other email, and is not sent if the translation is not ready by then.
No additional properties
manual_reviewboolean
default: false
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. Every email step sets delivery_class: product (transactional email, such as receipts and account mail) or broadcast (marketing, which carries an unsubscribe link and needs the product Brand's company name and mailing address); a step without it is refused with 400 journey_delivery_class_required. 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"
qa_automationobject | null
Server-recorded dedicated QA automation provenance; never evidence of a human payload review. The run and global authorization are rechecked at execution.
kindstring
enum: "dedicated_qa_automation"
authorization_referencestring
run_idstring
operation_keystring
recipientsarray
Each itemstring
format: "email"
approval_sha256string
resource_sha256string
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. In mail.draft and transactional.send payloads, to, cc, bcc and reply_to accept any RecipientInput shape and are stored as { email, name } objects.
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
approve_as_launcherboolean
For sequence.activate: a person pressing Turn on approves this exact request when the review policy needs a person. Ignored for API keys and agents, which wait in Approvals.
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"
qa_automationobject | null
Server-recorded dedicated QA automation provenance; never evidence of a human payload review. The run and global authorization are rechecked at execution.
kindstring
enum: "dedicated_qa_automation"
authorization_referencestring
run_idstring
operation_keystring
recipientsarray
Each itemstring
format: "email"
approval_sha256string
resource_sha256string
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,
"approve_as_launcher": true
}'
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"
qa_automationobject | null
Server-recorded dedicated QA automation provenance; never evidence of a human payload review. The run and global authorization are rechecked at execution.
kindstring
enum: "dedicated_qa_automation"
authorization_referencestring
run_idstring
operation_keystring
recipientsarray
Each itemstring
format: "email"
approval_sha256string
resource_sha256string
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"
qa_automationobject | null
Server-recorded dedicated QA automation provenance; never evidence of a human payload review. The run and global authorization are rechecked at execution.
kindstring
enum: "dedicated_qa_automation"
authorization_referencestring
run_idstring
operation_keystring
recipientsarray
Each itemstring
format: "email"
approval_sha256string
resource_sha256string
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"
qa_automationobject | null
Server-recorded dedicated QA automation provenance; never evidence of a human payload review. The run and global authorization are rechecked at execution.
kindstring
enum: "dedicated_qa_automation"
authorization_referencestring
run_idstring
operation_keystring
recipientsarray
Each itemstring
format: "email"
approval_sha256string
resource_sha256string
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"
qa_automationobject | null
Server-recorded dedicated QA automation provenance; never evidence of a human payload review. The run and global authorization are rechecked at execution.
kindstring
enum: "dedicated_qa_automation"
authorization_referencestring
run_idstring
operation_keystring
recipientsarray
Each itemstring
format: "email"
approval_sha256string
resource_sha256string
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"
qa_automationobject | null
Server-recorded dedicated QA automation provenance; never evidence of a human payload review. The run and global authorization are rechecked at execution.
kindstring
enum: "dedicated_qa_automation"
authorization_referencestring
run_idstring
operation_keystring
recipientsarray
Each itemstring
format: "email"
approval_sha256string
resource_sha256string
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"
qa_automationobject | null
Server-recorded dedicated QA automation provenance; never evidence of a human payload review. The run and global authorization are rechecked at execution.
kindstring
enum: "dedicated_qa_automation"
authorization_referencestring
run_idstring
operation_keystring
recipientsarray
Each itemstring
format: "email"
approval_sha256string
resource_sha256string
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
A Journey email goes out only in the person's own language: it waits for their translation, about a minute for receipts, codes and security notices and up to a day for other email, and is not sent if the translation is not ready by then.
No additional properties
manual_reviewboolean
default: false
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
},
"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
A Journey email goes out only in the person's own language: it waits for their translation, about a minute for receipts, codes and security notices and up to a day for other email, and is not sent if the translation is not ready by then.
No additional properties
manual_reviewboolean
default: false
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
A Journey email goes out only in the person's own language: it waits for their translation, about a minute for receipts, codes and security notices and up to a day for other email, and is not sent if the translation is not ready by then.
No additional properties
manual_reviewboolean
default: false
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
},
"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
A Journey email goes out only in the person's own language: it waits for their translation, about a minute for receipts, codes and security notices and up to a day for other email, and is not sent if the translation is not ready by then.
No additional properties
manual_reviewboolean
default: false
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
The icon: the mark on its own, used small (email footer, slide-in forms) and as the header when there is no wordmark.
maxLength: 2000
wordmark_urlstring
The wordmark: the company name as drawn, shown alone at the top of every email.
maxLength: 2000
wordmark_inkstring
The color the wordmark is drawn in, measured from the image on save. A header the mark wouldn't read on gets a plate behind it. Absent for opaque images.
maxLength: 7
logo_inkstring
The color the icon is drawn in, measured from the image on save.
maxLength: 7
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
The icon: the mark on its own, used small (email footer, slide-in forms) and as the header when there is no wordmark.
maxLength: 2000
wordmark_urlstring
The wordmark: the company name as drawn, shown alone at the top of every email.
maxLength: 2000
wordmark_inkstring
The color the wordmark is drawn in, measured from the image on save. A header the mark wouldn't read on gets a plate behind it. Absent for opaque images.
maxLength: 7
logo_inkstring
The color the icon is drawn in, measured from the image on save.
maxLength: 7
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
}'
Sending lanes
GET/v1/workspaces/{workspaceId}/sending-lanes
Configured lanes and effective routing for the default sender. Product and Broadcast inherit the default Mail connection until a dedicated lane is active. Pending lanes do not replace the working route.
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 200
Canonical lanes, inherited routes, and the existing default sender.
application/json
valueobject
dataobjectrequired
domainsarrayrequired
Each itemobject
No additional properties
domain_idstringrequired
format: "uuid"
product_idstringrequired
format: "uuid"
root_domainstringrequired
parent_domainstring
Company domain retained when a lane uses a subdomain.
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"
Further nesting omitted
created_atstring
format: "date-time"
Further nesting omitted
kindstringrequired
enum: "mailbox", "product", "broadcast"
Further nesting omitted
display_namestringrequired
Further nesting omitted
from_domainstringrequired
Further nesting omitted
mail_from_domainstring | nullrequired
Further nesting omitted
inbound_domainstring | nullrequired
Further nesting omitted
route_providerstringrequired
enum: "banger", "resend"
Further nesting omitted
selected_provider_connection_idstring | nullrequired
format: "uuid"
Further nesting omitted
inbound_providerstring | nullrequired
enum: "banger", null
Further nesting omitted
statusstringrequired
enum: "pending", "active", "paused", "deleting", "deleted"
Further nesting omitted
status_reasonstring | nullrequired
Further nesting omitted
desired_revisionintegerrequired
minimum: 1
Further nesting omitted
observed_revisionintegerrequired
minimum: 0
Further nesting omitted
dns_readybooleanrequired
Further nesting omitted
provider_readybooleanrequired
Further nesting omitted
inbound_readybooleanrequired
Further nesting omitted
outbound_readybooleanrequired
Further nesting omitted
banger_transport_readybooleanrequired
Further nesting omitted
banger_mail_from_domainstring | nullrequired
Further nesting omitted
provisioning_job_idstring | nullrequired
format: "uuid"
Further nesting omitted
provisioning_statusstringrequired
enum: "pending", "provisioning", "waiting_dns", "active", "failed", "deleting", "deleted", "not_required"
Further nesting omitted
provisioning_error_codestring | null
Further nesting omitted
provisioning_next_attempt_atstring | null
Further nesting omitted
provisioning_last_checked_atstring | null
Further nesting omitted
provider_identity_statusstring | null
Further nesting omitted
provider_dkim_statusstring | null
Further nesting omitted
dns_recordsarrayrequired
Further nesting omitted
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
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
Further nesting omitted
routingobjectrequired
mailboxobjectrequired
kindstringrequired
enum: "mailbox", "product", "broadcast"
lane_idstring | nullrequired
domain_idstring | nullrequired
from_domainstring | nullrequired
sourcestringrequired
enum: "dedicated", "default_mail", "unavailable"
readybooleanrequired
pending_lanesarrayrequired
Each itemobject
idstringrequired
Further nesting omitted
from_domainstringrequired
Further nesting omitted
statusstringrequired
Further nesting omitted
productobjectrequired
kindstringrequired
enum: "mailbox", "product", "broadcast"
lane_idstring | nullrequired
domain_idstring | nullrequired
from_domainstring | nullrequired
sourcestringrequired
enum: "dedicated", "default_mail", "unavailable"
readybooleanrequired
pending_lanesarrayrequired
Each itemobject
idstringrequired
Further nesting omitted
from_domainstringrequired
Further nesting omitted
statusstringrequired
Further nesting omitted
broadcastobjectrequired
kindstringrequired
enum: "mailbox", "product", "broadcast"
lane_idstring | nullrequired
domain_idstring | nullrequired
from_domainstring | nullrequired
sourcestringrequired
enum: "dedicated", "default_mail", "unavailable"
readybooleanrequired
pending_lanesarrayrequired
Each itemobject
idstringrequired
Further nesting omitted
from_domainstringrequired
Further nesting omitted
statusstringrequired
Further nesting omitted
default_senderunspecifiedrequired
oneOf 1object
idstringrequired
format: "uuid"
workspace_idstringrequired
format: "uuid"
product_idstring | null
The product (project) the mailbox belongs to. Clients group mailboxes and build web-app links with it.
format: "uuid"
domain_idstring | null
format: "uuid"
addressstringrequired
The email address, or for an SMS inbox its phone number in E.164 (+15551234567).
display_namestringrequired
providerstringrequired
enum: "gmail", "smtp", "twilio"
channelstring
email; sms for an SMS inbox on Twilio; whatsapp for a WhatsApp inbox, a WhatsApp sender on Twilio for the business's WhatsApp Business account.
enum: "email", "sms", "whatsapp"
sms_verificationobject | null
A number from Banger, carriers' answer on its toll-free verification. It sends once approved; null for every other mailbox.
statusstring
enum: "pending_review", "in_review", "approved", "rejected"
reasonstring | null
Carriers' reason when rejected.
statusstringrequired
enum: "pending", "active", "suspended", "reconnect_required", "disabled"
status_reasonstring | null
suspended_atstring | null
mailbox_kindstringrequired
enum: "domain", "starter"
oneOf 2null
curl example
curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/sending-lanes' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
POST/v1/workspaces/{workspaceId}/sending-lanes
Prepare only the requested lane at its exact hostname. Rechecks DNS conflicts under the infrastructure lock. Existing identical lanes are reused; occupied hostnames are never overwritten. No DNS changes or extra lanes are created.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
domainstringrequired
Parent company domain, such as example.com.
minLength: 3 · maxLength: 253
from_domainstringrequired
Exact root or subdomain to configure, such as example.com or news.example.com.
minLength: 3 · maxLength: 253
lanestringrequired
Mail is mailbox. It sends and receives; Product and Broadcast are optional dedicated sending lanes.
enum: "mailbox", "product", "broadcast"
root_dmarc_confirmedboolean
Legacy compatibility field; setup preserves existing email policies and requires no confirmation.
route_providersobject
productstring
enum: "banger", "resend"
broadcaststring
enum: "banger", "resend"
route_domainsobject
productstring
broadcaststring
Success response 200
The same configured lane returned idempotently.
application/json
valueobject
dataobjectrequired
No additional properties
domain_idstringrequired
format: "uuid"
product_idstringrequired
format: "uuid"
root_domainstringrequired
parent_domainstring
Company domain retained when a lane uses a subdomain.
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"
created_atstring
format: "date-time"
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-lanes' \
--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 '{
"domain": "example",
"from_domain": "example",
"lane": "mailbox",
"root_dmarc_confirmed": true,
"route_providers": {
"product": "banger",
"broadcast": "banger"
},
"route_domains": {
"product": "example",
"broadcast": "example"
}
}'
POST/v1/workspaces/{workspaceId}/sending-lanes/plan
Read-only availability and DNS preflight. It creates no resources. Website records alone do not occupy an email hostname. Returns existing setup and conflicts at names Banger must change. Existing sending authentication and DMARC policies are preserved.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
domainstringrequired
Parent company domain, such as example.com.
minLength: 3 · maxLength: 253
from_domainstringrequired
Exact root or subdomain to configure, such as example.com or news.example.com.
minLength: 3 · maxLength: 253
lanestringrequired
Mail is mailbox. It sends and receives; Product and Broadcast are optional dedicated sending lanes.
enum: "mailbox", "product", "broadcast"
root_dmarc_confirmedboolean
Legacy compatibility field; setup preserves existing email policies and requires no confirmation.
route_providersobject
productstring
enum: "banger", "resend"
broadcaststring
enum: "banger", "resend"
route_domainsobject
productstring
broadcaststring
Success response 200
Lane setup plan.
application/json
valueobject
dataobjectrequired
statusstringrequired
enum: "available", "existing", "occupied", "migration_required"
from_domainstringrequired
lanestringrequired
enum: "mailbox", "product", "broadcast"
domain_idstring | nullrequired
lane_idstring | nullrequired
messagestringrequired
requires_root_confirmationbooleanrequired
Always false; existing email policies are preserved.
existing_dnsarrayrequired
Each itemobject
namestringrequired
typestringrequired
valuestringrequired
curl example
curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/sending-lanes/plan' \
--header "Authorization: Bearer $BANGER_API_KEY" \
--header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
--header 'Content-Type: application/json' \
--data-raw '{
"domain": "example",
"from_domain": "example",
"lane": "mailbox",
"root_dmarc_confirmed": true,
"route_providers": {
"product": "banger",
"broadcast": "banger"
},
"route_domains": {
"product": "example",
"broadcast": "example"
}
}'
POST/v1/workspaces/{workspaceId}/sending-lanes/migrations
Request the existing human migration review for only this lane. Only a signed-in administrator can authorize it in Approvals.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
valueobject
No additional properties
domainstringrequired
Parent company domain, such as example.com.
minLength: 3 · maxLength: 253
from_domainstringrequired
Exact root or subdomain to configure, such as example.com or news.example.com.
minLength: 3 · maxLength: 253
lanestringrequired
Mail is mailbox. It sends and receives; Product and Broadcast are optional dedicated sending lanes.
enum: "mailbox", "product", "broadcast"
root_dmarc_confirmedboolean
Legacy compatibility field; setup preserves existing email policies and requires no confirmation.
route_providersobject
productstring
enum: "banger", "resend"
broadcaststring
enum: "banger", "resend"
route_domainsobject
productstring
broadcaststring
Success response 200
Existing migration review returned.
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"
qa_automationobject | null
Server-recorded dedicated QA automation provenance; never evidence of a human payload review. The run and global authorization are rechecked at execution.
kindstring
enum: "dedicated_qa_automation"
authorization_referencestring
run_idstring
operation_keystring
recipientsarray
Each itemstring
format: "email"
approval_sha256string
resource_sha256string
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}/sending-lanes/migrations' \
--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 '{
"domain": "example",
"from_domain": "example",
"lane": "mailbox",
"root_dmarc_confirmed": true,
"route_providers": {
"product": "banger",
"broadcast": "banger"
},
"route_domains": {
"product": "example",
"broadcast": "example"
}
}'
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}
Connecting Mailchimp starts the move from Mailchimp at once (as startMailchimpMigration does), and the
response carries its first report in `mailchimp_migration`. Without display_name, a Mailchimp connection
is named after the account, e.g. "Mailchimp (Acme Inc)". Connecting a Mailchimp account that is already
connected answers 409 `mailchimp_account_already_connected` with `error.details.connection_id`.
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"
mailchimp_migrationobject
The move from one Mailchimp connection into a product. Poll GET /mailchimp-migration for live progress:
`phase` says where it is; `counts`, `audiences`, `segments`, `templates` and `campaigns` grow as it goes.
migration_idstringrequired
format: "uuid"
connection_idstringrequired
format: "uuid"
product_idstringrequired
format: "uuid"
statusstringrequired
enum: "importing", "completed"
phasestringrequired
importing (reading Mailchimp), copying_designs (templates and campaigns), finishing, completed, needs_new_key (Mailchimp rejected the API key; the move is paused until a new key is saved with rotateConnectionCredential), or disconnected (the connection was removed; everything already moved stays in Banger and the counts stay readable).
enum: "importing", "copying_designs", "finishing", "completed", "needs_new_key", "disconnected"
started_atstringrequired
format: "date-time"
completed_atstring | nullrequired
format: "date-time"
connectionobjectrequired
display_namestringrequired
account_namestring | nullrequired
statusstringrequired
enum: "pending_validation", "active", "error", "disabled"
last_error_codestring | nullrequired
needs_new_keybooleanrequired
messagestring
Present when needs_new_key or disconnected, ready to show.
progressobjectrequired
import_streamsintegerrequired
import_streams_doneintegerrequired
failing_streamsarrayrequired
Each itemobject
streamstringrequired
refstringrequired
error_codestring | nullrequired
designs_waitingintegerrequired
notestringrequired
countsobjectrequired
contactsintegerrequired
subscribedintegerrequired
unsubscribedintegerrequired
bouncedintegerrequired
contact_listsintegerrequired
contact_fieldsintegerrequired
segments_convertedintegerrequired
segments_kept_as_listsintegerrequired
templates_importedintegerrequired
templates_to_rebuildintegerrequired
campaigns_imported_as_designsintegerrequired
automations_importedintegerrequired
audiencesarrayrequired
Each itemobject
mailchimp_idstringrequired
namestringrequired
list_idstring | nullrequired
format: "uuid"
list_namestring | nullrequired
members_in_bangerintegerrequired
subscribedintegerrequired
unsubscribedintegerrequired
bouncedintegerrequired
members_in_mailchimpintegerrequired
contact_fieldsarrayrequired
Each itemobject
mailchimp_tagstringrequired
namestringrequired
field_keystringrequired
typestringrequired
enum: "text", "number", "boolean", "date", "choice", "choices"
consentstringrequired
segmentsarrayrequired
Each itemobject
What one Mailchimp segment, template or campaign became.
mailchimp_idstringrequired
Segments: <audience id>:<segment id>. Templates and campaigns: their Mailchimp id.
becamestringrequired
enum: "segment", "contact_list", "template", "needs_rebuild"
idstring
The Banger segment
format: "uuid"
namestringrequired
reasonstring
Why a segment stayed a static list
dropped_merge_tagsarray
Mailchimp merge tags with no Banger equivalent, removed from the design (conditions on merge fields keep their first branch and are listed here).
Each itemstring
replaced_footerboolean
Mailchimp's footer section (view in browser, preferences, address, badge) became the product's brand footer.
removed_linksarray
Links to Mailchimp-only pages outside the footer (such as view in browser) that were removed, by their words.
Each itemstring
links_to_fillarray
Links left empty in Mailchimp; each is now a URL slot of the design to fill before it can be sent.
Each itemobject
keystringrequired
Further nesting omitted
labelstringrequired
Further nesting omitted
kept_editsboolean
A re-run found the design edited in Banger and left it as it is.
templatesarrayrequired
Each itemobject
What one Mailchimp segment, template or campaign became.
mailchimp_idstringrequired
Segments: <audience id>:<segment id>. Templates and campaigns: their Mailchimp id.
becamestringrequired
enum: "segment", "contact_list", "template", "needs_rebuild"
idstring
The Banger segment
format: "uuid"
namestringrequired
reasonstring
Why a segment stayed a static list
dropped_merge_tagsarray
Mailchimp merge tags with no Banger equivalent, removed from the design (conditions on merge fields keep their first branch and are listed here).
Each itemstring
replaced_footerboolean
Mailchimp's footer section (view in browser, preferences, address, badge) became the product's brand footer.
removed_linksarray
Links to Mailchimp-only pages outside the footer (such as view in browser) that were removed, by their words.
Each itemstring
links_to_fillarray
Links left empty in Mailchimp; each is now a URL slot of the design to fill before it can be sent.
Each itemobject
keystringrequired
Further nesting omitted
labelstringrequired
Further nesting omitted
kept_editsboolean
A re-run found the design edited in Banger and left it as it is.
campaignsarrayrequired
Each itemobject
What one Mailchimp segment, template or campaign became.
mailchimp_idstringrequired
Segments: <audience id>:<segment id>. Templates and campaigns: their Mailchimp id.
becamestringrequired
enum: "segment", "contact_list", "template", "needs_rebuild"
idstring
The Banger segment
format: "uuid"
namestringrequired
reasonstring
Why a segment stayed a static list
dropped_merge_tagsarray
Mailchimp merge tags with no Banger equivalent, removed from the design (conditions on merge fields keep their first branch and are listed here).
Each itemstring
replaced_footerboolean
Mailchimp's footer section (view in browser, preferences, address, badge) became the product's brand footer.
removed_linksarray
Links to Mailchimp-only pages outside the footer (such as view in browser) that were removed, by their words.
Each itemstring
links_to_fillarray
Links left empty in Mailchimp; each is now a URL slot of the design to fill before it can be sent.
Each itemobject
keystringrequired
Further nesting omitted
labelstringrequired
Further nesting omitted
kept_editsboolean
A re-run found the design edited in Banger and left it as it is.
automationsobjectrequired
importedbooleanrequired
const: false
whystringrequired
next_stepsarrayrequired
Each itemstring
help_call_urlstringrequired
format: "uri"
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
parent_domainstring
Company domain retained when a lane uses a subdomain.
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"
created_atstring
format: "date-time"
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
Legacy compatibility field; existing policies are preserved and setup requires no 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
parent_domainstring
Company domain retained when a lane uses a subdomain.
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"
created_atstring
format: "date-time"
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
parent_domainstring
Company domain retained when a lane uses a subdomain.
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"
created_atstring
format: "date-time"
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
parent_domainstring
Company domain retained when a lane uses a subdomain.
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"
created_atstring
format: "date-time"
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
parent_domainstring
Company domain retained when a lane uses a subdomain.
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"
created_atstring
format: "date-time"
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
parent_domainstring
Company domain retained when a lane uses a subdomain.
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"
created_atstring
format: "date-time"
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
parent_domainstring
Company domain retained when a lane uses a subdomain.
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"
created_atstring
format: "date-time"
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
parent_domainstring
Company domain retained when a lane uses a subdomain.
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"
created_atstring
format: "date-time"
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
banger_api is reserved for the webhook POST /events creates.
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
Events to send. Omitted, an outbound endpoint gets the default activity events; the specific events (mail.received, mail.sent, send.*, journey.*) are sent only when listed. * sends everything, including the high-volume send.delivered.
minItems: 1 · maxItems: 100 · uniqueItems: true
Each itemstring
enum: "*", "mail.changed", "send.changed", "campaign.changed", "audience.changed", "approval.changed", "automation.changed", "domain.changed", "sending.warning", "sending.lane_paused", "sending.domain_paused", "sending.mailbox_paused", "sending.workspace_frozen", "sending.resumed", "mail.received", "mail.sent", "send.delivered", "send.bounced", "send.complained", "journey.enrolled", "journey.completed", "journey.exited", "custom"
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": [
"*"
]
}'
PATCH/v1/workspaces/{workspaceId}/webhooks/{endpointId}
Disabling stops deliveries or inbound automation events and keeps the webhook, its name and its history. Disabling an incoming webhook also disables its connection, so Journeys it triggers stop receiving events until it is re-enabled. To remove a webhook for good, delete it.
Authentication: Bearer workspace API key.
Parameters
Request body required
application/json
Success response 200
Webhook re-enabled or disabled.
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}
An outbound endpoint is deleted with its delivery history. An incoming webhook is deleted with its connection, and only while no Journey, archived ones included, uses that connection as a trigger or goal. To stop a webhook and keep it, PATCH its status to disabled instead.
Authentication: Bearer workspace API key.
Parameters
Request body
No request body is specified in the contract.
Success response 204
Webhook deleted.
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", "business", "identity", "sending"
completed_countintegerrequired
total_stepsintegerrequired
enum: 4
setupobject
The web setup gate and finish-setup banner. Each part is complete, verifying (domain records added, DNS still checking), skipped or missing.
connectstringrequired
enum: "complete", "skipped", "missing"
brandstringrequired
enum: "complete", "skipped", "missing"
domainstringrequired
enum: "complete", "verifying", "skipped", "missing"
gate_openbooleanrequired
True while brand or domain was neither done nor skipped.
missingarrayrequired
Parts skipped or never done
Each itemstring
enum: "connect", "brand", "domain"
unlock_video_dueboolean
True once a domain is verified until the workspace has seen the "what you can do now" video.
agent_client_namestring | null
The connected AI app
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: "begin_guidance", "save_business", "discover_brand", "skip_business", "choose_identity", "defer_identity", "skip_domain", "choose_delivery", "setup_receiving", "defer_receiving", "setup_sending", "dns_applied", "verify_dns", "continue_domain", "add_inboxes", "skip_inboxes", "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", "business", "identity", "sending"
completed_countintegerrequired
total_stepsintegerrequired
enum: 4
setupobject
The web setup gate and finish-setup banner. Each part is complete, verifying (domain records added, DNS still checking), skipped or missing.
connectstringrequired
enum: "complete", "skipped", "missing"
brandstringrequired
enum: "complete", "skipped", "missing"
domainstringrequired
enum: "complete", "verifying", "skipped", "missing"
gate_openbooleanrequired
True while brand or domain was neither done nor skipped.
missingarrayrequired
Parts skipped or never done
Each itemstring
enum: "connect", "brand", "domain"
unlock_video_dueboolean
True once a domain is verified until the workspace has seen the "what you can do now" video.
agent_client_namestring | null
The connected AI app
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": "begin_guidance",
"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", "intro_video_seen", "unlock_video_seen"
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"