Developer documentation

Banger API reference

Use the Banger API to work with mailboxes, send email, manage contacts, and run campaigns and journeys in your workspace.

Connect to your workspace

Base URL: https://api.bangermail.com

Download OpenAPI (OpenAPI 3.1 JSON with the same operations as this page), for code generators, API clients, and AI agents.

In the Banger app, open Settings → Developers → Manage API keys. Choose Create API key, enter a name, select the scopes your application needs, and choose Create key. Copy the key now: it is shown once and cannot be recovered.

Workspace keys have the format bgr_<12-character prefix>_<secret>. Set your key as BANGER_API_KEY in your environment, and authenticate workspace requests with:

Authorization: Bearer <workspace API key>

The public signup-form routes below do not require authentication. Each operation states whether it requires a Bearer token. Replace path placeholders such as {workspaceId} with your resource IDs before running examples.

Requests and responses

JSON responses generally wrap results in { data } and errors in { error: { code, message } }. Some endpoints return other formats or no content; use the response definition for the operation.

Send Idempotency-Key where listed in the header parameters, reusing the same key when retrying the same request. The contract defines different length constraints for different operations; follow the parameter table.

Pagination is endpoint-specific. Where the shared cursor and limit parameters appear, the cursor is a string (up to 1,024 characters), and the limit defaults to 50 with a range of 1–100. Other endpoints define their own parameters and response fields, such as next_cursor; follow those schemas.

Examples are generated from the contract's examples, defaults, enums, and schema types. Replace illustrative values with your own data. Where a body or response schema is missing, it is marked below.

These capabilities are also available to AI assistants through the Banger MCP server.

Products

GET/v1/workspaces/{workspaceId}/products

List workspace products

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • workspace_idstringrequired

    format: "uuid"

  • namestringrequired
  • slugstringrequired
  • kindstringrequired

    enum: "product", "store", "brand", "newsletter", "company", "other"

  • website_urlstring | nullrequired
  • domainsarrayrequired
  • Each itemstring
  • descriptionstringrequired
  • contextobjectrequired
  • Additional propertyAny value
  • brandobjectrequired
  • company_namestring

    maxLength: 160

  • logo_urlstring

    maxLength: 2000

  • wordmark_urlstring

    maxLength: 2000

  • website_urlstring

    maxLength: 2000

  • primary_colorstring

    maxLength: 7

  • accent_colorstring

    maxLength: 7

  • background_colorstring

    maxLength: 7

  • surface_colorstring

    maxLength: 7

  • text_colorstring

    maxLength: 7

  • muted_text_colorstring

    maxLength: 7

  • heading_font_familystring

    maxLength: 200

  • body_font_familystring

    maxLength: 200

  • tonestring

    maxLength: 1000

  • footer_addressstring

    maxLength: 500

  • email_stylestring

    maxLength: 20

  • statusstringrequired

    enum: "active", "archived"

  • is_defaultbooleanrequired
  • route_readybooleanrequired
  • setuparrayrequired
  • Each itemobject
  • keystringrequired

    enum: "context", "domain", "mailboxes", "journeys", "broadcasts", "compliance"

  • statusstringrequired

    enum: "todo", "in_progress", "complete", "not_relevant"

  • completion_sourcestring | nullrequired

    enum: "system", "person", "agent", null

  • notestringrequired
  • updated_atstring | nullrequired

    format: "date-time"

  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/products' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/products

Create a product

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • namestringrequired

    minLength: 1 · maxLength: 160

  • kindstring

    default: "product" · enum: "product", "store", "brand", "newsletter", "company", "other"

  • website_urlstring | null

    maxLength: 2000

  • descriptionstring

    maxLength: 4000

  • contextobject
  • Additional propertyAny value
  • domainsarray

    maxItems: 20

  • Each itemstring

    maxLength: 253

Success response 201

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • workspace_idstringrequired

    format: "uuid"

  • namestringrequired
  • slugstringrequired
  • kindstringrequired

    enum: "product", "store", "brand", "newsletter", "company", "other"

  • website_urlstring | nullrequired
  • domainsarrayrequired
  • Each itemstring
  • descriptionstringrequired
  • contextobjectrequired
  • Additional propertyAny value
  • brandobjectrequired
  • company_namestring

    maxLength: 160

  • logo_urlstring

    maxLength: 2000

  • wordmark_urlstring

    maxLength: 2000

  • website_urlstring

    maxLength: 2000

  • primary_colorstring

    maxLength: 7

  • accent_colorstring

    maxLength: 7

  • background_colorstring

    maxLength: 7

  • surface_colorstring

    maxLength: 7

  • text_colorstring

    maxLength: 7

  • muted_text_colorstring

    maxLength: 7

  • heading_font_familystring

    maxLength: 200

  • body_font_familystring

    maxLength: 200

  • tonestring

    maxLength: 1000

  • footer_addressstring

    maxLength: 500

  • email_stylestring

    maxLength: 20

  • statusstringrequired

    enum: "active", "archived"

  • is_defaultbooleanrequired
  • route_readybooleanrequired
  • setuparrayrequired
  • Each itemobject
  • keystringrequired

    enum: "context", "domain", "mailboxes", "journeys", "broadcasts", "compliance"

  • statusstringrequired

    enum: "todo", "in_progress", "complete", "not_relevant"

  • completion_sourcestring | nullrequired

    enum: "system", "person", "agent", null

  • notestringrequired
  • updated_atstring | nullrequired

    format: "date-time"

  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/products' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "name": "example",
  "kind": "product",
  "website_url": "example",
  "description": "example",
  "context": {},
  "domains": [
    "example"
  ]
}'
GET/v1/workspaces/{workspaceId}/products/{productId}

Get a product

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

productId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • workspace_idstringrequired

    format: "uuid"

  • namestringrequired
  • slugstringrequired
  • kindstringrequired

    enum: "product", "store", "brand", "newsletter", "company", "other"

  • website_urlstring | nullrequired
  • domainsarrayrequired
  • Each itemstring
  • descriptionstringrequired
  • contextobjectrequired
  • Additional propertyAny value
  • brandobjectrequired
  • company_namestring

    maxLength: 160

  • logo_urlstring

    maxLength: 2000

  • wordmark_urlstring

    maxLength: 2000

  • website_urlstring

    maxLength: 2000

  • primary_colorstring

    maxLength: 7

  • accent_colorstring

    maxLength: 7

  • background_colorstring

    maxLength: 7

  • surface_colorstring

    maxLength: 7

  • text_colorstring

    maxLength: 7

  • muted_text_colorstring

    maxLength: 7

  • heading_font_familystring

    maxLength: 200

  • body_font_familystring

    maxLength: 200

  • tonestring

    maxLength: 1000

  • footer_addressstring

    maxLength: 500

  • email_stylestring

    maxLength: 20

  • statusstringrequired

    enum: "active", "archived"

  • is_defaultbooleanrequired
  • route_readybooleanrequired
  • setuparrayrequired
  • Each itemobject
  • keystringrequired

    enum: "context", "domain", "mailboxes", "journeys", "broadcasts", "compliance"

  • statusstringrequired

    enum: "todo", "in_progress", "complete", "not_relevant"

  • completion_sourcestring | nullrequired

    enum: "system", "person", "agent", null

  • notestringrequired
  • updated_atstring | nullrequired

    format: "date-time"

  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/products/{productId}' \
  --header "Authorization: Bearer $BANGER_API_KEY"
PATCH/v1/workspaces/{workspaceId}/products/{productId}

Update a product

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

productId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • namestring

    maxLength: 160

  • kindstring

    enum: "product", "store", "brand", "newsletter", "company", "other"

  • website_urlstring | null

    maxLength: 2000

  • descriptionstring

    maxLength: 4000

  • contextobject
  • Additional propertyAny value
  • brandobject
  • company_namestring

    maxLength: 160

  • logo_urlstring

    maxLength: 2000

  • wordmark_urlstring

    maxLength: 2000

  • website_urlstring

    maxLength: 2000

  • primary_colorstring

    maxLength: 7

  • accent_colorstring

    maxLength: 7

  • background_colorstring

    maxLength: 7

  • surface_colorstring

    maxLength: 7

  • text_colorstring

    maxLength: 7

  • muted_text_colorstring

    maxLength: 7

  • heading_font_familystring

    maxLength: 200

  • body_font_familystring

    maxLength: 200

  • tonestring

    maxLength: 1000

  • footer_addressstring

    maxLength: 500

  • email_stylestring

    maxLength: 20

  • statusstring

    enum: "active", "archived"

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • workspace_idstringrequired

    format: "uuid"

  • namestringrequired
  • slugstringrequired
  • kindstringrequired

    enum: "product", "store", "brand", "newsletter", "company", "other"

  • website_urlstring | nullrequired
  • domainsarrayrequired
  • Each itemstring
  • descriptionstringrequired
  • contextobjectrequired
  • Additional propertyAny value
  • brandobjectrequired
  • company_namestring

    maxLength: 160

  • logo_urlstring

    maxLength: 2000

  • wordmark_urlstring

    maxLength: 2000

  • website_urlstring

    maxLength: 2000

  • primary_colorstring

    maxLength: 7

  • accent_colorstring

    maxLength: 7

  • background_colorstring

    maxLength: 7

  • surface_colorstring

    maxLength: 7

  • text_colorstring

    maxLength: 7

  • muted_text_colorstring

    maxLength: 7

  • heading_font_familystring

    maxLength: 200

  • body_font_familystring

    maxLength: 200

  • tonestring

    maxLength: 1000

  • footer_addressstring

    maxLength: 500

  • email_stylestring

    maxLength: 20

  • statusstringrequired

    enum: "active", "archived"

  • is_defaultbooleanrequired
  • route_readybooleanrequired
  • setuparrayrequired
  • Each itemobject
  • keystringrequired

    enum: "context", "domain", "mailboxes", "journeys", "broadcasts", "compliance"

  • statusstringrequired

    enum: "todo", "in_progress", "complete", "not_relevant"

  • completion_sourcestring | nullrequired

    enum: "system", "person", "agent", null

  • notestringrequired
  • updated_atstring | nullrequired

    format: "date-time"

  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

curl example

curl --request PATCH --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/products/{productId}' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "name": "example",
  "kind": "product",
  "website_url": "example",
  "description": "example",
  "context": {},
  "brand": {
    "company_name": "example",
    "logo_url": "example",
    "wordmark_url": "example",
    "website_url": "example",
    "primary_color": "example",
    "accent_color": "example",
    "background_color": "example",
    "surface_color": "example",
    "text_color": "example",
    "muted_text_color": "example",
    "heading_font_family": "example",
    "body_font_family": "example",
    "tone": "example",
    "footer_address": "example",
    "email_style": "example"
  },
  "status": "active"
}'
PUT/v1/workspaces/{workspaceId}/products/{productId}/setup/{key}

Update a product setup item

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

productId
path · required
  • valuestring

    format: "uuid"

key
path · required
  • valuestring

    enum: "context", "domain", "mailboxes", "journeys", "broadcasts", "compliance"

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

Associate a domain with a product

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

productId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • domainstringrequired

    minLength: 3 · maxLength: 253

Success response 201

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • workspace_idstringrequired

    format: "uuid"

  • namestringrequired
  • slugstringrequired
  • kindstringrequired

    enum: "product", "store", "brand", "newsletter", "company", "other"

  • website_urlstring | nullrequired
  • domainsarrayrequired
  • Each itemstring
  • descriptionstringrequired
  • contextobjectrequired
  • Additional propertyAny value
  • brandobjectrequired
  • company_namestring

    maxLength: 160

  • logo_urlstring

    maxLength: 2000

  • wordmark_urlstring

    maxLength: 2000

  • website_urlstring

    maxLength: 2000

  • primary_colorstring

    maxLength: 7

  • accent_colorstring

    maxLength: 7

  • background_colorstring

    maxLength: 7

  • surface_colorstring

    maxLength: 7

  • text_colorstring

    maxLength: 7

  • muted_text_colorstring

    maxLength: 7

  • heading_font_familystring

    maxLength: 200

  • body_font_familystring

    maxLength: 200

  • tonestring

    maxLength: 1000

  • footer_addressstring

    maxLength: 500

  • email_stylestring

    maxLength: 20

  • statusstringrequired

    enum: "active", "archived"

  • is_defaultbooleanrequired
  • route_readybooleanrequired
  • setuparrayrequired
  • Each itemobject
  • keystringrequired

    enum: "context", "domain", "mailboxes", "journeys", "broadcasts", "compliance"

  • statusstringrequired

    enum: "todo", "in_progress", "complete", "not_relevant"

  • completion_sourcestring | nullrequired

    enum: "system", "person", "agent", null

  • notestringrequired
  • updated_atstring | nullrequired

    format: "date-time"

  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/products/{productId}/domains' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "domain": "example"
}'

Mailboxes

GET/v1/workspaces/{workspaceId}/mailboxes

listMailboxes

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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

    format: "email"

  • display_namestringrequired
  • providerstringrequired

    enum: "gmail", "smtp"

  • 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

Create a Banger-native work mailbox on a workspace sending domain.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

Request body required

application/json

  • valueobject

    No additional properties

  • domain_idstringrequired

    format: "uuid"

  • local_partstringrequired

    minLength: 1 · maxLength: 64

  • display_namestring

    maxLength: 200

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

    format: "email"

  • display_namestringrequired
  • providerstringrequired

    enum: "gmail", "smtp"

  • 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/starter

Create a hosted mailbox restricted to same-product hosted inboxes and the workspace signup recipient.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

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

    format: "email"

  • display_namestringrequired
  • providerstringrequired

    enum: "gmail", "smtp"

  • 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

Resume the sender-reputation pause holding one mailbox, under the self-serve resume rules of resumeSending.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

mailboxId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • acknowledge_recipient_complaintbooleanrequired

    const: true

  • reasonstring

    Why sending is being restored; recorded in the audit log.

    maxLength: 500

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

    format: "email"

  • display_namestringrequired
  • providerstringrequired

    enum: "gmail", "smtp"

  • 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

listDrafts

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

mailbox_id
query
  • valuestring

    format: "uuid"

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

createDraft

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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}

getDraft

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

draftId
path · required
  • valuestring

    format: "uuid"

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}

updateDraft

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

draftId
path · required
  • valuestring

    format: "uuid"

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}

deleteDraft

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

draftId
path · required
  • valuestring

    format: "uuid"

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

sendDraft

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

draftId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

Request body

No request body is specified in the contract.

Success response 202

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • typestringrequired
  • statusstringrequired

    enum: "accepted", "executing", "succeeded", "failed"

  • workspace_revisionintegerrequired

    format: "int64"

  • created_atstringrequired

    format: "date-time"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/drafts/{draftId}/send' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Idempotency-Key: examplexxxxxxxxx'
POST/v1/workspaces/{workspaceId}/drafts/{draftId}/attachments

uploadDraftAttachment

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

draftId
path · required
  • valuestring

    format: "uuid"

X-Banger-Filename
header · required
  • valuestring

    minLength: 1 · maxLength: 500

Request body required

application/octet-stream

  • valuestring

    format: "binary" · maxLength: 26214400

Success response 201

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • filenamestringrequired
  • content_typestringrequired
  • size_bytesintegerrequired
  • sha256string
  • created_atstring

    format: "date-time"

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}

deleteDraftAttachment

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

draftId
path · required
  • valuestring

    format: "uuid"

attachmentId
path · required
  • valuestring

    format: "uuid"

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

Read a draft HTML body

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

draftId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Draft HTML.

text/html

  • valuestring

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/drafts/{draftId}/html' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Sending

GET/v1/workspaces/{workspaceId}/send-intents

listSendIntents

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

limit
query
  • valueinteger

    minimum: 1 · maximum: 100 · default: 50

Request body

No request body is specified in the contract.

Success response 200

Recent canonical sends and their provider state.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "accepted", "scheduled", "queued", "executing", "partially_succeeded", "succeeded", "failed", "canceled"

  • traffic_classstringrequired

    enum: "mailbox", "product", "broadcast"

  • recipient_countintegerrequired

    minimum: 1

  • provider_keystringrequired
  • provider_statestringrequired

    enum: "pending", "leased", "submitted", "accepted", "ambiguous", "reconciling", "succeeded", "failed", "canceled"

  • provider_message_idstring | null
  • error_codestring | null
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • completed_atstring | null

    format: "date-time"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/send-intents?limit=50' \
  --header "Authorization: Bearer $BANGER_API_KEY"
GET/v1/workspaces/{workspaceId}/send-intents/{sendIntentId}

getSendIntent

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

sendIntentId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Canonical asynchronous send status.

application/json

  • valueobject
  • dataobjectrequired

    No additional properties

  • idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "accepted", "scheduled", "queued", "executing", "partially_succeeded", "succeeded", "failed", "canceled"

  • traffic_classstringrequired

    enum: "mailbox", "product", "broadcast"

  • recipient_countintegerrequired

    minimum: 1

  • provider_keystringrequired
  • provider_statestringrequired

    enum: "pending", "leased", "submitted", "accepted", "ambiguous", "reconciling", "succeeded", "failed", "canceled"

  • provider_message_idstring | null
  • error_codestring | null
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • completed_atstring | null

    format: "date-time"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/send-intents/{sendIntentId}' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Transactional sending

GET/v1/workspaces/{workspaceId}/transactional-sends

listTransactionalSends

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

limit
query
  • valueinteger

    minimum: 1 · maximum: 500 · default: 200

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
  • 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

createTransactionalSend

One recipient per Journey send. The To field accepts one email string or a one-element array of email strings/participant objects; Cc and Bcc must be empty. A new API Journey defaults to managed source content; legacy code Journeys retain complete-content sends.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

Request body required

application/json

  • valueobject
  • mailbox_idstringrequired

    format: "uuid"

  • tounspecifiedrequired
  • oneOf 1string

    format: "email"

  • oneOf 2array

    minItems: 1 · maxItems: 1

  • Each itemunspecified
  • oneOf 1string

    format: "email"

  • 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_toarray

    maxItems: 500

  • Each itemobject
  • 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

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
  • 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 '{
  "mailbox_id": "00000000-0000-4000-8000-000000000001",
  "to": "person@example.com",
  "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": [
    {
      "name": "example",
      "email": "person@example.com"
    }
  ],
  "headers": {},
  "tags": [
    {
      "name": "example",
      "value": "example"
    }
  ]
}'
GET/v1/workspaces/{workspaceId}/transactional-sends/{transactionalSendId}

getTransactionalSend

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

transactionalSendId
path · required
  • valuestring

    format: "uuid"

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
  • 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

listTransactionalSendTimeline

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

transactionalSendId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Ordered acceptance, provider-attempt, and recipient-event timeline.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • occurred_atstringrequired

    format: "date-time"

  • event_typestringrequired
  • labelstringrequired
  • providerstring | null
  • recipient_domainstring | null
  • error_codestring | null

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

retryTransactionalSend

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

transactionalSendId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

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'

Threads

GET/v1/workspaces/{workspaceId}/threads

listThreads

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

cursor
query
  • valuestring

    maxLength: 1024

limit
query
  • valueinteger

    minimum: 1 · maximum: 100 · default: 50

mailbox_id
query
  • valuestring

    format: "uuid"

label_id
query

Return only threads carrying this mailbox label.

  • valuestring

    format: "uuid"

view
query
  • valuestring

    default: "inbox" · enum: "inbox", "sent", "drafts", "archive", "trash", "spam", "all"

Request body

No request body is specified in the contract.

Success response 200

Keyset-paginated workspace threads.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • mailbox_idstringrequired

    format: "uuid"

  • subjectstringrequired
  • snippetstringrequired
  • last_message_atstringrequired

    format: "date-time"

  • message_countintegerrequired
  • unread_countintegerrequired
  • is_archivedbooleanrequired
  • is_trashbooleanrequired
  • is_spambooleanrequired
  • is_starredbooleanrequired
  • is_sentbooleanrequired
  • has_attachmentsbooleanrequired
  • labelsarrayrequired
  • Each itemstring
  • participantsarray
  • Each itemobject
  • namestring
  • emailstringrequired

    format: "email"

  • pageobjectrequired
  • next_cursorstring
  • has_morebooleanrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/threads?cursor=example&limit=50&mailbox_id=00000000-0000-4000-8000-000000000001&label_id=00000000-0000-4000-8000-000000000001&view=inbox' \
  --header "Authorization: Bearer $BANGER_API_KEY"
GET/v1/workspaces/{workspaceId}/threads/{threadId}

getThread

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

threadId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Thread and ordered messages.

application/json

  • valueobject
  • dataunspecifiedrequired
  • allOf 1object
  • idstringrequired

    format: "uuid"

  • mailbox_idstringrequired

    format: "uuid"

  • subjectstringrequired
  • snippetstringrequired
  • last_message_atstringrequired

    format: "date-time"

  • message_countintegerrequired
  • unread_countintegerrequired
  • is_archivedbooleanrequired
  • is_trashbooleanrequired
  • is_spambooleanrequired
  • is_starredbooleanrequired
  • is_sentbooleanrequired
  • has_attachmentsbooleanrequired
  • labelsarrayrequired
  • Each itemstring
  • participantsarray
  • Each itemobject
  • namestring
  • emailstringrequired

    format: "email"

  • allOf 2object
  • messagesarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • mailbox_idstringrequired

    format: "uuid"

  • thread_idstringrequired

    format: "uuid"

  • sent_atstringrequired

    format: "date-time"

  • fromobjectrequired
  • namestring

    Further nesting omitted

  • emailstringrequired

    format: "email"

    Further nesting omitted

  • toarrayrequired
  • Each itemobject

    Further nesting omitted

  • ccarray
  • Each itemobject

    Further nesting omitted

  • body_textstring
  • body_html_urlstring

    format: "uri"

  • reply_originobject
  • send_intent_idstringrequired

    format: "uuid"

    Further nesting omitted

  • sourcestringrequired

    enum: "gateway", "transactional", "marketing", "mailbox", "agent"

    Further nesting omitted

  • source_idstring

    format: "uuid"

    Further nesting omitted

  • traffic_classstringrequired

    enum: "transactional", "marketing", "mailbox"

    Further nesting omitted

  • kindstringrequired

    enum: "campaign", "sequence", "transactional", "mailbox", "agent"

    Further nesting omitted

  • namestring

    Further nesting omitted

  • has_attachmentsbooleanrequired
  • attachmentsarray
  • Each itemobject

    Further nesting omitted

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/threads/{threadId}' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Messages

GET/v1/workspaces/{workspaceId}/messages/{messageId}/html

getMessageHtml

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

messageId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Authenticated, sandbox-constrained HTML message body.

text/html

  • valuestring

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/messages/{messageId}/html' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Attachments

GET/v1/workspaces/{workspaceId}/attachments/{attachmentId}/content

downloadAttachment

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

attachmentId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Authenticated attachment stream.

application/octet-stream

  • valuestring

    format: "binary"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/attachments/{attachmentId}/content' \
  --header "Authorization: Bearer $BANGER_API_KEY"
GET/v1/workspaces/{workspaceId}/search

searchMail

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

q
query · required
  • valuestring

    minLength: 1 · maxLength: 512

cursor
query
  • valuestring

    maxLength: 1024

limit
query
  • valueinteger

    minimum: 1 · maximum: 100 · default: 50

mailbox_id
query
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Workspace-wide search results.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • mailbox_idstringrequired

    format: "uuid"

  • subjectstringrequired
  • snippetstringrequired
  • last_message_atstringrequired

    format: "date-time"

  • message_countintegerrequired
  • unread_countintegerrequired
  • is_archivedbooleanrequired
  • is_trashbooleanrequired
  • is_spambooleanrequired
  • is_starredbooleanrequired
  • is_sentbooleanrequired
  • has_attachmentsbooleanrequired
  • labelsarrayrequired
  • Each itemstring
  • participantsarray
  • Each itemobject
  • namestring
  • emailstringrequired

    format: "email"

  • pageobjectrequired
  • next_cursorstring
  • has_morebooleanrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/search?q=example&cursor=example&limit=50&mailbox_id=00000000-0000-4000-8000-000000000001' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Contacts

GET/v1/workspaces/{workspaceId}/contacts

listContacts

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

cursor
query
  • valuestring

    maxLength: 1024

limit
query
  • valueinteger

    minimum: 1 · maximum: 100 · default: 50

q
query
  • valuestring

    maxLength: 512

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

upsertContact

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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}

getContact

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

contactId
path · required
  • valuestring

    format: "uuid"

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}

deleteContact

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

contactId
path · required
  • valuestring

    format: "uuid"

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

listContactImports

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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

importContacts

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • filenamestringrequired

    minLength: 1 · maxLength: 500

  • list_idstring

    format: "uuid"

  • consent_confirmedboolean

    Required when any imported row is subscribed.

  • rowsarrayrequired

    minItems: 1 · maxItems: 5000

  • Each itemobject
  • emailstringrequired

    format: "email"

  • display_namestring

    maxLength: 1000

  • statusstring

    enum: "subscribed", "unsubscribed", "bounced", "complained"

  • attributesobject
  • Additional propertyAny value

Success response 201

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "queued"

  • total_rowsintegerrequired
  • imported_rowsintegerrequired
  • invalid_rowsintegerrequired
  • list_idstring | nullrequired

    format: "uuid"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/contacts/imports' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "filename": "example",
  "list_id": "00000000-0000-4000-8000-000000000001",
  "consent_confirmed": true,
  "rows": [
    {
      "email": "person@example.com",
      "display_name": "example",
      "status": "subscribed",
      "attributes": {}
    }
  ]
}'
POST/v1/workspaces/{workspaceId}/contacts/upsert

upsertProductContact

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 1 · maxLength: 256

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

validateProductContactImport

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • rowsarrayrequired

    minItems: 1 · maxItems: 5000

  • Each itemobject

    No additional properties

  • emailstringrequired

    format: "email" · maxLength: 320

  • display_namestring

    minLength: 0 · maxLength: 1000

  • attributesobject
  • Additional propertyAny value
  • statusstringrequired

    enum: "subscribed", "unsubscribed", "bounced", "complained"

  • consent_evidenceobject

    No additional properties

  • sourcestring

    minLength: 1 · maxLength: 2000

  • referencestring

    minLength: 1 · maxLength: 2000

  • observed_atstring

    format: "date-time"

  • statementstring

    minLength: 1 · maxLength: 2000

  • consent_confirmedboolean

Success response 200

Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.

application/json

  • valueobject
  • dataobjectrequired
  • validbooleanrequired
  • total_rowsintegerrequired
  • valid_rowsintegerrequired
  • errorsarrayrequired
  • Each itemobject
  • rowintegerrequired
  • codestringrequired
  • messagestringrequired

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/contacts/import-validation' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "rows": [
    {
      "email": "person@example.com",
      "display_name": "example",
      "attributes": {},
      "status": "subscribed",
      "consent_evidence": {
        "source": "example",
        "reference": "example",
        "observed_at": "2026-01-01T00:00:00Z",
        "statement": "example"
      }
    }
  ],
  "consent_confirmed": true
}'
GET/v1/workspaces/{workspaceId}/contacts/imports/{importId}

getProductContactImport

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

importId
path · required
  • valuestring

    format: "uuid"

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

List stored contact attribute keys

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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

Propose contact import column mappings

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • filenamestring

    maxLength: 500

  • columnsarrayrequired

    minItems: 1 · maxItems: 100

  • Each itemobject
  • namestringrequired

    minLength: 1 · maxLength: 200

  • samplesarray

    maxItems: 8

  • Each itemstring

    maxLength: 120

  • filledinteger

    minimum: 0

  • rowsinteger

    minimum: 0

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • mappingobjectrequired
  • columnsarrayrequired
  • Each itemobject
  • columnstringrequired
  • targetstringrequired

    enum: "email", "display_name", "first_name", "last_name", "locale", "time_zone", "status", "unsubscribed_flag", "subscribed_flag", "field", "ignore"

  • field_keystring
  • field_typestring

    enum: "text", "number", "boolean", "date", "choice", "choices"

  • confidencenumberrequired
  • sourcestringrequired

    enum: "saved", "ai", "rules", "person"

  • alternativesarray
  • Each itemobject

    Further nesting omitted

  • locale_valuesobjectrequired
  • Additional propertystring | null
  • reviewobjectrequired
  • neededbooleanrequired
  • reasonsarrayrequired
  • Each itemstring
  • columnsarrayrequired
  • Each itemstring
  • sourcestringrequired

    enum: "saved", "ai", "rules"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/contacts/import-mapping' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "filename": "example",
  "columns": [
    {
      "name": "example",
      "samples": [
        "example"
      ],
      "filled": 0,
      "rows": 0
    }
  ]
}'

Contact lists

GET/v1/workspaces/{workspaceId}/contact-lists

listContactLists

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • namestringrequired
  • descriptionstringrequired
  • member_countintegerrequired
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

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

createContactList

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • namestringrequired

    minLength: 1 · maxLength: 200

  • descriptionstring

    maxLength: 2000

Success response 201

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • namestringrequired
  • descriptionstringrequired
  • member_countintegerrequired
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

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}

getContactList

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

listId
path · required
  • valuestring

    format: "uuid"

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"
POST/v1/workspaces/{workspaceId}/contact-lists/{listId}/members

addContactListMembers

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

listId
path · required
  • valuestring

    format: "uuid"

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

removeContactListMembers

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

listId
path · required
  • valuestring

    format: "uuid"

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"
  ]
}'

Contact fields

GET/v1/workspaces/{workspaceId}/contact-fields

The product's contact fields (built-in, declared and discovered) with type, choices, source, how many contacts have a value, and the segment operators each supports.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • keystringrequired

    pattern: "^[a-z][a-z0-9_]{0,39}$"

  • labelstringrequired

    maxLength: 80

  • descriptionstringrequired

    maxLength: 500

  • typestringrequired

    enum: "text", "number", "boolean", "date", "choice", "choices"

  • optionsarrayrequired

    maxItems: 50

  • Each itemstring
  • originstringrequired

    enum: "system", "person", "agent", "form", "import", "api", "event", "discovered"

  • statusstringrequired

    enum: "active", "hidden"

  • created_atstring

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • operatorsarray
  • Each itemstring
  • contacts_with_valueinteger

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/contact-fields' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/contact-fields

Declare a contact field: label, type (text, number, boolean, date, choice, choices), optional key, options and description.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • keystring

    pattern: "^[a-z][a-z0-9_]{0,39}$"

  • labelstringrequired

    minLength: 1 · maxLength: 80

  • descriptionstring

    maxLength: 500

  • typestring

    default: "text" · enum: "text", "number", "boolean", "date", "choice", "choices"

  • optionsarray

    maxItems: 50

  • Each itemstring

Success response 201

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • keystringrequired

    pattern: "^[a-z][a-z0-9_]{0,39}$"

  • labelstringrequired

    maxLength: 80

  • descriptionstringrequired

    maxLength: 500

  • typestringrequired

    enum: "text", "number", "boolean", "date", "choice", "choices"

  • optionsarrayrequired

    maxItems: 50

  • Each itemstring
  • originstringrequired

    enum: "system", "person", "agent", "form", "import", "api", "event", "discovered"

  • statusstringrequired

    enum: "active", "hidden"

  • created_atstring

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • operatorsarray
  • Each itemstring
  • contacts_with_valueinteger

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/contact-fields' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "key": "example",
  "label": "example",
  "description": "example",
  "type": "text",
  "options": [
    "example"
  ]
}'
PATCH/v1/workspaces/{workspaceId}/contact-fields/{key}

Rename, describe, retype (converting stored values, or 409 with an example that doesn't fit), change choices, or hide a field.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

key
path · required
  • valuestring

    pattern: "^[a-z][a-z0-9_]{0,39}$"

Request body required

application/json

  • valueobject
  • labelstring

    maxLength: 80

  • descriptionstring

    maxLength: 500

  • typestring

    enum: "text", "number", "boolean", "date", "choice", "choices"

  • optionsarray

    maxItems: 50

  • Each itemstring
  • statusstring

    enum: "active", "hidden"

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • keystringrequired

    pattern: "^[a-z][a-z0-9_]{0,39}$"

  • labelstringrequired

    maxLength: 80

  • descriptionstringrequired

    maxLength: 500

  • typestringrequired

    enum: "text", "number", "boolean", "date", "choice", "choices"

  • optionsarrayrequired

    maxItems: 50

  • Each itemstring
  • originstringrequired

    enum: "system", "person", "agent", "form", "import", "api", "event", "discovered"

  • statusstringrequired

    enum: "active", "hidden"

  • created_atstring

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • operatorsarray
  • Each itemstring
  • contacts_with_valueinteger

curl example

curl --request PATCH --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/contact-fields/{key}' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "label": "example",
  "description": "example",
  "type": "text",
  "options": [
    "example"
  ],
  "status": "active"
}'

Segments

GET/v1/workspaces/{workspaceId}/segments

listSegments

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • 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"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/segments' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/segments

createSegment

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • namestringrequired

    minLength: 1 · maxLength: 200

  • filterobject

    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
  • opstringrequired

    enum: "is", "is_not", "contains", "set", "not_set", "gt", "gte", "lt", "lte", "within_days", "any_of", "includes"

  • valueunspecified
  • anyOf 1string
  • anyOf 2number
  • anyOf 3boolean
  • anyOf 4array
  • Each itemstring

    Further nesting omitted

  • matchstring

    enum: "all", "any"

Success response 201

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • 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
  • opstringrequired

    enum: "is", "is_not", "contains", "set", "not_set", "gt", "gte", "lt", "lte", "within_days", "any_of", "includes"

  • valueunspecified
  • anyOf 1string

    Further nesting omitted

  • anyOf 2number

    Further nesting omitted

  • anyOf 3boolean

    Further nesting omitted

  • anyOf 4array

    Further nesting omitted

  • matchstring

    enum: "all", "any"

  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/segments' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "name": "example",
  "filter": {
    "status": "subscribed",
    "attributes": {},
    "conditions": [
      {
        "field": "example",
        "op": "is",
        "value": "example"
      }
    ],
    "match": "all"
  }
}'
GET/v1/workspaces/{workspaceId}/segments/{segmentId}/preview

previewSegment

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

segmentId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

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}/segments/{segmentId}/preview' \
  --header "Authorization: Bearer $BANGER_API_KEY"
DELETE/v1/workspaces/{workspaceId}/segments/{segmentId}

Delete a segment

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

segmentId
path · required
  • valuestring

    format: "uuid"

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}/segments/{segmentId}' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Audience

POST/v1/workspaces/{workspaceId}/audience/lists

createProductContactList

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 1 · maxLength: 256

Request body required

application/json

  • valueobject

    No additional properties

  • namestringrequired

    minLength: 1 · maxLength: 200

  • descriptionstring

    minLength: 0 · maxLength: 2000

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}

getProductContactList

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

listId
path · required
  • valuestring

    format: "uuid"

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

addProductContactListMembers

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

listId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 1 · maxLength: 256

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

removeProductContactListMembers

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

listId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 1 · maxLength: 256

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

createProductSegment

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 1 · maxLength: 256

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

previewProductSegment

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

segmentId
path · required
  • valuestring

    format: "uuid"

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

listProductApprovalEvidence

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

status
query
  • valuestring

    enum: "pending", "approved", "rejected", "cancelled", "expired", "undecided"

Request body

No request body is specified in the contract.

Success response 200

Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemunspecified
  • allOf 1object
  • idstringrequired

    format: "uuid"

  • requested_by_actor_idstringrequired
  • action_kindstringrequired
  • summarystringrequired
  • capability_scopesarrayrequired
  • Each itemstring
  • resource_scopeobjectrequired
  • Additional propertyarray
  • Each itemstring

    Further nesting omitted

  • payloadobjectrequired
  • Additional propertyAny value
  • payload_sha256stringrequired

    pattern: "^[0-9a-f]{64}$"

  • statusstringrequired

    enum: "pending", "approved", "rejected", "cancelled", "expired"

  • missedbooleanrequired
  • expires_atstringrequired

    format: "date-time"

  • decided_by_actor_idstring | null
  • decision_reasonstring | null
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • decided_atstring | null

    format: "date-time"

  • execution_job_idstring

    format: "uuid"

  • reviewobject

    No additional properties

  • dispositionstringrequired

    enum: "automatic", "human_required"

  • recipient_countinteger | nullrequired

    minimum: 0

  • reasonsarrayrequired
  • Each itemstring

    Further nesting omitted

  • checksarrayrequired
  • Each itemstring

    Further nesting omitted

  • allOf 2object
  • approval_idstringrequired

    format: "uuid"

  • broadcast_idstring | nullrequired

    format: "uuid"

  • import_idstring | nullrequired

    format: "uuid"

  • blockersarrayrequired
  • Each itemobject
  • codestringrequired

    Further nesting omitted

  • messagestringrequired

    Further nesting omitted

  • executionsarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

    Further nesting omitted

  • statusstringrequired

    Further nesting omitted

  • resultobjectrequired

    Further nesting omitted

  • error_codestring | nullrequired

    Further nesting omitted

  • execution_job_idsarrayrequired
  • Each itemstring

    format: "uuid"

  • execution_statusstringrequired

    enum: "completed", "failed", "queued", "awaiting_review", "not_queued"

  • human_review_urlstring | nullrequired
  • human_review_instructionstring | nullrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/audience/approvals?status=pending' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
GET/v1/workspaces/{workspaceId}/audience/approvals/{approvalId}

getProductApprovalEvidence

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

approvalId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.

application/json

  • valueobject
  • dataunspecifiedrequired
  • allOf 1object
  • idstringrequired

    format: "uuid"

  • requested_by_actor_idstringrequired
  • action_kindstringrequired
  • summarystringrequired
  • capability_scopesarrayrequired
  • Each itemstring
  • resource_scopeobjectrequired
  • Additional propertyarray
  • Each itemstring
  • payloadobjectrequired
  • Additional propertyAny value
  • payload_sha256stringrequired

    pattern: "^[0-9a-f]{64}$"

  • statusstringrequired

    enum: "pending", "approved", "rejected", "cancelled", "expired"

  • missedbooleanrequired
  • expires_atstringrequired

    format: "date-time"

  • decided_by_actor_idstring | null
  • decision_reasonstring | null
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • decided_atstring | null

    format: "date-time"

  • execution_job_idstring

    format: "uuid"

  • reviewobject

    No additional properties

  • dispositionstringrequired

    enum: "automatic", "human_required"

  • recipient_countinteger | nullrequired

    minimum: 0

  • reasonsarrayrequired
  • Each itemstring
  • checksarrayrequired
  • Each itemstring
  • allOf 2object
  • approval_idstringrequired

    format: "uuid"

  • broadcast_idstring | nullrequired

    format: "uuid"

  • import_idstring | nullrequired

    format: "uuid"

  • blockersarrayrequired
  • Each itemobject
  • codestringrequired
  • messagestringrequired
  • executionsarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • statusstringrequired
  • resultobjectrequired
  • Additional propertyAny value
  • error_codestring | nullrequired
  • execution_job_idsarrayrequired
  • Each itemstring

    format: "uuid"

  • execution_statusstringrequired

    enum: "completed", "failed", "queued", "awaiting_review", "not_queued"

  • human_review_urlstring | nullrequired
  • human_review_instructionstring | nullrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/audience/approvals/{approvalId}' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'

Signup forms

GET/v1/workspaces/{workspaceId}/signup-forms

The product's signup forms with embed code, hosted link, views, signups, confirmations, subscribers and conversion rate.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

include_archived
query
  • valueboolean

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • product_idstringrequired

    format: "uuid"

  • public_idstringrequired

    pattern: "^f_[a-z0-9]{16}$"

  • namestringrequired
  • kindstringrequired

    enum: "inline", "popup", "bar", "slide_in", "page"

  • list_idstringrequired

    format: "uuid"

  • list_namestringrequired
  • mailbox_idstring | nullrequired

    format: "uuid"

  • double_opt_inbooleanrequired
  • configobjectrequired

    No additional properties

  • eyebrowstring

    maxLength: 60

  • headlinestring

    minLength: 1 · maxLength: 140

  • bodystring

    maxLength: 400

  • button_labelstring

    minLength: 1 · maxLength: 40

  • email_placeholderstring

    maxLength: 80

  • name_placeholderstring

    maxLength: 60

  • fine_printstring

    maxLength: 160

  • incentivestring

    maxLength: 160

  • success_headlinestring

    maxLength: 120

  • success_bodystring

    maxLength: 400

  • redirect_urlstring

    maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"

  • image_urlstring

    maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"

  • artstring

    enum: "arcs", "blocks", "horizon", "confetti", "frame", "bands", "dots"

  • stylestring

    enum: "", "brand", "material", "clarity", "editorial", "bold", "luxe", "playful", "plain"

  • count_nounstring

    maxLength: 30

  • confirm_promisestring

    maxLength: 200

  • localestring
  • collect_nameboolean
  • show_logoboolean
  • show_countboolean
  • exit_intentboolean
  • delay_secondsinteger

    minimum: 0 · maximum: 600

  • scroll_percentinteger

    minimum: 0 · maximum: 100

  • frequency_daysinteger

    minimum: 0 · maximum: 365

  • imagestring

    enum: "none", "photo", "art"

  • layoutstring

    enum: "stacked", "split"

  • themestring

    enum: "light", "dark", "brand", "auto"

  • positionstring

    enum: "bottom", "top", "right", "left"

  • fieldsarray

    maxItems: 6

  • Each itemobject

    Select questions require options. Other question types do not accept options. Keys must be unique and cannot use reserved form fields; omitted keys are derived from labels.

    No additional properties

  • keystring

    pattern: "^[a-z][a-z0-9_]{0,39}$"

    Further nesting omitted

  • labelstringrequired

    minLength: 1 · maxLength: 80

    Further nesting omitted

  • typestring

    default: "text" · enum: "text", "select", "checkbox"

    Further nesting omitted

  • requiredboolean

    default: false

    Further nesting omitted

  • placeholderstring

    maxLength: 80

    Further nesting omitted

  • optionsarray

    minItems: 1 · maxItems: 20 · uniqueItems: true

    Further nesting omitted

  • statusstringrequired

    enum: "active", "paused", "archived"

  • viewsintegerrequired
  • submissionsintegerrequired
  • confirmationsintegerrequired
  • subscribersintegerrequired
  • versionintegerrequired
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • hosted_urlstringrequired
  • embed_codestringrequired
  • embed_slotstringrequired
  • open_buttonstringrequired
  • conversion_ratenumberrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/signup-forms?include_archived=true' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/signup-forms

Create a form: kind (inline, popup, bar, slide_in, page), list_id or list_name, optional mailbox_id, double_opt_in (default true) and partial config.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 1 · maxLength: 256

Request body required

application/json

  • valueobject
  • namestring

    maxLength: 200

  • kindstring

    default: "inline" · enum: "inline", "popup", "bar", "slide_in", "page"

  • list_idstring

    format: "uuid"

  • list_namestring

    maxLength: 200

  • mailbox_idstring | null

    format: "uuid"

  • double_opt_inboolean

    default: true

  • configobject

    No additional properties

  • eyebrowstring

    maxLength: 60

  • headlinestring

    minLength: 1 · maxLength: 140

  • bodystring

    maxLength: 400

  • button_labelstring

    minLength: 1 · maxLength: 40

  • email_placeholderstring

    maxLength: 80

  • name_placeholderstring

    maxLength: 60

  • fine_printstring

    maxLength: 160

  • incentivestring

    maxLength: 160

  • success_headlinestring

    maxLength: 120

  • success_bodystring

    maxLength: 400

  • redirect_urlstring

    maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"

  • image_urlstring

    maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"

  • artstring

    enum: "arcs", "blocks", "horizon", "confetti", "frame", "bands", "dots"

  • stylestring

    enum: "", "brand", "material", "clarity", "editorial", "bold", "luxe", "playful", "plain"

  • count_nounstring

    maxLength: 30

  • confirm_promisestring

    maxLength: 200

  • localestring
  • collect_nameboolean
  • show_logoboolean
  • show_countboolean
  • exit_intentboolean
  • delay_secondsinteger

    minimum: 0 · maximum: 600

  • scroll_percentinteger

    minimum: 0 · maximum: 100

  • frequency_daysinteger

    minimum: 0 · maximum: 365

  • imagestring

    enum: "none", "photo", "art"

  • layoutstring

    enum: "stacked", "split"

  • themestring

    enum: "light", "dark", "brand", "auto"

  • positionstring

    enum: "bottom", "top", "right", "left"

  • fieldsarray

    maxItems: 6

  • Each itemobject

    Select questions require options. Other question types do not accept options. Keys must be unique and cannot use reserved form fields; omitted keys are derived from labels.

    No additional properties

  • keystring

    pattern: "^[a-z][a-z0-9_]{0,39}$"

  • labelstringrequired

    minLength: 1 · maxLength: 80

  • typestring

    default: "text" · enum: "text", "select", "checkbox"

  • requiredboolean

    default: false

  • placeholderstring

    maxLength: 80

  • optionsarray

    minItems: 1 · maxItems: 20 · uniqueItems: true

  • Each itemstring

    minLength: 1 · maxLength: 80

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • idstring

    format: "uuid"

  • product_idstring

    format: "uuid"

  • public_idstring

    pattern: "^f_[a-z0-9]{16}$"

  • namestring
  • kindstring

    enum: "inline", "popup", "bar", "slide_in", "page"

  • list_idstring

    format: "uuid"

  • list_namestring
  • mailbox_idstring | null

    format: "uuid"

  • double_opt_inboolean
  • configobject

    No additional properties

  • eyebrowstring

    maxLength: 60

  • headlinestring

    minLength: 1 · maxLength: 140

  • bodystring

    maxLength: 400

  • button_labelstring

    minLength: 1 · maxLength: 40

  • email_placeholderstring

    maxLength: 80

  • name_placeholderstring

    maxLength: 60

  • fine_printstring

    maxLength: 160

  • incentivestring

    maxLength: 160

  • success_headlinestring

    maxLength: 120

  • success_bodystring

    maxLength: 400

  • redirect_urlstring

    maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"

  • image_urlstring

    maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"

  • artstring

    enum: "arcs", "blocks", "horizon", "confetti", "frame", "bands", "dots"

  • stylestring

    enum: "", "brand", "material", "clarity", "editorial", "bold", "luxe", "playful", "plain"

  • count_nounstring

    maxLength: 30

  • confirm_promisestring

    maxLength: 200

  • localestring
  • collect_nameboolean
  • show_logoboolean
  • show_countboolean
  • exit_intentboolean
  • delay_secondsinteger

    minimum: 0 · maximum: 600

  • scroll_percentinteger

    minimum: 0 · maximum: 100

  • frequency_daysinteger

    minimum: 0 · maximum: 365

  • imagestring

    enum: "none", "photo", "art"

  • layoutstring

    enum: "stacked", "split"

  • themestring

    enum: "light", "dark", "brand", "auto"

  • positionstring

    enum: "bottom", "top", "right", "left"

  • fieldsarray

    maxItems: 6

  • Each itemobject

    Select questions require options. Other question types do not accept options. Keys must be unique and cannot use reserved form fields; omitted keys are derived from labels.

    No additional properties

  • keystring

    pattern: "^[a-z][a-z0-9_]{0,39}$"

  • labelstringrequired

    minLength: 1 · maxLength: 80

  • typestring

    default: "text" · enum: "text", "select", "checkbox"

  • requiredboolean

    default: false

  • placeholderstring

    maxLength: 80

  • optionsarray

    minItems: 1 · maxItems: 20 · uniqueItems: true

  • Each itemstring

    minLength: 1 · maxLength: 80

    Further nesting omitted

  • statusstring

    enum: "active", "paused", "archived"

  • viewsinteger
  • submissionsinteger
  • confirmationsinteger
  • subscribersinteger
  • versioninteger
  • created_atstring

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • hosted_urlstring
  • embed_codestring
  • embed_slotstring
  • open_buttonstring
  • conversion_ratenumber
  • replayedboolean

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/signup-forms' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Idempotency-Key: example' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "name": "example",
  "kind": "inline",
  "list_id": "00000000-0000-4000-8000-000000000001",
  "list_name": "example",
  "mailbox_id": "00000000-0000-4000-8000-000000000001",
  "double_opt_in": true,
  "config": {
    "eyebrow": "example",
    "headline": "example",
    "body": "example",
    "button_label": "example",
    "email_placeholder": "example",
    "name_placeholder": "example",
    "fine_print": "example",
    "incentive": "example",
    "success_headline": "example",
    "success_body": "example",
    "redirect_url": "example",
    "image_url": "example",
    "art": "arcs",
    "style": "",
    "count_noun": "example",
    "confirm_promise": "example",
    "locale": "example",
    "collect_name": true,
    "show_logo": true,
    "show_count": true,
    "exit_intent": true,
    "delay_seconds": 0,
    "scroll_percent": 0,
    "frequency_days": 0,
    "image": "none",
    "layout": "stacked",
    "theme": "light",
    "position": "bottom",
    "fields": [
      {
        "key": "example",
        "label": "example",
        "type": "text",
        "required": false,
        "placeholder": "example",
        "options": [
          "example"
        ]
      }
    ]
  }
}'
GET/v1/workspaces/{workspaceId}/signup-forms/readiness

Whether this product can turn forms on (its product lane sends from a verified domain).

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • forms_enabledbooleanrequired
  • reasonstring

    enum: "verified_domain_required"

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

Render unsaved form settings as a complete HTML page on a sketched website.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • kindstring

    enum: "inline", "popup", "bar", "slide_in", "page"

  • configobject

    No additional properties

  • eyebrowstring

    maxLength: 60

  • headlinestring

    minLength: 1 · maxLength: 140

  • bodystring

    maxLength: 400

  • button_labelstring

    minLength: 1 · maxLength: 40

  • email_placeholderstring

    maxLength: 80

  • name_placeholderstring

    maxLength: 60

  • fine_printstring

    maxLength: 160

  • incentivestring

    maxLength: 160

  • success_headlinestring

    maxLength: 120

  • success_bodystring

    maxLength: 400

  • redirect_urlstring

    maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"

  • image_urlstring

    maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"

  • artstring

    enum: "arcs", "blocks", "horizon", "confetti", "frame", "bands", "dots"

  • stylestring

    enum: "", "brand", "material", "clarity", "editorial", "bold", "luxe", "playful", "plain"

  • count_nounstring

    maxLength: 30

  • confirm_promisestring

    maxLength: 200

  • localestring
  • collect_nameboolean
  • show_logoboolean
  • show_countboolean
  • exit_intentboolean
  • delay_secondsinteger

    minimum: 0 · maximum: 600

  • scroll_percentinteger

    minimum: 0 · maximum: 100

  • frequency_daysinteger

    minimum: 0 · maximum: 365

  • imagestring

    enum: "none", "photo", "art"

  • layoutstring

    enum: "stacked", "split"

  • themestring

    enum: "light", "dark", "brand", "auto"

  • positionstring

    enum: "bottom", "top", "right", "left"

  • fieldsarray

    maxItems: 6

  • Each itemobject

    Select questions require options. Other question types do not accept options. Keys must be unique and cannot use reserved form fields; omitted keys are derived from labels.

    No additional properties

  • keystring

    pattern: "^[a-z][a-z0-9_]{0,39}$"

  • labelstringrequired

    minLength: 1 · maxLength: 80

  • typestring

    default: "text" · enum: "text", "select", "checkbox"

  • requiredboolean

    default: false

  • placeholderstring

    maxLength: 80

  • optionsarray

    minItems: 1 · maxItems: 20 · uniqueItems: true

  • Each itemstring

    minLength: 1 · maxLength: 80

  • double_opt_inboolean
  • statestring

    enum: "form", "success"

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • kindstringrequired

    enum: "inline", "popup", "bar", "slide_in", "page"

  • statestringrequired

    enum: "form", "success"

  • htmlstringrequired

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/signup-forms/preview' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "kind": "inline",
  "config": {
    "eyebrow": "example",
    "headline": "example",
    "body": "example",
    "button_label": "example",
    "email_placeholder": "example",
    "name_placeholder": "example",
    "fine_print": "example",
    "incentive": "example",
    "success_headline": "example",
    "success_body": "example",
    "redirect_url": "example",
    "image_url": "example",
    "art": "arcs",
    "style": "",
    "count_noun": "example",
    "confirm_promise": "example",
    "locale": "example",
    "collect_name": true,
    "show_logo": true,
    "show_count": true,
    "exit_intent": true,
    "delay_seconds": 0,
    "scroll_percent": 0,
    "frequency_days": 0,
    "image": "none",
    "layout": "stacked",
    "theme": "light",
    "position": "bottom",
    "fields": [
      {
        "key": "example",
        "label": "example",
        "type": "text",
        "required": false,
        "placeholder": "example",
        "options": [
          "example"
        ]
      }
    ]
  },
  "double_opt_in": true,
  "state": "form"
}'
GET/v1/workspaces/{workspaceId}/signup-forms/{formId}

getSignupForm

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

formId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • product_idstringrequired

    format: "uuid"

  • public_idstringrequired

    pattern: "^f_[a-z0-9]{16}$"

  • namestringrequired
  • kindstringrequired

    enum: "inline", "popup", "bar", "slide_in", "page"

  • list_idstringrequired

    format: "uuid"

  • list_namestringrequired
  • mailbox_idstring | nullrequired

    format: "uuid"

  • double_opt_inbooleanrequired
  • configobjectrequired

    No additional properties

  • eyebrowstring

    maxLength: 60

  • headlinestring

    minLength: 1 · maxLength: 140

  • bodystring

    maxLength: 400

  • button_labelstring

    minLength: 1 · maxLength: 40

  • email_placeholderstring

    maxLength: 80

  • name_placeholderstring

    maxLength: 60

  • fine_printstring

    maxLength: 160

  • incentivestring

    maxLength: 160

  • success_headlinestring

    maxLength: 120

  • success_bodystring

    maxLength: 400

  • redirect_urlstring

    maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"

  • image_urlstring

    maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"

  • artstring

    enum: "arcs", "blocks", "horizon", "confetti", "frame", "bands", "dots"

  • stylestring

    enum: "", "brand", "material", "clarity", "editorial", "bold", "luxe", "playful", "plain"

  • count_nounstring

    maxLength: 30

  • confirm_promisestring

    maxLength: 200

  • localestring
  • collect_nameboolean
  • show_logoboolean
  • show_countboolean
  • exit_intentboolean
  • delay_secondsinteger

    minimum: 0 · maximum: 600

  • scroll_percentinteger

    minimum: 0 · maximum: 100

  • frequency_daysinteger

    minimum: 0 · maximum: 365

  • imagestring

    enum: "none", "photo", "art"

  • layoutstring

    enum: "stacked", "split"

  • themestring

    enum: "light", "dark", "brand", "auto"

  • positionstring

    enum: "bottom", "top", "right", "left"

  • fieldsarray

    maxItems: 6

  • Each itemobject

    Select questions require options. Other question types do not accept options. Keys must be unique and cannot use reserved form fields; omitted keys are derived from labels.

    No additional properties

  • keystring

    pattern: "^[a-z][a-z0-9_]{0,39}$"

  • labelstringrequired

    minLength: 1 · maxLength: 80

  • typestring

    default: "text" · enum: "text", "select", "checkbox"

  • requiredboolean

    default: false

  • placeholderstring

    maxLength: 80

  • optionsarray

    minItems: 1 · maxItems: 20 · uniqueItems: true

  • Each itemstring

    minLength: 1 · maxLength: 80

    Further nesting omitted

  • statusstringrequired

    enum: "active", "paused", "archived"

  • viewsintegerrequired
  • submissionsintegerrequired
  • confirmationsintegerrequired
  • subscribersintegerrequired
  • versionintegerrequired
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • hosted_urlstringrequired
  • embed_codestringrequired
  • embed_slotstringrequired
  • open_buttonstringrequired
  • conversion_ratenumberrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/signup-forms/{formId}' \
  --header "Authorization: Bearer $BANGER_API_KEY"
PATCH/v1/workspaces/{workspaceId}/signup-forms/{formId}

Partial update; config merges into the saved settings; status active, paused or archived; expected_version guards concurrent edits.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

formId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 1 · maxLength: 256

Request body required

application/json

  • valueobject
  • namestring

    maxLength: 200

  • kindstring

    default: "inline" · enum: "inline", "popup", "bar", "slide_in", "page"

  • list_idstring

    format: "uuid"

  • list_namestring

    maxLength: 200

  • mailbox_idstring | null

    format: "uuid"

  • double_opt_inboolean

    default: true

  • configobject

    No additional properties

  • eyebrowstring

    maxLength: 60

  • headlinestring

    minLength: 1 · maxLength: 140

  • bodystring

    maxLength: 400

  • button_labelstring

    minLength: 1 · maxLength: 40

  • email_placeholderstring

    maxLength: 80

  • name_placeholderstring

    maxLength: 60

  • fine_printstring

    maxLength: 160

  • incentivestring

    maxLength: 160

  • success_headlinestring

    maxLength: 120

  • success_bodystring

    maxLength: 400

  • redirect_urlstring

    maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"

  • image_urlstring

    maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"

  • artstring

    enum: "arcs", "blocks", "horizon", "confetti", "frame", "bands", "dots"

  • stylestring

    enum: "", "brand", "material", "clarity", "editorial", "bold", "luxe", "playful", "plain"

  • count_nounstring

    maxLength: 30

  • confirm_promisestring

    maxLength: 200

  • localestring
  • collect_nameboolean
  • show_logoboolean
  • show_countboolean
  • exit_intentboolean
  • delay_secondsinteger

    minimum: 0 · maximum: 600

  • scroll_percentinteger

    minimum: 0 · maximum: 100

  • frequency_daysinteger

    minimum: 0 · maximum: 365

  • imagestring

    enum: "none", "photo", "art"

  • layoutstring

    enum: "stacked", "split"

  • themestring

    enum: "light", "dark", "brand", "auto"

  • positionstring

    enum: "bottom", "top", "right", "left"

  • fieldsarray

    maxItems: 6

  • Each itemobject

    Select questions require options. Other question types do not accept options. Keys must be unique and cannot use reserved form fields; omitted keys are derived from labels.

    No additional properties

  • keystring

    pattern: "^[a-z][a-z0-9_]{0,39}$"

  • labelstringrequired

    minLength: 1 · maxLength: 80

  • typestring

    default: "text" · enum: "text", "select", "checkbox"

  • requiredboolean

    default: false

  • placeholderstring

    maxLength: 80

  • optionsarray

    minItems: 1 · maxItems: 20 · uniqueItems: true

  • Each itemstring

    minLength: 1 · maxLength: 80

  • statusstring

    enum: "active", "paused", "archived"

  • expected_versioninteger

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • product_idstringrequired

    format: "uuid"

  • public_idstringrequired

    pattern: "^f_[a-z0-9]{16}$"

  • namestringrequired
  • kindstringrequired

    enum: "inline", "popup", "bar", "slide_in", "page"

  • list_idstringrequired

    format: "uuid"

  • list_namestringrequired
  • mailbox_idstring | nullrequired

    format: "uuid"

  • double_opt_inbooleanrequired
  • configobjectrequired

    No additional properties

  • eyebrowstring

    maxLength: 60

  • headlinestring

    minLength: 1 · maxLength: 140

  • bodystring

    maxLength: 400

  • button_labelstring

    minLength: 1 · maxLength: 40

  • email_placeholderstring

    maxLength: 80

  • name_placeholderstring

    maxLength: 60

  • fine_printstring

    maxLength: 160

  • incentivestring

    maxLength: 160

  • success_headlinestring

    maxLength: 120

  • success_bodystring

    maxLength: 400

  • redirect_urlstring

    maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"

  • image_urlstring

    maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"

  • artstring

    enum: "arcs", "blocks", "horizon", "confetti", "frame", "bands", "dots"

  • stylestring

    enum: "", "brand", "material", "clarity", "editorial", "bold", "luxe", "playful", "plain"

  • count_nounstring

    maxLength: 30

  • confirm_promisestring

    maxLength: 200

  • localestring
  • collect_nameboolean
  • show_logoboolean
  • show_countboolean
  • exit_intentboolean
  • delay_secondsinteger

    minimum: 0 · maximum: 600

  • scroll_percentinteger

    minimum: 0 · maximum: 100

  • frequency_daysinteger

    minimum: 0 · maximum: 365

  • imagestring

    enum: "none", "photo", "art"

  • layoutstring

    enum: "stacked", "split"

  • themestring

    enum: "light", "dark", "brand", "auto"

  • positionstring

    enum: "bottom", "top", "right", "left"

  • fieldsarray

    maxItems: 6

  • Each itemobject

    Select questions require options. Other question types do not accept options. Keys must be unique and cannot use reserved form fields; omitted keys are derived from labels.

    No additional properties

  • keystring

    pattern: "^[a-z][a-z0-9_]{0,39}$"

  • labelstringrequired

    minLength: 1 · maxLength: 80

  • typestring

    default: "text" · enum: "text", "select", "checkbox"

  • requiredboolean

    default: false

  • placeholderstring

    maxLength: 80

  • optionsarray

    minItems: 1 · maxItems: 20 · uniqueItems: true

  • Each itemstring

    minLength: 1 · maxLength: 80

    Further nesting omitted

  • statusstringrequired

    enum: "active", "paused", "archived"

  • viewsintegerrequired
  • submissionsintegerrequired
  • confirmationsintegerrequired
  • subscribersintegerrequired
  • versionintegerrequired
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • hosted_urlstringrequired
  • embed_codestringrequired
  • embed_slotstringrequired
  • open_buttonstringrequired
  • conversion_ratenumberrequired
  • replayedbooleanrequired

curl example

curl --request PATCH --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/signup-forms/{formId}' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Idempotency-Key: example' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "name": "example",
  "kind": "inline",
  "list_id": "00000000-0000-4000-8000-000000000001",
  "list_name": "example",
  "mailbox_id": "00000000-0000-4000-8000-000000000001",
  "double_opt_in": true,
  "config": {
    "eyebrow": "example",
    "headline": "example",
    "body": "example",
    "button_label": "example",
    "email_placeholder": "example",
    "name_placeholder": "example",
    "fine_print": "example",
    "incentive": "example",
    "success_headline": "example",
    "success_body": "example",
    "redirect_url": "example",
    "image_url": "example",
    "art": "arcs",
    "style": "",
    "count_noun": "example",
    "confirm_promise": "example",
    "locale": "example",
    "collect_name": true,
    "show_logo": true,
    "show_count": true,
    "exit_intent": true,
    "delay_seconds": 0,
    "scroll_percent": 0,
    "frequency_days": 0,
    "image": "none",
    "layout": "stacked",
    "theme": "light",
    "position": "bottom",
    "fields": [
      {
        "key": "example",
        "label": "example",
        "type": "text",
        "required": false,
        "placeholder": "example",
        "options": [
          "example"
        ]
      }
    ]
  },
  "status": "active",
  "expected_version": 1
}'
POST/v1/workspaces/{workspaceId}/signup-forms/{formId}/preview

Render a saved form, optionally with unsaved changes, in the form or success state.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

formId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • kindstring

    enum: "inline", "popup", "bar", "slide_in", "page"

  • configobject

    No additional properties

  • eyebrowstring

    maxLength: 60

  • headlinestring

    minLength: 1 · maxLength: 140

  • bodystring

    maxLength: 400

  • button_labelstring

    minLength: 1 · maxLength: 40

  • email_placeholderstring

    maxLength: 80

  • name_placeholderstring

    maxLength: 60

  • fine_printstring

    maxLength: 160

  • incentivestring

    maxLength: 160

  • success_headlinestring

    maxLength: 120

  • success_bodystring

    maxLength: 400

  • redirect_urlstring

    maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"

  • image_urlstring

    maxLength: 2000 · pattern: "^(|https://[^\\s\"'<>]+)$"

  • artstring

    enum: "arcs", "blocks", "horizon", "confetti", "frame", "bands", "dots"

  • stylestring

    enum: "", "brand", "material", "clarity", "editorial", "bold", "luxe", "playful", "plain"

  • count_nounstring

    maxLength: 30

  • confirm_promisestring

    maxLength: 200

  • localestring
  • collect_nameboolean
  • show_logoboolean
  • show_countboolean
  • exit_intentboolean
  • delay_secondsinteger

    minimum: 0 · maximum: 600

  • scroll_percentinteger

    minimum: 0 · maximum: 100

  • frequency_daysinteger

    minimum: 0 · maximum: 365

  • imagestring

    enum: "none", "photo", "art"

  • layoutstring

    enum: "stacked", "split"

  • themestring

    enum: "light", "dark", "brand", "auto"

  • positionstring

    enum: "bottom", "top", "right", "left"

  • fieldsarray

    maxItems: 6

  • Each itemobject

    Select questions require options. Other question types do not accept options. Keys must be unique and cannot use reserved form fields; omitted keys are derived from labels.

    No additional properties

  • keystring

    pattern: "^[a-z][a-z0-9_]{0,39}$"

  • labelstringrequired

    minLength: 1 · maxLength: 80

  • typestring

    default: "text" · enum: "text", "select", "checkbox"

  • requiredboolean

    default: false

  • placeholderstring

    maxLength: 80

  • optionsarray

    minItems: 1 · maxItems: 20 · uniqueItems: true

  • Each itemstring

    minLength: 1 · maxLength: 80

  • double_opt_inboolean
  • statestring

    enum: "form", "success"

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • kindstringrequired

    enum: "inline", "popup", "bar", "slide_in", "page"

  • statestringrequired

    enum: "form", "success"

  • htmlstringrequired

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/signup-forms/{formId}/preview' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "kind": "inline",
  "config": {
    "eyebrow": "example",
    "headline": "example",
    "body": "example",
    "button_label": "example",
    "email_placeholder": "example",
    "name_placeholder": "example",
    "fine_print": "example",
    "incentive": "example",
    "success_headline": "example",
    "success_body": "example",
    "redirect_url": "example",
    "image_url": "example",
    "art": "arcs",
    "style": "",
    "count_noun": "example",
    "confirm_promise": "example",
    "locale": "example",
    "collect_name": true,
    "show_logo": true,
    "show_count": true,
    "exit_intent": true,
    "delay_seconds": 0,
    "scroll_percent": 0,
    "frequency_days": 0,
    "image": "none",
    "layout": "stacked",
    "theme": "light",
    "position": "bottom",
    "fields": [
      {
        "key": "example",
        "label": "example",
        "type": "text",
        "required": false,
        "placeholder": "example",
        "options": [
          "example"
        ]
      }
    ]
  },
  "double_opt_in": true,
  "state": "form"
}'

Public signup forms

OPTIONS/v1/forms/embed.js

Read public signup CORS policy

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

Read embed script headers

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

A live form's rendered widget (html, css, font link) and popup behavior. Public, CORS open, cached for a minute.

Public endpoint: no authentication required.

Parameters

Name / locationSchema
publicId
path · required
  • valuestring

    pattern: "^f_[a-z0-9]{16}$"

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

Read public signup CORS policy

Public endpoint: no authentication required.

Parameters

Name / locationSchema
publicId
path · required
  • valuestring

    format: "uuid"

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

A visitor signs up. Form-encoded (email, name, page, optional lang) so browsers skip the preflight; JSON is also accepted. Messages and the confirmation email follow the form's language, else lang, else Accept-Language. With double opt-in a confirmation email is sent and the person joins the list after confirming.

Public endpoint: no authentication required.

Parameters

Name / locationSchema
publicId
path · required
  • valuestring

    pattern: "^f_[a-z0-9]{16}$"

Request body required

application/x-www-form-urlencoded

  • valueobject

    Custom answers use x_<field key> (or the unprefixed key). Required answers depend on the form configuration. The handler reads the first 8000 characters of the body.

  • emailstringrequired

    format: "email" · maxLength: 320

  • namestring

    maxLength: 100

  • pagestring

    maxLength: 2000

  • elapsednumber | string

    Milliseconds elapsed since displaying the form.

  • langstring

    maxLength: 35

  • localestring

    maxLength: 35

  • websitestring

    Honeypot; leave empty.

    maxLength: 200

  • Additional propertystring | number

application/json

  • valueobject

    Custom answers use x_<field key> (or the unprefixed key). Required answers depend on the form configuration. The handler reads the first 8000 characters of the body.

  • emailstringrequired

    format: "email" · maxLength: 320

  • namestring

    maxLength: 100

  • pagestring

    maxLength: 2000

  • elapsednumber | string

    Milliseconds elapsed since displaying the form.

  • langstring

    maxLength: 35

  • localestring

    maxLength: 35

  • websitestring

    Honeypot; leave empty.

    maxLength: 200

  • Additional propertystring | number

Success response 200

Signup accepted.

application/json

  • valueobject
  • okbooleanrequired

    const: true

  • statusstringrequired

    enum: "pending_confirmation", "subscribed", "already_subscribed"

  • redirect_urlstring

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/forms/{publicId}/subscribe' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "email": "person@example.com",
  "name": "example",
  "page": "example",
  "elapsed": 1,
  "lang": "example",
  "locale": "example",
  "website": "example"
}'
OPTIONS/v1/forms/{publicId}/subscribe

Read public signup CORS policy

Public endpoint: no authentication required.

Parameters

Name / locationSchema
publicId
path · required
  • valuestring

    format: "uuid"

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

Counts one display of a widget.

Public endpoint: no authentication required.

Parameters

Name / locationSchema
publicId
path · required
  • valuestring

    pattern: "^f_[a-z0-9]{16}$"

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

Read public signup CORS policy

Public endpoint: no authentication required.

Parameters

Name / locationSchema
publicId
path · required
  • valuestring

    format: "uuid"

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

listTemplates

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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

createTemplate

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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

previewDesign

Render unsaved design input with sample or audience values and report placeholder gaps.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • subjectstring

    maxLength: 10000

  • body_textstring

    maxLength: 2000000

  • body_htmlstring

    maxLength: 2000000

  • contentobject
  • Additional propertystring
  • audienceobject

    Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.

  • all_subscribedboolean
  • contact_idsarray

    maxItems: 10000

  • Each itemstring

    format: "uuid"

  • list_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • segment_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • sample_emailstring

    maxLength: 320

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • subjectstringrequired
  • body_textstringrequired
  • body_htmlstring
  • font_renderingarrayrequired
  • Each itemobject
  • stackstringrequired
  • fontstringrequired
  • web_fontbooleanrequired
  • clientsarrayrequired
  • Each itemobject
  • clientstringrequired

    Further nesting omitted

  • labelstringrequired

    Further nesting omitted

  • fontstringrequired

    Further nesting omitted

  • web_fontbooleanrequired

    Further nesting omitted

  • fallbackbooleanrequired

    Further nesting omitted

  • sample_recipientunspecifiedrequired
  • anyOf 1object
  • emailstringrequired
  • display_namestring | nullrequired
  • anyOf 2null
  • required_variablesarrayrequired
  • Each itemstring
  • effective_slotsarrayrequired
  • Each itemobject
  • keystringrequired

    pattern: "^[A-Za-z0-9_$.-]{1,200}$"

  • labelstring

    maxLength: 120

  • typestring

    enum: "text", "paragraph", "url", "image"

  • helpstring

    maxLength: 300

  • audience_countinteger
  • gapsarray
  • Each itemobject
  • variablestringrequired
  • missing_countintegerrequired
  • sample_emailsarrayrequired
  • Each itemstring

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/templates/preview' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "subject": "example",
  "body_text": "example",
  "body_html": "example",
  "content": {},
  "audience": {
    "all_subscribed": true,
    "contact_ids": [
      "00000000-0000-4000-8000-000000000001"
    ],
    "list_ids": [
      "00000000-0000-4000-8000-000000000001"
    ],
    "segment_ids": [
      "00000000-0000-4000-8000-000000000001"
    ]
  },
  "sample_email": "example"
}'
GET/v1/workspaces/{workspaceId}/templates/{templateId}

getTemplate

One design with its inline HTML, fill-in content, and effective slots.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

templateId
path · required
  • valuestring

    format: "uuid"

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}

updateTemplate

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

templateId
path · required
  • valuestring

    format: "uuid"

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

duplicateTemplate

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

templateId
path · required
  • valuestring

    format: "uuid"

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

previewTemplate

Render a saved design with sample or audience values and report placeholder gaps.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

templateId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • contentobject
  • Additional propertystring
  • audienceobject

    Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.

  • all_subscribedboolean
  • contact_idsarray

    maxItems: 10000

  • Each itemstring

    format: "uuid"

  • list_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • segment_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • sample_emailstring

    maxLength: 320

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • subjectstringrequired
  • body_textstringrequired
  • body_htmlstring
  • font_renderingarrayrequired
  • Each itemobject
  • stackstringrequired
  • fontstringrequired
  • web_fontbooleanrequired
  • clientsarrayrequired
  • Each itemobject
  • clientstringrequired

    Further nesting omitted

  • labelstringrequired

    Further nesting omitted

  • fontstringrequired

    Further nesting omitted

  • web_fontbooleanrequired

    Further nesting omitted

  • fallbackbooleanrequired

    Further nesting omitted

  • sample_recipientunspecifiedrequired
  • anyOf 1object
  • emailstringrequired
  • display_namestring | nullrequired
  • anyOf 2null
  • required_variablesarrayrequired
  • Each itemstring
  • effective_slotsarrayrequired
  • Each itemobject
  • keystringrequired

    pattern: "^[A-Za-z0-9_$.-]{1,200}$"

  • labelstring

    maxLength: 120

  • typestring

    enum: "text", "paragraph", "url", "image"

  • helpstring

    maxLength: 300

  • audience_countinteger
  • gapsarray
  • Each itemobject
  • variablestringrequired
  • missing_countintegerrequired
  • sample_emailsarrayrequired
  • Each itemstring

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/templates/{templateId}/preview' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "content": {},
  "audience": {
    "all_subscribed": true,
    "contact_ids": [
      "00000000-0000-4000-8000-000000000001"
    ],
    "list_ids": [
      "00000000-0000-4000-8000-000000000001"
    ],
    "segment_ids": [
      "00000000-0000-4000-8000-000000000001"
    ]
  },
  "sample_email": "example"
}'
GET/v1/workspaces/{workspaceId}/templates/{templateId}/html

getTemplateHtml

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

templateId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Scriptless HTML email template body.

text/html

  • valuestring

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

previewCampaignCoverage

Required placeholders an audience cannot fill, before any Broadcast is saved.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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

listCampaigns

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • product_idstring

    format: "uuid"

  • namestringrequired
  • mailbox_idstring

    format: "uuid"

  • template_idstring | null

    format: "uuid"

  • managed_content_idstring | null

    format: "uuid"

  • managed_source_revision_idstring | null

    format: "uuid"

  • managed_publication_idstring | null

    format: "uuid"

  • managed_locales_snapshotarray
  • Each itemstring
  • localization_failure_policystring
  • expires_after_secondsinteger | null
  • statusstringrequired
  • versionintegerrequired
  • subject_variantsarray
  • Each itemstring
  • selected_subject_variantinteger
  • content_overridesobject
  • Additional propertystring
  • audience_queryobject

    Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.

  • all_subscribedboolean
  • contact_idsarray

    maxItems: 10000

  • Each itemstring

    format: "uuid"

  • list_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • segment_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • audience_frozen_atstring | null

    format: "date-time"

  • audience_recipient_countinteger | null
  • audience_snapshot_sha256string | null
  • audience_snapshot_campaign_versioninteger | null
  • scheduled_atstring | null

    format: "date-time"

  • started_atstring | null

    format: "date-time"

  • completed_atstring | null

    format: "date-time"

  • created_atstring

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • archived_atstring | null

    format: "date-time"

  • statsobject
  • Additional propertyAny value

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/campaigns' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/campaigns

createCampaign

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • namestringrequired

    maxLength: 200

  • mailbox_idstringrequired

    format: "uuid"

  • template_idstringrequired

    format: "uuid"

  • subject_variantsarray

    maxItems: 8

  • Each itemstring

    minLength: 1 · maxLength: 998

  • selected_subject_variantinteger

    minimum: 0

  • audienceobjectrequired
  • all_subscribedboolean

    default: false

  • contact_idsarray

    maxItems: 10000

  • Each itemstring

    format: "uuid"

  • list_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • segment_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

Success response 201

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • product_idstring

    format: "uuid"

  • namestringrequired
  • mailbox_idstring

    format: "uuid"

  • template_idstring | null

    format: "uuid"

  • managed_content_idstring | null

    format: "uuid"

  • managed_source_revision_idstring | null

    format: "uuid"

  • managed_publication_idstring | null

    format: "uuid"

  • managed_locales_snapshotarray
  • Each itemstring
  • localization_failure_policystring
  • expires_after_secondsinteger | null
  • statusstringrequired
  • versionintegerrequired
  • subject_variantsarray
  • Each itemstring
  • selected_subject_variantinteger
  • content_overridesobject
  • Additional propertystring
  • audience_queryobject

    Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.

  • all_subscribedboolean
  • contact_idsarray

    maxItems: 10000

  • Each itemstring

    format: "uuid"

  • list_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • segment_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • audience_frozen_atstring | null

    format: "date-time"

  • audience_recipient_countinteger | null
  • audience_snapshot_sha256string | null
  • audience_snapshot_campaign_versioninteger | null
  • scheduled_atstring | null

    format: "date-time"

  • started_atstring | null

    format: "date-time"

  • completed_atstring | null

    format: "date-time"

  • created_atstring

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • archived_atstring | null

    format: "date-time"

  • statsobject
  • Additional propertyAny value

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/campaigns' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "name": "example",
  "mailbox_id": "00000000-0000-4000-8000-000000000001",
  "template_id": "00000000-0000-4000-8000-000000000001",
  "subject_variants": [
    "example"
  ],
  "selected_subject_variant": 0,
  "audience": {
    "all_subscribed": false,
    "contact_ids": [
      "00000000-0000-4000-8000-000000000001"
    ],
    "list_ids": [
      "00000000-0000-4000-8000-000000000001"
    ],
    "segment_ids": [
      "00000000-0000-4000-8000-000000000001"
    ]
  }
}'
POST/v1/workspaces/{workspaceId}/campaigns/audience-preview

previewCampaignAudience

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • 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"

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}

getCampaign

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

campaignId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • product_idstring

    format: "uuid"

  • namestringrequired
  • mailbox_idstring

    format: "uuid"

  • template_idstring | null

    format: "uuid"

  • managed_content_idstring | null

    format: "uuid"

  • managed_source_revision_idstring | null

    format: "uuid"

  • managed_publication_idstring | null

    format: "uuid"

  • managed_locales_snapshotarray
  • Each itemstring
  • localization_failure_policystring
  • expires_after_secondsinteger | null
  • statusstringrequired
  • versionintegerrequired
  • subject_variantsarray
  • Each itemstring
  • selected_subject_variantinteger
  • content_overridesobject
  • Additional propertystring
  • audience_queryobject

    Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.

  • all_subscribedboolean
  • contact_idsarray

    maxItems: 10000

  • Each itemstring

    format: "uuid"

  • list_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • segment_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • audience_frozen_atstring | null

    format: "date-time"

  • audience_recipient_countinteger | null
  • audience_snapshot_sha256string | null
  • audience_snapshot_campaign_versioninteger | null
  • scheduled_atstring | null

    format: "date-time"

  • started_atstring | null

    format: "date-time"

  • completed_atstring | null

    format: "date-time"

  • created_atstring

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • archived_atstring | null

    format: "date-time"

  • statsobject
  • Additional propertyAny value

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/campaigns/{campaignId}' \
  --header "Authorization: Bearer $BANGER_API_KEY"
PATCH/v1/workspaces/{workspaceId}/campaigns/{campaignId}

updateCampaign

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

campaignId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • namestringrequired

    maxLength: 200

  • mailbox_idstringrequired

    format: "uuid"

  • template_idstring

    format: "uuid"

  • subject_variantsarray

    maxItems: 8

  • Each itemstring

    minLength: 1 · maxLength: 998

  • selected_subject_variantinteger

    minimum: 0

  • audienceobjectrequired

    Properties not specified in the contract

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • product_idstring

    format: "uuid"

  • namestringrequired
  • mailbox_idstring

    format: "uuid"

  • template_idstring | null

    format: "uuid"

  • managed_content_idstring | null

    format: "uuid"

  • managed_source_revision_idstring | null

    format: "uuid"

  • managed_publication_idstring | null

    format: "uuid"

  • managed_locales_snapshotarray
  • Each itemstring
  • localization_failure_policystring
  • expires_after_secondsinteger | null
  • statusstringrequired
  • versionintegerrequired
  • subject_variantsarray
  • Each itemstring
  • selected_subject_variantinteger
  • content_overridesobject
  • Additional propertystring
  • audience_queryobject

    Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.

  • all_subscribedboolean
  • contact_idsarray

    maxItems: 10000

  • Each itemstring

    format: "uuid"

  • list_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • segment_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • audience_frozen_atstring | null

    format: "date-time"

  • audience_recipient_countinteger | null
  • audience_snapshot_sha256string | null
  • audience_snapshot_campaign_versioninteger | null
  • scheduled_atstring | null

    format: "date-time"

  • started_atstring | null

    format: "date-time"

  • completed_atstring | null

    format: "date-time"

  • created_atstring

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • archived_atstring | null

    format: "date-time"

  • statsobject
  • Additional propertyAny value

curl example

curl --request PATCH --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/campaigns/{campaignId}' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "name": "example",
  "mailbox_id": "00000000-0000-4000-8000-000000000001",
  "template_id": "00000000-0000-4000-8000-000000000001",
  "subject_variants": [
    "example"
  ],
  "selected_subject_variant": 0,
  "audience": {}
}'
DELETE/v1/workspaces/{workspaceId}/campaigns/{campaignId}

Delete an unsent campaign

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

campaignId
path · required
  • valuestring

    format: "uuid"

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

listCampaignRecipients

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

campaignId
path · required
  • valuestring

    format: "uuid"

cursor
query
  • valuestring

    maxLength: 1024

limit
query
  • valueinteger

    minimum: 1 · maximum: 100 · default: 50

status
query
  • valuestring

    enum: "pending", "queued", "sent", "failed", "skipped", "delivered", "deferred", "bounced", "complained", "unsubscribed"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • contact_idstring | null

    format: "uuid"

  • recipient_emailstring
  • recipient_namestring | null
  • recipient_hashstring
  • statusstring
  • dispatch_statusstring
  • command_idstring | null

    format: "uuid"

  • error_codestring | null
  • created_atstring

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • delivery_statestring | null
  • provider_message_keystring | null
  • last_event_atstring | null

    format: "date-time"

  • first_delivered_atstring | null

    format: "date-time"

  • first_opened_atstring | null

    format: "date-time"

  • first_clicked_atstring | null

    format: "date-time"

  • first_human_likely_opened_atstring | null

    format: "date-time"

  • first_human_likely_clicked_atstring | null

    format: "date-time"

  • first_replied_atstring | null

    format: "date-time"

  • machine_open_countinteger
  • machine_click_countinteger
  • privacy_proxy_open_countinteger
  • unknown_open_countinteger
  • unknown_click_countinteger
  • first_unsubscribed_atstring | null

    format: "date-time"

  • pageobjectrequired
  • next_cursorstring
  • has_morebooleanrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/campaigns/{campaignId}/recipients?cursor=example&limit=50&status=pending' \
  --header "Authorization: Bearer $BANGER_API_KEY"
GET/v1/workspaces/{workspaceId}/campaigns/{campaignId}/timeline

listCampaignTimeline

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

campaignId
path · required
  • valuestring

    format: "uuid"

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

pauseCampaign

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

campaignId
path · required
  • valuestring

    format: "uuid"

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

resumeCampaign

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

campaignId
path · required
  • valuestring

    format: "uuid"

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

cancelCampaign

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

campaignId
path · required
  • valuestring

    format: "uuid"

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

scheduleCampaign

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

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

campaignId
path · required
  • valuestring

    format: "uuid"

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

testCampaign

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

campaignId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

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

requestCampaignReview

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

campaignId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

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

  • 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"

  • 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

Archive a campaign

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

campaignId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • namestringrequired
  • statusstringrequired
  • archived_atstring | nullrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

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

Unarchive a campaign

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

campaignId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • namestringrequired
  • statusstringrequired
  • archived_atstring | nullrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

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

Save one to four campaign email designs

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

campaignId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • namestringrequired

    minLength: 1 · maxLength: 200

  • mailbox_idstringrequired

    format: "uuid"

  • audienceobjectrequired

    Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.

  • all_subscribedboolean
  • contact_idsarray

    maxItems: 10000

  • Each itemstring

    format: "uuid"

  • list_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • segment_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • automatic_translationboolean
  • variantsarrayrequired

    minItems: 1 · maxItems: 4

  • Each itemobject
  • body_htmlstringrequired

    minLength: 1 · maxLength: 2000000

  • subjectstring

    maxLength: 10000

  • body_textstring

    maxLength: 2000000

  • contentobject
  • Additional propertystring

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • product_idstring

    format: "uuid"

  • namestringrequired
  • mailbox_idstring

    format: "uuid"

  • template_idstring | null

    format: "uuid"

  • managed_content_idstring | null

    format: "uuid"

  • managed_source_revision_idstring | null

    format: "uuid"

  • managed_publication_idstring | null

    format: "uuid"

  • managed_locales_snapshotarray
  • Each itemstring
  • localization_failure_policystring
  • expires_after_secondsinteger | null
  • statusstringrequired
  • versionintegerrequired
  • subject_variantsarray
  • Each itemstring
  • selected_subject_variantinteger
  • content_overridesobject
  • Additional propertystring
  • audience_queryobject

    Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.

  • all_subscribedboolean
  • contact_idsarray

    maxItems: 10000

  • Each itemstring

    format: "uuid"

  • list_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • segment_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • audience_frozen_atstring | null

    format: "date-time"

  • audience_recipient_countinteger | null
  • audience_snapshot_sha256string | null
  • audience_snapshot_campaign_versioninteger | null
  • scheduled_atstring | null

    format: "date-time"

  • started_atstring | null

    format: "date-time"

  • completed_atstring | null

    format: "date-time"

  • created_atstring

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • archived_atstring | null

    format: "date-time"

  • statsobject
  • Additional propertyAny value
  • design_template_idstringrequired

    format: "uuid"

curl example

curl --request PUT --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/campaigns/{campaignId}/design-test' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "name": "example",
  "mailbox_id": "00000000-0000-4000-8000-000000000001",
  "audience": {
    "all_subscribed": true,
    "contact_ids": [
      "00000000-0000-4000-8000-000000000001"
    ],
    "list_ids": [
      "00000000-0000-4000-8000-000000000001"
    ],
    "segment_ids": [
      "00000000-0000-4000-8000-000000000001"
    ]
  },
  "automatic_translation": true,
  "variants": [
    {
      "body_html": "example",
      "subject": "example",
      "body_text": "example",
      "content": {}
    }
  ]
}'

Broadcasts

POST/v1/workspaces/{workspaceId}/broadcasts

createBroadcast

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 1 · maxLength: 256

Request body required

application/json

  • valueobject

    No additional properties

  • namestringrequired

    minLength: 1 · maxLength: 200

  • mailbox_idstringrequired

    format: "uuid"

  • template_idstring

    format: "uuid"

  • audienceobject

    No additional properties

  • all_subscribedboolean
  • contact_idsarray

    maxItems: 10000

  • Each itemstring

    format: "uuid"

  • list_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • segment_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • subject_variantsarray

    maxItems: 8

  • Each itemstring

    minLength: 1 · maxLength: 998

  • selected_subject_variantinteger

    minimum: 0 · maximum: 7

  • expires_after_secondsinteger

    Discard unsent recipients after this many seconds from the scheduled time; defaults to seven days.

    minimum: 1 · maximum: 604800

  • content_overridesobject
  • Additional propertystring

    maxLength: 20000

Success response 200

Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.

application/json

  • valueobject
  • dataunspecifiedrequired
  • allOf 1unspecified
  • allOf 1object
  • idstringrequired

    format: "uuid"

  • product_idstringrequired

    format: "uuid"

  • namestringrequired
  • mailbox_idstring

    format: "uuid"

  • template_idstring | null

    format: "uuid"

  • managed_content_idstring | null

    format: "uuid"

  • managed_source_revision_idstring | null

    format: "uuid"

  • managed_publication_idstring | null

    format: "uuid"

  • managed_locales_snapshotarray
  • Each itemstring
  • localization_failure_policystring
  • expires_after_secondsinteger | null
  • statusstring
  • versionintegerrequired
  • subject_variantsarray
  • Each itemstring
  • selected_subject_variantinteger
  • content_overridesobject
  • Additional propertystring
  • audience_queryobject

    Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.

  • all_subscribedboolean
  • contact_idsarray

    maxItems: 10000

  • Each itemstring

    format: "uuid"

    Further nesting omitted

  • list_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

    Further nesting omitted

  • segment_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

    Further nesting omitted

  • audience_frozen_atstring | null

    format: "date-time"

  • audience_recipient_countinteger | null
  • audience_snapshot_sha256string | null
  • audience_snapshot_campaign_versioninteger | null
  • scheduled_atstring | null

    format: "date-time"

  • started_atstring | null

    format: "date-time"

  • completed_atstring | null

    format: "date-time"

  • created_atstring

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • archived_atstring | null

    format: "date-time"

  • statsobject
  • Additional propertyAny value
  • broadcast_idstringrequired

    format: "uuid"

  • sender_addressstring | nullrequired
  • sending_blockerunspecifiedrequired
  • anyOf 1object
  • codestringrequired

    Further nesting omitted

  • messagestringrequired

    Further nesting omitted

  • anyOf 2null
  • designunspecifiedrequired
  • anyOf 1object
  • idstring

    format: "uuid"

    Further nesting omitted

  • product_idstring

    format: "uuid"

    Further nesting omitted

  • namestring

    Further nesting omitted

  • subjectstring

    Further nesting omitted

  • body_textstring

    Further nesting omitted

  • contentobject

    Further nesting omitted

  • slotsarray

    Further nesting omitted

  • statusstring

    enum: "active", "archived"

    Further nesting omitted

  • originstring

    enum: "person", "agent", "starter", "import"

    Further nesting omitted

  • created_by_actor_idstring | null

    Further nesting omitted

  • campaign_idstring | null

    format: "uuid"

    Further nesting omitted

  • message_kindstring

    Further nesting omitted

  • starter_idstring | null

    Further nesting omitted

  • starter_versioninteger | null

    Further nesting omitted

  • versioninteger

    Further nesting omitted

  • created_atstring

    format: "date-time"

    Further nesting omitted

  • updated_atstring

    format: "date-time"

    Further nesting omitted

  • body_html_urlstring

    format: "uri"

    Further nesting omitted

  • body_htmlstring | null

    Further nesting omitted

  • body_html_b2_keystring | null

    Further nesting omitted

  • anyOf 2null
  • managed_contentunspecifiedrequired
  • anyOf 1unspecified
  • allOf 1object

    Further nesting omitted

  • allOf 2object

    Further nesting omitted

  • anyOf 2null
  • subjectstring | nullrequired
  • sender_mailboxunspecifiedrequired
  • anyOf 1object
  • idstringrequired

    format: "uuid"

    Further nesting omitted

  • addressstringrequired

    Further nesting omitted

  • display_namestringrequired

    Further nesting omitted

  • statusstringrequired

    Further nesting omitted

  • anyOf 2null
  • reply_mailboxunspecifiedrequired
  • anyOf 1object
  • idstringrequired

    format: "uuid"

    Further nesting omitted

  • addressstringrequired

    Further nesting omitted

  • display_namestringrequired

    Further nesting omitted

  • statusstringrequired

    Further nesting omitted

  • anyOf 2null
  • design_versioninteger | nullrequired
  • audienceobjectrequired

    Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.

  • all_subscribedboolean
  • contact_idsarray

    maxItems: 10000

  • Each itemstring

    format: "uuid"

    Further nesting omitted

  • list_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

    Further nesting omitted

  • segment_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

    Further nesting omitted

  • allOf 2object
  • replayedbooleanrequired
  • allOf 2object
  • previewobject
  • subjectstringrequired
  • preheaderstring
  • htmlstringrequired
  • textstringrequired
  • localestringrequired
  • directionstringrequired

    enum: "ltr", "rtl"

  • warningsarray
  • Each itemstring
  • Additional propertyAny value
  • translation_jobsarrayrequired
  • Each itemstring

    format: "uuid"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/broadcasts' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
  --header 'Idempotency-Key: example' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "name": "example",
  "mailbox_id": "00000000-0000-4000-8000-000000000001",
  "template_id": "00000000-0000-4000-8000-000000000001",
  "audience": {
    "all_subscribed": true,
    "contact_ids": [
      "00000000-0000-4000-8000-000000000001"
    ],
    "list_ids": [
      "00000000-0000-4000-8000-000000000001"
    ],
    "segment_ids": [
      "00000000-0000-4000-8000-000000000001"
    ]
  },
  "subject_variants": [
    "example"
  ],
  "selected_subject_variant": 0,
  "expires_after_seconds": 1,
  "content_overrides": {}
}'
GET/v1/workspaces/{workspaceId}/broadcasts/{broadcastId}

getBroadcast

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

broadcastId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • product_idstringrequired

    format: "uuid"

  • namestringrequired
  • mailbox_idstring

    format: "uuid"

  • template_idstring | null

    format: "uuid"

  • managed_content_idstring | null

    format: "uuid"

  • managed_source_revision_idstring | null

    format: "uuid"

  • managed_publication_idstring | null

    format: "uuid"

  • managed_locales_snapshotarray
  • Each itemstring
  • localization_failure_policystring
  • expires_after_secondsinteger | null
  • statusstring
  • versionintegerrequired
  • subject_variantsarray
  • Each itemstring
  • selected_subject_variantinteger
  • content_overridesobject
  • Additional propertystring
  • audience_queryobject

    Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.

  • all_subscribedboolean
  • contact_idsarray

    maxItems: 10000

  • Each itemstring

    format: "uuid"

  • list_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • segment_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • audience_frozen_atstring | null

    format: "date-time"

  • audience_recipient_countinteger | null
  • audience_snapshot_sha256string | null
  • audience_snapshot_campaign_versioninteger | null
  • scheduled_atstring | null

    format: "date-time"

  • started_atstring | null

    format: "date-time"

  • completed_atstring | null

    format: "date-time"

  • created_atstring

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • archived_atstring | null

    format: "date-time"

  • statsobject
  • Additional propertyAny value
  • broadcast_idstringrequired

    format: "uuid"

  • sender_addressstring | nullrequired
  • sending_blockerunspecifiedrequired
  • anyOf 1object
  • codestringrequired
  • messagestringrequired
  • anyOf 2null
  • designunspecifiedrequired
  • anyOf 1object
  • idstring

    format: "uuid"

  • product_idstring

    format: "uuid"

  • namestring
  • subjectstring
  • body_textstring
  • contentobject
  • Additional propertystring
  • slotsarray
  • Each itemobject
  • keystringrequired

    pattern: "^[A-Za-z0-9_$.-]{1,200}$"

    Further nesting omitted

  • labelstring

    maxLength: 120

    Further nesting omitted

  • typestring

    enum: "text", "paragraph", "url", "image"

    Further nesting omitted

  • helpstring

    maxLength: 300

    Further nesting omitted

  • statusstring

    enum: "active", "archived"

  • originstring

    enum: "person", "agent", "starter", "import"

  • created_by_actor_idstring | null
  • campaign_idstring | null

    format: "uuid"

  • message_kindstring
  • starter_idstring | null
  • starter_versioninteger | null
  • versioninteger
  • created_atstring

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • body_html_urlstring

    format: "uri"

  • body_htmlstring | null
  • body_html_b2_keystring | null
  • anyOf 2null
  • managed_contentunspecifiedrequired
  • anyOf 1unspecified
  • allOf 1object
  • idstringrequired

    format: "uuid"

  • namestringrequired
  • versionintegerrequired

    minimum: 1

  • review_requiredbooleanrequired
  • draft_revision_idstring | null

    format: "uuid"

  • submitted_revision_idstring | null

    format: "uuid"

  • approved_revision_idstring | null

    format: "uuid"

  • published_revision_idstring | null

    format: "uuid"

  • published_publication_idstring | null

    format: "uuid"

  • source_revisionobject
  • Additional propertyAny value
  • translationsarray
  • Each itemobject

    Further nesting omitted

  • translation_jobsarray
  • Each itemobject

    Further nesting omitted

  • allOf 2object
  • source_revisionunspecifiedrequired
  • anyOf 1object

    Further nesting omitted

  • anyOf 2null

    Further nesting omitted

  • published_source_revisionunspecifiedrequired
  • anyOf 1object

    Further nesting omitted

  • anyOf 2null

    Further nesting omitted

  • translationsarrayrequired
  • Each itemobject

    Further nesting omitted

  • anyOf 2null
  • subjectstring | nullrequired
  • sender_mailboxunspecifiedrequired
  • anyOf 1object
  • idstringrequired

    format: "uuid"

  • addressstringrequired
  • display_namestringrequired
  • statusstringrequired
  • anyOf 2null
  • reply_mailboxunspecifiedrequired
  • anyOf 1object
  • idstringrequired

    format: "uuid"

  • addressstringrequired
  • display_namestringrequired
  • statusstringrequired
  • anyOf 2null
  • design_versioninteger | nullrequired
  • audienceobjectrequired

    Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.

  • all_subscribedboolean
  • contact_idsarray

    maxItems: 10000

  • Each itemstring

    format: "uuid"

  • list_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • segment_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/broadcasts/{broadcastId}' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
PATCH/v1/workspaces/{workspaceId}/broadcasts/{broadcastId}

updateBroadcast

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

broadcastId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 1 · maxLength: 256

Request body required

application/json

  • valueobject

    No additional properties

  • namestring

    minLength: 1 · maxLength: 200

  • mailbox_idstring

    format: "uuid"

  • template_idstring

    format: "uuid"

  • audienceobject

    No additional properties

  • all_subscribedboolean
  • contact_idsarray

    maxItems: 10000

  • Each itemstring

    format: "uuid"

  • list_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • segment_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • subject_variantsarray

    maxItems: 8

  • Each itemstring

    minLength: 1 · maxLength: 998

  • selected_subject_variantinteger

    minimum: 0 · maximum: 7

  • expires_after_secondsinteger

    Discard unsent recipients after this many seconds from the scheduled time.

    minimum: 1 · maximum: 604800

  • content_overridesobject
  • Additional propertystring

    maxLength: 20000

  • expected_versionintegerrequired

    minimum: 1

Success response 200

Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.

application/json

  • valueobject
  • dataunspecifiedrequired
  • allOf 1object
  • idstringrequired

    format: "uuid"

  • product_idstringrequired

    format: "uuid"

  • namestringrequired
  • mailbox_idstring

    format: "uuid"

  • template_idstring | null

    format: "uuid"

  • managed_content_idstring | null

    format: "uuid"

  • managed_source_revision_idstring | null

    format: "uuid"

  • managed_publication_idstring | null

    format: "uuid"

  • managed_locales_snapshotarray
  • Each itemstring
  • localization_failure_policystring
  • expires_after_secondsinteger | null
  • statusstring
  • versionintegerrequired
  • subject_variantsarray
  • Each itemstring
  • selected_subject_variantinteger
  • content_overridesobject
  • Additional propertystring
  • audience_queryobject

    Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.

  • all_subscribedboolean
  • contact_idsarray

    maxItems: 10000

  • Each itemstring

    format: "uuid"

  • list_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • segment_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • audience_frozen_atstring | null

    format: "date-time"

  • audience_recipient_countinteger | null
  • audience_snapshot_sha256string | null
  • audience_snapshot_campaign_versioninteger | null
  • scheduled_atstring | null

    format: "date-time"

  • started_atstring | null

    format: "date-time"

  • completed_atstring | null

    format: "date-time"

  • created_atstring

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • archived_atstring | null

    format: "date-time"

  • statsobject
  • Additional propertyAny value
  • broadcast_idstringrequired

    format: "uuid"

  • sender_addressstring | nullrequired
  • sending_blockerunspecifiedrequired
  • anyOf 1object
  • codestringrequired
  • messagestringrequired
  • anyOf 2null
  • designunspecifiedrequired
  • anyOf 1object
  • idstring

    format: "uuid"

  • product_idstring

    format: "uuid"

  • namestring
  • subjectstring
  • body_textstring
  • contentobject
  • Additional propertystring

    Further nesting omitted

  • slotsarray
  • Each itemobject

    Further nesting omitted

  • statusstring

    enum: "active", "archived"

  • originstring

    enum: "person", "agent", "starter", "import"

  • created_by_actor_idstring | null
  • campaign_idstring | null

    format: "uuid"

  • message_kindstring
  • starter_idstring | null
  • starter_versioninteger | null
  • versioninteger
  • created_atstring

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • body_html_urlstring

    format: "uri"

  • body_htmlstring | null
  • body_html_b2_keystring | null
  • anyOf 2null
  • managed_contentunspecifiedrequired
  • anyOf 1unspecified
  • allOf 1object
  • idstringrequired

    format: "uuid"

    Further nesting omitted

  • namestringrequired

    Further nesting omitted

  • versionintegerrequired

    minimum: 1

    Further nesting omitted

  • review_requiredbooleanrequired

    Further nesting omitted

  • draft_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • submitted_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • approved_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_publication_idstring | null

    format: "uuid"

    Further nesting omitted

  • source_revisionobject

    Further nesting omitted

  • translationsarray

    Further nesting omitted

  • translation_jobsarray

    Further nesting omitted

  • allOf 2object
  • source_revisionunspecifiedrequired

    Further nesting omitted

  • published_source_revisionunspecifiedrequired

    Further nesting omitted

  • translationsarrayrequired

    Further nesting omitted

  • anyOf 2null
  • subjectstring | nullrequired
  • sender_mailboxunspecifiedrequired
  • anyOf 1object
  • idstringrequired

    format: "uuid"

  • addressstringrequired
  • display_namestringrequired
  • statusstringrequired
  • anyOf 2null
  • reply_mailboxunspecifiedrequired
  • anyOf 1object
  • idstringrequired

    format: "uuid"

  • addressstringrequired
  • display_namestringrequired
  • statusstringrequired
  • anyOf 2null
  • design_versioninteger | nullrequired
  • audienceobjectrequired

    Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.

  • all_subscribedboolean
  • contact_idsarray

    maxItems: 10000

  • Each itemstring

    format: "uuid"

  • list_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • segment_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

  • allOf 2object
  • replayedbooleanrequired

curl example

curl --request PATCH --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/broadcasts/{broadcastId}' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
  --header 'Idempotency-Key: example' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "name": "example",
  "mailbox_id": "00000000-0000-4000-8000-000000000001",
  "template_id": "00000000-0000-4000-8000-000000000001",
  "audience": {
    "all_subscribed": true,
    "contact_ids": [
      "00000000-0000-4000-8000-000000000001"
    ],
    "list_ids": [
      "00000000-0000-4000-8000-000000000001"
    ],
    "segment_ids": [
      "00000000-0000-4000-8000-000000000001"
    ]
  },
  "subject_variants": [
    "example"
  ],
  "selected_subject_variant": 0,
  "expires_after_seconds": 1,
  "content_overrides": {},
  "expected_version": 1
}'
POST/v1/workspaces/{workspaceId}/broadcasts/audience-preview

previewBroadcastAudience

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • audienceobjectrequired

    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"

  • template_idstring

    format: "uuid"

  • subjectstring

    minLength: 0 · maxLength: 10000

  • 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 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

previewSavedBroadcastAudience

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

broadcastId
path · required
  • valuestring

    format: "uuid"

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

checkBroadcastReadiness

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

broadcastId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.

application/json

  • valueobject
  • dataobjectrequired
  • broadcast_idstringrequired

    format: "uuid"

  • product_idstringrequired

    format: "uuid"

  • readybooleanrequired
  • blockersarrayrequired
  • Each itemobject
  • codestringrequired
  • messagestringrequired
  • audienceunspecifiedrequired
  • allOf 1object
  • countintegerrequired
  • missing_consent_evidence_countintegerrequired
  • samplearrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

    Further nesting omitted

  • emailstringrequired

    Further nesting omitted

  • display_namestring | nullrequired

    Further nesting omitted

  • attributesobjectrequired

    Further nesting omitted

  • excludedobjectrequired
  • suppressedintegerrequired
  • not_subscribedintegerrequired
  • missing_recipient_hashintegerrequired
  • missing_consent_evidenceintegerrequired
  • allOf 2object
  • eligible_countintegerrequired
  • required_variablesarrayrequired
  • Each itemstring
  • missing_personalization_fieldsarrayrequired
  • Each itemobject
  • variablestringrequired

    Further nesting omitted

  • missingCountintegerrequired

    Further nesting omitted

  • sampleEmailsarrayrequired

    Further nesting omitted

  • audienceobjectrequired

    Select all subscribed contacts or at least one nonempty contact_ids, list_ids, or segment_ids list.

  • all_subscribedboolean
  • contact_idsarray

    maxItems: 10000

  • Each itemstring

    format: "uuid"

    Further nesting omitted

  • list_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

    Further nesting omitted

  • segment_idsarray

    maxItems: 1000

  • Each itemstring

    format: "uuid"

    Further nesting omitted

  • campaign_versionintegerrequired
  • design_versioninteger | nullrequired
  • languagesunspecifiedrequired
  • anyOf 1object
  • requestedarrayrequired
  • Each itemobject
  • localestringrequired

    Further nesting omitted

  • countintegerrequired

    Further nesting omitted

  • pending_localesarrayrequired
  • Each itemstring
  • fallback_localesarrayrequired
  • Each itemstring
  • anyOf 2null
  • sendingobjectrequired
  • route_kindstring | null
  • sending_stream_idstring | null

    format: "uuid"

  • banger_send_limitinteger | string | null
  • daily_send_limitinteger | string | null
  • usedinteger | string | null
  • daily_usedinteger | string | null
  • delivery_paceunspecifiedrequired
  • anyOf 1object
  • daysintegerrequired
  • daily_limitintegerrequired
  • messagestringrequired
  • anyOf 2null
  • approval_requirementsobjectrequired
  • dispositionstringrequired

    enum: "automatic", "human_required"

  • recipient_countinteger | nullrequired
  • reasonsarrayrequired
  • Each itemstring
  • checksarrayrequired
  • Each itemstring
  • footerobjectrequired
  • identity_presentbooleanrequired
  • address_presentbooleanrequired
  • checks_are_advisorybooleanrequired

    const: true

  • next_actionstringrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/broadcasts/{broadcastId}/readiness' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
GET/v1/workspaces/{workspaceId}/broadcasts/{broadcastId}/recipients

listBroadcastRecipients

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

broadcastId
path · required
  • valuestring

    format: "uuid"

cursor
query
  • valuestring

    minLength: 0 · maxLength: 1024

limit
query
  • valueinteger

    minimum: 1 · maximum: 100

status
query
  • valuestring

    enum: "pending", "queued", "sent", "delivered", "failed", "skipped", "bounced", "complained"

Request body

No request body is specified in the contract.

Success response 200

Canonical read-back or idempotent receipt. Provider acceptance is sent; delivered requires a delivery event and does not prove inbox placement.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • contact_idstring | null

    format: "uuid"

  • recipient_emailstring
  • recipient_namestring | null
  • recipient_hashstring
  • statusstring
  • dispatch_statusstring
  • command_idstring | null

    format: "uuid"

  • error_codestring | null
  • created_atstring

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • delivery_statestring | null
  • provider_message_keystring | null
  • last_event_atstring | null

    format: "date-time"

  • first_delivered_atstring | null

    format: "date-time"

  • first_opened_atstring | null

    format: "date-time"

  • first_clicked_atstring | null

    format: "date-time"

  • first_human_likely_opened_atstring | null

    format: "date-time"

  • first_human_likely_clicked_atstring | null

    format: "date-time"

  • first_replied_atstring | null

    format: "date-time"

  • machine_open_countinteger
  • machine_click_countinteger
  • privacy_proxy_open_countinteger
  • unknown_open_countinteger
  • unknown_click_countinteger
  • first_unsubscribed_atstring | null

    format: "date-time"

  • pageobjectrequired
  • next_cursorstring
  • has_morebooleanrequired
  • delivery_semanticsstringrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/broadcasts/{broadcastId}/recipients?cursor=example&limit=1&status=pending' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
GET/v1/workspaces/{workspaceId}/broadcasts/{broadcastId}/timeline

listBroadcastTimeline

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

broadcastId
path · required
  • valuestring

    format: "uuid"

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

listJourneys

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

status
query
  • valuestring

    enum: "draft", "discovered", "active", "paused", "archived"

trigger_kind
query
  • valuestring
testing
query
  • valuestring

    enum: "1"

q
query
  • valuestring

    maxLength: 200

Request body

No request body is specified in the contract.

Success response 200

Product Journeys.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemunspecified
  • allOf 1object

    No additional properties

  • namestringrequired

    minLength: 1 · maxLength: 200

  • descriptionstring

    maxLength: 2000

  • mailbox_idstring

    format: "uuid"

  • from_local_partstring

    maxLength: 64 · pattern: "^[a-z0-9][a-z0-9._+-]{0,62}$"

  • triggerobjectrequired
  • kindstringrequired

    enum: "manual", "contact_created", "audience_joined", "event", "schedule", "inbound_email", "api"

  • connection_idstring

    format: "uuid"

  • configobject
  • eventstring

    Further nesting omitted

  • once_per_personboolean

    Each person enters once. Set false to let people re-enter after they finish.

    default: true

    Further nesting omitted

  • reentry_daysinteger

    With once_per_person false, days after a person's last entry before they may enter again.

    minimum: 1 · maximum: 365

    Further nesting omitted

  • Additional propertyAny value
  • conditionsarray
  • Each itemobject

    Further nesting omitted

  • audienceobject
  • Additional propertyAny value
  • goalobject

    No additional properties

  • kindstringrequired

    enum: "none", "event", "reply", "conversion"

  • connection_idstring

    format: "uuid"

  • configobjectrequired
  • Additional propertyAny value
  • exitobject

    No additional properties

  • on_replyboolean

    default: true

  • on_unsubscribeboolean

    default: true

  • on_suppressionboolean

    default: true

  • eventstring

    maxLength: 200

  • approval_modestring

    enum: "policy", "required"

  • apiobject
  • keystring

    maxLength: 100

  • content_modestring

    enum: "code", "managed"

  • identitystring

    maxLength: 300

  • managed_contentobject

    Create-only shortcut: atomically save a source-managed email draft and a Journey whose email step references it. Missing target languages queue for free translation; this does not publish or activate the Journey.

    No additional properties

  • source_localestring

    Canonical BCP 47 source locale; inherits product settings when omitted.

  • configured_localesarray

    Source plus target locales; omitted source is added by the server.

    maxItems: 100 · uniqueItems: true

  • Each itemstring

    Further nesting omitted

  • fallback_localestring
  • layout_idstring

    Selected reusable layout; the server snapshots its published revision into this content revision.

    format: "uuid"

  • localization_policyobject

    No additional properties

  • manual_reviewboolean

    default: false

    Further nesting omitted

  • journey_translationobject

    Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.

    No additional properties

    Further nesting omitted

  • sourceobjectrequired

    No additional properties

  • subjectstringrequired

    minLength: 1 · maxLength: 100000

    Further nesting omitted

  • preheaderstring

    maxLength: 100000

    Further nesting omitted

  • body_textstring

    Accepted for source compatibility; rendered plain text derives from final HTML.

    maxLength: 100000

    Further nesting omitted

  • body_htmlstringrequired

    minLength: 1 · maxLength: 100000

    Further nesting omitted

  • layoutstring

    Must contain one {{ content }} slot.

    maxLength: 100000

    Further nesting omitted

  • variantsobject

    Optional source versions. Every version is translated automatically in the same revision.

    Further nesting omitted

  • variablesobjectrequired

    Further nesting omitted

  • samplesobject

    Named sample value sets for preview and source validation.

  • Additional propertyobject

    Further nesting omitted

  • translationsobject

    Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.

  • Additional propertyobject

    Further nesting omitted

  • stepsarrayrequired

    maxItems: 100

  • Each itemobject

    No additional properties

  • idstring

    format: "uuid"

    Further nesting omitted

  • positioninteger

    minimum: 1 · maximum: 100

    Further nesting omitted

  • kindstringrequired

    enum: "email", "wait", "condition", "action", "split"

    Further nesting omitted

  • namestringrequired

    minLength: 1 · maxLength: 200

    Further nesting omitted

  • managed_contentobject

    Typed source contract and draft/published revision identity for an email step.

    Further nesting omitted

  • configobjectrequired

    Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.

    Further nesting omitted

  • armsarray

    minItems: 2 · maxItems: 4

    Further nesting omitted

  • allOf 2object
  • idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "draft", "discovered", "active", "paused", "archived"

  • api_keystring | null
  • content_modestring | null

    enum: "code", "managed", null

  • identitystring | null
  • identity_aliasesarray
  • Each itemstring
  • samplesarray
  • Each itemobject
  • Additional propertyAny value
  • versionintegerrequired

    minimum: 1

  • statsobjectrequired
  • Additional propertyAny value
  • stepStatsarray
  • Each itemobject
  • Additional propertyAny value
  • armStatsarray
  • Each itemobject
  • Additional propertyAny value
  • healthobjectrequired
  • Additional propertyAny value
  • indicatorobjectrequired
  • Additional propertyAny value
  • sparklinearrayrequired
  • Each itemnumber
  • activated_atstring | null

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • last_activity_atstring | null

    format: "date-time"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys?status=draft&trigger_kind=example&testing=1&q=example' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/journeys

createJourney

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

Request body required

application/json

  • valueobject

    No additional properties

  • namestringrequired

    minLength: 1 · maxLength: 200

  • descriptionstring

    maxLength: 2000

  • mailbox_idstring

    format: "uuid"

  • from_local_partstring

    maxLength: 64 · pattern: "^[a-z0-9][a-z0-9._+-]{0,62}$"

  • triggerobjectrequired
  • kindstringrequired

    enum: "manual", "contact_created", "audience_joined", "event", "schedule", "inbound_email", "api"

  • connection_idstring

    format: "uuid"

  • configobject
  • eventstring
  • once_per_personboolean

    Each person enters once. Set false to let people re-enter after they finish.

    default: true

  • reentry_daysinteger

    With once_per_person false, days after a person's last entry before they may enter again.

    minimum: 1 · maximum: 365

  • Additional propertyAny value
  • conditionsarray
  • Each itemobject
  • Additional propertyAny value
  • audienceobject
  • Additional propertyAny value
  • goalobject

    No additional properties

  • kindstringrequired

    enum: "none", "event", "reply", "conversion"

  • connection_idstring

    format: "uuid"

  • configobjectrequired
  • Additional propertyAny value
  • exitobject

    No additional properties

  • on_replyboolean

    default: true

  • on_unsubscribeboolean

    default: true

  • on_suppressionboolean

    default: true

  • eventstring

    maxLength: 200

  • approval_modestring

    enum: "policy", "required"

  • apiobject
  • keystring

    maxLength: 100

  • content_modestring

    enum: "code", "managed"

  • identitystring

    maxLength: 300

  • managed_contentobject

    Create-only shortcut: atomically save a source-managed email draft and a Journey whose email step references it. Missing target languages queue for free translation; this does not publish or activate the Journey.

    No additional properties

  • source_localestring

    Canonical BCP 47 source locale; inherits product settings when omitted.

  • configured_localesarray

    Source plus target locales; omitted source is added by the server.

    maxItems: 100 · uniqueItems: true

  • Each itemstring
  • fallback_localestring
  • layout_idstring

    Selected reusable layout; the server snapshots its published revision into this content revision.

    format: "uuid"

  • localization_policyobject

    No additional properties

  • manual_reviewboolean

    default: false

  • journey_translationobject

    Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.

    No additional properties

  • modestringrequired

    enum: "fallback", "wait"

  • max_wait_secondsinteger

    minimum: 60 · maximum: 86400

  • on_timeoutstring

    enum: "fallback", "discard"

  • sourceobjectrequired

    No additional properties

  • subjectstringrequired

    minLength: 1 · maxLength: 100000

  • preheaderstring

    maxLength: 100000

  • body_textstring

    Accepted for source compatibility; rendered plain text derives from final HTML.

    maxLength: 100000

  • body_htmlstringrequired

    minLength: 1 · maxLength: 100000

  • layoutstring

    Must contain one {{ content }} slot.

    maxLength: 100000

  • variantsobject

    Optional source versions. Every version is translated automatically in the same revision.

  • Additional propertyobject

    No additional properties

  • subjectstringrequired

    minLength: 1 · maxLength: 100000

  • preheaderstring

    maxLength: 100000

  • body_htmlstringrequired

    minLength: 1 · maxLength: 100000

  • body_textstring

    maxLength: 100000

  • layoutstring

    maxLength: 100000

  • variablesobjectrequired
  • Additional propertyunspecified

    Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.

  • oneOf 1object

    No additional properties

  • typestringrequired

    enum: "string", "text", "url", "image_url", "html", "date", "datetime", "number", "boolean", "money"

    Further nesting omitted

  • requiredboolean

    Further nesting omitted

  • descriptionstring

    maxLength: 2000

    Further nesting omitted

  • defaultunspecified

    Must match the field type.

    Further nesting omitted

  • oneOf 2object

    No additional properties

  • typeunspecifiedrequired

    const: "object"

    Further nesting omitted

  • requiredboolean

    Further nesting omitted

  • descriptionstring

    maxLength: 2000

    Further nesting omitted

  • defaultobject

    Further nesting omitted

  • propertiesobjectrequired

    Further nesting omitted

  • oneOf 3object

    No additional properties

  • typeunspecifiedrequired

    const: "list"

    Further nesting omitted

  • requiredboolean

    Further nesting omitted

  • descriptionstring

    maxLength: 2000

    Further nesting omitted

  • defaultarray

    Further nesting omitted

  • itemsunspecifiedrequired

    Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.

    Further nesting omitted

  • samplesobject

    Named sample value sets for preview and source validation.

  • Additional propertyobject
  • Additional propertyAny value
  • translationsobject

    Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.

  • Additional propertyobject
  • Additional propertystring
  • stepsarrayrequired

    maxItems: 100

  • Each itemobject

    No additional properties

  • idstring

    format: "uuid"

  • positioninteger

    minimum: 1 · maximum: 100

  • kindstringrequired

    enum: "email", "wait", "condition", "action", "split"

  • namestringrequired

    minLength: 1 · maxLength: 200

  • managed_contentobject

    Typed source contract and draft/published revision identity for an email step.

  • idstring

    format: "uuid"

  • versioninteger
  • draft_revision_idstring | null

    format: "uuid"

  • published_revision_idstring | null

    format: "uuid"

  • published_publication_idstring | null

    format: "uuid"

  • source_revision_idstring | null

    format: "uuid"

  • layout_revision_idstring | null

    format: "uuid"

  • published_layout_revision_idstring | null

    format: "uuid"

  • source_localestring | null
  • configured_localesarray
  • Each itemstring
  • variablesobject
  • Additional propertyAny value
  • published_variablesobject
  • Additional propertyAny value
  • configobjectrequired

    Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.

  • Additional propertyAny value
  • armsarray

    minItems: 2 · maxItems: 4

  • Each itemobject

    No additional properties

  • keystringrequired

    enum: "A", "B", "C", "D"

  • labelstringrequired

    maxLength: 120

  • allocationnumberrequired

    minimum: 0 · maximum: 100

  • stepsarrayrequired
  • Each itemobject

    No additional properties

    Further nesting omitted

Success response 201

Journey created.

application/json

  • valueobject
  • dataunspecified
  • allOf 1object

    No additional properties

  • namestringrequired

    minLength: 1 · maxLength: 200

  • descriptionstring

    maxLength: 2000

  • mailbox_idstring

    format: "uuid"

  • from_local_partstring

    maxLength: 64 · pattern: "^[a-z0-9][a-z0-9._+-]{0,62}$"

  • triggerobjectrequired
  • kindstringrequired

    enum: "manual", "contact_created", "audience_joined", "event", "schedule", "inbound_email", "api"

  • connection_idstring

    format: "uuid"

  • configobject
  • eventstring
  • once_per_personboolean

    Each person enters once. Set false to let people re-enter after they finish.

    default: true

  • reentry_daysinteger

    With once_per_person false, days after a person's last entry before they may enter again.

    minimum: 1 · maximum: 365

  • Additional propertyAny value
  • conditionsarray
  • Each itemobject
  • Additional propertyAny value
  • audienceobject
  • Additional propertyAny value
  • goalobject

    No additional properties

  • kindstringrequired

    enum: "none", "event", "reply", "conversion"

  • connection_idstring

    format: "uuid"

  • configobjectrequired
  • Additional propertyAny value
  • exitobject

    No additional properties

  • on_replyboolean

    default: true

  • on_unsubscribeboolean

    default: true

  • on_suppressionboolean

    default: true

  • eventstring

    maxLength: 200

  • approval_modestring

    enum: "policy", "required"

  • apiobject
  • keystring

    maxLength: 100

  • content_modestring

    enum: "code", "managed"

  • identitystring

    maxLength: 300

  • managed_contentobject

    Create-only shortcut: atomically save a source-managed email draft and a Journey whose email step references it. Missing target languages queue for free translation; this does not publish or activate the Journey.

    No additional properties

  • source_localestring

    Canonical BCP 47 source locale; inherits product settings when omitted.

  • configured_localesarray

    Source plus target locales; omitted source is added by the server.

    maxItems: 100 · uniqueItems: true

  • Each itemstring
  • fallback_localestring
  • layout_idstring

    Selected reusable layout; the server snapshots its published revision into this content revision.

    format: "uuid"

  • localization_policyobject

    No additional properties

  • manual_reviewboolean

    default: false

  • journey_translationobject

    Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.

    No additional properties

  • modestringrequired

    enum: "fallback", "wait"

    Further nesting omitted

  • max_wait_secondsinteger

    minimum: 60 · maximum: 86400

    Further nesting omitted

  • on_timeoutstring

    enum: "fallback", "discard"

    Further nesting omitted

  • sourceobjectrequired

    No additional properties

  • subjectstringrequired

    minLength: 1 · maxLength: 100000

  • preheaderstring

    maxLength: 100000

  • body_textstring

    Accepted for source compatibility; rendered plain text derives from final HTML.

    maxLength: 100000

  • body_htmlstringrequired

    minLength: 1 · maxLength: 100000

  • layoutstring

    Must contain one {{ content }} slot.

    maxLength: 100000

  • variantsobject

    Optional source versions. Every version is translated automatically in the same revision.

  • Additional propertyobject

    No additional properties

    Further nesting omitted

  • variablesobjectrequired
  • Additional propertyunspecified

    Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.

    Further nesting omitted

  • samplesobject

    Named sample value sets for preview and source validation.

  • Additional propertyobject
  • Additional propertyAny value
  • translationsobject

    Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.

  • Additional propertyobject
  • Additional propertystring

    Further nesting omitted

  • stepsarrayrequired

    maxItems: 100

  • Each itemobject

    No additional properties

  • idstring

    format: "uuid"

  • positioninteger

    minimum: 1 · maximum: 100

  • kindstringrequired

    enum: "email", "wait", "condition", "action", "split"

  • namestringrequired

    minLength: 1 · maxLength: 200

  • managed_contentobject

    Typed source contract and draft/published revision identity for an email step.

  • idstring

    format: "uuid"

    Further nesting omitted

  • versioninteger

    Further nesting omitted

  • draft_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_publication_idstring | null

    format: "uuid"

    Further nesting omitted

  • source_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • layout_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_layout_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • source_localestring | null

    Further nesting omitted

  • configured_localesarray

    Further nesting omitted

  • variablesobject

    Further nesting omitted

  • published_variablesobject

    Further nesting omitted

  • configobjectrequired

    Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.

  • Additional propertyAny value
  • armsarray

    minItems: 2 · maxItems: 4

  • Each itemobject

    No additional properties

    Further nesting omitted

  • allOf 2object
  • idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "draft", "discovered", "active", "paused", "archived"

  • api_keystring | null
  • content_modestring | null

    enum: "code", "managed", null

  • identitystring | null
  • identity_aliasesarray
  • Each itemstring
  • samplesarray
  • Each itemobject
  • Additional propertyAny value
  • versionintegerrequired

    minimum: 1

  • statsobjectrequired
  • Additional propertyAny value
  • stepStatsarray
  • Each itemobject
  • Additional propertyAny value
  • armStatsarray
  • Each itemobject
  • Additional propertyAny value
  • healthobjectrequired
  • Additional propertyAny value
  • indicatorobjectrequired
  • Additional propertyAny value
  • sparklinearrayrequired
  • Each itemnumber
  • activated_atstring | null

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • last_activity_atstring | null

    format: "date-time"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Idempotency-Key: examplexxxxxxxxx' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "name": "example",
  "description": "example",
  "mailbox_id": "00000000-0000-4000-8000-000000000001",
  "from_local_part": "example",
  "trigger": {
    "kind": "manual",
    "connection_id": "00000000-0000-4000-8000-000000000001",
    "config": {
      "event": "example",
      "once_per_person": true,
      "reentry_days": 1
    },
    "conditions": [
      {}
    ]
  },
  "audience": {},
  "goal": {
    "kind": "none",
    "connection_id": "00000000-0000-4000-8000-000000000001",
    "config": {}
  },
  "exit": {
    "on_reply": true,
    "on_unsubscribe": true,
    "on_suppression": true,
    "event": "example"
  },
  "approval_mode": "policy",
  "api": {
    "key": "example",
    "content_mode": "code",
    "identity": "example"
  },
  "managed_content": {
    "source_locale": "example",
    "configured_locales": [
      "example"
    ],
    "fallback_locale": "example",
    "layout_id": "00000000-0000-4000-8000-000000000001",
    "localization_policy": {
      "manual_review": false,
      "journey_translation": {
        "mode": "fallback",
        "max_wait_seconds": 60,
        "on_timeout": "fallback"
      }
    },
    "source": {
      "subject": "example",
      "preheader": "example",
      "body_text": "example",
      "body_html": "example",
      "layout": "example",
      "variants": {},
      "variables": {}
    },
    "samples": {},
    "translations": {}
  },
  "steps": [
    {
      "id": "00000000-0000-4000-8000-000000000001",
      "position": 1,
      "kind": "email",
      "name": "example",
      "config": {},
      "arms": [
        {
          "key": "A",
          "label": "example",
          "allocation": 0,
          "steps": [
            {
              "id": null,
              "position": null,
              "kind": null,
              "name": null,
              "config": null,
              "arms": null
            }
          ]
        }
      ]
    }
  ]
}'
GET/v1/workspaces/{workspaceId}/journeys/{journeyId}

getJourney

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

journeyId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Journey definition, enrollment activity, and tests.

application/json

  • valueobject
  • dataunspecified
  • allOf 1object

    No additional properties

  • namestringrequired

    minLength: 1 · maxLength: 200

  • descriptionstring

    maxLength: 2000

  • mailbox_idstring

    format: "uuid"

  • from_local_partstring

    maxLength: 64 · pattern: "^[a-z0-9][a-z0-9._+-]{0,62}$"

  • triggerobjectrequired
  • kindstringrequired

    enum: "manual", "contact_created", "audience_joined", "event", "schedule", "inbound_email", "api"

  • connection_idstring

    format: "uuid"

  • configobject
  • eventstring
  • once_per_personboolean

    Each person enters once. Set false to let people re-enter after they finish.

    default: true

  • reentry_daysinteger

    With once_per_person false, days after a person's last entry before they may enter again.

    minimum: 1 · maximum: 365

  • Additional propertyAny value
  • conditionsarray
  • Each itemobject
  • Additional propertyAny value
  • audienceobject
  • Additional propertyAny value
  • goalobject

    No additional properties

  • kindstringrequired

    enum: "none", "event", "reply", "conversion"

  • connection_idstring

    format: "uuid"

  • configobjectrequired
  • Additional propertyAny value
  • exitobject

    No additional properties

  • on_replyboolean

    default: true

  • on_unsubscribeboolean

    default: true

  • on_suppressionboolean

    default: true

  • eventstring

    maxLength: 200

  • approval_modestring

    enum: "policy", "required"

  • apiobject
  • keystring

    maxLength: 100

  • content_modestring

    enum: "code", "managed"

  • identitystring

    maxLength: 300

  • managed_contentobject

    Create-only shortcut: atomically save a source-managed email draft and a Journey whose email step references it. Missing target languages queue for free translation; this does not publish or activate the Journey.

    No additional properties

  • source_localestring

    Canonical BCP 47 source locale; inherits product settings when omitted.

  • configured_localesarray

    Source plus target locales; omitted source is added by the server.

    maxItems: 100 · uniqueItems: true

  • Each itemstring
  • fallback_localestring
  • layout_idstring

    Selected reusable layout; the server snapshots its published revision into this content revision.

    format: "uuid"

  • localization_policyobject

    No additional properties

  • manual_reviewboolean

    default: false

  • journey_translationobject

    Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.

    No additional properties

  • modestringrequired

    enum: "fallback", "wait"

    Further nesting omitted

  • max_wait_secondsinteger

    minimum: 60 · maximum: 86400

    Further nesting omitted

  • on_timeoutstring

    enum: "fallback", "discard"

    Further nesting omitted

  • sourceobjectrequired

    No additional properties

  • subjectstringrequired

    minLength: 1 · maxLength: 100000

  • preheaderstring

    maxLength: 100000

  • body_textstring

    Accepted for source compatibility; rendered plain text derives from final HTML.

    maxLength: 100000

  • body_htmlstringrequired

    minLength: 1 · maxLength: 100000

  • layoutstring

    Must contain one {{ content }} slot.

    maxLength: 100000

  • variantsobject

    Optional source versions. Every version is translated automatically in the same revision.

  • Additional propertyobject

    No additional properties

    Further nesting omitted

  • variablesobjectrequired
  • Additional propertyunspecified

    Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.

    Further nesting omitted

  • samplesobject

    Named sample value sets for preview and source validation.

  • Additional propertyobject
  • Additional propertyAny value
  • translationsobject

    Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.

  • Additional propertyobject
  • Additional propertystring

    Further nesting omitted

  • stepsarrayrequired

    maxItems: 100

  • Each itemobject

    No additional properties

  • idstring

    format: "uuid"

  • positioninteger

    minimum: 1 · maximum: 100

  • kindstringrequired

    enum: "email", "wait", "condition", "action", "split"

  • namestringrequired

    minLength: 1 · maxLength: 200

  • managed_contentobject

    Typed source contract and draft/published revision identity for an email step.

  • idstring

    format: "uuid"

    Further nesting omitted

  • versioninteger

    Further nesting omitted

  • draft_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_publication_idstring | null

    format: "uuid"

    Further nesting omitted

  • source_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • layout_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_layout_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • source_localestring | null

    Further nesting omitted

  • configured_localesarray

    Further nesting omitted

  • variablesobject

    Further nesting omitted

  • published_variablesobject

    Further nesting omitted

  • configobjectrequired

    Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.

  • Additional propertyAny value
  • armsarray

    minItems: 2 · maxItems: 4

  • Each itemobject

    No additional properties

    Further nesting omitted

  • allOf 2object
  • idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "draft", "discovered", "active", "paused", "archived"

  • api_keystring | null
  • content_modestring | null

    enum: "code", "managed", null

  • identitystring | null
  • identity_aliasesarray
  • Each itemstring
  • samplesarray
  • Each itemobject
  • Additional propertyAny value
  • versionintegerrequired

    minimum: 1

  • statsobjectrequired
  • Additional propertyAny value
  • stepStatsarray
  • Each itemobject
  • Additional propertyAny value
  • armStatsarray
  • Each itemobject
  • Additional propertyAny value
  • healthobjectrequired
  • Additional propertyAny value
  • indicatorobjectrequired
  • Additional propertyAny value
  • sparklinearrayrequired
  • Each itemnumber
  • activated_atstring | null

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • last_activity_atstring | null

    format: "date-time"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}' \
  --header "Authorization: Bearer $BANGER_API_KEY"
PUT/v1/workspaces/{workspaceId}/journeys/{journeyId}

updateJourney

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

journeyId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • namestringrequired

    minLength: 1 · maxLength: 200

  • descriptionstring

    maxLength: 2000

  • mailbox_idstring

    format: "uuid"

  • from_local_partstring

    maxLength: 64 · pattern: "^[a-z0-9][a-z0-9._+-]{0,62}$"

  • triggerobjectrequired
  • kindstringrequired

    enum: "manual", "contact_created", "audience_joined", "event", "schedule", "inbound_email", "api"

  • connection_idstring

    format: "uuid"

  • configobject
  • eventstring
  • once_per_personboolean

    Each person enters once. Set false to let people re-enter after they finish.

    default: true

  • reentry_daysinteger

    With once_per_person false, days after a person's last entry before they may enter again.

    minimum: 1 · maximum: 365

  • Additional propertyAny value
  • conditionsarray
  • Each itemobject
  • Additional propertyAny value
  • audienceobject
  • Additional propertyAny value
  • goalobject

    No additional properties

  • kindstringrequired

    enum: "none", "event", "reply", "conversion"

  • connection_idstring

    format: "uuid"

  • configobjectrequired
  • Additional propertyAny value
  • exitobject

    No additional properties

  • on_replyboolean

    default: true

  • on_unsubscribeboolean

    default: true

  • on_suppressionboolean

    default: true

  • eventstring

    maxLength: 200

  • approval_modestring

    enum: "policy", "required"

  • apiobject
  • keystring

    maxLength: 100

  • content_modestring

    enum: "code", "managed"

  • identitystring

    maxLength: 300

  • managed_contentobject

    Create-only shortcut: atomically save a source-managed email draft and a Journey whose email step references it. Missing target languages queue for free translation; this does not publish or activate the Journey.

    No additional properties

  • source_localestring

    Canonical BCP 47 source locale; inherits product settings when omitted.

  • configured_localesarray

    Source plus target locales; omitted source is added by the server.

    maxItems: 100 · uniqueItems: true

  • Each itemstring
  • fallback_localestring
  • layout_idstring

    Selected reusable layout; the server snapshots its published revision into this content revision.

    format: "uuid"

  • localization_policyobject

    No additional properties

  • manual_reviewboolean

    default: false

  • journey_translationobject

    Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.

    No additional properties

  • modestringrequired

    enum: "fallback", "wait"

  • max_wait_secondsinteger

    minimum: 60 · maximum: 86400

  • on_timeoutstring

    enum: "fallback", "discard"

  • sourceobjectrequired

    No additional properties

  • subjectstringrequired

    minLength: 1 · maxLength: 100000

  • preheaderstring

    maxLength: 100000

  • body_textstring

    Accepted for source compatibility; rendered plain text derives from final HTML.

    maxLength: 100000

  • body_htmlstringrequired

    minLength: 1 · maxLength: 100000

  • layoutstring

    Must contain one {{ content }} slot.

    maxLength: 100000

  • variantsobject

    Optional source versions. Every version is translated automatically in the same revision.

  • Additional propertyobject

    No additional properties

  • subjectstringrequired

    minLength: 1 · maxLength: 100000

  • preheaderstring

    maxLength: 100000

  • body_htmlstringrequired

    minLength: 1 · maxLength: 100000

  • body_textstring

    maxLength: 100000

  • layoutstring

    maxLength: 100000

  • variablesobjectrequired
  • Additional propertyunspecified

    Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.

  • oneOf 1object

    No additional properties

  • typestringrequired

    enum: "string", "text", "url", "image_url", "html", "date", "datetime", "number", "boolean", "money"

    Further nesting omitted

  • requiredboolean

    Further nesting omitted

  • descriptionstring

    maxLength: 2000

    Further nesting omitted

  • defaultunspecified

    Must match the field type.

    Further nesting omitted

  • oneOf 2object

    No additional properties

  • typeunspecifiedrequired

    const: "object"

    Further nesting omitted

  • requiredboolean

    Further nesting omitted

  • descriptionstring

    maxLength: 2000

    Further nesting omitted

  • defaultobject

    Further nesting omitted

  • propertiesobjectrequired

    Further nesting omitted

  • oneOf 3object

    No additional properties

  • typeunspecifiedrequired

    const: "list"

    Further nesting omitted

  • requiredboolean

    Further nesting omitted

  • descriptionstring

    maxLength: 2000

    Further nesting omitted

  • defaultarray

    Further nesting omitted

  • itemsunspecifiedrequired

    Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.

    Further nesting omitted

  • samplesobject

    Named sample value sets for preview and source validation.

  • Additional propertyobject
  • Additional propertyAny value
  • translationsobject

    Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.

  • Additional propertyobject
  • Additional propertystring
  • stepsarrayrequired

    maxItems: 100

  • Each itemobject

    No additional properties

  • idstring

    format: "uuid"

  • positioninteger

    minimum: 1 · maximum: 100

  • kindstringrequired

    enum: "email", "wait", "condition", "action", "split"

  • namestringrequired

    minLength: 1 · maxLength: 200

  • managed_contentobject

    Typed source contract and draft/published revision identity for an email step.

  • idstring

    format: "uuid"

  • versioninteger
  • draft_revision_idstring | null

    format: "uuid"

  • published_revision_idstring | null

    format: "uuid"

  • published_publication_idstring | null

    format: "uuid"

  • source_revision_idstring | null

    format: "uuid"

  • layout_revision_idstring | null

    format: "uuid"

  • published_layout_revision_idstring | null

    format: "uuid"

  • source_localestring | null
  • configured_localesarray
  • Each itemstring
  • variablesobject
  • Additional propertyAny value
  • published_variablesobject
  • Additional propertyAny value
  • configobjectrequired

    Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.

  • Additional propertyAny value
  • armsarray

    minItems: 2 · maxItems: 4

  • Each itemobject

    No additional properties

  • keystringrequired

    enum: "A", "B", "C", "D"

  • labelstringrequired

    maxLength: 120

  • allocationnumberrequired

    minimum: 0 · maximum: 100

  • stepsarrayrequired
  • Each itemobject

    No additional properties

    Further nesting omitted

Success response 200

Journey updated.

application/json

  • valueobject
  • dataunspecified
  • allOf 1object

    No additional properties

  • namestringrequired

    minLength: 1 · maxLength: 200

  • descriptionstring

    maxLength: 2000

  • mailbox_idstring

    format: "uuid"

  • from_local_partstring

    maxLength: 64 · pattern: "^[a-z0-9][a-z0-9._+-]{0,62}$"

  • triggerobjectrequired
  • kindstringrequired

    enum: "manual", "contact_created", "audience_joined", "event", "schedule", "inbound_email", "api"

  • connection_idstring

    format: "uuid"

  • configobject
  • eventstring
  • once_per_personboolean

    Each person enters once. Set false to let people re-enter after they finish.

    default: true

  • reentry_daysinteger

    With once_per_person false, days after a person's last entry before they may enter again.

    minimum: 1 · maximum: 365

  • Additional propertyAny value
  • conditionsarray
  • Each itemobject
  • Additional propertyAny value
  • audienceobject
  • Additional propertyAny value
  • goalobject

    No additional properties

  • kindstringrequired

    enum: "none", "event", "reply", "conversion"

  • connection_idstring

    format: "uuid"

  • configobjectrequired
  • Additional propertyAny value
  • exitobject

    No additional properties

  • on_replyboolean

    default: true

  • on_unsubscribeboolean

    default: true

  • on_suppressionboolean

    default: true

  • eventstring

    maxLength: 200

  • approval_modestring

    enum: "policy", "required"

  • apiobject
  • keystring

    maxLength: 100

  • content_modestring

    enum: "code", "managed"

  • identitystring

    maxLength: 300

  • managed_contentobject

    Create-only shortcut: atomically save a source-managed email draft and a Journey whose email step references it. Missing target languages queue for free translation; this does not publish or activate the Journey.

    No additional properties

  • source_localestring

    Canonical BCP 47 source locale; inherits product settings when omitted.

  • configured_localesarray

    Source plus target locales; omitted source is added by the server.

    maxItems: 100 · uniqueItems: true

  • Each itemstring
  • fallback_localestring
  • layout_idstring

    Selected reusable layout; the server snapshots its published revision into this content revision.

    format: "uuid"

  • localization_policyobject

    No additional properties

  • manual_reviewboolean

    default: false

  • journey_translationobject

    Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.

    No additional properties

  • modestringrequired

    enum: "fallback", "wait"

    Further nesting omitted

  • max_wait_secondsinteger

    minimum: 60 · maximum: 86400

    Further nesting omitted

  • on_timeoutstring

    enum: "fallback", "discard"

    Further nesting omitted

  • sourceobjectrequired

    No additional properties

  • subjectstringrequired

    minLength: 1 · maxLength: 100000

  • preheaderstring

    maxLength: 100000

  • body_textstring

    Accepted for source compatibility; rendered plain text derives from final HTML.

    maxLength: 100000

  • body_htmlstringrequired

    minLength: 1 · maxLength: 100000

  • layoutstring

    Must contain one {{ content }} slot.

    maxLength: 100000

  • variantsobject

    Optional source versions. Every version is translated automatically in the same revision.

  • Additional propertyobject

    No additional properties

    Further nesting omitted

  • variablesobjectrequired
  • Additional propertyunspecified

    Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.

    Further nesting omitted

  • samplesobject

    Named sample value sets for preview and source validation.

  • Additional propertyobject
  • Additional propertyAny value
  • translationsobject

    Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.

  • Additional propertyobject
  • Additional propertystring

    Further nesting omitted

  • stepsarrayrequired

    maxItems: 100

  • Each itemobject

    No additional properties

  • idstring

    format: "uuid"

  • positioninteger

    minimum: 1 · maximum: 100

  • kindstringrequired

    enum: "email", "wait", "condition", "action", "split"

  • namestringrequired

    minLength: 1 · maxLength: 200

  • managed_contentobject

    Typed source contract and draft/published revision identity for an email step.

  • idstring

    format: "uuid"

    Further nesting omitted

  • versioninteger

    Further nesting omitted

  • draft_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_publication_idstring | null

    format: "uuid"

    Further nesting omitted

  • source_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • layout_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_layout_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • source_localestring | null

    Further nesting omitted

  • configured_localesarray

    Further nesting omitted

  • variablesobject

    Further nesting omitted

  • published_variablesobject

    Further nesting omitted

  • configobjectrequired

    Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.

  • Additional propertyAny value
  • armsarray

    minItems: 2 · maxItems: 4

  • Each itemobject

    No additional properties

    Further nesting omitted

  • allOf 2object
  • idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "draft", "discovered", "active", "paused", "archived"

  • api_keystring | null
  • content_modestring | null

    enum: "code", "managed", null

  • identitystring | null
  • identity_aliasesarray
  • Each itemstring
  • samplesarray
  • Each itemobject
  • Additional propertyAny value
  • versionintegerrequired

    minimum: 1

  • statsobjectrequired
  • Additional propertyAny value
  • stepStatsarray
  • Each itemobject
  • Additional propertyAny value
  • armStatsarray
  • Each itemobject
  • Additional propertyAny value
  • healthobjectrequired
  • Additional propertyAny value
  • indicatorobjectrequired
  • Additional propertyAny value
  • sparklinearrayrequired
  • Each itemnumber
  • activated_atstring | null

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • last_activity_atstring | null

    format: "date-time"

curl example

curl --request PUT --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "name": "example",
  "description": "example",
  "mailbox_id": "00000000-0000-4000-8000-000000000001",
  "from_local_part": "example",
  "trigger": {
    "kind": "manual",
    "connection_id": "00000000-0000-4000-8000-000000000001",
    "config": {
      "event": "example",
      "once_per_person": true,
      "reentry_days": 1
    },
    "conditions": [
      {}
    ]
  },
  "audience": {},
  "goal": {
    "kind": "none",
    "connection_id": "00000000-0000-4000-8000-000000000001",
    "config": {}
  },
  "exit": {
    "on_reply": true,
    "on_unsubscribe": true,
    "on_suppression": true,
    "event": "example"
  },
  "approval_mode": "policy",
  "api": {
    "key": "example",
    "content_mode": "code",
    "identity": "example"
  },
  "managed_content": {
    "source_locale": "example",
    "configured_locales": [
      "example"
    ],
    "fallback_locale": "example",
    "layout_id": "00000000-0000-4000-8000-000000000001",
    "localization_policy": {
      "manual_review": false,
      "journey_translation": {
        "mode": "fallback",
        "max_wait_seconds": 60,
        "on_timeout": "fallback"
      }
    },
    "source": {
      "subject": "example",
      "preheader": "example",
      "body_text": "example",
      "body_html": "example",
      "layout": "example",
      "variants": {},
      "variables": {}
    },
    "samples": {},
    "translations": {}
  },
  "steps": [
    {
      "id": "00000000-0000-4000-8000-000000000001",
      "position": 1,
      "kind": "email",
      "name": "example",
      "config": {},
      "arms": [
        {
          "key": "A",
          "label": "example",
          "allocation": 0,
          "steps": [
            {
              "id": null,
              "position": null,
              "kind": null,
              "name": null,
              "config": null,
              "arms": null
            }
          ]
        }
      ]
    }
  ]
}'
PATCH/v1/workspaces/{workspaceId}/journeys/{journeyId}

Update selected Journey fields while preserving its other definition fields.

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

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

journeyId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • expected_versioninteger

    minimum: 1

  • namestring
  • descriptionstring
  • mailbox_idstring

    format: "uuid"

  • from_local_partstring
  • triggerobject
  • Additional propertyAny value
  • audienceobject
  • Additional propertyAny value
  • goalobject
  • Additional propertyAny value
  • exitobject
  • Additional propertyAny value
  • approval_modestring

    enum: "policy", "required"

  • apiobject
  • Additional propertyAny value
  • stepsarray
  • Each itemobject

    No additional properties

  • idstring

    format: "uuid"

  • positioninteger

    minimum: 1 · maximum: 100

  • kindstringrequired

    enum: "email", "wait", "condition", "action", "split"

  • namestringrequired

    minLength: 1 · maxLength: 200

  • managed_contentobject

    Typed source contract and draft/published revision identity for an email step.

  • idstring

    format: "uuid"

  • versioninteger
  • draft_revision_idstring | null

    format: "uuid"

  • published_revision_idstring | null

    format: "uuid"

  • published_publication_idstring | null

    format: "uuid"

  • source_revision_idstring | null

    format: "uuid"

  • layout_revision_idstring | null

    format: "uuid"

  • published_layout_revision_idstring | null

    format: "uuid"

  • source_localestring | null
  • configured_localesarray
  • Each itemstring
  • variablesobject
  • Additional propertyAny value
  • published_variablesobject
  • Additional propertyAny value
  • configobjectrequired

    Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.

  • Additional propertyAny value
  • armsarray

    minItems: 2 · maxItems: 4

  • Each itemobject

    No additional properties

  • keystringrequired

    enum: "A", "B", "C", "D"

  • labelstringrequired

    maxLength: 120

  • allocationnumberrequired

    minimum: 0 · maximum: 100

  • stepsarrayrequired
  • Each itemobject

    No additional properties

    Further nesting omitted

Success response 200

Journey updated.

application/json

  • valueobject
  • dataunspecifiedrequired
  • allOf 1object

    No additional properties

  • namestringrequired

    minLength: 1 · maxLength: 200

  • descriptionstring

    maxLength: 2000

  • mailbox_idstring

    format: "uuid"

  • from_local_partstring

    maxLength: 64 · pattern: "^[a-z0-9][a-z0-9._+-]{0,62}$"

  • triggerobjectrequired
  • kindstringrequired

    enum: "manual", "contact_created", "audience_joined", "event", "schedule", "inbound_email", "api"

  • connection_idstring

    format: "uuid"

  • configobject
  • eventstring
  • once_per_personboolean

    Each person enters once. Set false to let people re-enter after they finish.

    default: true

  • reentry_daysinteger

    With once_per_person false, days after a person's last entry before they may enter again.

    minimum: 1 · maximum: 365

  • Additional propertyAny value
  • conditionsarray
  • Each itemobject
  • Additional propertyAny value
  • audienceobject
  • Additional propertyAny value
  • goalobject

    No additional properties

  • kindstringrequired

    enum: "none", "event", "reply", "conversion"

  • connection_idstring

    format: "uuid"

  • configobjectrequired
  • Additional propertyAny value
  • exitobject

    No additional properties

  • on_replyboolean

    default: true

  • on_unsubscribeboolean

    default: true

  • on_suppressionboolean

    default: true

  • eventstring

    maxLength: 200

  • approval_modestring

    enum: "policy", "required"

  • apiobject
  • keystring

    maxLength: 100

  • content_modestring

    enum: "code", "managed"

  • identitystring

    maxLength: 300

  • managed_contentobject

    Create-only shortcut: atomically save a source-managed email draft and a Journey whose email step references it. Missing target languages queue for free translation; this does not publish or activate the Journey.

    No additional properties

  • source_localestring

    Canonical BCP 47 source locale; inherits product settings when omitted.

  • configured_localesarray

    Source plus target locales; omitted source is added by the server.

    maxItems: 100 · uniqueItems: true

  • Each itemstring
  • fallback_localestring
  • layout_idstring

    Selected reusable layout; the server snapshots its published revision into this content revision.

    format: "uuid"

  • localization_policyobject

    No additional properties

  • manual_reviewboolean

    default: false

  • journey_translationobject

    Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.

    No additional properties

  • modestringrequired

    enum: "fallback", "wait"

    Further nesting omitted

  • max_wait_secondsinteger

    minimum: 60 · maximum: 86400

    Further nesting omitted

  • on_timeoutstring

    enum: "fallback", "discard"

    Further nesting omitted

  • sourceobjectrequired

    No additional properties

  • subjectstringrequired

    minLength: 1 · maxLength: 100000

  • preheaderstring

    maxLength: 100000

  • body_textstring

    Accepted for source compatibility; rendered plain text derives from final HTML.

    maxLength: 100000

  • body_htmlstringrequired

    minLength: 1 · maxLength: 100000

  • layoutstring

    Must contain one {{ content }} slot.

    maxLength: 100000

  • variantsobject

    Optional source versions. Every version is translated automatically in the same revision.

  • Additional propertyobject

    No additional properties

    Further nesting omitted

  • variablesobjectrequired
  • Additional propertyunspecified

    Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.

    Further nesting omitted

  • samplesobject

    Named sample value sets for preview and source validation.

  • Additional propertyobject
  • Additional propertyAny value
  • translationsobject

    Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.

  • Additional propertyobject
  • Additional propertystring

    Further nesting omitted

  • stepsarrayrequired

    maxItems: 100

  • Each itemobject

    No additional properties

  • idstring

    format: "uuid"

  • positioninteger

    minimum: 1 · maximum: 100

  • kindstringrequired

    enum: "email", "wait", "condition", "action", "split"

  • namestringrequired

    minLength: 1 · maxLength: 200

  • managed_contentobject

    Typed source contract and draft/published revision identity for an email step.

  • idstring

    format: "uuid"

    Further nesting omitted

  • versioninteger

    Further nesting omitted

  • draft_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_publication_idstring | null

    format: "uuid"

    Further nesting omitted

  • source_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • layout_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_layout_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • source_localestring | null

    Further nesting omitted

  • configured_localesarray

    Further nesting omitted

  • variablesobject

    Further nesting omitted

  • published_variablesobject

    Further nesting omitted

  • configobjectrequired

    Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.

  • Additional propertyAny value
  • armsarray

    minItems: 2 · maxItems: 4

  • Each itemobject

    No additional properties

    Further nesting omitted

  • allOf 2object
  • idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "draft", "discovered", "active", "paused", "archived"

  • api_keystring | null
  • content_modestring | null

    enum: "code", "managed", null

  • identitystring | null
  • identity_aliasesarray
  • Each itemstring
  • samplesarray
  • Each itemobject
  • Additional propertyAny value
  • versionintegerrequired

    minimum: 1

  • statsobjectrequired
  • Additional propertyAny value
  • stepStatsarray
  • Each itemobject
  • Additional propertyAny value
  • armStatsarray
  • Each itemobject
  • Additional propertyAny value
  • healthobjectrequired
  • Additional propertyAny value
  • indicatorobjectrequired
  • Additional propertyAny value
  • sparklinearrayrequired
  • Each itemnumber
  • activated_atstring | null

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • last_activity_atstring | null

    format: "date-time"

curl example

curl --request PATCH --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "expected_version": 1,
  "name": "example",
  "description": "example",
  "mailbox_id": "00000000-0000-4000-8000-000000000001",
  "from_local_part": "example",
  "trigger": {},
  "audience": {},
  "goal": {},
  "exit": {},
  "approval_mode": "policy",
  "api": {},
  "steps": [
    {
      "id": "00000000-0000-4000-8000-000000000001",
      "position": 1,
      "kind": "email",
      "name": "example",
      "config": {},
      "arms": [
        {
          "key": "A",
          "label": "example",
          "allocation": 0,
          "steps": [
            {
              "id": null,
              "position": null,
              "kind": null,
              "name": null,
              "config": null,
              "arms": null
            }
          ]
        }
      ]
    }
  ]
}'
DELETE/v1/workspaces/{workspaceId}/journeys/{journeyId}

deleteJourney

Removes the journey from the default list and stops active enrollments by archiving it. Sending history is retained.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

journeyId
path · required
  • valuestring

    format: "uuid"

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

Convert a paused or draft legacy Journey to prepared managed content.

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

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

journeyId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

Request body required

application/json

  • valueobject

    No additional properties

  • expected_versionintegerrequired

    minimum: 1

  • contractobject

    No additional properties

  • source_localestring

    Canonical BCP 47 source locale; inherits product settings when omitted.

  • configured_localesarray

    Source plus target locales; omitted source is added by the server.

    maxItems: 100 · uniqueItems: true

  • Each itemstring
  • fallback_localestring
  • layout_idstring

    Selected reusable layout; the server snapshots its published revision into this content revision.

    format: "uuid"

  • localization_policyobject

    No additional properties

  • manual_reviewboolean

    default: false

  • journey_translationobject

    Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.

    No additional properties

  • modestringrequired

    enum: "fallback", "wait"

  • max_wait_secondsinteger

    minimum: 60 · maximum: 86400

  • on_timeoutstring

    enum: "fallback", "discard"

  • sourceobjectrequired

    No additional properties

  • subjectstringrequired

    minLength: 1 · maxLength: 100000

  • preheaderstring

    maxLength: 100000

  • body_textstring

    Accepted for source compatibility; rendered plain text derives from final HTML.

    maxLength: 100000

  • body_htmlstringrequired

    minLength: 1 · maxLength: 100000

  • layoutstring

    Must contain one {{ content }} slot.

    maxLength: 100000

  • variantsobject

    Optional source versions. Every version is translated automatically in the same revision.

  • Additional propertyobject

    No additional properties

  • subjectstringrequired

    minLength: 1 · maxLength: 100000

  • preheaderstring

    maxLength: 100000

  • body_htmlstringrequired

    minLength: 1 · maxLength: 100000

  • body_textstring

    maxLength: 100000

  • layoutstring

    maxLength: 100000

  • variablesobjectrequired
  • Additional propertyunspecified

    Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.

  • oneOf 1object

    No additional properties

  • typestringrequired

    enum: "string", "text", "url", "image_url", "html", "date", "datetime", "number", "boolean", "money"

    Further nesting omitted

  • requiredboolean

    Further nesting omitted

  • descriptionstring

    maxLength: 2000

    Further nesting omitted

  • defaultunspecified

    Must match the field type.

    Further nesting omitted

  • oneOf 2object

    No additional properties

  • typeunspecifiedrequired

    const: "object"

    Further nesting omitted

  • requiredboolean

    Further nesting omitted

  • descriptionstring

    maxLength: 2000

    Further nesting omitted

  • defaultobject

    Further nesting omitted

  • propertiesobjectrequired

    Further nesting omitted

  • oneOf 3object

    No additional properties

  • typeunspecifiedrequired

    const: "list"

    Further nesting omitted

  • requiredboolean

    Further nesting omitted

  • descriptionstring

    maxLength: 2000

    Further nesting omitted

  • defaultarray

    Further nesting omitted

  • itemsunspecifiedrequired

    Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.

    Further nesting omitted

  • samplesobject

    Named sample value sets for preview and source validation.

  • Additional propertyobject
  • Additional propertyAny value
  • translationsobject

    Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.

  • Additional propertyobject
  • Additional propertystring
  • step_contentsarray

    minItems: 1

  • Each itemobject

    No additional properties

  • step_idstringrequired

    format: "uuid"

  • contractobjectrequired

    No additional properties

  • source_localestring

    Canonical BCP 47 source locale; inherits product settings when omitted.

  • configured_localesarray

    Source plus target locales; omitted source is added by the server.

    maxItems: 100 · uniqueItems: true

  • Each itemstring
  • fallback_localestring
  • layout_idstring

    Selected reusable layout; the server snapshots its published revision into this content revision.

    format: "uuid"

  • localization_policyobject

    No additional properties

  • manual_reviewboolean

    default: false

  • journey_translationobject

    Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.

    No additional properties

  • modestringrequired

    enum: "fallback", "wait"

    Further nesting omitted

  • max_wait_secondsinteger

    minimum: 60 · maximum: 86400

    Further nesting omitted

  • on_timeoutstring

    enum: "fallback", "discard"

    Further nesting omitted

  • sourceobjectrequired

    No additional properties

  • subjectstringrequired

    minLength: 1 · maxLength: 100000

  • preheaderstring

    maxLength: 100000

  • body_textstring

    Accepted for source compatibility; rendered plain text derives from final HTML.

    maxLength: 100000

  • body_htmlstringrequired

    minLength: 1 · maxLength: 100000

  • layoutstring

    Must contain one {{ content }} slot.

    maxLength: 100000

  • variantsobject

    Optional source versions. Every version is translated automatically in the same revision.

  • Additional propertyobject

    No additional properties

    Further nesting omitted

  • variablesobjectrequired
  • Additional propertyunspecified

    Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.

    Further nesting omitted

  • samplesobject

    Named sample value sets for preview and source validation.

  • Additional propertyobject
  • Additional propertyAny value
  • translationsobject

    Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.

  • Additional propertyobject
  • Additional propertystring

    Further nesting omitted

  • oneOf 1unspecified
  • oneOf 2unspecified

Success response 200

Idempotent replay of the same conversion.

application/json

  • valueobject
  • dataobjectrequired
  • journey_idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "draft"

  • review_requiredbooleanrequired

    const: true

  • managed_content_stepsarrayrequired
  • Each itemobject
  • step_idstringrequired

    format: "uuid"

  • managed_content_idstringrequired

    format: "uuid"

  • content_versionintegerrequired
  • source_revision_idstring | nullrequired

    format: "uuid"

  • previewobjectrequired
  • subjectstringrequired
  • preheaderstring
  • htmlstringrequired
  • textstringrequired
  • localestringrequired
  • directionstringrequired

    enum: "ltr", "rtl"

  • warningsarray
  • Each itemstring

    Further nesting omitted

  • Additional propertyAny value
  • translation_jobsarrayrequired
  • Each itemstring

    format: "uuid"

  • managed_content_idstring

    format: "uuid"

  • content_versioninteger
  • source_revision_idstring | null

    format: "uuid"

  • previewobject
  • subjectstringrequired
  • preheaderstring
  • htmlstringrequired
  • textstringrequired
  • localestringrequired
  • directionstringrequired

    enum: "ltr", "rtl"

  • warningsarray
  • Each itemstring
  • Additional propertyAny value
  • replayedbooleanrequired
  • approvalsarrayrequired
  • Each itemobject
  • step_idstringrequired

    format: "uuid"

  • approvalobjectrequired
  • idstringrequired

    format: "uuid"

  • requested_by_actor_idstringrequired
  • action_kindstringrequired
  • summarystringrequired
  • capability_scopesarrayrequired
  • Each itemstring

    Further nesting omitted

  • resource_scopeobjectrequired
  • Additional propertyarray

    Further nesting omitted

  • payloadobjectrequired
  • Additional propertyAny value
  • payload_sha256stringrequired

    pattern: "^[0-9a-f]{64}$"

  • statusstringrequired

    enum: "pending", "approved", "rejected", "cancelled", "expired"

  • missedbooleanrequired
  • expires_atstringrequired

    format: "date-time"

  • decided_by_actor_idstring | null
  • decision_reasonstring | null
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • decided_atstring | null

    format: "date-time"

  • execution_job_idstring

    format: "uuid"

  • reviewobject

    No additional properties

  • dispositionstringrequired

    enum: "automatic", "human_required"

    Further nesting omitted

  • recipient_countinteger | nullrequired

    minimum: 0

    Further nesting omitted

  • reasonsarrayrequired

    Further nesting omitted

  • checksarrayrequired

    Further nesting omitted

  • approvalobject
  • idstringrequired

    format: "uuid"

  • requested_by_actor_idstringrequired
  • action_kindstringrequired
  • summarystringrequired
  • capability_scopesarrayrequired
  • Each itemstring
  • resource_scopeobjectrequired
  • Additional propertyarray
  • Each itemstring
  • payloadobjectrequired
  • Additional propertyAny value
  • payload_sha256stringrequired

    pattern: "^[0-9a-f]{64}$"

  • statusstringrequired

    enum: "pending", "approved", "rejected", "cancelled", "expired"

  • missedbooleanrequired
  • expires_atstringrequired

    format: "date-time"

  • decided_by_actor_idstring | null
  • decision_reasonstring | null
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • decided_atstring | null

    format: "date-time"

  • execution_job_idstring

    format: "uuid"

  • reviewobject

    No additional properties

  • dispositionstringrequired

    enum: "automatic", "human_required"

  • recipient_countinteger | nullrequired

    minimum: 0

  • reasonsarrayrequired
  • Each itemstring
  • checksarrayrequired
  • Each itemstring

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}/convert-managed' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
  --header 'Idempotency-Key: examplexxxxxxxxx' \
  --header 'Content-Type: application/json' \
  --data-raw '"example"'
POST/v1/workspaces/{workspaceId}/journeys/{journeyId}/render

Render one saved Journey email step without sending.

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

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

journeyId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • step_idstring

    format: "uuid"

  • content_statestring

    default: "draft" · enum: "draft", "published"

  • localestring
  • timezonestring
  • sample_setstring
  • variablesobject
  • Additional propertyAny value

Success response 200

Rendered subject, HTML, plain text, locale, revision identifiers, and extraction warnings.

application/json

  • valueobject
  • dataunspecifiedrequired
  • allOf 1object
  • subjectstringrequired
  • preheaderstring
  • htmlstringrequired
  • textstringrequired
  • localestringrequired
  • directionstringrequired

    enum: "ltr", "rtl"

  • warningsarray
  • Each itemstring
  • Additional propertyAny value
  • allOf 2object
  • source_revision_idstringrequired

    format: "uuid"

  • layout_revision_idstring | nullrequired

    format: "uuid"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}/render' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "step_id": "00000000-0000-4000-8000-000000000001",
  "content_state": "draft",
  "locale": "example",
  "timezone": "example",
  "sample_set": "example",
  "variables": {}
}'
POST/v1/workspaces/{workspaceId}/journeys/{journeyId}/simulate

Dry-run a saved Journey with optional trigger-time eligibility and managed broadcasts.

Read-only simulation. Omit enrollment for an after-enrollment preview, or provide an explicit trigger scenario to check the current saved contact's eligibility. Present enrollment yields scope from_trigger and a first timeline entry of kind enrollment; ineligible recipients skip Journey steps while independent broadcast candidates continue. assume_active models hypothetical activation, not governance approval. Provider event receipt/deduplication, provider delivery and latency, historical audience state, schedule and inbound-email triggers are not simulated. A discovered API Journey uses its special onboarding upsert path; later delivery suppression is separate. An active API Journey checks its saved audience before the contact upsert; simulation models that order without writing. A suppressed API recipient can therefore have an eligible enrollment entry followed by exit/suppress, with no rendered send; pending broadcasts are cancelled.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

journeyId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • atstringrequired

    format: "date-time"

  • enrollment_idstring
  • content_statestring

    default: "draft" · enum: "draft", "published"

  • localestring
  • variablesobject
  • Additional propertyAny value
  • communication_historyarray

    Previous sends or reservations for this simulated recipient.

    maxItems: 10000

  • Each itemstring

    format: "date-time"

  • contactobjectrequired
  • emailstringrequired

    format: "email"

  • display_namestringrequired
  • attributesobjectrequired
  • Additional propertyAny value
  • enrollmentobject

    Optional trigger attempt at the top-level at timestamp. Saved contacts use current subscription, suppression and audience membership. Hypothetical API/event contacts require explicit subscribed and suppressed=false state and an all_subscribed audience.

    No additional properties

  • kindstringrequired

    enum: "manual", "api", "contact_created", "audience_joined", "event"

  • eventstring

    maxLength: 200

  • assume_activeboolean

    default: false

  • contact_statusstring

    enum: "subscribed", "unsubscribed"

  • suppressedboolean
  • eventsarray

    maxItems: 1000

  • Each itemobject
  • atstringrequired

    format: "date-time"

  • kindstringrequired

    enum: "attributes", "reply", "unsubscribe", "suppress", "goal"

  • attributesobject
  • Additional propertyAny value
  • broadcastsarray

    Saved scheduled broadcasts or explicit managed-content candidates evaluated on the same recipient timeline.

    maxItems: 20

  • Each itemobject

    No additional properties

  • idstring

    maxLength: 100

  • atstring

    format: "date-time"

  • expires_atstring

    format: "date-time"

  • campaign_idstring

    format: "uuid"

  • content_idstring

    format: "uuid"

  • source_revision_idstring

    format: "uuid"

  • localestring
  • variablesobject
  • Additional propertyAny value
  • oneOf 1unspecified
  • oneOf 2unspecified

Success response 200

Ordered timeline, rendered email details, scope and simulation warnings. Enrollment outcomes include eligible, eligible_assuming_activation, trigger_mismatch, event_mismatch, journey_not_active_or_reviewed, contact_unsubscribed, recipient_hash_missing, contact_suppressed, outside_journey_audience, already_enrolled, contact_predates_enrollment_scan, saved_contact_required, contact_state_unverified and audience_unverified. Details identify the trigger and contact-state source and may note that stored trigger conditions are not evaluated by the current runtime. Saved broadcast recipients already queued for dispatch produce already_queued; already_sent is reserved for an accepted send.

application/json

  • valueobject
  • dataobjectrequired
  • journey_idstringrequired

    format: "uuid"

  • journey_versionintegerrequired
  • content_statestringrequired

    enum: "draft", "published"

  • scopestringrequired

    enum: "from_trigger", "after_enrollment"

  • communication_policy_versionintegerrequired
  • timelinearrayrequired
  • Each itemobject
  • atstringrequired

    format: "date-time"

  • step_idstring

    format: "uuid"

  • kindstringrequired
  • outcomestringrequired
  • detailsunspecified

    Outcome-specific simulation evidence.

  • emailsarrayrequired
  • Each itemobject
  • step_idstring | nullrequired

    format: "uuid"

  • namestringrequired
  • armobject
  • split_step_idstring

    format: "uuid"

  • keystringrequired
  • labelstringrequired
  • sourcestringrequired

    enum: "managed", "design", "inline", "empty"

  • statusstringrequired

    enum: "rendered", "blocked"

  • subjectstring
  • previewstring
  • codestring
  • messagestring
  • warningsarrayrequired
  • Each itemstring

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}/simulate' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "at": "2026-01-01T00:00:00Z",
  "enrollment_id": "example",
  "content_state": "draft",
  "locale": "example",
  "variables": {},
  "communication_history": [
    "2026-01-01T00:00:00Z"
  ],
  "contact": {
    "email": "person@example.com",
    "display_name": "example",
    "attributes": {}
  },
  "enrollment": {
    "kind": "manual",
    "event": "example",
    "assume_active": false,
    "contact_status": "subscribed",
    "suppressed": true
  },
  "events": [
    {
      "at": "2026-01-01T00:00:00Z",
      "kind": "attributes",
      "attributes": {}
    }
  ],
  "broadcasts": [
    "example"
  ]
}'
POST/v1/workspaces/{workspaceId}/journeys/{journeyId}/status

setJourneyStatus

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

journeyId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • statusstringrequired

    enum: "draft", "active", "paused", "archived"

Success response 200

Journey status updated.

application/json

  • valueobject
  • dataunspecifiedrequired
  • allOf 1object

    No additional properties

  • namestringrequired

    minLength: 1 · maxLength: 200

  • descriptionstring

    maxLength: 2000

  • mailbox_idstring

    format: "uuid"

  • from_local_partstring

    maxLength: 64 · pattern: "^[a-z0-9][a-z0-9._+-]{0,62}$"

  • triggerobjectrequired
  • kindstringrequired

    enum: "manual", "contact_created", "audience_joined", "event", "schedule", "inbound_email", "api"

  • connection_idstring

    format: "uuid"

  • configobject
  • eventstring
  • once_per_personboolean

    Each person enters once. Set false to let people re-enter after they finish.

    default: true

  • reentry_daysinteger

    With once_per_person false, days after a person's last entry before they may enter again.

    minimum: 1 · maximum: 365

  • Additional propertyAny value
  • conditionsarray
  • Each itemobject
  • Additional propertyAny value
  • audienceobject
  • Additional propertyAny value
  • goalobject

    No additional properties

  • kindstringrequired

    enum: "none", "event", "reply", "conversion"

  • connection_idstring

    format: "uuid"

  • configobjectrequired
  • Additional propertyAny value
  • exitobject

    No additional properties

  • on_replyboolean

    default: true

  • on_unsubscribeboolean

    default: true

  • on_suppressionboolean

    default: true

  • eventstring

    maxLength: 200

  • approval_modestring

    enum: "policy", "required"

  • apiobject
  • keystring

    maxLength: 100

  • content_modestring

    enum: "code", "managed"

  • identitystring

    maxLength: 300

  • managed_contentobject

    Create-only shortcut: atomically save a source-managed email draft and a Journey whose email step references it. Missing target languages queue for free translation; this does not publish or activate the Journey.

    No additional properties

  • source_localestring

    Canonical BCP 47 source locale; inherits product settings when omitted.

  • configured_localesarray

    Source plus target locales; omitted source is added by the server.

    maxItems: 100 · uniqueItems: true

  • Each itemstring
  • fallback_localestring
  • layout_idstring

    Selected reusable layout; the server snapshots its published revision into this content revision.

    format: "uuid"

  • localization_policyobject

    No additional properties

  • manual_reviewboolean

    default: false

  • journey_translationobject

    Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.

    No additional properties

  • modestringrequired

    enum: "fallback", "wait"

    Further nesting omitted

  • max_wait_secondsinteger

    minimum: 60 · maximum: 86400

    Further nesting omitted

  • on_timeoutstring

    enum: "fallback", "discard"

    Further nesting omitted

  • sourceobjectrequired

    No additional properties

  • subjectstringrequired

    minLength: 1 · maxLength: 100000

  • preheaderstring

    maxLength: 100000

  • body_textstring

    Accepted for source compatibility; rendered plain text derives from final HTML.

    maxLength: 100000

  • body_htmlstringrequired

    minLength: 1 · maxLength: 100000

  • layoutstring

    Must contain one {{ content }} slot.

    maxLength: 100000

  • variantsobject

    Optional source versions. Every version is translated automatically in the same revision.

  • Additional propertyobject

    No additional properties

    Further nesting omitted

  • variablesobjectrequired
  • Additional propertyunspecified

    Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.

    Further nesting omitted

  • samplesobject

    Named sample value sets for preview and source validation.

  • Additional propertyobject
  • Additional propertyAny value
  • translationsobject

    Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.

  • Additional propertyobject
  • Additional propertystring

    Further nesting omitted

  • stepsarrayrequired

    maxItems: 100

  • Each itemobject

    No additional properties

  • idstring

    format: "uuid"

  • positioninteger

    minimum: 1 · maximum: 100

  • kindstringrequired

    enum: "email", "wait", "condition", "action", "split"

  • namestringrequired

    minLength: 1 · maxLength: 200

  • managed_contentobject

    Typed source contract and draft/published revision identity for an email step.

  • idstring

    format: "uuid"

    Further nesting omitted

  • versioninteger

    Further nesting omitted

  • draft_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_publication_idstring | null

    format: "uuid"

    Further nesting omitted

  • source_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • layout_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_layout_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • source_localestring | null

    Further nesting omitted

  • configured_localesarray

    Further nesting omitted

  • variablesobject

    Further nesting omitted

  • published_variablesobject

    Further nesting omitted

  • configobjectrequired

    Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.

  • Additional propertyAny value
  • armsarray

    minItems: 2 · maxItems: 4

  • Each itemobject

    No additional properties

    Further nesting omitted

  • allOf 2object
  • idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "draft", "discovered", "active", "paused", "archived"

  • api_keystring | null
  • content_modestring | null

    enum: "code", "managed", null

  • identitystring | null
  • identity_aliasesarray
  • Each itemstring
  • samplesarray
  • Each itemobject
  • Additional propertyAny value
  • versionintegerrequired

    minimum: 1

  • statsobjectrequired
  • Additional propertyAny value
  • stepStatsarray
  • Each itemobject
  • Additional propertyAny value
  • armStatsarray
  • Each itemobject
  • Additional propertyAny value
  • healthobjectrequired
  • Additional propertyAny value
  • indicatorobjectrequired
  • Additional propertyAny value
  • sparklinearrayrequired
  • Each itemnumber
  • activated_atstring | null

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • last_activity_atstring | null

    format: "date-time"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}/status' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "status": "draft"
}'
POST/v1/workspaces/{workspaceId}/journeys/{journeyId}/preview

previewJourney

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

journeyId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Journey audience and readiness preview.

application/json

  • valueobject
  • dataobjectrequired
  • sequence_idstringrequired

    format: "uuid"

  • recipient_countintegerrequired
  • sample_recipientsarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • emailstringrequired
  • display_namestring | nullrequired
  • stepsarrayrequired
  • Each itemobject

    No additional properties

  • idstring

    format: "uuid"

  • positioninteger

    minimum: 1 · maximum: 100

  • kindstringrequired

    enum: "email", "wait", "condition", "action", "split"

  • namestringrequired

    minLength: 1 · maxLength: 200

  • managed_contentobject

    Typed source contract and draft/published revision identity for an email step.

  • idstring

    format: "uuid"

  • versioninteger
  • draft_revision_idstring | null

    format: "uuid"

  • published_revision_idstring | null

    format: "uuid"

  • published_publication_idstring | null

    format: "uuid"

  • source_revision_idstring | null

    format: "uuid"

  • layout_revision_idstring | null

    format: "uuid"

  • published_layout_revision_idstring | null

    format: "uuid"

  • source_localestring | null
  • configured_localesarray
  • Each itemstring

    Further nesting omitted

  • variablesobject
  • Additional propertyAny value
  • published_variablesobject
  • Additional propertyAny value
  • configobjectrequired

    Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.

  • Additional propertyAny value
  • armsarray

    minItems: 2 · maxItems: 4

  • Each itemobject

    No additional properties

  • keystringrequired

    enum: "A", "B", "C", "D"

    Further nesting omitted

  • labelstringrequired

    maxLength: 120

    Further nesting omitted

  • allocationnumberrequired

    minimum: 0 · maximum: 100

    Further nesting omitted

  • stepsarrayrequired

    Further nesting omitted

  • readybooleanrequired
  • exit_configobjectrequired

    No additional properties

  • on_replyboolean

    default: true

  • on_unsubscribeboolean

    default: true

  • on_suppressionboolean

    default: true

  • eventstring

    maxLength: 200

  • emailsarrayrequired
  • Each itemobject
  • step_idstring | nullrequired

    format: "uuid"

  • namestringrequired
  • armobject
  • split_step_idstring

    format: "uuid"

  • keystringrequired
  • labelstringrequired
  • sourcestringrequired

    enum: "managed", "design", "inline", "empty"

  • template_idstring

    format: "uuid"

  • managed_content_idstring

    format: "uuid"

  • subjectstringrequired
  • previewstringrequired
  • blockersarrayrequired
  • Each itemobject
  • codestringrequired

    Further nesting omitted

  • messagestringrequired

    Further nesting omitted

  • blockersarrayrequired
  • Each itemobject
  • codestringrequired
  • messagestringrequired
  • step_idstring | nullrequired

    format: "uuid"

  • step_namestringrequired
  • armstring

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}/preview' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/journeys/{journeyId}/enroll

enrollJourneyContacts

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

journeyId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response

No success response is specified in the contract.

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}/enroll' \
  --header "Authorization: Bearer $BANGER_API_KEY"
GET/v1/workspaces/{workspaceId}/journeys/{journeyId}/executions

listJourneyExecutions

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

journeyId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Journey step executions.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • enrollment_idstringrequired

    format: "uuid"

  • step_idstringrequired

    format: "uuid"

  • positionintegerrequired
  • kindstringrequired
  • namestringrequired
  • statusstringrequired
  • attempt_countintegerrequired
  • send_intent_idstring | nullrequired

    format: "uuid"

  • error_codestring | nullrequired
  • started_atstring | nullrequired

    format: "date-time"

  • completed_atstring | nullrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}/executions' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/journeys/{journeyKey}/send

sendJourney

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

journeyKey
path · required
  • valuestring

    minLength: 1 · maxLength: 100

Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

Request body required

application/json

  • valueobject
  • expires_atstring

    format: "date-time"

  • expires_after_secondsinteger

    minimum: 1 · maximum: 604800

  • Additional propertyAny value

Success response 202

Journey email accepted.

application/json

  • valueobject
  • dataobjectrequired
  • action_kindstringrequired

    enum: "transactional.send"

  • idstring

    format: "uuid"

  • send_intent_idstring

    format: "uuid"

  • provider_attempt_idstring

    format: "uuid"

  • statusstringrequired
  • replayedboolean
  • journeyunspecifiedrequired
  • anyOf 1object
  • journey_idstringrequired

    format: "uuid"

  • enrollment_idstringrequired

    format: "uuid"

  • step_idstringrequired

    format: "uuid"

  • step_positionintegerrequired
  • originstring

    enum: "journey"

  • journey_identitystring
  • anyOf 2null
  • ignored_variablesarrayrequired
  • Each itemstring
  • scheduled_atstring

    format: "date-time"

  • reasonstring
  • communication_reservation_idstring

    format: "uuid"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyKey}/send' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Idempotency-Key: examplexxxxxxxxx' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "expires_at": "2026-01-01T00:00:00Z",
  "expires_after_seconds": 1
}'
POST/v1/workspaces/{workspaceId}/journeys/{journeyId}/claim

claimJourney

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

journeyId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • namestringrequired

    minLength: 1 · maxLength: 200

  • mailbox_idstringrequired

    format: "uuid"

  • delivery_classstringrequired

    enum: "product", "broadcast"

  • content_modestringrequired

    enum: "code", "managed"

  • template_idstring

    format: "uuid"

  • from_sampleboolean
  • variablesarray

    maxItems: 50

  • Each itemobject
  • literalstringrequired

    minLength: 1 · maxLength: 10000

  • namestringrequired

    pattern: "^[a-z][a-z0-9_]{0,63}$"

  • activateboolean

Success response 200

Discovered Journey claimed.

application/json

  • valueobject
  • dataunspecifiedrequired
  • allOf 1object

    No additional properties

  • namestringrequired

    minLength: 1 · maxLength: 200

  • descriptionstring

    maxLength: 2000

  • mailbox_idstring

    format: "uuid"

  • from_local_partstring

    maxLength: 64 · pattern: "^[a-z0-9][a-z0-9._+-]{0,62}$"

  • triggerobjectrequired
  • kindstringrequired

    enum: "manual", "contact_created", "audience_joined", "event", "schedule", "inbound_email", "api"

  • connection_idstring

    format: "uuid"

  • configobject
  • eventstring
  • once_per_personboolean

    Each person enters once. Set false to let people re-enter after they finish.

    default: true

  • reentry_daysinteger

    With once_per_person false, days after a person's last entry before they may enter again.

    minimum: 1 · maximum: 365

  • Additional propertyAny value
  • conditionsarray
  • Each itemobject
  • Additional propertyAny value
  • audienceobject
  • Additional propertyAny value
  • goalobject

    No additional properties

  • kindstringrequired

    enum: "none", "event", "reply", "conversion"

  • connection_idstring

    format: "uuid"

  • configobjectrequired
  • Additional propertyAny value
  • exitobject

    No additional properties

  • on_replyboolean

    default: true

  • on_unsubscribeboolean

    default: true

  • on_suppressionboolean

    default: true

  • eventstring

    maxLength: 200

  • approval_modestring

    enum: "policy", "required"

  • apiobject
  • keystring

    maxLength: 100

  • content_modestring

    enum: "code", "managed"

  • identitystring

    maxLength: 300

  • managed_contentobject

    Create-only shortcut: atomically save a source-managed email draft and a Journey whose email step references it. Missing target languages queue for free translation; this does not publish or activate the Journey.

    No additional properties

  • source_localestring

    Canonical BCP 47 source locale; inherits product settings when omitted.

  • configured_localesarray

    Source plus target locales; omitted source is added by the server.

    maxItems: 100 · uniqueItems: true

  • Each itemstring
  • fallback_localestring
  • layout_idstring

    Selected reusable layout; the server snapshots its published revision into this content revision.

    format: "uuid"

  • localization_policyobject

    No additional properties

  • manual_reviewboolean

    default: false

  • journey_translationobject

    Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.

    No additional properties

  • modestringrequired

    enum: "fallback", "wait"

    Further nesting omitted

  • max_wait_secondsinteger

    minimum: 60 · maximum: 86400

    Further nesting omitted

  • on_timeoutstring

    enum: "fallback", "discard"

    Further nesting omitted

  • sourceobjectrequired

    No additional properties

  • subjectstringrequired

    minLength: 1 · maxLength: 100000

  • preheaderstring

    maxLength: 100000

  • body_textstring

    Accepted for source compatibility; rendered plain text derives from final HTML.

    maxLength: 100000

  • body_htmlstringrequired

    minLength: 1 · maxLength: 100000

  • layoutstring

    Must contain one {{ content }} slot.

    maxLength: 100000

  • variantsobject

    Optional source versions. Every version is translated automatically in the same revision.

  • Additional propertyobject

    No additional properties

    Further nesting omitted

  • variablesobjectrequired
  • Additional propertyunspecified

    Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.

    Further nesting omitted

  • samplesobject

    Named sample value sets for preview and source validation.

  • Additional propertyobject
  • Additional propertyAny value
  • translationsobject

    Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.

  • Additional propertyobject
  • Additional propertystring

    Further nesting omitted

  • stepsarrayrequired

    maxItems: 100

  • Each itemobject

    No additional properties

  • idstring

    format: "uuid"

  • positioninteger

    minimum: 1 · maximum: 100

  • kindstringrequired

    enum: "email", "wait", "condition", "action", "split"

  • namestringrequired

    minLength: 1 · maxLength: 200

  • managed_contentobject

    Typed source contract and draft/published revision identity for an email step.

  • idstring

    format: "uuid"

    Further nesting omitted

  • versioninteger

    Further nesting omitted

  • draft_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_publication_idstring | null

    format: "uuid"

    Further nesting omitted

  • source_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • layout_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_layout_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • source_localestring | null

    Further nesting omitted

  • configured_localesarray

    Further nesting omitted

  • variablesobject

    Further nesting omitted

  • published_variablesobject

    Further nesting omitted

  • configobjectrequired

    Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.

  • Additional propertyAny value
  • armsarray

    minItems: 2 · maxItems: 4

  • Each itemobject

    No additional properties

    Further nesting omitted

  • allOf 2object
  • idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "draft", "discovered", "active", "paused", "archived"

  • api_keystring | null
  • content_modestring | null

    enum: "code", "managed", null

  • identitystring | null
  • identity_aliasesarray
  • Each itemstring
  • samplesarray
  • Each itemobject
  • Additional propertyAny value
  • versionintegerrequired

    minimum: 1

  • statsobjectrequired
  • Additional propertyAny value
  • stepStatsarray
  • Each itemobject
  • Additional propertyAny value
  • armStatsarray
  • Each itemobject
  • Additional propertyAny value
  • healthobjectrequired
  • Additional propertyAny value
  • indicatorobjectrequired
  • Additional propertyAny value
  • sparklinearrayrequired
  • Each itemnumber
  • activated_atstring | null

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • last_activity_atstring | null

    format: "date-time"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}/claim' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "name": "example",
  "mailbox_id": "00000000-0000-4000-8000-000000000001",
  "delivery_class": "product",
  "content_mode": "code",
  "template_id": "00000000-0000-4000-8000-000000000001",
  "from_sample": true,
  "variables": [
    {
      "literal": "example",
      "name": "example"
    }
  ],
  "activate": true
}'
POST/v1/workspaces/{workspaceId}/journeys/{journeyId}/merge

mergeJourneys

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

journeyId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • loser_idstringrequired

    format: "uuid"

Success response 200

Journeys merged.

application/json

  • valueobject
  • dataunspecifiedrequired
  • allOf 1object

    No additional properties

  • namestringrequired

    minLength: 1 · maxLength: 200

  • descriptionstring

    maxLength: 2000

  • mailbox_idstring

    format: "uuid"

  • from_local_partstring

    maxLength: 64 · pattern: "^[a-z0-9][a-z0-9._+-]{0,62}$"

  • triggerobjectrequired
  • kindstringrequired

    enum: "manual", "contact_created", "audience_joined", "event", "schedule", "inbound_email", "api"

  • connection_idstring

    format: "uuid"

  • configobject
  • eventstring
  • once_per_personboolean

    Each person enters once. Set false to let people re-enter after they finish.

    default: true

  • reentry_daysinteger

    With once_per_person false, days after a person's last entry before they may enter again.

    minimum: 1 · maximum: 365

  • Additional propertyAny value
  • conditionsarray
  • Each itemobject
  • Additional propertyAny value
  • audienceobject
  • Additional propertyAny value
  • goalobject

    No additional properties

  • kindstringrequired

    enum: "none", "event", "reply", "conversion"

  • connection_idstring

    format: "uuid"

  • configobjectrequired
  • Additional propertyAny value
  • exitobject

    No additional properties

  • on_replyboolean

    default: true

  • on_unsubscribeboolean

    default: true

  • on_suppressionboolean

    default: true

  • eventstring

    maxLength: 200

  • approval_modestring

    enum: "policy", "required"

  • apiobject
  • keystring

    maxLength: 100

  • content_modestring

    enum: "code", "managed"

  • identitystring

    maxLength: 300

  • managed_contentobject

    Create-only shortcut: atomically save a source-managed email draft and a Journey whose email step references it. Missing target languages queue for free translation; this does not publish or activate the Journey.

    No additional properties

  • source_localestring

    Canonical BCP 47 source locale; inherits product settings when omitted.

  • configured_localesarray

    Source plus target locales; omitted source is added by the server.

    maxItems: 100 · uniqueItems: true

  • Each itemstring
  • fallback_localestring
  • layout_idstring

    Selected reusable layout; the server snapshots its published revision into this content revision.

    format: "uuid"

  • localization_policyobject

    No additional properties

  • manual_reviewboolean

    default: false

  • journey_translationobject

    Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.

    No additional properties

  • modestringrequired

    enum: "fallback", "wait"

    Further nesting omitted

  • max_wait_secondsinteger

    minimum: 60 · maximum: 86400

    Further nesting omitted

  • on_timeoutstring

    enum: "fallback", "discard"

    Further nesting omitted

  • sourceobjectrequired

    No additional properties

  • subjectstringrequired

    minLength: 1 · maxLength: 100000

  • preheaderstring

    maxLength: 100000

  • body_textstring

    Accepted for source compatibility; rendered plain text derives from final HTML.

    maxLength: 100000

  • body_htmlstringrequired

    minLength: 1 · maxLength: 100000

  • layoutstring

    Must contain one {{ content }} slot.

    maxLength: 100000

  • variantsobject

    Optional source versions. Every version is translated automatically in the same revision.

  • Additional propertyobject

    No additional properties

    Further nesting omitted

  • variablesobjectrequired
  • Additional propertyunspecified

    Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.

    Further nesting omitted

  • samplesobject

    Named sample value sets for preview and source validation.

  • Additional propertyobject
  • Additional propertyAny value
  • translationsobject

    Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.

  • Additional propertyobject
  • Additional propertystring

    Further nesting omitted

  • stepsarrayrequired

    maxItems: 100

  • Each itemobject

    No additional properties

  • idstring

    format: "uuid"

  • positioninteger

    minimum: 1 · maximum: 100

  • kindstringrequired

    enum: "email", "wait", "condition", "action", "split"

  • namestringrequired

    minLength: 1 · maxLength: 200

  • managed_contentobject

    Typed source contract and draft/published revision identity for an email step.

  • idstring

    format: "uuid"

    Further nesting omitted

  • versioninteger

    Further nesting omitted

  • draft_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_publication_idstring | null

    format: "uuid"

    Further nesting omitted

  • source_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • layout_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_layout_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • source_localestring | null

    Further nesting omitted

  • configured_localesarray

    Further nesting omitted

  • variablesobject

    Further nesting omitted

  • published_variablesobject

    Further nesting omitted

  • configobjectrequired

    Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.

  • Additional propertyAny value
  • armsarray

    minItems: 2 · maxItems: 4

  • Each itemobject

    No additional properties

    Further nesting omitted

  • allOf 2object
  • idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "draft", "discovered", "active", "paused", "archived"

  • api_keystring | null
  • content_modestring | null

    enum: "code", "managed", null

  • identitystring | null
  • identity_aliasesarray
  • Each itemstring
  • samplesarray
  • Each itemobject
  • Additional propertyAny value
  • versionintegerrequired

    minimum: 1

  • statsobjectrequired
  • Additional propertyAny value
  • stepStatsarray
  • Each itemobject
  • Additional propertyAny value
  • armStatsarray
  • Each itemobject
  • Additional propertyAny value
  • healthobjectrequired
  • Additional propertyAny value
  • indicatorobjectrequired
  • Additional propertyAny value
  • sparklinearrayrequired
  • Each itemnumber
  • activated_atstring | null

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • last_activity_atstring | null

    format: "date-time"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}/merge' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "loser_id": "00000000-0000-4000-8000-000000000001"
}'
POST/v1/workspaces/{workspaceId}/journeys/{journeyId}/splits/{stepId}/decide

decideJourneySplit

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

journeyId
path · required
  • valuestring

    format: "uuid"

stepId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • arm_keystringrequired

Success response 200

Winning arm promoted.

application/json

  • valueobject
  • dataunspecifiedrequired
  • allOf 1object

    No additional properties

  • namestringrequired

    minLength: 1 · maxLength: 200

  • descriptionstring

    maxLength: 2000

  • mailbox_idstring

    format: "uuid"

  • from_local_partstring

    maxLength: 64 · pattern: "^[a-z0-9][a-z0-9._+-]{0,62}$"

  • triggerobjectrequired
  • kindstringrequired

    enum: "manual", "contact_created", "audience_joined", "event", "schedule", "inbound_email", "api"

  • connection_idstring

    format: "uuid"

  • configobject
  • eventstring
  • once_per_personboolean

    Each person enters once. Set false to let people re-enter after they finish.

    default: true

  • reentry_daysinteger

    With once_per_person false, days after a person's last entry before they may enter again.

    minimum: 1 · maximum: 365

  • Additional propertyAny value
  • conditionsarray
  • Each itemobject
  • Additional propertyAny value
  • audienceobject
  • Additional propertyAny value
  • goalobject

    No additional properties

  • kindstringrequired

    enum: "none", "event", "reply", "conversion"

  • connection_idstring

    format: "uuid"

  • configobjectrequired
  • Additional propertyAny value
  • exitobject

    No additional properties

  • on_replyboolean

    default: true

  • on_unsubscribeboolean

    default: true

  • on_suppressionboolean

    default: true

  • eventstring

    maxLength: 200

  • approval_modestring

    enum: "policy", "required"

  • apiobject
  • keystring

    maxLength: 100

  • content_modestring

    enum: "code", "managed"

  • identitystring

    maxLength: 300

  • managed_contentobject

    Create-only shortcut: atomically save a source-managed email draft and a Journey whose email step references it. Missing target languages queue for free translation; this does not publish or activate the Journey.

    No additional properties

  • source_localestring

    Canonical BCP 47 source locale; inherits product settings when omitted.

  • configured_localesarray

    Source plus target locales; omitted source is added by the server.

    maxItems: 100 · uniqueItems: true

  • Each itemstring
  • fallback_localestring
  • layout_idstring

    Selected reusable layout; the server snapshots its published revision into this content revision.

    format: "uuid"

  • localization_policyobject

    No additional properties

  • manual_reviewboolean

    default: false

  • journey_translationobject

    Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.

    No additional properties

  • modestringrequired

    enum: "fallback", "wait"

    Further nesting omitted

  • max_wait_secondsinteger

    minimum: 60 · maximum: 86400

    Further nesting omitted

  • on_timeoutstring

    enum: "fallback", "discard"

    Further nesting omitted

  • sourceobjectrequired

    No additional properties

  • subjectstringrequired

    minLength: 1 · maxLength: 100000

  • preheaderstring

    maxLength: 100000

  • body_textstring

    Accepted for source compatibility; rendered plain text derives from final HTML.

    maxLength: 100000

  • body_htmlstringrequired

    minLength: 1 · maxLength: 100000

  • layoutstring

    Must contain one {{ content }} slot.

    maxLength: 100000

  • variantsobject

    Optional source versions. Every version is translated automatically in the same revision.

  • Additional propertyobject

    No additional properties

    Further nesting omitted

  • variablesobjectrequired
  • Additional propertyunspecified

    Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.

    Further nesting omitted

  • samplesobject

    Named sample value sets for preview and source validation.

  • Additional propertyobject
  • Additional propertyAny value
  • translationsobject

    Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.

  • Additional propertyobject
  • Additional propertystring

    Further nesting omitted

  • stepsarrayrequired

    maxItems: 100

  • Each itemobject

    No additional properties

  • idstring

    format: "uuid"

  • positioninteger

    minimum: 1 · maximum: 100

  • kindstringrequired

    enum: "email", "wait", "condition", "action", "split"

  • namestringrequired

    minLength: 1 · maxLength: 200

  • managed_contentobject

    Typed source contract and draft/published revision identity for an email step.

  • idstring

    format: "uuid"

    Further nesting omitted

  • versioninteger

    Further nesting omitted

  • draft_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_publication_idstring | null

    format: "uuid"

    Further nesting omitted

  • source_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • layout_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • published_layout_revision_idstring | null

    format: "uuid"

    Further nesting omitted

  • source_localestring | null

    Further nesting omitted

  • configured_localesarray

    Further nesting omitted

  • variablesobject

    Further nesting omitted

  • published_variablesobject

    Further nesting omitted

  • configobjectrequired

    Wait steps optionally accept until with name, path, operator (equals, not_equals, contains, or exists), and value, plus required on_met (continue or end_journey). continue skips the following reminder email; end_journey completes the Journey. A reminder email must immediately follow in the same branch. The wait checks current customer data every minute up to amount/unit. Missing fields are unknown and hold the reminder. Ordinary waits and standalone conditions retain their existing behavior. Name checks with verified customer milestones. Managed email steps reference the published content through managed_content_id; activation rejects an unpublished reference. Email steps may set expires_after_seconds (1-604800) to discard a deferred send after that interval from its original start; the default is seven days.

  • Additional propertyAny value
  • armsarray

    minItems: 2 · maxItems: 4

  • Each itemobject

    No additional properties

    Further nesting omitted

  • allOf 2object
  • idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "draft", "discovered", "active", "paused", "archived"

  • api_keystring | null
  • content_modestring | null

    enum: "code", "managed", null

  • identitystring | null
  • identity_aliasesarray
  • Each itemstring
  • samplesarray
  • Each itemobject
  • Additional propertyAny value
  • versionintegerrequired

    minimum: 1

  • statsobjectrequired
  • Additional propertyAny value
  • stepStatsarray
  • Each itemobject
  • Additional propertyAny value
  • armStatsarray
  • Each itemobject
  • Additional propertyAny value
  • healthobjectrequired
  • Additional propertyAny value
  • indicatorobjectrequired
  • Additional propertyAny value
  • sparklinearrayrequired
  • Each itemnumber
  • activated_atstring | null

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • last_activity_atstring | null

    format: "date-time"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyId}/splits/{stepId}/decide' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "arm_key": "example"
}'
GET/v1/workspaces/{workspaceId}/journeys/{journeyId}/splits/recommend

recommendJourneyArms

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

journeyId
path · required
  • valuestring

    format: "uuid"

position
query
  • valueinteger

    minimum: 1 · maximum: 100

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}

Read full source-locale before/after renders for content bound to one layout approval.

Rebuilds from immutable revisions and verifies both source hashes against the approval snapshot. No locale override is accepted.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

approvalId
path · required
  • valuestring

    format: "uuid"

contentId
path · required
  • valuestring

    format: "uuid"

sample
query
  • valuestring

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

Render every email of a Journey activation or enrollment approval from its bound review snapshot.

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

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

approvalId
path · required
  • valuestring

    format: "uuid"

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

listApprovalRequests

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

status
query
  • valuestring

    enum: "undecided", "pending", "approved", "rejected", "cancelled", "expired"

Request body

No request body is specified in the contract.

Success response 200

Automatic and human review audit inbox for the workspace.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • requested_by_actor_idstringrequired
  • action_kindstringrequired
  • summarystringrequired
  • capability_scopesarrayrequired
  • Each itemstring
  • resource_scopeobjectrequired
  • Additional propertyarray
  • Each itemstring
  • payloadobjectrequired
  • Additional propertyAny value
  • payload_sha256stringrequired

    pattern: "^[0-9a-f]{64}$"

  • statusstringrequired

    enum: "pending", "approved", "rejected", "cancelled", "expired"

  • missedbooleanrequired
  • expires_atstringrequired

    format: "date-time"

  • decided_by_actor_idstring | null
  • decision_reasonstring | null
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • decided_atstring | null

    format: "date-time"

  • execution_job_idstring

    format: "uuid"

  • reviewobject

    No additional properties

  • dispositionstringrequired

    enum: "automatic", "human_required"

  • recipient_countinteger | nullrequired

    minimum: 0

  • reasonsarrayrequired
  • Each itemstring
  • checksarrayrequired
  • Each itemstring

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/approvals?status=undecided' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/approvals

createApprovalRequest

For canonical Banger actions, Banger derives exact scopes, applies the workspace review policy, records an immutable audit request, and automatically queues actions within the configured limit. To publish managed email source, use action_kind managed_email.publish and payload {content_id, expected_version}; Banger binds the source revision/hash and enforces human review when required. Generic approval kinds always remain pending and must provide summary, capabilities, and resources.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header

Required for recognized Banger actions; custom approval requests do not consume this header.

  • valuestring

    minLength: 16 · maxLength: 128

Request body required

application/json

  • valueobject

    No additional properties

  • action_kindstringrequired

    minLength: 1 · maxLength: 100

  • summarystring

    minLength: 1 · maxLength: 500

  • capabilitiesarray

    minItems: 1 · maxItems: 50

  • Each itemstring

    maxLength: 100

  • resourcesobject
  • Additional propertyarray

    maxItems: 500

  • Each itemstring

    maxLength: 200

  • payloadobjectrequired
  • Additional propertyAny value
  • expires_in_secondsinteger

    minimum: 60 · maximum: 86400 · default: 3600

Success response 201

Governed request created; it may already be automatically approved and queued.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • requested_by_actor_idstringrequired
  • action_kindstringrequired
  • summarystringrequired
  • capability_scopesarrayrequired
  • Each itemstring
  • resource_scopeobjectrequired
  • Additional propertyarray
  • Each itemstring
  • payloadobjectrequired
  • Additional propertyAny value
  • payload_sha256stringrequired

    pattern: "^[0-9a-f]{64}$"

  • statusstringrequired

    enum: "pending", "approved", "rejected", "cancelled", "expired"

  • missedbooleanrequired
  • expires_atstringrequired

    format: "date-time"

  • decided_by_actor_idstring | null
  • decision_reasonstring | null
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • decided_atstring | null

    format: "date-time"

  • execution_job_idstring

    format: "uuid"

  • reviewobject

    No additional properties

  • dispositionstringrequired

    enum: "automatic", "human_required"

  • recipient_countinteger | nullrequired

    minimum: 0

  • reasonsarrayrequired
  • Each itemstring
  • checksarrayrequired
  • Each itemstring

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/approvals' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Idempotency-Key: examplexxxxxxxxx' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "action_kind": "example",
  "summary": "example",
  "capabilities": [
    "example"
  ],
  "resources": {},
  "payload": {},
  "expires_in_seconds": 3600
}'
GET/v1/workspaces/{workspaceId}/approvals/count

Count approvals that are waiting or were missed before a decision.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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}

getApprovalRequest

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

approvalId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Exact approval request and bound action payload.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • requested_by_actor_idstringrequired
  • action_kindstringrequired
  • summarystringrequired
  • capability_scopesarrayrequired
  • Each itemstring
  • resource_scopeobjectrequired
  • Additional propertyarray
  • Each itemstring
  • payloadobjectrequired
  • Additional propertyAny value
  • payload_sha256stringrequired

    pattern: "^[0-9a-f]{64}$"

  • statusstringrequired

    enum: "pending", "approved", "rejected", "cancelled", "expired"

  • missedbooleanrequired
  • expires_atstringrequired

    format: "date-time"

  • decided_by_actor_idstring | null
  • decision_reasonstring | null
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • decided_atstring | null

    format: "date-time"

  • execution_job_idstring

    format: "uuid"

  • reviewobject

    No additional properties

  • dispositionstringrequired

    enum: "automatic", "human_required"

  • recipient_countinteger | nullrequired

    minimum: 0

  • reasonsarrayrequired
  • Each itemstring
  • checksarrayrequired
  • Each itemstring

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/approvals/{approvalId}' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/approvals/{approvalId}/decision

decideApprovalRequest

Human browser sessions only. Workspace API keys cannot decide approvals.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

approvalId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • decisionstringrequired

    enum: "approved", "rejected"

  • reasonstring

    maxLength: 500

  • expected_payload_sha256string

    Hash of the exact approval payload displayed to the reviewer; a mismatch returns 409.

    pattern: "^[a-f0-9]{64}$"

Success response 200

Approval decision recorded.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • requested_by_actor_idstringrequired
  • action_kindstringrequired
  • summarystringrequired
  • capability_scopesarrayrequired
  • Each itemstring
  • resource_scopeobjectrequired
  • Additional propertyarray
  • Each itemstring
  • payloadobjectrequired
  • Additional propertyAny value
  • payload_sha256stringrequired

    pattern: "^[0-9a-f]{64}$"

  • statusstringrequired

    enum: "pending", "approved", "rejected", "cancelled", "expired"

  • missedbooleanrequired
  • expires_atstringrequired

    format: "date-time"

  • decided_by_actor_idstring | null
  • decision_reasonstring | null
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • decided_atstring | null

    format: "date-time"

  • execution_job_idstring

    format: "uuid"

  • reviewobject

    No additional properties

  • dispositionstringrequired

    enum: "automatic", "human_required"

  • recipient_countinteger | nullrequired

    minimum: 0

  • reasonsarrayrequired
  • Each itemstring
  • checksarrayrequired
  • Each itemstring

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/approvals/{approvalId}/decision' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "decision": "approved",
  "reason": "example",
  "expected_payload_sha256": "example"
}'
POST/v1/workspaces/{workspaceId}/approvals/{approvalId}/cancel

cancelApprovalRequest

Cancel a still-pending approval without executing it. Human browser sessions only.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

approvalId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • reasonstring

    maxLength: 500

Success response 200

Approval cancelled and any waiting agent run resumed without the action.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • requested_by_actor_idstringrequired
  • action_kindstringrequired
  • summarystringrequired
  • capability_scopesarrayrequired
  • Each itemstring
  • resource_scopeobjectrequired
  • Additional propertyarray
  • Each itemstring
  • payloadobjectrequired
  • Additional propertyAny value
  • payload_sha256stringrequired

    pattern: "^[0-9a-f]{64}$"

  • statusstringrequired

    enum: "pending", "approved", "rejected", "cancelled", "expired"

  • missedbooleanrequired
  • expires_atstringrequired

    format: "date-time"

  • decided_by_actor_idstring | null
  • decision_reasonstring | null
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • decided_atstring | null

    format: "date-time"

  • execution_job_idstring

    format: "uuid"

  • reviewobject

    No additional properties

  • dispositionstringrequired

    enum: "automatic", "human_required"

  • recipient_countinteger | nullrequired

    minimum: 0

  • reasonsarrayrequired
  • Each itemstring
  • checksarrayrequired
  • Each itemstring

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/approvals/{approvalId}/cancel' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "reason": "example"
}'
POST/v1/workspaces/{workspaceId}/approvals/{approvalId}/dismiss

dismissApprovalRequest

Dismiss an approval whose decision window was missed. Human browser sessions only.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

approvalId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Missed approval dismissed and recorded as cancelled.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • requested_by_actor_idstringrequired
  • action_kindstringrequired
  • summarystringrequired
  • capability_scopesarrayrequired
  • Each itemstring
  • resource_scopeobjectrequired
  • Additional propertyarray
  • Each itemstring
  • payloadobjectrequired
  • Additional propertyAny value
  • payload_sha256stringrequired

    pattern: "^[0-9a-f]{64}$"

  • statusstringrequired

    enum: "pending", "approved", "rejected", "cancelled", "expired"

  • missedbooleanrequired
  • expires_atstringrequired

    format: "date-time"

  • decided_by_actor_idstring | null
  • decision_reasonstring | null
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • decided_atstring | null

    format: "date-time"

  • execution_job_idstring

    format: "uuid"

  • reviewobject

    No additional properties

  • dispositionstringrequired

    enum: "automatic", "human_required"

  • recipient_countinteger | nullrequired

    minimum: 0

  • reasonsarrayrequired
  • Each itemstring
  • checksarrayrequired
  • Each itemstring

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/approvals/{approvalId}/dismiss' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/approvals/{approvalId}/rerequest

rerequestApprovalRequest

Clone a missed approval with a fresh decision window and cancel the old request. Human browser sessions only.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

approvalId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 201

Fresh approval request created.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • requested_by_actor_idstringrequired
  • action_kindstringrequired
  • summarystringrequired
  • capability_scopesarrayrequired
  • Each itemstring
  • resource_scopeobjectrequired
  • Additional propertyarray
  • Each itemstring
  • payloadobjectrequired
  • Additional propertyAny value
  • payload_sha256stringrequired

    pattern: "^[0-9a-f]{64}$"

  • statusstringrequired

    enum: "pending", "approved", "rejected", "cancelled", "expired"

  • missedbooleanrequired
  • expires_atstringrequired

    format: "date-time"

  • decided_by_actor_idstring | null
  • decision_reasonstring | null
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • decided_atstring | null

    format: "date-time"

  • execution_job_idstring

    format: "uuid"

  • reviewobject

    No additional properties

  • dispositionstringrequired

    enum: "automatic", "human_required"

  • recipient_countinteger | nullrequired

    minimum: 0

  • reasonsarrayrequired
  • Each itemstring
  • checksarrayrequired
  • Each itemstring

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/approvals/{approvalId}/rerequest' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/approvals/{approvalId}/revise

reviseApprovalRequest

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

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

approvalId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

Request body required

application/json

  • valueobject

    No additional properties

  • payloadobjectrequired
  • Additional propertyAny value

Success response 201

Replacement approval created for human review.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • requested_by_actor_idstringrequired
  • action_kindstringrequired
  • summarystringrequired
  • capability_scopesarrayrequired
  • Each itemstring
  • resource_scopeobjectrequired
  • Additional propertyarray
  • Each itemstring
  • payloadobjectrequired
  • Additional propertyAny value
  • payload_sha256stringrequired

    pattern: "^[0-9a-f]{64}$"

  • statusstringrequired

    enum: "pending", "approved", "rejected", "cancelled", "expired"

  • missedbooleanrequired
  • expires_atstringrequired

    format: "date-time"

  • decided_by_actor_idstring | null
  • decision_reasonstring | null
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • decided_atstring | null

    format: "date-time"

  • execution_job_idstring

    format: "uuid"

  • reviewobject

    No additional properties

  • dispositionstringrequired

    enum: "automatic", "human_required"

  • recipient_countinteger | nullrequired

    minimum: 0

  • reasonsarrayrequired
  • Each itemstring
  • checksarrayrequired
  • Each itemstring

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/approvals/{approvalId}/revise' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Idempotency-Key: examplexxxxxxxxx' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "payload": {}
}'

Agent runs

GET/v1/workspaces/{workspaceId}/agent-runs

List recent internal-agent runs for the workspace.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

limit
query
  • valueinteger

    minimum: 1 · maximum: 100 · default: 50

Request body

No request body is specified in the contract.

Success response 200

Recent runs in reverse chronological order.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • execution_job_idstring

    format: "uuid"

  • requested_by_actor_idstringrequired
  • taskstringrequired
  • modelstringrequired
  • capability_scopesarrayrequired
  • Each itemstring
  • resource_scopeobjectrequired
  • Additional propertyarray
  • Each itemstring
  • statusstringrequired

    enum: "queued", "running", "waiting_approval", "waiting_external", "succeeded", "failed", "cancelled"

  • max_stepsintegerrequired
  • max_runtime_secondsintegerrequired
  • current_generationintegerrequired
  • latest_checkpointobject | null
  • Additional propertyAny value
  • latest_checkpoint_sequenceintegerrequired
  • resultobject | null
  • Additional propertyAny value
  • error_codestring | null
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • started_atstring | null

    format: "date-time"

  • completed_atstring | null

    format: "date-time"

  • replayedbooleanrequired
  • stepsarray
  • Each itemobject
  • sequenceintegerrequired

    minimum: 1

  • attempt_generationintegerrequired

    minimum: 1

  • kindstringrequired

    enum: "model", "tool", "checkpoint", "approval", "output", "system"

  • statusstringrequired

    enum: "started", "succeeded", "failed", "waiting_approval", "waiting_external"

  • namestring | null
  • inputunspecified
  • outputunspecified
  • error_codestring | null
  • input_tokensinteger | null

    minimum: 0

  • output_tokensinteger | null

    minimum: 0

  • created_atstringrequired

    format: "date-time"

  • completed_atstring | null

    format: "date-time"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/agent-runs?limit=50' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/agent-runs

Start an isolated Banger internal-agent run.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

Request body required

application/json

  • valueobject

    No additional properties

  • taskstringrequired

    minLength: 1 · maxLength: 32000

  • modelstring

    minLength: 1 · maxLength: 200

  • max_stepsinteger

    minimum: 1 · maximum: 50 · default: 12

  • max_runtime_secondsinteger

    minimum: 30 · maximum: 3600 · default: 900

  • connection_toolsarray

    maxItems: 20

  • Each itemobject

    No additional properties

  • connection_idstringrequired

    format: "uuid"

  • adapter_keystringrequired

    minLength: 1 · maxLength: 63

  • operationsarrayrequired

    minItems: 1 · maxItems: 20 · uniqueItems: true

  • Each itemstring

    minLength: 1 · maxLength: 100

  • action_toolsarray

    maxItems: 6 · uniqueItems: true

  • Each itemstring

    enum: "mailbox.create", "mail.draft", "transactional.send", "template.update", "campaign.draft", "campaign.schedule"

Success response 200

Idempotent replay of the existing run.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • execution_job_idstring

    format: "uuid"

  • requested_by_actor_idstringrequired
  • taskstringrequired
  • modelstringrequired
  • capability_scopesarrayrequired
  • Each itemstring
  • resource_scopeobjectrequired
  • Additional propertyarray
  • Each itemstring
  • statusstringrequired

    enum: "queued", "running", "waiting_approval", "waiting_external", "succeeded", "failed", "cancelled"

  • max_stepsintegerrequired
  • max_runtime_secondsintegerrequired
  • current_generationintegerrequired
  • latest_checkpointobject | null
  • Additional propertyAny value
  • latest_checkpoint_sequenceintegerrequired
  • resultobject | null
  • Additional propertyAny value
  • error_codestring | null
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • started_atstring | null

    format: "date-time"

  • completed_atstring | null

    format: "date-time"

  • replayedbooleanrequired
  • stepsarray
  • Each itemobject
  • sequenceintegerrequired

    minimum: 1

  • attempt_generationintegerrequired

    minimum: 1

  • kindstringrequired

    enum: "model", "tool", "checkpoint", "approval", "output", "system"

  • statusstringrequired

    enum: "started", "succeeded", "failed", "waiting_approval", "waiting_external"

  • namestring | null
  • inputunspecified
  • outputunspecified
  • error_codestring | null
  • input_tokensinteger | null

    minimum: 0

  • output_tokensinteger | null

    minimum: 0

  • created_atstringrequired

    format: "date-time"

  • completed_atstring | null

    format: "date-time"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/agent-runs' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Idempotency-Key: examplexxxxxxxxx' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "task": "example",
  "model": "example",
  "max_steps": 12,
  "max_runtime_seconds": 900,
  "connection_tools": [
    {
      "connection_id": "00000000-0000-4000-8000-000000000001",
      "adapter_key": "example",
      "operations": [
        "example"
      ]
    }
  ],
  "action_tools": [
    "mailbox.create"
  ]
}'
GET/v1/workspaces/{workspaceId}/agent-runs/{runId}

getAgentRun

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

runId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Canonical run, checkpoint, terminal result, and ordered steps.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • execution_job_idstring

    format: "uuid"

  • requested_by_actor_idstringrequired
  • taskstringrequired
  • modelstringrequired
  • capability_scopesarrayrequired
  • Each itemstring
  • resource_scopeobjectrequired
  • Additional propertyarray
  • Each itemstring
  • statusstringrequired

    enum: "queued", "running", "waiting_approval", "waiting_external", "succeeded", "failed", "cancelled"

  • max_stepsintegerrequired
  • max_runtime_secondsintegerrequired
  • current_generationintegerrequired
  • latest_checkpointobject | null
  • Additional propertyAny value
  • latest_checkpoint_sequenceintegerrequired
  • resultobject | null
  • Additional propertyAny value
  • error_codestring | null
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • started_atstring | null

    format: "date-time"

  • completed_atstring | null

    format: "date-time"

  • replayedbooleanrequired
  • stepsarray
  • Each itemobject
  • sequenceintegerrequired

    minimum: 1

  • attempt_generationintegerrequired

    minimum: 1

  • kindstringrequired

    enum: "model", "tool", "checkpoint", "approval", "output", "system"

  • statusstringrequired

    enum: "started", "succeeded", "failed", "waiting_approval", "waiting_external"

  • namestring | null
  • inputunspecified
  • outputunspecified
  • error_codestring | null
  • input_tokensinteger | null

    minimum: 0

  • output_tokensinteger | null

    minimum: 0

  • created_atstringrequired

    format: "date-time"

  • completed_atstring | null

    format: "date-time"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/agent-runs/{runId}' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/agent-runs/{runId}/cancel

cancelAgentRun

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

runId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Agent run cancelled.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • execution_job_idstring

    format: "uuid"

  • requested_by_actor_idstringrequired
  • taskstringrequired
  • modelstringrequired
  • capability_scopesarrayrequired
  • Each itemstring
  • resource_scopeobjectrequired
  • Additional propertyarray
  • Each itemstring
  • statusstringrequired

    enum: "queued", "running", "waiting_approval", "waiting_external", "succeeded", "failed", "cancelled"

  • max_stepsintegerrequired
  • max_runtime_secondsintegerrequired
  • current_generationintegerrequired
  • latest_checkpointobject | null
  • Additional propertyAny value
  • latest_checkpoint_sequenceintegerrequired
  • resultobject | null
  • Additional propertyAny value
  • error_codestring | null
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • started_atstring | null

    format: "date-time"

  • completed_atstring | null

    format: "date-time"

  • replayedbooleanrequired
  • stepsarray
  • Each itemobject
  • sequenceintegerrequired

    minimum: 1

  • attempt_generationintegerrequired

    minimum: 1

  • kindstringrequired

    enum: "model", "tool", "checkpoint", "approval", "output", "system"

  • statusstringrequired

    enum: "started", "succeeded", "failed", "waiting_approval", "waiting_external"

  • namestring | null
  • inputunspecified
  • outputunspecified
  • error_codestring | null
  • input_tokensinteger | null

    minimum: 0

  • output_tokensinteger | null

    minimum: 0

  • created_atstringrequired

    format: "date-time"

  • completed_atstring | null

    format: "date-time"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/agent-runs/{runId}/cancel' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Agents

GET/v1/workspaces/{workspaceId}/agents

List the AI agents (MCP clients) that can act for this workspace.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Active agent connections, newest first.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • client_namestringrequired
  • scopesarrayrequired
  • Each itemstring
  • connected_atstringrequired

    format: "date-time"

  • last_active_atstringrequired

    format: "date-time"

  • connected_by_youbooleanrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/agents' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/agents/{agentId}/revoke

Revoke one agent's access. It stops working within about 30 seconds.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

agentId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Agent access revoked.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • revokedbooleanrequired

    const: true

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/agents/{agentId}/revoke' \
  --header "Authorization: Bearer $BANGER_API_KEY"

AI commands

POST/v1/workspaces/{workspaceId}/ai/command-runs

Start a mail assistant command with reads and confirmation-only proposals

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 1 · maxLength: 256

X-Banger-Product-Id
header
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • commandTextstringrequired

    minLength: 1 · maxLength: 8000

Success response 200

Read requests, an answer, or actions requiring confirmation

application/json

  • valueobject
  • runIdstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "requires_tool_results", "completed", "requires_confirmation"

  • assistantMessagestringrequired
  • toolCallsarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • toolNamestringrequired
  • argumentsobjectrequired
  • Additional propertyAny value
  • reasonstringrequired
  • proposedActionsarrayrequired
  • Each itemunspecified
  • allOf 1object
  • idstringrequired

    format: "uuid"

  • toolNamestringrequired
  • argumentsobjectrequired
  • Additional propertyAny value
  • reasonstringrequired
  • allOf 2object
  • confirmationRequiredbooleanrequired

    const: true

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/ai/command-runs' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Idempotency-Key: example' \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "commandText": "example"
}'
POST/v1/workspaces/{workspaceId}/ai/command-runs/{runId}/tool-results

Continue an actor-owned command in its original product scope

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

runId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • toolResultsarrayrequired

    minItems: 1 · maxItems: 8

  • Each itemobject
  • toolCallIdstringrequired

    format: "uuid"

  • toolNamestringrequired

    enum: "list_mailboxes", "search_mail", "list_unread", "list_work_items", "get_thread"

  • okbooleanrequired
  • resultunspecified
  • errorstring

Success response 200

Next command response; repeated results replay without another inference call

application/json

  • valueobject
  • runIdstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "requires_tool_results", "completed", "requires_confirmation"

  • assistantMessagestringrequired
  • toolCallsarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • toolNamestringrequired
  • argumentsobjectrequired
  • Additional propertyAny value
  • reasonstringrequired
  • proposedActionsarrayrequired
  • Each itemunspecified
  • allOf 1object
  • idstringrequired

    format: "uuid"

  • toolNamestringrequired
  • argumentsobjectrequired
  • Additional propertyAny value
  • reasonstringrequired
  • allOf 2object
  • confirmationRequiredbooleanrequired

    const: true

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/ai/command-runs/{runId}/tool-results' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "toolResults": [
    {
      "toolCallId": "00000000-0000-4000-8000-000000000001",
      "toolName": "list_mailboxes",
      "ok": true,
      "result": "example",
      "error": "example"
    }
  ]
}'
POST/v1/workspaces/{workspaceId}/ai/email/revise

Generate a reviewable email revision without saving or sending it.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

Request body required

application/json

  • valueobject

    No additional properties

  • connection_idstringrequired

    format: "uuid"

  • providerstringrequired

    enum: "openai", "anthropic"

  • modelstring

    maxLength: 200

  • instructionstringrequired

    minLength: 1 · maxLength: 40000

  • currentobjectrequired

    No additional properties

  • subjectstringrequired

    maxLength: 998

  • body_textstringrequired

    maxLength: 100000

  • body_htmlstringrequired

    maxLength: 200000

Success response 200

Structured revision proposal from the selected customer-owned AI connection.

application/json

  • valueobject
  • dataobjectrequired

    No additional properties

  • dataobjectrequired

    No additional properties

  • subjectstringrequired
  • subject_optionsarrayrequired
  • Each itemstring
  • body_textstringrequired
  • body_htmlstringrequired
  • change_summarystringrequired
  • provider_response_idstring
  • modelstringrequired
  • usageobject
  • Additional propertyAny value

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/ai/email/revise' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Idempotency-Key: examplexxxxxxxxx' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "connection_id": "00000000-0000-4000-8000-000000000001",
  "provider": "openai",
  "model": "example",
  "instruction": "example",
  "current": {
    "subject": "example",
    "body_text": "example",
    "body_html": "example"
  }
}'
GET/v1/workspaces/{workspaceId}/ai/email/capabilities

getAiEmailCapabilities

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • categorizationobjectrequired
  • availablebooleanrequired

    const: false

  • enabledbooleanrequired

    const: false

  • reasonstringrequired

    enum: "not_configured"

  • managedunspecifiedrequired
  • oneOf 1object
  • availablebooleanrequired

    const: false

  • oneOf 2object
  • availablebooleanrequired

    const: true

  • providerstringrequired

    enum: "openai", "anthropic"

  • modelstringrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/ai/email/capabilities' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/ai/email/generate

generateEmailWithAi

Generate a complete on-brand email design from a brief. Proposal only.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

Request body required

application/json

  • valueobject
  • briefstringrequired

    minLength: 1 · maxLength: 40000

  • audiencestring

    maxLength: 4000

  • starterobject
  • subjectstring

    maxLength: 998

  • body_textstring

    maxLength: 100000

  • body_htmlstring

    maxLength: 200000

  • connection_idstring

    format: "uuid"

  • providerstring

    enum: "openai", "anthropic"

  • modelstring

    maxLength: 200

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • dataobjectrequired
  • subjectstringrequired
  • subject_optionsarrayrequired
  • Each itemstring
  • body_textstringrequired
  • body_htmlstringrequired
  • change_summarystringrequired
  • provider_response_idstring
  • modelstringrequired
  • usageobject
  • Additional propertyAny value
  • managedbooleanrequired

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/ai/email/generate' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Idempotency-Key: examplexxxxxxxxx' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "brief": "example",
  "audience": "example",
  "starter": {
    "subject": "example",
    "body_text": "example",
    "body_html": "example"
  },
  "connection_id": "00000000-0000-4000-8000-000000000001",
  "provider": "openai",
  "model": "example"
}'

Analytics

POST/v1/workspaces/{workspaceId}/analytics/visitor

Link a website visit to the signed-in person

Requires a signed-in human session; API keys are rejected.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • visitor_idstringrequired

    pattern: "^[A-Za-z0-9-]{8,64}$"

Success response 204

Successful response.

No response body.

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/analytics/visitor' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "visitor_id": "example"
}'

Answer agents

GET/v1/workspaces/{workspaceId}/answer-agents

listAnswerAgents

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Workspace answer agents.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • identityIdstringrequired

    format: "uuid"

  • workspaceIdstringrequired

    format: "uuid"

  • originstringrequired

    const: "internal"

  • namestringrequired
  • systemPromptstring
  • enabledbooleanrequired
  • sendPolicystringrequired

    enum: "draft_only", "reviewed_send", "direct_send"

  • mailboxIdsarrayrequired
  • Each itemstring

    format: "uuid"

  • createdAtstringrequired

    format: "date-time"

  • updatedAtstringrequired

    format: "date-time"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/answer-agents' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/answer-agents

createAnswerAgent

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • namestringrequired

    minLength: 1 · maxLength: 100

  • system_promptstring

    maxLength: 32000

  • enabledboolean

    default: true

  • send_policystring

    default: "draft_only" · enum: "draft_only", "reviewed_send", "direct_send"

  • mailbox_idsarray

    maxItems: 250

  • Each itemstring

    format: "uuid"

Success response 201

Answer agent created.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • identityIdstringrequired

    format: "uuid"

  • workspaceIdstringrequired

    format: "uuid"

  • originstringrequired

    const: "internal"

  • namestringrequired
  • systemPromptstring
  • enabledbooleanrequired
  • sendPolicystringrequired

    enum: "draft_only", "reviewed_send", "direct_send"

  • mailboxIdsarrayrequired
  • Each itemstring

    format: "uuid"

  • createdAtstringrequired

    format: "date-time"

  • updatedAtstringrequired

    format: "date-time"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/answer-agents' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "name": "example",
  "system_prompt": "example",
  "enabled": true,
  "send_policy": "draft_only",
  "mailbox_ids": [
    "00000000-0000-4000-8000-000000000001"
  ]
}'

Assets

GET/v1/workspaces/{workspaceId}/assets

List product email images and their immutable public URLs.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Up to 100 newest product email images.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • product_idstringrequired

    format: "uuid"

  • filenamestringrequired
  • mime_typestringrequired

    enum: "image/png", "image/jpeg", "image/gif", "image/webp"

  • size_bytesintegerrequired

    minimum: 1 · maximum: 2097152

  • sha256stringrequired

    pattern: "^[a-f0-9]{64}$"

  • created_atstringrequired

    format: "date-time"

  • public_urlstringrequired

    format: "uri"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/assets' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
POST/v1/workspaces/{workspaceId}/assets

Store an immutable image for managed email content.

Send raw PNG, JPEG, GIF or WebP bytes with the matching Content-Type and optional X-File-Name, or JSON with base64, mime_type and filename. Both forms allow up to 2 MiB decoded image bytes. The response URL can be used directly in HTML; no localized destination registry is created.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

Request body required

image/png

  • valuestring

    format: "binary"

image/jpeg

  • valuestring

    format: "binary"

image/gif

  • valuestring

    format: "binary"

image/webp

  • valuestring

    format: "binary"

application/json

  • valueobject

    No additional properties

  • base64stringrequired

    Image bytes

  • mime_typestringrequired

    enum: "image/png", "image/jpeg", "image/gif", "image/webp"

  • filenamestring

    maxLength: 200

Success response 201

Registered image with immutable public URL.

application/json

  • valueobject
  • dataobjectrequired

    No additional properties

  • idstringrequired

    format: "uuid"

  • product_idstringrequired

    format: "uuid"

  • filenamestringrequired
  • mime_typestringrequired

    enum: "image/png", "image/jpeg", "image/gif", "image/webp"

  • size_bytesintegerrequired

    minimum: 1 · maximum: 2097152

  • sha256stringrequired

    pattern: "^[a-f0-9]{64}$"

  • created_atstringrequired

    format: "date-time"

  • public_urlstringrequired

    format: "uri"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/assets' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "base64": "example",
  "mime_type": "image/png",
  "filename": "example"
}'
GET/v1/workspaces/{workspaceId}/assets/{assetId}

Read one product email image's metadata and public URL.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

assetId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Product image metadata.

application/json

  • valueobject
  • dataobjectrequired

    No additional properties

  • idstringrequired

    format: "uuid"

  • product_idstringrequired

    format: "uuid"

  • filenamestringrequired
  • mime_typestringrequired

    enum: "image/png", "image/jpeg", "image/gif", "image/webp"

  • size_bytesintegerrequired

    minimum: 1 · maximum: 2097152

  • sha256stringrequired

    pattern: "^[a-f0-9]{64}$"

  • created_atstringrequired

    format: "date-time"

  • public_urlstringrequired

    format: "uri"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/assets/{assetId}' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'

Automation

POST/v1/workspaces/{workspaceId}/automation/jobs

createExecutionJob

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

Request body required

application/json

  • valueobject

    No additional properties

  • kindstringrequired

    minLength: 1 · maxLength: 100

  • approval_idstring

    format: "uuid"

  • capabilitiesarrayrequired

    API keys may delegate only capabilities already present on that key.

    minItems: 1 · maxItems: 50

  • Each itemstring

    maxLength: 100

  • resourcesobjectrequired
  • Additional propertyarray

    maxItems: 500

  • Each itemstring

    maxLength: 200

  • inputobjectrequired
  • Additional propertyAny value

Success response 200

Idempotent replay of an existing isolated execution job.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • placement_idstringrequired

    format: "uuid"

  • placement_generationintegerrequired

    format: "int64"

  • kindstringrequired
  • requested_by_actor_idstringrequired
  • approval_idstring | null

    format: "uuid"

  • capability_scopesarrayrequired
  • Each itemstring
  • resource_scopeobjectrequired
  • Additional propertyarray
  • Each itemstring
  • statusstringrequired

    enum: "queued", "leased", "succeeded", "failed", "cancelled"

  • attempt_countintegerrequired
  • resultunspecified
  • error_codestring | null
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • completed_atstring | null

    format: "date-time"

  • replayedbooleanrequired

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/automation/jobs' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Idempotency-Key: examplexxxxxxxxx' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "kind": "example",
  "approval_id": "00000000-0000-4000-8000-000000000001",
  "capabilities": [
    "example"
  ],
  "resources": {},
  "input": {}
}'
GET/v1/workspaces/{workspaceId}/automation/jobs/{jobId}

getExecutionJob

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

jobId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Current canonical execution state.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • placement_idstringrequired

    format: "uuid"

  • placement_generationintegerrequired

    format: "int64"

  • kindstringrequired
  • requested_by_actor_idstringrequired
  • approval_idstring | null

    format: "uuid"

  • capability_scopesarrayrequired
  • Each itemstring
  • resource_scopeobjectrequired
  • Additional propertyarray
  • Each itemstring
  • statusstringrequired

    enum: "queued", "leased", "succeeded", "failed", "cancelled"

  • attempt_countintegerrequired
  • resultunspecified
  • error_codestring | null
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • completed_atstring | null

    format: "date-time"

  • replayedbooleanrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/automation/jobs/{jobId}' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Brand

POST/v1/workspaces/{workspaceId}/brand/discover

discoverProductBrand

Read the product website and save discovered brand suggestions without overwriting explicit brand values. Requires campaigns write scope.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

product_id
query · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • brandobjectrequired
  • company_namestring

    maxLength: 160

  • logo_urlstring

    maxLength: 2000

  • wordmark_urlstring

    maxLength: 2000

  • website_urlstring

    maxLength: 2000

  • primary_colorstring

    maxLength: 7

  • accent_colorstring

    maxLength: 7

  • background_colorstring

    maxLength: 7

  • surface_colorstring

    maxLength: 7

  • text_colorstring

    maxLength: 7

  • muted_text_colorstring

    maxLength: 7

  • heading_font_familystring

    maxLength: 200

  • body_font_familystring

    maxLength: 200

  • tonestring

    maxLength: 1000

  • footer_addressstring

    maxLength: 500

  • email_stylestring

    maxLength: 20

  • sourcesobjectrequired
  • Additional propertystring

    enum: "product", "discovery", "default"

  • discovery_domainstring | nullrequired
  • missingarrayrequired
  • Each itemstring
  • product_kindstringrequired

    enum: "product", "store", "brand", "newsletter", "company", "other"

  • discovery_statusstring | null
  • product_idstringrequired

    format: "uuid"

  • product_domainstring | nullrequired
  • reviewed_atstring | null

    format: "date-time"

  • discovery_attempted_atstring | null

    format: "date-time"

  • mediaobjectrequired
  • art_base_urlstringrequired
  • hero_image_urlstring
  • email_fontsobjectrequired
  • headingobjectrequired
  • 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

  • bodyobjectrequired
  • 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

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/brand/discover?product_id=00000000-0000-4000-8000-000000000001' \
  --header "Authorization: Bearer $BANGER_API_KEY"
GET/v1/workspaces/{workspaceId}/brand

getBrand

The resolved product brand kit with per-field sources.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • brandobjectrequired
  • company_namestring

    maxLength: 160

  • logo_urlstring

    maxLength: 2000

  • wordmark_urlstring

    maxLength: 2000

  • website_urlstring

    maxLength: 2000

  • primary_colorstring

    maxLength: 7

  • accent_colorstring

    maxLength: 7

  • background_colorstring

    maxLength: 7

  • surface_colorstring

    maxLength: 7

  • text_colorstring

    maxLength: 7

  • muted_text_colorstring

    maxLength: 7

  • heading_font_familystring

    maxLength: 200

  • body_font_familystring

    maxLength: 200

  • tonestring

    maxLength: 1000

  • footer_addressstring

    maxLength: 500

  • email_stylestring

    maxLength: 20

  • sourcesobjectrequired
  • Additional propertystring

    enum: "product", "discovery", "default"

  • discovery_domainstring | nullrequired
  • missingarrayrequired
  • Each itemstring
  • product_kindstringrequired

    enum: "product", "store", "brand", "newsletter", "company", "other"

  • discovery_statusstring | null
  • product_idstringrequired

    format: "uuid"

  • product_domainstring | nullrequired
  • reviewed_atstring | null

    format: "date-time"

  • discovery_attempted_atstring | null

    format: "date-time"

  • mediaobjectrequired
  • art_base_urlstringrequired
  • hero_image_urlstring
  • email_fontsobjectrequired
  • headingobjectrequired
  • 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

  • bodyobjectrequired
  • 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

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/brand' \
  --header "Authorization: Bearer $BANGER_API_KEY"
PUT/v1/workspaces/{workspaceId}/brand

updateBrand

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueunspecified
  • anyOf 1object
  • company_namestring

    maxLength: 160

  • logo_urlstring

    maxLength: 2000

  • wordmark_urlstring

    maxLength: 2000

  • website_urlstring

    maxLength: 2000

  • primary_colorstring

    maxLength: 7

  • accent_colorstring

    maxLength: 7

  • background_colorstring

    maxLength: 7

  • surface_colorstring

    maxLength: 7

  • text_colorstring

    maxLength: 7

  • muted_text_colorstring

    maxLength: 7

  • heading_font_familystring

    maxLength: 200

  • body_font_familystring

    maxLength: 200

  • tonestring

    maxLength: 1000

  • footer_addressstring

    maxLength: 500

  • email_stylestring

    maxLength: 20

  • anyOf 2object
  • brandobjectrequired
  • company_namestring

    maxLength: 160

  • logo_urlstring

    maxLength: 2000

  • wordmark_urlstring

    maxLength: 2000

  • website_urlstring

    maxLength: 2000

  • primary_colorstring

    maxLength: 7

  • accent_colorstring

    maxLength: 7

  • background_colorstring

    maxLength: 7

  • surface_colorstring

    maxLength: 7

  • text_colorstring

    maxLength: 7

  • muted_text_colorstring

    maxLength: 7

  • heading_font_familystring

    maxLength: 200

  • body_font_familystring

    maxLength: 200

  • tonestring

    maxLength: 1000

  • footer_addressstring

    maxLength: 500

  • email_stylestring

    maxLength: 20

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • brandobjectrequired
  • company_namestring

    maxLength: 160

  • logo_urlstring

    maxLength: 2000

  • wordmark_urlstring

    maxLength: 2000

  • website_urlstring

    maxLength: 2000

  • primary_colorstring

    maxLength: 7

  • accent_colorstring

    maxLength: 7

  • background_colorstring

    maxLength: 7

  • surface_colorstring

    maxLength: 7

  • text_colorstring

    maxLength: 7

  • muted_text_colorstring

    maxLength: 7

  • heading_font_familystring

    maxLength: 200

  • body_font_familystring

    maxLength: 200

  • tonestring

    maxLength: 1000

  • footer_addressstring

    maxLength: 500

  • email_stylestring

    maxLength: 20

  • sourcesobjectrequired
  • Additional propertystring

    enum: "product", "discovery", "default"

  • discovery_domainstring | nullrequired
  • missingarrayrequired
  • Each itemstring
  • product_kindstringrequired

    enum: "product", "store", "brand", "newsletter", "company", "other"

  • discovery_statusstring | null
  • product_idstringrequired

    format: "uuid"

  • product_domainstring | nullrequired
  • reviewed_atstring | null

    format: "date-time"

  • discovery_attempted_atstring | null

    format: "date-time"

  • mediaobjectrequired
  • art_base_urlstringrequired
  • hero_image_urlstring
  • email_fontsobjectrequired
  • headingobjectrequired
  • 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

  • bodyobjectrequired
  • 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

curl example

curl --request PUT --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/brand' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "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"
}'
PATCH/v1/workspaces/{workspaceId}/brand/patch

patchProductBrandFooter

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 1 · maxLength: 256

Request body required

application/json

  • valueobject

    No additional properties

  • brandobjectrequired

    No additional properties

  • company_namestring

    minLength: 0 · maxLength: 2000

  • logo_urlstring

    minLength: 0 · maxLength: 2000

  • wordmark_urlstring

    minLength: 0 · maxLength: 2000

  • website_urlstring

    minLength: 0 · maxLength: 2000

  • primary_colorstring

    minLength: 0 · maxLength: 2000

  • accent_colorstring

    minLength: 0 · maxLength: 2000

  • background_colorstring

    minLength: 0 · maxLength: 2000

  • surface_colorstring

    minLength: 0 · maxLength: 2000

  • text_colorstring

    minLength: 0 · maxLength: 2000

  • muted_text_colorstring

    minLength: 0 · maxLength: 2000

  • heading_font_familystring

    minLength: 0 · maxLength: 2000

  • body_font_familystring

    minLength: 0 · maxLength: 2000

  • tonestring

    minLength: 0 · maxLength: 2000

  • footer_addressstring

    minLength: 0 · maxLength: 2000

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
  • brandobjectrequired
  • company_namestring

    maxLength: 160

  • logo_urlstring

    maxLength: 2000

  • wordmark_urlstring

    maxLength: 2000

  • website_urlstring

    maxLength: 2000

  • primary_colorstring

    maxLength: 7

  • accent_colorstring

    maxLength: 7

  • background_colorstring

    maxLength: 7

  • surface_colorstring

    maxLength: 7

  • text_colorstring

    maxLength: 7

  • muted_text_colorstring

    maxLength: 7

  • heading_font_familystring

    maxLength: 200

  • body_font_familystring

    maxLength: 200

  • tonestring

    maxLength: 1000

  • footer_addressstring

    maxLength: 500

  • email_stylestring

    maxLength: 20

  • sourcesobjectrequired
  • Additional propertystring

    enum: "product", "discovery", "default"

  • discovery_domainstring | nullrequired
  • missingarrayrequired
  • Each itemstring
  • product_kindstring

    enum: "product", "store", "brand", "newsletter", "company", "other"

  • discovery_statusstring | null
  • product_idstringrequired

    format: "uuid"

  • product_domainstring | null
  • reviewed_atstring | null

    format: "date-time"

  • discovery_attempted_atstring | null

    format: "date-time"

  • hero_image_urlstring | null
  • replayedbooleanrequired

curl example

curl --request PATCH --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/brand/patch' \
  --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 '{
  "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"
  }
}'

Changes

GET/v1/workspaces/{workspaceId}/changes

listChanges

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

after_revision
query · required
  • valueinteger

    format: "int64" · minimum: 0

limit
query
  • valueinteger

    minimum: 1 · maximum: 500 · default: 200

Request body

No request body is specified in the contract.

Success response 200

Ordered invalidations after a client revision.

application/json

  • valueobject
  • dataobjectrequired
  • current_revisionintegerrequired

    format: "int64"

  • changesarrayrequired
  • Each itemobject
  • revisionintegerrequired

    format: "int64"

  • topicsarrayrequired
  • Each itemstring

    enum: "mailboxes", "threads", "messages", "work", "drafts", "contacts", "campaigns", "deliverability"

  • mailbox_idsarray
  • Each itemstring

    format: "uuid"

  • created_atstringrequired

    format: "date-time"

  • has_morebooleanrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/changes?after_revision=0&limit=200' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Commands

POST/v1/workspaces/{workspaceId}/commands

createCommand

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

Request body required

application/json

  • valueobject
  • typestringrequired

    enum: "mark_read", "mark_unread", "archive", "unarchive", "trash", "restore", "spam", "not_spam", "star", "unstar", "add_label", "remove_label", "move", "assign", "set_work_status"

  • targetobjectrequired
  • thread_idstringrequired

    format: "uuid"

  • parametersobject
  • Additional propertyAny value

Success response 202

Command committed and queued for provider execution.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • typestringrequired
  • statusstringrequired

    enum: "accepted", "executing", "succeeded", "failed"

  • workspace_revisionintegerrequired

    format: "int64"

  • created_atstringrequired

    format: "date-time"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/commands' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Idempotency-Key: examplexxxxxxxxx' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "type": "mark_read",
  "target": {
    "thread_id": "00000000-0000-4000-8000-000000000001"
  },
  "parameters": {}
}'
GET/v1/workspaces/{workspaceId}/commands/{commandId}

getCommand

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

commandId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Durable provider-command status.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • typestringrequired
  • statusstringrequired

    enum: "accepted", "executing", "succeeded", "failed"

  • workspace_revisionintegerrequired

    format: "int64"

  • created_atstringrequired

    format: "date-time"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/commands/{commandId}' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Communication policy

GET/v1/workspaces/{workspaceId}/communication-policy

Read product-wide recipient conflict, frequency, and delivery-window policy.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Versioned communication policy.

application/json

  • valueobject
  • dataobjectrequired
  • versionintegerrequired
  • policyobjectrequired

    No additional properties

  • conflictstringrequired

    enum: "defer", "discard"

  • minimumIntervalSecondsinteger

    minimum: 0 · maximum: 604800

  • capsarray

    maxItems: 8

  • Each itemobject

    No additional properties

  • countintegerrequired

    minimum: 1

  • windowSecondsintegerrequired

    minimum: 1 · maximum: 2592000

  • windowobject

    No additional properties

  • startstringrequired

    pattern: "^([01][0-9]|2[0-3]):[0-5][0-9]$"

  • endstringrequired

    pattern: "^([01][0-9]|2[0-3]):[0-5][0-9]$"

  • timeZonestringrequired
  • weekdaysarray

    maxItems: 7

  • Each iteminteger

    minimum: 0 · maximum: 6

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/communication-policy' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
PUT/v1/workspaces/{workspaceId}/communication-policy

Save the product communication policy with optimistic version check.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • expected_versionintegerrequired

    minimum: 1

  • policyobjectrequired

    No additional properties

  • conflictstringrequired

    enum: "defer", "discard"

  • minimumIntervalSecondsinteger

    minimum: 0 · maximum: 604800

  • capsarray

    maxItems: 8

  • Each itemobject

    No additional properties

  • countintegerrequired

    minimum: 1

  • windowSecondsintegerrequired

    minimum: 1 · maximum: 2592000

  • windowobject

    No additional properties

  • startstringrequired

    pattern: "^([01][0-9]|2[0-3]):[0-5][0-9]$"

  • endstringrequired

    pattern: "^([01][0-9]|2[0-3]):[0-5][0-9]$"

  • timeZonestringrequired
  • weekdaysarray

    maxItems: 7

  • Each iteminteger

    minimum: 0 · maximum: 6

Success response 200

Updated versioned policy.

application/json

  • valueobject
  • dataobjectrequired
  • versionintegerrequired
  • policyobjectrequired

    No additional properties

  • conflictstringrequired

    enum: "defer", "discard"

  • minimumIntervalSecondsinteger

    minimum: 0 · maximum: 604800

  • capsarray

    maxItems: 8

  • Each itemobject

    No additional properties

  • countintegerrequired

    minimum: 1

  • windowSecondsintegerrequired

    minimum: 1 · maximum: 2592000

  • windowobject

    No additional properties

  • startstringrequired

    pattern: "^([01][0-9]|2[0-3]):[0-5][0-9]$"

  • endstringrequired

    pattern: "^([01][0-9]|2[0-3]):[0-5][0-9]$"

  • timeZonestringrequired
  • weekdaysarray

    maxItems: 7

  • Each iteminteger

    minimum: 0 · maximum: 6

curl example

curl --request PUT --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/communication-policy' \
  --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,
  "policy": {
    "conflict": "defer",
    "minimumIntervalSeconds": 0,
    "caps": [
      {
        "count": 1,
        "windowSeconds": 1
      }
    ],
    "window": {
      "start": "example",
      "end": "example",
      "timeZone": "example",
      "weekdays": [
        0
      ]
    }
  }
}'
POST/v1/workspaces/{workspaceId}/communication-policy/simulate

Read-only policy simulation for fixed send requests to one recipient.

Does not change reservations or move dependent Journey steps.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • policyobject

    No additional properties

  • conflictstringrequired

    enum: "defer", "discard"

  • minimumIntervalSecondsinteger

    minimum: 0 · maximum: 604800

  • capsarray

    maxItems: 8

  • Each itemobject

    No additional properties

  • countintegerrequired

    minimum: 1

  • windowSecondsintegerrequired

    minimum: 1 · maximum: 2592000

  • windowobject

    No additional properties

  • startstringrequired

    pattern: "^([01][0-9]|2[0-3]):[0-5][0-9]$"

  • endstringrequired

    pattern: "^([01][0-9]|2[0-3]):[0-5][0-9]$"

  • timeZonestringrequired
  • weekdaysarray

    maxItems: 7

  • Each iteminteger

    minimum: 0 · maximum: 6

  • historyarray

    maxItems: 10000

  • Each itemstring

    format: "date-time"

  • requestsarrayrequired

    maxItems: 1000

  • Each itemobject
  • idstringrequired
  • atstringrequired

    format: "date-time"

  • categorystringrequired

    enum: "urgent", "product", "promotional"

  • source_kindstringrequired

    enum: "journey", "broadcast"

  • expiresAtstring

    format: "date-time"

  • deliveryBlockedboolean

Success response 200

Per-request send, defer, or discard decision timeline with reasons.

application/json

  • valueobject
  • dataobjectrequired
  • policyobjectrequired

    No additional properties

  • conflictstringrequired

    enum: "defer", "discard"

  • minimumIntervalSecondsinteger

    minimum: 0 · maximum: 604800

  • capsarray

    maxItems: 8

  • Each itemobject

    No additional properties

  • countintegerrequired

    minimum: 1

  • windowSecondsintegerrequired

    minimum: 1 · maximum: 2592000

  • windowobject

    No additional properties

  • startstringrequired

    pattern: "^([01][0-9]|2[0-3]):[0-5][0-9]$"

  • endstringrequired

    pattern: "^([01][0-9]|2[0-3]):[0-5][0-9]$"

  • timeZonestringrequired
  • weekdaysarray

    maxItems: 7

  • Each iteminteger

    minimum: 0 · maximum: 6

  • policy_versioninteger | nullrequired
  • timelinearrayrequired
  • Each itemobject
  • idstringrequired
  • source_kindstringrequired

    enum: "journey", "broadcast"

  • requested_atstringrequired

    format: "date-time"

  • actionstringrequired

    enum: "send", "defer", "discard"

  • atstringrequired

    format: "date-time"

  • reasonstringrequired
  • scopestringrequired

    enum: "one_recipient_fixed_send_requests"

  • warningsarrayrequired
  • Each itemstring

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/communication-policy/simulate' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "policy": {
    "conflict": "defer",
    "minimumIntervalSeconds": 0,
    "caps": [
      {
        "count": 1,
        "windowSeconds": 1
      }
    ],
    "window": {
      "start": "example",
      "end": "example",
      "timeZone": "example",
      "weekdays": [
        0
      ]
    }
  },
  "history": [
    "2026-01-01T00:00:00Z"
  ],
  "requests": [
    {
      "id": "example",
      "at": "2026-01-01T00:00:00Z",
      "category": "urgent",
      "source_kind": "journey",
      "expiresAt": "2026-01-01T00:00:00Z",
      "deliveryBlocked": true
    }
  ]
}'

Content settings

GET/v1/workspaces/{workspaceId}/content-settings

Read product-level locale, fallback, timezone, glossary, and review settings.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Current content settings.

application/json

  • valueobject
  • dataobjectrequired
  • source_localestringrequired
  • configured_localesarrayrequired
  • Each itemstring
  • fallback_chainarrayrequired
  • Each itemstring
  • timezonestringrequired
  • glossaryobjectrequired
  • Additional propertystring
  • manual_translation_reviewbooleanrequired
  • versionintegerrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/content-settings' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
PUT/v1/workspaces/{workspaceId}/content-settings

Save product-level content settings with optimistic version check.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • source_localestringrequired
  • configured_localesarrayrequired
  • Each itemstring
  • fallback_chainarrayrequired
  • Each itemstring
  • timezonestringrequired
  • glossaryobjectrequired
  • Additional propertystring
  • manual_translation_reviewbooleanrequired
  • expected_versionintegerrequired

    minimum: 0

Success response 200

Saved content settings.

application/json

  • valueobject
  • dataobjectrequired
  • source_localestringrequired
  • configured_localesarrayrequired
  • Each itemstring
  • fallback_chainarrayrequired
  • Each itemstring
  • timezonestringrequired
  • glossaryobjectrequired
  • Additional propertystring
  • manual_translation_reviewbooleanrequired
  • versionintegerrequired

curl example

curl --request PUT --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/content-settings' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "source_locale": "example",
  "configured_locales": [
    "example"
  ],
  "fallback_chain": [
    "example"
  ],
  "timezone": "example",
  "glossary": {},
  "manual_translation_review": true,
  "expected_version": 0
}'

Deliverability

GET/v1/workspaces/{workspaceId}/deliverability

getDeliverabilitySummary

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

since
query
  • valuestring

    format: "date-time"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • counting_basisstring

    enum: "recipients", "events"

  • simulator_eventsinteger
  • sincestringrequired

    format: "date-time"

  • generated_atstringrequired

    format: "date-time"

  • totalsobjectrequired
  • sent_countinteger

    format: "int64"

  • delivered_countinteger

    format: "int64"

  • deferred_countinteger

    format: "int64"

  • bounced_countinteger

    format: "int64"

  • complained_countinteger

    format: "int64"

  • opened_countinteger

    format: "int64"

  • clicked_countinteger

    format: "int64"

  • unsubscribed_countinteger

    format: "int64"

  • failed_countinteger

    format: "int64"

  • suppressed_countinteger

    format: "int64"

  • last_event_atstring | null

    format: "date-time"

  • Additional propertyAny value
  • time_seriesarrayrequired
  • Each itemunspecified
  • allOf 1object
  • sent_countinteger

    format: "int64"

  • delivered_countinteger

    format: "int64"

  • deferred_countinteger

    format: "int64"

  • bounced_countinteger

    format: "int64"

  • complained_countinteger

    format: "int64"

  • opened_countinteger

    format: "int64"

  • clicked_countinteger

    format: "int64"

  • unsubscribed_countinteger

    format: "int64"

  • failed_countinteger

    format: "int64"

  • suppressed_countinteger

    format: "int64"

  • last_event_atstring | null

    format: "date-time"

  • Additional propertyAny value
  • allOf 2object
  • bucketstringrequired

    format: "date"

  • providersarrayrequired
  • Each itemunspecified
  • allOf 1object
  • sent_countinteger

    format: "int64"

  • delivered_countinteger

    format: "int64"

  • deferred_countinteger

    format: "int64"

  • bounced_countinteger

    format: "int64"

  • complained_countinteger

    format: "int64"

  • opened_countinteger

    format: "int64"

  • clicked_countinteger

    format: "int64"

  • unsubscribed_countinteger

    format: "int64"

  • failed_countinteger

    format: "int64"

  • suppressed_countinteger

    format: "int64"

  • last_event_atstring | null

    format: "date-time"

  • Additional propertyAny value
  • allOf 2object
  • provider_connection_idstring | null

    format: "uuid"

  • providerstringrequired
  • display_namestringrequired
  • ownershipstringrequired
  • statusstringrequired
  • recipient_domainsarrayrequired
  • Each itemunspecified
  • allOf 1object
  • sent_countinteger

    format: "int64"

  • delivered_countinteger

    format: "int64"

  • deferred_countinteger

    format: "int64"

  • bounced_countinteger

    format: "int64"

  • complained_countinteger

    format: "int64"

  • opened_countinteger

    format: "int64"

  • clicked_countinteger

    format: "int64"

  • unsubscribed_countinteger

    format: "int64"

  • failed_countinteger

    format: "int64"

  • suppressed_countinteger

    format: "int64"

  • last_event_atstring | null

    format: "date-time"

  • Additional propertyAny value
  • allOf 2object
  • recipient_domainstringrequired
  • sending_streamsarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • domainstringrequired
  • stream_kindstringrequired
  • display_namestringrequired
  • statusstringrequired
  • status_reasonstring | null
  • provider_statusstring | null
  • required_recordsintegerrequired

    format: "int64"

  • verified_recordsintegerrequired

    format: "int64"

  • pending_recordsintegerrequired

    format: "int64"

  • error_recordsintegerrequired

    format: "int64"

  • last_checked_atstring | null

    format: "date-time"

  • feedback_pipelineobjectrequired

    No additional properties

  • statusstringrequired

    enum: "healthy", "degraded", "unproven"

  • eligible_attemptsintegerrequired

    format: "int64"

  • unmatched_attemptsintegerrequired

    format: "int64"

  • last_receipt_atstring | null

    format: "date-time"

  • issuesarrayrequired
  • Each itemobject
  • severitystringrequired

    enum: "warning", "critical"

  • codestringrequired
  • titlestringrequired
  • detailstringrequired
  • resource_kindstringrequired
  • resource_idstringrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/deliverability?since=2026-01-01T00%3A00%3A00Z' \
  --header "Authorization: Bearer $BANGER_API_KEY"
GET/v1/workspaces/{workspaceId}/deliverability/resolutions

listDeliverabilityResolutions

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

since
query
  • valuestring

    format: "date-time"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • idstringrequired
  • reasonstringrequired

    enum: "complaint", "hard_bounce"

  • countintegerrequired
  • domainsarrayrequired
  • Each itemstring
  • statusstringrequired
  • decidedAtstring | null

    format: "date-time"

  • titlestringrequired
  • explanationstringrequired
  • impactstringrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/deliverability/resolutions?since=2026-01-01T00%3A00%3A00Z' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/deliverability/resolutions

decideDeliverabilityResolution

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

since
query
  • valuestring

    format: "date-time"

Request body required

application/json

  • valueobject
  • idstringrequired

    minLength: 64 · maxLength: 64

  • decisionstringrequired

    enum: "approved", "rejected"

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • statusstringrequired

    enum: "approved", "rejected"

  • approvalIdstringrequired

    format: "uuid"

  • replayedboolean
  • countinteger

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/deliverability/resolutions?since=2026-01-01T00%3A00%3A00Z' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "id": "examplexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "decision": "approved"
}'

Documents

GET/v1/workspaces/{workspaceId}/documents

listDocuments

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

cursor
query
  • valuestring

    maxLength: 1024

limit
query
  • valueinteger

    minimum: 1 · maximum: 100 · default: 50

mailbox_id
query
  • valuestring

    format: "uuid"

q
query
  • valuestring

    maxLength: 512

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • message_idstringrequired

    format: "uuid"

  • mailbox_idstringrequired

    format: "uuid"

  • thread_idstringrequired

    format: "uuid"

  • filenamestringrequired
  • content_typestringrequired
  • size_bytesintegerrequired
  • sent_atstringrequired

    format: "date-time"

  • subjectstringrequired
  • pageobjectrequired
  • next_cursorstring
  • has_morebooleanrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/documents?cursor=example&limit=50&mailbox_id=00000000-0000-4000-8000-000000000001&q=example' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Email preview

GET/v1/workspaces/{workspaceId}/email-preview

Render saved emails for visual iteration without sending

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

kind
query · required
  • valuestring

    enum: "template", "broadcast", "journey"

id
query · required
  • valuestring

    format: "uuid"

locale
query

Optional BCP 47 locale for a managed Broadcast preview.

  • valuestring

    maxLength: 64

variant
query

Optional managed Broadcast experiment variant key.

  • valuestring

    maxLength: 40

x-banger-product-id
header · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Saved email content and Journey sequence

application/json

  • valueobject
  • dataobjectrequired
  • resource_kindstringrequired

    enum: "template", "broadcast", "journey"

  • resource_idstringrequired

    format: "uuid"

  • product_idstringrequired

    format: "uuid"

  • namestringrequired
  • statusstringrequired
  • selected_email_keystring
  • itemsarrayrequired
  • Each itemobject
  • keystringrequired
  • kindstringrequired
  • namestringrequired
  • subjectstring
  • preview_textstring
  • body_htmlstring
  • body_textstring
  • detailstring
  • sample_valuesbooleanrequired
  • image_assetsobject
  • Additional propertystring

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/email-preview?kind=template&id=00000000-0000-4000-8000-000000000001&locale=example&variant=example' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'x-banger-product-id: 00000000-0000-4000-8000-000000000001'

Experiments

GET/v1/workspaces/{workspaceId}/experiments

listExperiments

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • namestringrequired

    minLength: 1 · maxLength: 200

  • subject_kindstringrequired

    enum: "campaign", "sequence_step", "automation_rule"

  • subject_idstringrequired

    minLength: 1 · maxLength: 200

  • dimensionstringrequired

    enum: "subject", "design", "content", "from_name"

  • variantsarrayrequired

    minItems: 2 · maxItems: 4

  • Each itemobject
  • keystring

    pattern: "^[a-z0-9][a-z0-9_-]{0,39}$"

  • labelstring

    maxLength: 120

  • subjectstring

    minLength: 1 · maxLength: 998

  • template_idstring

    format: "uuid"

  • contentobject
  • Additional propertystring

    Further nesting omitted

  • from_namestring

    minLength: 1 · maxLength: 200

  • allocationarray
  • Each iteminteger

    minimum: 1 · maximum: 100

  • sample_percentinteger

    minimum: 5 · maximum: 100 · default: 100

  • primary_metricstring

    default: "human_click" · enum: "human_open", "human_click", "reply", "conversion"

  • min_sample_per_arminteger

    minimum: 10 · maximum: 100000 · default: 100

  • decisionobject
  • modestring

    enum: "manual", "auto"

  • after_hoursinteger

    minimum: 1 · maximum: 336

  • confidencenumber

    minimum: 0.8 · maximum: 0.99

  • guardrailsobject
  • max_complaint_ratenumber

    maximum: 1 · exclusiveMinimum: 0

  • max_unsubscribe_ratenumber

    maximum: 1 · exclusiveMinimum: 0

  • idstringrequired

    format: "uuid"

  • product_idstring

    format: "uuid"

  • statusstringrequired

    enum: "running", "decided", "stopped"

  • winner_keystring | null
  • decided_bystring | null
  • decision_basisstring | null

    enum: "confident", "deadline", "guardrail", "manual", null

  • decision_confidencenumber | null
  • decision_reasonstring | null
  • started_atstring

    format: "date-time"

  • decided_atstring | null

    format: "date-time"

  • created_by_actor_idstring
  • created_atstring

    format: "date-time"

  • updated_atstring

    format: "date-time"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/experiments' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/experiments

createExperiment

Start an A/B test on a Broadcast, journey step, or automation rule.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    Variant payload must match dimension: subject, template_id (design), content, or from_name. Keys must be unique and cannot be holdback. Allocation must have one percentage per variant and sum to 100; omitted allocation splits evenly.

  • namestringrequired

    minLength: 1 · maxLength: 200

  • subject_kindstringrequired

    enum: "campaign", "sequence_step", "automation_rule"

  • subject_idstringrequired

    minLength: 1 · maxLength: 200

  • dimensionstringrequired

    enum: "subject", "design", "content", "from_name"

  • variantsarrayrequired

    minItems: 2 · maxItems: 4

  • Each itemobject
  • keystring

    pattern: "^[a-z0-9][a-z0-9_-]{0,39}$"

  • labelstring

    maxLength: 120

  • subjectstring

    minLength: 1 · maxLength: 998

  • template_idstring

    format: "uuid"

  • contentobject
  • Additional propertystring
  • from_namestring

    minLength: 1 · maxLength: 200

  • allocationarray
  • Each iteminteger

    minimum: 1 · maximum: 100

  • sample_percentinteger

    minimum: 5 · maximum: 100 · default: 100

  • primary_metricstring

    default: "human_click" · enum: "human_open", "human_click", "reply", "conversion"

  • min_sample_per_arminteger

    minimum: 10 · maximum: 100000 · default: 100

  • decisionobject
  • modestring

    enum: "manual", "auto"

  • after_hoursinteger

    minimum: 1 · maximum: 336

  • confidencenumber

    minimum: 0.8 · maximum: 0.99

  • guardrailsobject
  • max_complaint_ratenumber

    maximum: 1 · exclusiveMinimum: 0

  • max_unsubscribe_ratenumber

    maximum: 1 · exclusiveMinimum: 0

Success response 201

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • namestringrequired

    minLength: 1 · maxLength: 200

  • subject_kindstringrequired

    enum: "campaign", "sequence_step", "automation_rule"

  • subject_idstringrequired

    minLength: 1 · maxLength: 200

  • dimensionstringrequired

    enum: "subject", "design", "content", "from_name"

  • variantsarrayrequired

    minItems: 2 · maxItems: 4

  • Each itemobject
  • keystring

    pattern: "^[a-z0-9][a-z0-9_-]{0,39}$"

  • labelstring

    maxLength: 120

  • subjectstring

    minLength: 1 · maxLength: 998

  • template_idstring

    format: "uuid"

  • contentobject
  • Additional propertystring
  • from_namestring

    minLength: 1 · maxLength: 200

  • allocationarray
  • Each iteminteger

    minimum: 1 · maximum: 100

  • sample_percentinteger

    minimum: 5 · maximum: 100 · default: 100

  • primary_metricstring

    default: "human_click" · enum: "human_open", "human_click", "reply", "conversion"

  • min_sample_per_arminteger

    minimum: 10 · maximum: 100000 · default: 100

  • decisionobject
  • modestring

    enum: "manual", "auto"

  • after_hoursinteger

    minimum: 1 · maximum: 336

  • confidencenumber

    minimum: 0.8 · maximum: 0.99

  • guardrailsobject
  • max_complaint_ratenumber

    maximum: 1 · exclusiveMinimum: 0

  • max_unsubscribe_ratenumber

    maximum: 1 · exclusiveMinimum: 0

  • idstringrequired

    format: "uuid"

  • product_idstring

    format: "uuid"

  • statusstringrequired

    enum: "running", "decided", "stopped"

  • winner_keystring | null
  • decided_bystring | null
  • decision_basisstring | null

    enum: "confident", "deadline", "guardrail", "manual", null

  • decision_confidencenumber | null
  • decision_reasonstring | null
  • started_atstring

    format: "date-time"

  • decided_atstring | null

    format: "date-time"

  • created_by_actor_idstring
  • created_atstring

    format: "date-time"

  • updated_atstring

    format: "date-time"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/experiments' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "name": "example",
  "subject_kind": "campaign",
  "subject_id": "example",
  "dimension": "subject",
  "variants": [
    {
      "key": "example",
      "label": "example",
      "subject": "example",
      "template_id": "00000000-0000-4000-8000-000000000001",
      "content": {},
      "from_name": "example"
    }
  ],
  "allocation": [
    1
  ],
  "sample_percent": 100,
  "primary_metric": "human_click",
  "min_sample_per_arm": 100,
  "decision": {
    "mode": "manual",
    "after_hours": 1,
    "confidence": 0.8
  },
  "guardrails": {
    "max_complaint_rate": 1,
    "max_unsubscribe_rate": 1
  }
}'
GET/v1/workspaces/{workspaceId}/experiments/{experimentId}

getExperiment

The experiment with per-variant results and a suggested winner.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

experimentId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataunspecifiedrequired
  • allOf 1object
  • namestringrequired

    minLength: 1 · maxLength: 200

  • subject_kindstringrequired

    enum: "campaign", "sequence_step", "automation_rule"

  • subject_idstringrequired

    minLength: 1 · maxLength: 200

  • dimensionstringrequired

    enum: "subject", "design", "content", "from_name"

  • variantsarrayrequired

    minItems: 2 · maxItems: 4

  • Each itemobject
  • keystring

    pattern: "^[a-z0-9][a-z0-9_-]{0,39}$"

  • labelstring

    maxLength: 120

  • subjectstring

    minLength: 1 · maxLength: 998

  • template_idstring

    format: "uuid"

  • contentobject
  • Additional propertystring

    Further nesting omitted

  • from_namestring

    minLength: 1 · maxLength: 200

  • allocationarray
  • Each iteminteger

    minimum: 1 · maximum: 100

  • sample_percentinteger

    minimum: 5 · maximum: 100 · default: 100

  • primary_metricstring

    default: "human_click" · enum: "human_open", "human_click", "reply", "conversion"

  • min_sample_per_arminteger

    minimum: 10 · maximum: 100000 · default: 100

  • decisionobject
  • modestring

    enum: "manual", "auto"

  • after_hoursinteger

    minimum: 1 · maximum: 336

  • confidencenumber

    minimum: 0.8 · maximum: 0.99

  • guardrailsobject
  • max_complaint_ratenumber

    maximum: 1 · exclusiveMinimum: 0

  • max_unsubscribe_ratenumber

    maximum: 1 · exclusiveMinimum: 0

  • idstringrequired

    format: "uuid"

  • product_idstring

    format: "uuid"

  • statusstringrequired

    enum: "running", "decided", "stopped"

  • winner_keystring | null
  • decided_bystring | null
  • decision_basisstring | null

    enum: "confident", "deadline", "guardrail", "manual", null

  • decision_confidencenumber | null
  • decision_reasonstring | null
  • started_atstring

    format: "date-time"

  • decided_atstring | null

    format: "date-time"

  • created_by_actor_idstring
  • created_atstring

    format: "date-time"

  • updated_atstring

    format: "date-time"

  • allOf 2object
  • resultsarrayrequired
  • Each itemobject
  • keystring
  • labelstring
  • sendsinteger
  • deliveredinteger
  • human_opensinteger
  • human_clicksinteger
  • repliesinteger
  • conversionsinteger
  • unsubscribesinteger
  • complaintsinteger
  • ratenumber
  • lift_vs_firstnumber | null
  • confidence_vs_firstnumber | null
  • sample_okboolean
  • guardrail_trippedboolean
  • suggested_winnerobject
  • keystringrequired
  • reasonstringrequired
  • basisstringrequired

    enum: "confident", "deadline", "guardrail"

  • confidencenumber | nullrequired
  • sample_okbooleanrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/experiments/{experimentId}' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/experiments/{experimentId}/decide

decideExperiment

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

experimentId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • winner_keystringrequired

    minLength: 1 · maxLength: 40

  • reasonstring

    maxLength: 500

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • namestringrequired

    minLength: 1 · maxLength: 200

  • subject_kindstringrequired

    enum: "campaign", "sequence_step", "automation_rule"

  • subject_idstringrequired

    minLength: 1 · maxLength: 200

  • dimensionstringrequired

    enum: "subject", "design", "content", "from_name"

  • variantsarrayrequired

    minItems: 2 · maxItems: 4

  • Each itemobject
  • keystring

    pattern: "^[a-z0-9][a-z0-9_-]{0,39}$"

  • labelstring

    maxLength: 120

  • subjectstring

    minLength: 1 · maxLength: 998

  • template_idstring

    format: "uuid"

  • contentobject
  • Additional propertystring
  • from_namestring

    minLength: 1 · maxLength: 200

  • allocationarray
  • Each iteminteger

    minimum: 1 · maximum: 100

  • sample_percentinteger

    minimum: 5 · maximum: 100 · default: 100

  • primary_metricstring

    default: "human_click" · enum: "human_open", "human_click", "reply", "conversion"

  • min_sample_per_arminteger

    minimum: 10 · maximum: 100000 · default: 100

  • decisionobject
  • modestring

    enum: "manual", "auto"

  • after_hoursinteger

    minimum: 1 · maximum: 336

  • confidencenumber

    minimum: 0.8 · maximum: 0.99

  • guardrailsobject
  • max_complaint_ratenumber

    maximum: 1 · exclusiveMinimum: 0

  • max_unsubscribe_ratenumber

    maximum: 1 · exclusiveMinimum: 0

  • idstringrequired

    format: "uuid"

  • product_idstring

    format: "uuid"

  • statusstringrequired

    enum: "running", "decided", "stopped"

  • winner_keystring | null
  • decided_bystring | null
  • decision_basisstring | null

    enum: "confident", "deadline", "guardrail", "manual", null

  • decision_confidencenumber | null
  • decision_reasonstring | null
  • started_atstring

    format: "date-time"

  • decided_atstring | null

    format: "date-time"

  • created_by_actor_idstring
  • created_atstring

    format: "date-time"

  • updated_atstring

    format: "date-time"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/experiments/{experimentId}/decide' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "winner_key": "example",
  "reason": "example"
}'
POST/v1/workspaces/{workspaceId}/experiments/{experimentId}/stop

stopExperiment

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

experimentId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • namestringrequired

    minLength: 1 · maxLength: 200

  • subject_kindstringrequired

    enum: "campaign", "sequence_step", "automation_rule"

  • subject_idstringrequired

    minLength: 1 · maxLength: 200

  • dimensionstringrequired

    enum: "subject", "design", "content", "from_name"

  • variantsarrayrequired

    minItems: 2 · maxItems: 4

  • Each itemobject
  • keystring

    pattern: "^[a-z0-9][a-z0-9_-]{0,39}$"

  • labelstring

    maxLength: 120

  • subjectstring

    minLength: 1 · maxLength: 998

  • template_idstring

    format: "uuid"

  • contentobject
  • Additional propertystring
  • from_namestring

    minLength: 1 · maxLength: 200

  • allocationarray
  • Each iteminteger

    minimum: 1 · maximum: 100

  • sample_percentinteger

    minimum: 5 · maximum: 100 · default: 100

  • primary_metricstring

    default: "human_click" · enum: "human_open", "human_click", "reply", "conversion"

  • min_sample_per_arminteger

    minimum: 10 · maximum: 100000 · default: 100

  • decisionobject
  • modestring

    enum: "manual", "auto"

  • after_hoursinteger

    minimum: 1 · maximum: 336

  • confidencenumber

    minimum: 0.8 · maximum: 0.99

  • guardrailsobject
  • max_complaint_ratenumber

    maximum: 1 · exclusiveMinimum: 0

  • max_unsubscribe_ratenumber

    maximum: 1 · exclusiveMinimum: 0

  • idstringrequired

    format: "uuid"

  • product_idstring

    format: "uuid"

  • statusstringrequired

    enum: "running", "decided", "stopped"

  • winner_keystring | null
  • decided_bystring | null
  • decision_basisstring | null

    enum: "confident", "deadline", "guardrail", "manual", null

  • decision_confidencenumber | null
  • decision_reasonstring | null
  • started_atstring

    format: "date-time"

  • decided_atstring | null

    format: "date-time"

  • created_by_actor_idstring
  • created_atstring

    format: "date-time"

  • updated_atstring

    format: "date-time"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/experiments/{experimentId}/stop' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Feedback

GET/v1/workspaces/{workspaceId}/feedback

Check whether customer feedback delivery is available

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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

Report a bug, send feedback, or suggest a feature

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

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

x-banger-product-id
header
  • valuestring

    format: "uuid"

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

  • valueobject
  • dataobject
  • idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "submitted"

  • linearIssueIdentifierstring | null
  • linearIssueUrlstring | null

    format: "uri"

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

Upload a screenshot or video to private Linear storage

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

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

attachment_id
query

Required for binary uploads; UUID per file.

  • valuestring

    format: "uuid"

x-banger-filename
header

URI-encoded filename, required for binary uploads.

  • valuestring

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

  • valueobject
  • dataobjectrequired
  • attachment_idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "ready"

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

Prepare a direct agent or server media upload

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

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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

Verify a direct media upload before attaching it to feedback

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

attachmentId
path · required
  • valuestring

    format: "uuid"

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

  • valueobject
  • dataobjectrequired
  • attachment_idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "ready"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/feedback/attachments/{attachmentId}/complete' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Home

GET/v1/workspaces/{workspaceId}/home

Load the setup or operating Home for the selected product.

Membership, product validity, setup projection, operating summaries, and recent activity are read in one tenant-isolated database statement.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

The selected product's Home surface.

application/json

  • valueobject
  • dataobjectrequired

    No additional properties

  • setupobjectrequired

    No additional properties

  • stagestringrequired

    enum: "domain", "mailboxes", "journeys", "broadcast", "complete"

  • domainobjectrequired

    No additional properties

  • statusstringrequired

    enum: "todo", "in_progress", "complete", "not_relevant"

  • detailstringrequired
  • mailboxesobjectrequired

    No additional properties

  • statusstringrequired

    enum: "todo", "in_progress", "complete", "not_relevant"

  • detailstringrequired
  • journeysobjectrequired

    No additional properties

  • statusstringrequired

    enum: "todo", "in_progress", "complete", "not_relevant"

  • detailstringrequired
  • broadcastobjectrequired

    No additional properties

  • statusstringrequired

    enum: "todo", "in_progress", "complete", "not_relevant"

  • detailstringrequired
  • needsYouobjectrequired

    No additional properties

  • undecidedApprovalsintegerrequired

    minimum: 0

  • oldestApprovalsarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • summarystringrequired
  • actionKindstringrequired
  • createdAtstringrequired

    format: "date-time"

  • failedSteps24harrayrequired
  • Each itemobject
  • journeyIdstringrequired

    format: "uuid"

  • journeyNamestringrequired
  • countintegerrequired

    minimum: 0

  • deliverabilityAlertsarrayrequired
  • Each itemobject
  • kindstringrequired

    enum: "bounce_rate", "complaint_rate", "dns_drift", "lane_paused"

  • detailstringrequired
  • destinationstringrequired

    enum: "deliverability", "domains"

  • unreadInboundarrayrequired
  • Each itemobject
  • mailboxIdstringrequired

    format: "uuid"

  • addressstringrequired
  • countintegerrequired

    minimum: 0

  • splitsReadyToDecidearrayrequired
  • Each itemobject
  • journeyIdstringrequired

    format: "uuid"

  • journeyNamestringrequired
  • unclaimedJourneysintegerrequired

    minimum: 0

  • journeysobjectrequired

    No additional properties

  • activeintegerrequired

    minimum: 0

  • entered30dintegerrequired

    minimum: 0

  • sent30dintegerrequired

    minimum: 0

  • toparrayrequired
  • Each itemunspecified
  • allOf 1object

    No additional properties

  • namestringrequired

    minLength: 1 · maxLength: 200

    Further nesting omitted

  • descriptionstring

    maxLength: 2000

    Further nesting omitted

  • mailbox_idstring

    format: "uuid"

    Further nesting omitted

  • from_local_partstring

    maxLength: 64 · pattern: "^[a-z0-9][a-z0-9._+-]{0,62}$"

    Further nesting omitted

  • triggerobjectrequired

    Further nesting omitted

  • audienceobject

    Further nesting omitted

  • goalobject

    No additional properties

    Further nesting omitted

  • exitobject

    No additional properties

    Further nesting omitted

  • approval_modestring

    enum: "policy", "required"

    Further nesting omitted

  • apiobject

    Further nesting omitted

  • 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

    Further nesting omitted

  • stepsarrayrequired

    maxItems: 100

    Further nesting omitted

  • allOf 2object
  • idstringrequired

    format: "uuid"

    Further nesting omitted

  • statusstringrequired

    enum: "draft", "discovered", "active", "paused", "archived"

    Further nesting omitted

  • api_keystring | null

    Further nesting omitted

  • content_modestring | null

    enum: "code", "managed", null

    Further nesting omitted

  • identitystring | null

    Further nesting omitted

  • identity_aliasesarray

    Further nesting omitted

  • samplesarray

    Further nesting omitted

  • versionintegerrequired

    minimum: 1

    Further nesting omitted

  • statsobjectrequired

    Further nesting omitted

  • stepStatsarray

    Further nesting omitted

  • armStatsarray

    Further nesting omitted

  • healthobjectrequired

    Further nesting omitted

  • indicatorobjectrequired

    Further nesting omitted

  • sparklinearrayrequired

    Further nesting omitted

  • activated_atstring | null

    format: "date-time"

    Further nesting omitted

  • updated_atstring

    format: "date-time"

    Further nesting omitted

  • last_activity_atstring | null

    format: "date-time"

    Further nesting omitted

  • broadcastobjectrequired

    No additional properties

  • nextobject
  • idstringrequired

    format: "uuid"

  • namestringrequired
  • scheduledAtstringrequired

    format: "date-time"

  • recipientsintegerrequired

    minimum: 0

  • lastobject
  • idstringrequired

    format: "uuid"

  • namestringrequired
  • sentAtstringrequired

    format: "date-time"

  • deliveredintegerrequired

    minimum: 0

  • humanOpenedintegerrequired

    minimum: 0

  • repliedintegerrequired

    minimum: 0

  • recentLogsarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • directionstringrequired

    enum: "out", "in"

  • atstringrequired

    format: "date-time"

  • mailbox_idstringrequired

    format: "uuid"

  • thread_idstring

    format: "uuid"

  • send_intent_idstring

    format: "uuid"

  • traffic_classstring

    enum: "mailbox", "product", "broadcast"

  • fromstringrequired
  • toarrayrequired
  • Each itemstring
  • recipient_countintegerrequired

    minimum: 0

  • subjectstringrequired
  • originobjectrequired

    No additional properties

  • kindstringrequired

    enum: "journey", "broadcast", "mailbox", "api", "agent"

  • idstring
  • namestring
  • statusstringrequired

    enum: "queued", "sent", "delivered", "bounced", "complained", "opened", "clicked", "replied", "received", "failed"

  • detailobject
  • Additional propertyAny value
  • volumeobjectrequired
  • sentPeriodintegerrequired

    minimum: 0

  • limitintegerrequired

    minimum: 0

  • deliveredRatenumber

    minimum: 0 · maximum: 1

  • mailboxesintegerrequired

    minimum: 0

  • verifiedDomainsintegerrequired

    minimum: 0

  • Additional propertyAny value
  • agentobjectrequired

    No additional properties

  • connectedbooleanrequired
  • clientNamestring

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/home' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Label suggestions

GET/v1/workspaces/{workspaceId}/label-suggestions

listLabelSuggestions

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

mailbox_id
query · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • idstringrequired
  • namestringrequired
  • emojistringrequired
  • colorstringrequired
  • descriptionstringrequired
  • already_addedbooleanrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/label-suggestions?mailbox_id=00000000-0000-4000-8000-000000000001' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Labels

GET/v1/workspaces/{workspaceId}/labels

listLabels

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

mailbox_id
query
  • valuestring

    format: "uuid"

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
  • colorstring | nullrequired
  • kindstringrequired
  • emojistring | nullrequired
  • descriptionstring | nullrequired
  • suggestion_idstring | nullrequired
  • sourcestringrequired

    enum: "banger", "provider"

  • updated_atstringrequired

    format: "date-time"

  • auto_setunspecifiedrequired
  • anyOf 1object
  • rule_idstringrequired

    format: "uuid"

  • enabledbooleanrequired
  • descriptionstring | nullrequired
  • exact_conditionsobjectrequired

    No additional properties

  • fromarray

    maxItems: 50

    Further nesting omitted

  • toarray

    maxItems: 50

    Further nesting omitted

  • subject_containsarray

    maxItems: 50

    Further nesting omitted

  • has_wordsarray

    maxItems: 50

    Further nesting omitted

  • excludes_wordsarray

    maxItems: 50

    Further nesting omitted

  • has_attachmentboolean

    Further nesting omitted

  • anyOf 2null
  • applied_by_rule_countintegerrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/labels?mailbox_id=00000000-0000-4000-8000-000000000001' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/labels

createLabel

Create a Banger label in one mailbox. Pass suggestion_id to create a suggested label; an existing name returns the existing label (200). Banger labels never sync to Gmail.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header

Optional retry key, applied when a product is selected.

  • valuestring

    minLength: 1 · maxLength: 256

Request body required

application/json

  • valueobject
  • mailbox_idstringrequired

    format: "uuid"

  • namestring

    maxLength: 120

  • colorstring

    maxLength: 32

  • emojistring

    One emoji shown before the name.

    maxLength: 16

  • descriptionstring

    maxLength: 2000

  • suggestion_idstring

    maxLength: 64

  • auto_setobject
  • enabledbooleanrequired
  • 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

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • mailbox_idstringrequired

    format: "uuid"

  • namestringrequired
  • colorstring | nullrequired
  • kindstringrequired
  • emojistring | nullrequired
  • descriptionstring | nullrequired
  • suggestion_idstring | nullrequired
  • sourcestringrequired

    enum: "banger", "provider"

  • updated_atstringrequired

    format: "date-time"

  • auto_setunspecifiedrequired
  • anyOf 1object
  • rule_idstringrequired

    format: "uuid"

  • enabledbooleanrequired
  • descriptionstring | nullrequired
  • exact_conditionsobjectrequired

    No additional properties

  • fromarray

    maxItems: 50

  • Each itemstring

    maxLength: 320

    Further nesting omitted

  • toarray

    maxItems: 50

  • Each itemstring

    maxLength: 320

    Further nesting omitted

  • subject_containsarray

    maxItems: 50

  • Each itemstring

    maxLength: 320

    Further nesting omitted

  • has_wordsarray

    maxItems: 50

  • Each itemstring

    maxLength: 320

    Further nesting omitted

  • excludes_wordsarray

    maxItems: 50

  • Each itemstring

    maxLength: 320

    Further nesting omitted

  • has_attachmentboolean
  • anyOf 2null
  • applied_by_rule_countintegerrequired

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/labels' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Idempotency-Key: example' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "mailbox_id": "00000000-0000-4000-8000-000000000001",
  "name": "example",
  "color": "example",
  "emoji": "example",
  "description": "example",
  "suggestion_id": "example",
  "auto_set": {
    "enabled": true,
    "description": "example",
    "exact_conditions": {
      "from": [
        "example"
      ],
      "to": [
        "example"
      ],
      "subject_contains": [
        "example"
      ],
      "has_words": [
        "example"
      ],
      "excludes_words": [
        "example"
      ],
      "has_attachment": true
    }
  }
}'
PATCH/v1/workspaces/{workspaceId}/labels/{labelId}

updateLabel

Rename a Banger label, change color, emoji or description, or turn its auto-set rule on or off. Gmail and system labels are read-only.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

labelId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header

Optional retry key, applied when a product is selected.

  • valuestring

    minLength: 1 · maxLength: 256

Request body required

application/json

  • valueobject
  • namestring

    maxLength: 120

  • colorstring | null

    maxLength: 32

  • emojistring | null

    maxLength: 16

  • descriptionstring | null

    maxLength: 2000

  • auto_setobject
  • enabledbooleanrequired
  • 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

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • mailbox_idstringrequired

    format: "uuid"

  • namestringrequired
  • colorstring | nullrequired
  • kindstringrequired
  • emojistring | nullrequired
  • descriptionstring | nullrequired
  • suggestion_idstring | nullrequired
  • sourcestringrequired

    enum: "banger", "provider"

  • updated_atstringrequired

    format: "date-time"

  • auto_setunspecifiedrequired
  • anyOf 1object
  • rule_idstringrequired

    format: "uuid"

  • enabledbooleanrequired
  • descriptionstring | nullrequired
  • exact_conditionsobjectrequired

    No additional properties

  • fromarray

    maxItems: 50

  • Each itemstring

    maxLength: 320

    Further nesting omitted

  • toarray

    maxItems: 50

  • Each itemstring

    maxLength: 320

    Further nesting omitted

  • subject_containsarray

    maxItems: 50

  • Each itemstring

    maxLength: 320

    Further nesting omitted

  • has_wordsarray

    maxItems: 50

  • Each itemstring

    maxLength: 320

    Further nesting omitted

  • excludes_wordsarray

    maxItems: 50

  • Each itemstring

    maxLength: 320

    Further nesting omitted

  • has_attachmentboolean
  • anyOf 2null
  • applied_by_rule_countintegerrequired

curl example

curl --request PATCH --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/labels/{labelId}' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Idempotency-Key: example' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "name": "example",
  "color": "example",
  "emoji": "example",
  "description": "example",
  "auto_set": {
    "enabled": true,
    "description": "example",
    "exact_conditions": {
      "from": [
        "example"
      ],
      "to": [
        "example"
      ],
      "subject_contains": [
        "example"
      ],
      "has_words": [
        "example"
      ],
      "excludes_words": [
        "example"
      ],
      "has_attachment": true
    }
  }
}'
DELETE/v1/workspaces/{workspaceId}/labels/{labelId}

deleteLabel

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

labelId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 204

Label deleted.

No response body.

curl example

curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/labels/{labelId}' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Logs

GET/v1/workspaces/{workspaceId}/logs

listLogs

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

cursor
query
  • valuestring

    maxLength: 1024

limit
query
  • valueinteger

    minimum: 1 · maximum: 100 · default: 50

direction
query
  • valuestring

    enum: "all", "out", "in"

origin
query
  • valuestring

    enum: "journey", "broadcast", "mailbox", "api", "agent"

mailbox_id
query
  • valuestring

    format: "uuid"

status
query
  • valuestring

    enum: "queued", "sent", "delivered", "bounced", "complained", "opened", "clicked", "replied", "received", "failed"

from
query
  • valuestring

    format: "date"

to
query
  • valuestring

    format: "date"

query
query
  • valuestring

    maxLength: 512

Request body

No request body is specified in the contract.

Success response 200

Cursor page from the merged sent and received timeline.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • directionstringrequired

    enum: "out", "in"

  • atstringrequired

    format: "date-time"

  • mailbox_idstringrequired

    format: "uuid"

  • thread_idstring

    format: "uuid"

  • send_intent_idstring

    format: "uuid"

  • traffic_classstring

    enum: "mailbox", "product", "broadcast"

  • fromstringrequired
  • toarrayrequired
  • Each itemstring
  • recipient_countintegerrequired

    minimum: 0

  • subjectstringrequired
  • originobjectrequired

    No additional properties

  • kindstringrequired

    enum: "journey", "broadcast", "mailbox", "api", "agent"

  • idstring
  • namestring
  • statusstringrequired

    enum: "queued", "sent", "delivered", "bounced", "complained", "opened", "clicked", "replied", "received", "failed"

  • detailobject
  • Additional propertyAny value
  • pageobjectrequired

    No additional properties

  • has_morebooleanrequired
  • next_cursorstring

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/logs?cursor=example&limit=50&direction=all&origin=journey&mailbox_id=00000000-0000-4000-8000-000000000001&status=queued&from=2026-01-01&to=2026-01-01&query=example' \
  --header "Authorization: Bearer $BANGER_API_KEY"
GET/v1/workspaces/{workspaceId}/logs/{entryId}

getLogEntry

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

entryId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataunspecifiedrequired
  • allOf 1object
  • idstringrequired

    format: "uuid"

  • directionstringrequired

    enum: "out", "in"

  • atstringrequired

    format: "date-time"

  • mailbox_idstringrequired

    format: "uuid"

  • thread_idstring

    format: "uuid"

  • send_intent_idstring

    format: "uuid"

  • traffic_classstring

    enum: "mailbox", "product", "broadcast"

  • fromstringrequired
  • toarrayrequired
  • Each itemstring
  • recipient_countintegerrequired

    minimum: 0

  • subjectstringrequired
  • originobjectrequired

    No additional properties

  • kindstringrequired

    enum: "journey", "broadcast", "mailbox", "api", "agent"

  • idstring
  • namestring
  • statusstringrequired

    enum: "queued", "sent", "delivered", "bounced", "complained", "opened", "clicked", "replied", "received", "failed"

  • detailobject
  • Additional propertyAny value
  • allOf 2object
  • detailunspecifiedrequired
  • oneOf 1object
  • kindstringrequired

    enum: "inbound"

  • threadunspecifiedrequired
  • allOf 1object

    Further nesting omitted

  • allOf 2object

    Further nesting omitted

  • oneOf 2object
  • kindstringrequired

    enum: "broadcast", "outbound"

  • sendobjectrequired
  • idstringrequired

    format: "uuid"

    Further nesting omitted

  • mailbox_idstring | nullrequired

    format: "uuid"

    Further nesting omitted

  • command_idstring | nullrequired

    format: "uuid"

    Further nesting omitted

  • statusstringrequired

    Further nesting omitted

  • command_statusstring | nullrequired

    Further nesting omitted

  • subjectstring

    Further nesting omitted

  • recipientsarray

    Further nesting omitted

  • recipient_countintegerrequired

    Further nesting omitted

  • error_codestring | null

    Further nesting omitted

  • send_intent_idstring

    format: "uuid"

    Further nesting omitted

  • providerstring | null

    Further nesting omitted

  • route_kindstring | null

    Further nesting omitted

  • sourcestring

    Further nesting omitted

  • from_addressstring

    Further nesting omitted

  • recipient_statesobject

    Further nesting omitted

  • provider_message_idstring | null

    Further nesting omitted

  • created_atstringrequired

    format: "date-time"

    Further nesting omitted

  • updated_atstringrequired

    format: "date-time"

    Further nesting omitted

  • completed_atstring | nullrequired

    format: "date-time"

    Further nesting omitted

  • template_idstring | null

    format: "uuid"

    Further nesting omitted

  • template_versioninteger | null

    Further nesting omitted

  • workspace_revisioninteger | null

    Further nesting omitted

  • command_resultobject

    Further nesting omitted

  • command_started_atstring | null

    format: "date-time"

    Further nesting omitted

  • command_completed_atstring | null

    format: "date-time"

    Further nesting omitted

  • body_textstring

    Further nesting omitted

  • body_htmlstring

    Further nesting omitted

  • reply_toarray

    Further nesting omitted

  • headersobject

    Further nesting omitted

  • tagsarray

    Further nesting omitted

  • timelinearrayrequired
  • Each itemobject

    Further nesting omitted

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/logs/{entryId}' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Mail page

GET/v1/workspaces/{workspaceId}/mail-page

getMailPage

Returns the complete first-paint mail payload in one request: visible mailboxes, the selected mailbox, labels, mailbox counts, workspace revision, and the selected mailbox's first thread page.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

limit
query
  • valueinteger

    minimum: 1 · maximum: 100 · default: 50

mailbox_id
query

Preferred mailbox. Falls back to the first visible mailbox.

  • valuestring

    format: "uuid"

label_id
query

Return only selected-mailbox threads carrying this label.

  • valuestring

    format: "uuid"

view
query
  • valuestring

    default: "inbox" · enum: "inbox", "sent", "drafts", "archive", "trash", "spam", "all"

Request body

No request body is specified in the contract.

Success response 200

First-paint mail data for the workspace.

application/json

  • valueobject
  • dataobjectrequired
  • mailboxesarrayrequired
  • 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

    format: "email"

  • display_namestringrequired
  • providerstringrequired

    enum: "gmail", "smtp"

  • statusstringrequired

    enum: "pending", "active", "suspended", "reconnect_required", "disabled"

  • status_reasonstring | null
  • suspended_atstring | null
  • mailbox_kindstringrequired

    enum: "domain", "starter"

  • domainsarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • product_idstringrequired

    format: "uuid"

  • namestringrequired
  • statusstringrequired

    enum: "pending", "verified", "failed", "disabled", "deleting", "deleted"

  • selected_mailbox_idstring

    format: "uuid"

  • labelsarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • mailbox_idstringrequired

    format: "uuid"

  • namestringrequired
  • colorstring | null
  • kindstringrequired
  • updated_atstringrequired

    format: "date-time"

  • threadsarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • mailbox_idstringrequired

    format: "uuid"

  • subjectstringrequired
  • snippetstringrequired
  • last_message_atstringrequired

    format: "date-time"

  • message_countintegerrequired
  • unread_countintegerrequired
  • is_archivedbooleanrequired
  • is_trashbooleanrequired
  • is_spambooleanrequired
  • is_starredbooleanrequired
  • is_sentbooleanrequired
  • has_attachmentsbooleanrequired
  • labelsarrayrequired
  • Each itemstring
  • participantsarray
  • Each itemobject
  • namestring

    Further nesting omitted

  • emailstringrequired

    format: "email"

    Further nesting omitted

  • pageobjectrequired
  • next_cursorstring
  • has_morebooleanrequired
  • mailbox_thread_countsobjectrequired
  • Additional propertyinteger
  • revisionintegerrequired

    format: "int64"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/mail-page?limit=50&mailbox_id=00000000-0000-4000-8000-000000000001&label_id=00000000-0000-4000-8000-000000000001&view=inbox' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Managed content

GET/v1/workspaces/{workspaceId}/managed-content

List product managed email content in stable newest-id order.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

limit
query
  • valueinteger

    minimum: 1 · maximum: 100 · default: 50

cursor
query
  • valuestring

    format: "uuid"

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

Save a source-locale email draft and queue missing target translations.

Does not send or publish. Translation preparation has no per-language charge.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 1 · maxLength: 256

Request body required

application/json

  • valueobject

    No additional properties

  • namestringrequired

    minLength: 1 · maxLength: 200

  • contractobjectrequired

    No additional properties

  • source_localestring

    Canonical BCP 47 source locale; inherits product settings when omitted.

  • configured_localesarray

    Source plus target locales; omitted source is added by the server.

    maxItems: 100 · uniqueItems: true

  • Each itemstring
  • fallback_localestring
  • layout_idstring

    Selected reusable layout; the server snapshots its published revision into this content revision.

    format: "uuid"

  • localization_policyobject

    No additional properties

  • manual_reviewboolean

    default: false

  • journey_translationobject

    Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.

    No additional properties

  • modestringrequired

    enum: "fallback", "wait"

  • max_wait_secondsinteger

    minimum: 60 · maximum: 86400

  • on_timeoutstring

    enum: "fallback", "discard"

  • sourceobjectrequired

    No additional properties

  • subjectstringrequired

    minLength: 1 · maxLength: 100000

  • preheaderstring

    maxLength: 100000

  • body_textstring

    Accepted for source compatibility; rendered plain text derives from final HTML.

    maxLength: 100000

  • body_htmlstringrequired

    minLength: 1 · maxLength: 100000

  • layoutstring

    Must contain one {{ content }} slot.

    maxLength: 100000

  • variantsobject

    Optional source versions. Every version is translated automatically in the same revision.

  • Additional propertyobject

    No additional properties

  • subjectstringrequired

    minLength: 1 · maxLength: 100000

  • preheaderstring

    maxLength: 100000

  • body_htmlstringrequired

    minLength: 1 · maxLength: 100000

  • body_textstring

    maxLength: 100000

  • layoutstring

    maxLength: 100000

  • variablesobjectrequired
  • Additional propertyunspecified

    Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.

  • oneOf 1object

    No additional properties

  • typestringrequired

    enum: "string", "text", "url", "image_url", "html", "date", "datetime", "number", "boolean", "money"

    Further nesting omitted

  • requiredboolean

    Further nesting omitted

  • descriptionstring

    maxLength: 2000

    Further nesting omitted

  • defaultunspecified

    Must match the field type.

    Further nesting omitted

  • oneOf 2object

    No additional properties

  • typeunspecifiedrequired

    const: "object"

    Further nesting omitted

  • requiredboolean

    Further nesting omitted

  • descriptionstring

    maxLength: 2000

    Further nesting omitted

  • defaultobject

    Further nesting omitted

  • propertiesobjectrequired

    Further nesting omitted

  • oneOf 3object

    No additional properties

  • typeunspecifiedrequired

    const: "list"

    Further nesting omitted

  • requiredboolean

    Further nesting omitted

  • descriptionstring

    maxLength: 2000

    Further nesting omitted

  • defaultarray

    Further nesting omitted

  • itemsunspecifiedrequired

    Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.

    Further nesting omitted

  • samplesobject

    Named sample value sets for preview and source validation.

  • Additional propertyobject
  • Additional propertyAny value
  • translationsobject

    Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.

  • Additional propertyobject
  • Additional propertystring

Success response 201

Draft source and queued translation jobs.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • namestringrequired
  • versionintegerrequired

    minimum: 1

  • review_requiredbooleanrequired
  • draft_revision_idstring | null

    format: "uuid"

  • submitted_revision_idstring | null

    format: "uuid"

  • approved_revision_idstring | null

    format: "uuid"

  • published_revision_idstring | null

    format: "uuid"

  • published_publication_idstring | null

    format: "uuid"

  • source_revisionobject
  • Additional propertyAny value
  • translationsarray
  • Each itemobject
  • Additional propertyAny value
  • translation_jobsarray
  • Each itemobject
  • Additional propertyAny value

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/managed-content' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
  --header 'Idempotency-Key: example' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "name": "example",
  "contract": {
    "source_locale": "example",
    "configured_locales": [
      "example"
    ],
    "fallback_locale": "example",
    "layout_id": "00000000-0000-4000-8000-000000000001",
    "localization_policy": {
      "manual_review": false,
      "journey_translation": {
        "mode": "fallback",
        "max_wait_seconds": 60,
        "on_timeout": "fallback"
      }
    },
    "source": {
      "subject": "example",
      "preheader": "example",
      "body_text": "example",
      "body_html": "example",
      "layout": "example",
      "variants": {},
      "variables": {}
    },
    "samples": {},
    "translations": {}
  }
}'
GET/v1/workspaces/{workspaceId}/managed-content/{contentId}

Read the draft revision, translations, and preparation status.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

contentId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Current content state.

application/json

  • valueobject
  • dataunspecifiedrequired
  • allOf 1object
  • idstringrequired

    format: "uuid"

  • namestringrequired
  • versionintegerrequired

    minimum: 1

  • review_requiredbooleanrequired
  • draft_revision_idstring | null

    format: "uuid"

  • submitted_revision_idstring | null

    format: "uuid"

  • approved_revision_idstring | null

    format: "uuid"

  • published_revision_idstring | null

    format: "uuid"

  • published_publication_idstring | null

    format: "uuid"

  • source_revisionobject
  • Additional propertyAny value
  • translationsarray
  • Each itemobject
  • Additional propertyAny value
  • translation_jobsarray
  • Each itemobject
  • Additional propertyAny value
  • allOf 2object
  • source_revisionobjectrequired
  • idstringrequired

    format: "uuid"

  • content_idstringrequired

    format: "uuid"

  • revisionintegerrequired
  • source_localestringrequired
  • configured_localesarrayrequired
  • Each itemstring
  • fallback_localestring | nullrequired
  • localization_policyobjectrequired

    No additional properties

  • manual_reviewboolean

    default: false

  • journey_translationobject

    Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.

    No additional properties

  • modestringrequired

    enum: "fallback", "wait"

    Further nesting omitted

  • max_wait_secondsinteger

    minimum: 60 · maximum: 86400

    Further nesting omitted

  • on_timeoutstring

    enum: "fallback", "discard"

    Further nesting omitted

  • sourceobjectrequired

    No additional properties

  • subjectstringrequired

    minLength: 1 · maxLength: 100000

  • preheaderstring

    maxLength: 100000

  • body_textstring

    Accepted for source compatibility; rendered plain text derives from final HTML.

    maxLength: 100000

  • body_htmlstringrequired

    minLength: 1 · maxLength: 100000

  • layoutstring

    Must contain one {{ content }} slot.

    maxLength: 100000

  • variantsobject

    Optional source versions. Every version is translated automatically in the same revision.

  • Additional propertyobject

    No additional properties

    Further nesting omitted

  • variablesobjectrequired
  • Additional propertyunspecified

    Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.

    Further nesting omitted

  • source_messagesobjectrequired
  • Additional propertystring
  • layout_idstring | nullrequired

    format: "uuid"

  • layout_revision_idstring | nullrequired

    format: "uuid"

  • samplesobjectrequired
  • Additional propertyobject
  • Additional propertyAny value
  • restored_from_revision_idstring | nullrequired

    format: "uuid"

  • translationsarrayrequired
  • Each itemunspecified
  • allOf 1object
  • source_revision_idstringrequired

    format: "uuid"

    Further nesting omitted

  • localestringrequired

    Further nesting omitted

  • stringsobjectrequired

    Further nesting omitted

  • provenancestringrequired

    enum: "supplied", "generated", "reviewed"

    Further nesting omitted

  • statusstringrequired

    enum: "ready", "needs_review"

    Further nesting omitted

  • allOf 2object
  • strings_sha256stringrequired

    Further nesting omitted

  • translation_jobsarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • source_revision_idstringrequired

    format: "uuid"

  • localestringrequired
  • statusstringrequired
  • attempt_countintegerrequired
  • error_codestring | nullrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/managed-content/{contentId}' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
PATCH/v1/workspaces/{workspaceId}/managed-content/{contentId}

Save a new source draft revision without changing production publication.

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

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

contentId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • expected_versionintegerrequired

    minimum: 1

  • contractobjectrequired

    No additional properties

  • source_localestring

    Canonical BCP 47 source locale; inherits product settings when omitted.

  • configured_localesarray

    Source plus target locales; omitted source is added by the server.

    maxItems: 100 · uniqueItems: true

  • Each itemstring
  • fallback_localestring
  • layout_idstring

    Selected reusable layout; the server snapshots its published revision into this content revision.

    format: "uuid"

  • localization_policyobject

    No additional properties

  • manual_reviewboolean

    default: false

  • journey_translationobject

    Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.

    No additional properties

  • modestringrequired

    enum: "fallback", "wait"

  • max_wait_secondsinteger

    minimum: 60 · maximum: 86400

  • on_timeoutstring

    enum: "fallback", "discard"

  • sourceobjectrequired

    No additional properties

  • subjectstringrequired

    minLength: 1 · maxLength: 100000

  • preheaderstring

    maxLength: 100000

  • body_textstring

    Accepted for source compatibility; rendered plain text derives from final HTML.

    maxLength: 100000

  • body_htmlstringrequired

    minLength: 1 · maxLength: 100000

  • layoutstring

    Must contain one {{ content }} slot.

    maxLength: 100000

  • variantsobject

    Optional source versions. Every version is translated automatically in the same revision.

  • Additional propertyobject

    No additional properties

  • subjectstringrequired

    minLength: 1 · maxLength: 100000

  • preheaderstring

    maxLength: 100000

  • body_htmlstringrequired

    minLength: 1 · maxLength: 100000

  • body_textstring

    maxLength: 100000

  • layoutstring

    maxLength: 100000

  • variablesobjectrequired
  • Additional propertyunspecified

    Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.

  • oneOf 1object

    No additional properties

  • typestringrequired

    enum: "string", "text", "url", "image_url", "html", "date", "datetime", "number", "boolean", "money"

    Further nesting omitted

  • requiredboolean

    Further nesting omitted

  • descriptionstring

    maxLength: 2000

    Further nesting omitted

  • defaultunspecified

    Must match the field type.

    Further nesting omitted

  • oneOf 2object

    No additional properties

  • typeunspecifiedrequired

    const: "object"

    Further nesting omitted

  • requiredboolean

    Further nesting omitted

  • descriptionstring

    maxLength: 2000

    Further nesting omitted

  • defaultobject

    Further nesting omitted

  • propertiesobjectrequired

    Further nesting omitted

  • oneOf 3object

    No additional properties

  • typeunspecifiedrequired

    const: "list"

    Further nesting omitted

  • requiredboolean

    Further nesting omitted

  • descriptionstring

    maxLength: 2000

    Further nesting omitted

  • defaultarray

    Further nesting omitted

  • itemsunspecifiedrequired

    Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.

    Further nesting omitted

  • samplesobject

    Named sample value sets for preview and source validation.

  • Additional propertyobject
  • Additional propertyAny value
  • translationsobject

    Source ICU message catalog and optional supplied target catalogs. Missing configured targets are queued for asynchronous translation; saving does not require them.

  • Additional propertyobject
  • Additional propertystring

Success response 200

New draft revision and queued translation jobs.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • namestringrequired
  • versionintegerrequired

    minimum: 1

  • review_requiredbooleanrequired
  • draft_revision_idstring | null

    format: "uuid"

  • submitted_revision_idstring | null

    format: "uuid"

  • approved_revision_idstring | null

    format: "uuid"

  • published_revision_idstring | null

    format: "uuid"

  • published_publication_idstring | null

    format: "uuid"

  • source_revisionobject
  • Additional propertyAny value
  • translationsarray
  • Each itemobject
  • Additional propertyAny value
  • translation_jobsarray
  • Each itemobject
  • Additional propertyAny value

curl example

curl --request PATCH --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/managed-content/{contentId}' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "expected_version": 1,
  "contract": {
    "source_locale": "example",
    "configured_locales": [
      "example"
    ],
    "fallback_locale": "example",
    "layout_id": "00000000-0000-4000-8000-000000000001",
    "localization_policy": {
      "manual_review": false,
      "journey_translation": {
        "mode": "fallback",
        "max_wait_seconds": 60,
        "on_timeout": "fallback"
      }
    },
    "source": {
      "subject": "example",
      "preheader": "example",
      "body_text": "example",
      "body_html": "example",
      "layout": "example",
      "variants": {},
      "variables": {}
    },
    "samples": {},
    "translations": {}
  }
}'
POST/v1/workspaces/{workspaceId}/managed-content/{contentId}/render

Preview a saved source revision and one ready locale without sending.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

contentId
path · required
  • valuestring

    format: "uuid"

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

Retry a failed automatic translation of the current source draft.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

contentId
path · required
  • valuestring

    format: "uuid"

locale
path · required
  • valuestring

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

Read translation catalogs and preparation jobs for the draft revision.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

contentId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Current content state including translations and jobs.

application/json

  • valueobject
  • dataunspecifiedrequired
  • allOf 1object
  • idstringrequired

    format: "uuid"

  • namestringrequired
  • versionintegerrequired

    minimum: 1

  • review_requiredbooleanrequired
  • draft_revision_idstring | null

    format: "uuid"

  • submitted_revision_idstring | null

    format: "uuid"

  • approved_revision_idstring | null

    format: "uuid"

  • published_revision_idstring | null

    format: "uuid"

  • published_publication_idstring | null

    format: "uuid"

  • source_revisionobject
  • Additional propertyAny value
  • translationsarray
  • Each itemobject
  • Additional propertyAny value
  • translation_jobsarray
  • Each itemobject
  • Additional propertyAny value
  • allOf 2object
  • source_revisionobjectrequired
  • idstringrequired

    format: "uuid"

  • content_idstringrequired

    format: "uuid"

  • revisionintegerrequired
  • source_localestringrequired
  • configured_localesarrayrequired
  • Each itemstring
  • fallback_localestring | nullrequired
  • localization_policyobjectrequired

    No additional properties

  • manual_reviewboolean

    default: false

  • journey_translationobject

    Optional bounded hold for ordinary Journey email while its requested translation is missing or awaiting review. Default fallback preserves immediate sending; urgent messages always bypass the hold and use the configured fallback language.

    No additional properties

  • modestringrequired

    enum: "fallback", "wait"

    Further nesting omitted

  • max_wait_secondsinteger

    minimum: 60 · maximum: 86400

    Further nesting omitted

  • on_timeoutstring

    enum: "fallback", "discard"

    Further nesting omitted

  • sourceobjectrequired

    No additional properties

  • subjectstringrequired

    minLength: 1 · maxLength: 100000

  • preheaderstring

    maxLength: 100000

  • body_textstring

    Accepted for source compatibility; rendered plain text derives from final HTML.

    maxLength: 100000

  • body_htmlstringrequired

    minLength: 1 · maxLength: 100000

  • layoutstring

    Must contain one {{ content }} slot.

    maxLength: 100000

  • variantsobject

    Optional source versions. Every version is translated automatically in the same revision.

  • Additional propertyobject

    No additional properties

    Further nesting omitted

  • variablesobjectrequired
  • Additional propertyunspecified

    Recursive typed variable. Money values use {amount_cents: integer, currency: ISO 4217 code}; date values are ISO calendar dates and datetime values are ISO timestamps with offsets.

    Further nesting omitted

  • source_messagesobjectrequired
  • Additional propertystring
  • layout_idstring | nullrequired

    format: "uuid"

  • layout_revision_idstring | nullrequired

    format: "uuid"

  • samplesobjectrequired
  • Additional propertyobject
  • Additional propertyAny value
  • restored_from_revision_idstring | nullrequired

    format: "uuid"

  • translationsarrayrequired
  • Each itemunspecified
  • allOf 1object
  • source_revision_idstringrequired

    format: "uuid"

    Further nesting omitted

  • localestringrequired

    Further nesting omitted

  • stringsobjectrequired

    Further nesting omitted

  • provenancestringrequired

    enum: "supplied", "generated", "reviewed"

    Further nesting omitted

  • statusstringrequired

    enum: "ready", "needs_review"

    Further nesting omitted

  • allOf 2object
  • strings_sha256stringrequired

    Further nesting omitted

  • translation_jobsarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • source_revision_idstringrequired

    format: "uuid"

  • localestringrequired
  • statusstringrequired
  • attempt_countintegerrequired
  • error_codestring | nullrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/managed-content/{contentId}/translations' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
POST/v1/workspaces/{workspaceId}/managed-content/{contentId}/translations/{locale}/review

Review the exact pending translation catalog for one source revision.

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

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

contentId
path · required
  • valuestring

    format: "uuid"

locale
path · required
  • valuestring

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

List immutable publication history.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

contentId
path · required
  • valuestring

    format: "uuid"

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

Copy an earlier source revision into a new draft, without publishing it.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

contentId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • source_revision_idstringrequired

    format: "uuid"

  • expected_versionintegerrequired

    minimum: 1

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

List reusable product email layouts.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

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

Create a draft layout from validated HTML or a brand-seeded default.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 1 · maxLength: 256

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}

Read a layout and its current draft revision.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

layoutId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Layout and draft revision.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • namestringrequired
  • versionintegerrequired
  • draft_revision_idstring | nullrequired

    format: "uuid"

  • published_revision_idstring | nullrequired

    format: "uuid"

  • published_publication_idstring | nullrequired

    format: "uuid"

  • draft_revisionunspecifiedrequired
  • anyOf 1object
  • idstringrequired

    format: "uuid"

  • layout_idstring

    format: "uuid"

  • revisionintegerrequired
  • htmlstringrequired
  • brand_snapshotobjectrequired
  • company_namestring

    maxLength: 160

  • logo_urlstring

    maxLength: 2000

  • wordmark_urlstring

    maxLength: 2000

  • website_urlstring

    maxLength: 2000

  • primary_colorstring

    maxLength: 7

  • accent_colorstring

    maxLength: 7

  • background_colorstring

    maxLength: 7

  • surface_colorstring

    maxLength: 7

  • text_colorstring

    maxLength: 7

  • muted_text_colorstring

    maxLength: 7

  • heading_font_familystring

    maxLength: 200

  • body_font_familystring

    maxLength: 200

  • tonestring

    maxLength: 1000

  • footer_addressstring

    maxLength: 500

  • email_stylestring

    maxLength: 20

  • source_localestringrequired
  • source_messagesobjectrequired
  • Additional propertystring
  • translationsobjectrequired
  • Additional propertyobject
  • Additional propertystring

    Further nesting omitted

  • restored_from_revision_idstring | nullrequired

    format: "uuid"

  • created_by_actor_idstring
  • created_atstring

    format: "date-time"

  • anyOf 2null

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/managed-layouts/{layoutId}' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
PATCH/v1/workspaces/{workspaceId}/managed-layouts/{layoutId}

Save a validated draft layout revision.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

layoutId
path · required
  • valuestring

    format: "uuid"

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

List immutable layout revisions.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

layoutId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Layout revisions.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • layout_idstring

    format: "uuid"

  • revisionintegerrequired
  • htmlstringrequired
  • brand_snapshotobjectrequired
  • company_namestring

    maxLength: 160

  • logo_urlstring

    maxLength: 2000

  • wordmark_urlstring

    maxLength: 2000

  • website_urlstring

    maxLength: 2000

  • primary_colorstring

    maxLength: 7

  • accent_colorstring

    maxLength: 7

  • background_colorstring

    maxLength: 7

  • surface_colorstring

    maxLength: 7

  • text_colorstring

    maxLength: 7

  • muted_text_colorstring

    maxLength: 7

  • heading_font_familystring

    maxLength: 200

  • body_font_familystring

    maxLength: 200

  • tonestring

    maxLength: 1000

  • footer_addressstring

    maxLength: 500

  • email_stylestring

    maxLength: 20

  • source_localestringrequired
  • source_messagesobjectrequired
  • Additional propertystring
  • translationsobjectrequired
  • Additional propertyobject
  • Additional propertystring
  • restored_from_revision_idstring | nullrequired

    format: "uuid"

  • created_by_actor_idstring
  • created_atstring

    format: "date-time"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/managed-layouts/{layoutId}/versions' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'X-Banger-Product-Id: 00000000-0000-4000-8000-000000000001'
GET/v1/workspaces/{workspaceId}/managed-layouts/{layoutId}/impact

Describe content drafts and publications depending on this layout.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

layoutId
path · required
  • valuestring

    format: "uuid"

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

Copy an immutable layout revision into a new draft.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

X-Banger-Product-Id
header · required

Explicit operating product; must match product-scoped OAuth credentials.

  • valuestring

    format: "uuid"

layoutId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • layout_revision_idstringrequired

    format: "uuid"

  • expected_versionintegerrequired

    minimum: 1

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
}'

Oauth

POST/v1/workspaces/{workspaceId}/oauth/setup-ticket

Create an agent connection setup ticket

Requires a signed-in human session. API keys and agent credentials cannot authorize this operation.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • entry_surfacestringrequired

    enum: "codex", "chatgpt", "claude", "grok", "other_agent"

  • client_namestringrequired

    minLength: 1 · maxLength: 100

Success response 201

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • mcp_urlstringrequired
  • expires_atstringrequired

    format: "date-time"

  • scopesarrayrequired
  • Each itemstring

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/oauth/setup-ticket' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "entry_surface": "codex",
  "client_name": "example"
}'
POST/v1/workspaces/{workspaceId}/oauth/setup-ticket/connection-code

Email an agent connection code

Requires a signed-in human session. API keys and agent credentials cannot authorize this operation.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • mcp_urlstringrequired

    minLength: 8 · maxLength: 8000

  • reuse_pendingboolean

Success response 201

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • statusstringrequired

    enum: "code_sent"

  • messagestring
  • expires_atstringrequired

    format: "date-time"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/oauth/setup-ticket/connection-code' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "mcp_url": "examplex",
  "reuse_pending": true
}'
DELETE/v1/workspaces/{workspaceId}/oauth/setup-ticket/connection-code

Cancel a pending agent connection code

Requires a signed-in human session. API keys and agent credentials cannot authorize this operation.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • mcp_urlstringrequired

    minLength: 8 · maxLength: 8000

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • statusstringrequired

    enum: "cancelled"

curl example

curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/oauth/setup-ticket/connection-code' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "mcp_url": "examplex"
}'

Realtime ticket

POST/v1/workspaces/{workspaceId}/realtime-ticket

createRealtimeTicket

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • device_idstringrequired

    minLength: 8 · maxLength: 128

Success response 200

Short-lived ticket scoped to the actor and workspace.

application/json

  • valueobject
  • dataobjectrequired
  • ticketstringrequired
  • websocket_urlstringrequired

    format: "uri"

  • expires_atstringrequired

    format: "date-time"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/realtime-ticket' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "device_id": "examplex"
}'

Review policy

GET/v1/workspaces/{workspaceId}/review-policy

getActionReviewPolicy

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Workspace automatic-review policy.

application/json

  • valueobject
  • dataobjectrequired
  • policy_versionintegerrequired

    enum: 1, 2

  • automatic_review_enabledbooleanrequired
  • manual_send_review_enabledbooleanrequired

    False by default for direct requests; saved stricter limits remain enabled.

  • manual_send_recipient_thresholdintegerrequired

    minimum: 1 · maximum: 1000000

  • updated_by_actor_idstringrequired
  • created_atstring | null

    format: "date-time"

  • updated_atstring | null

    format: "date-time"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/review-policy' \
  --header "Authorization: Bearer $BANGER_API_KEY"
PUT/v1/workspaces/{workspaceId}/review-policy

updateActionReviewPolicy

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • automatic_review_enabledbooleanrequired
  • manual_send_recipient_thresholdintegerrequired

    minimum: 1 · maximum: 1000000

  • manual_send_review_enabledboolean

    Enable the optional human review limit; explicit legacy threshold updates keep it enabled.

Success response 200

Updated automatic-review policy.

application/json

  • valueobject
  • dataobjectrequired
  • policy_versionintegerrequired

    enum: 1, 2

  • automatic_review_enabledbooleanrequired
  • manual_send_review_enabledbooleanrequired

    False by default for direct requests; saved stricter limits remain enabled.

  • manual_send_recipient_thresholdintegerrequired

    minimum: 1 · maximum: 1000000

  • updated_by_actor_idstringrequired
  • created_atstring | null

    format: "date-time"

  • updated_atstring | null

    format: "date-time"

curl example

curl --request PUT --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/review-policy' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "automatic_review_enabled": true,
  "manual_send_recipient_threshold": 1,
  "manual_send_review_enabled": true
}'

Sender avatar

GET/v1/workspaces/{workspaceId}/sender-avatar

getSenderAvatar

Resolves an exact sender avatar first, then discovers and caches the sender domain icon in the private workspace B2 prefix.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

email
query · required
  • valuestring

    format: "email" · maxLength: 320

Request body

No request body is specified in the contract.

Success response 200

Authenticated sender or domain avatar image.

image/png

  • valuestring

    format: "binary"

image/jpeg

  • valuestring

    format: "binary"

image/webp

  • valuestring

    format: "binary"

image/svg+xml

  • valuestring

    format: "binary"

image/x-icon

  • valuestring

    format: "binary"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/sender-avatar?email=person%40example.com' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Sending health

GET/v1/workspaces/{workspaceId}/sending-health

Read sender-reputation enforcement state, lane rates, pauses and the enforced thresholds.

Every lane (Mailbox, Product, Broadcast) of every sending domain with its trailing 24-hour hard bounce and complaint rates and state (active, warning, paused), any domain pause, paused mailboxes, and whether the workspace is frozen. Each pause lists its top bounce and complaint sources and whether a workspace admin may resume it. Thresholds are documented in docs/product/sending-reputation-enforcement.md.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Sending health.

application/json

  • valueobject
  • dataobjectrequired
  • workspaceobjectrequired
  • statestringrequired

    enum: "active", "frozen"

  • holdunspecifiedrequired
  • oneOf 1object
  • idstringrequired

    format: "uuid"

  • scopestringrequired

    enum: "mailbox", "lane", "domain", "workspace"

  • statestringrequired

    enum: "warning", "paused", "frozen"

  • reasonstringrequired

    bounce_rate, complaint_rate, core_lane_paused, multiple_lanes_paused, repeat_lane_pause, multiple_domains_paused, shared_organizational_root or complaint_burst.

  • started_atstringrequired

    format: "date-time"

  • review_requiredbooleanrequired
  • evidenceobjectrequired
  • Additional propertyAny value
  • resumeobjectrequired
  • self_servebooleanrequired

    Further nesting omitted

  • blocked_reasonstring | nullrequired

    Further nesting omitted

  • resumable_atstring | nullrequired

    format: "date-time"

    Further nesting omitted

  • top_sourcesarray
  • Each itemobject

    Further nesting omitted

  • top_recipient_domainsarray
  • Each itemobject

    Further nesting omitted

  • oneOf 2null
  • domainsarrayrequired
  • Each itemobject
  • domain_idstringrequired

    format: "uuid"

  • domainstringrequired
  • product_idstring | nullrequired

    format: "uuid"

  • statestringrequired

    enum: "active", "paused"

  • holdunspecifiedrequired
  • oneOf 1object
  • idstringrequired

    format: "uuid"

    Further nesting omitted

  • scopestringrequired

    enum: "mailbox", "lane", "domain", "workspace"

    Further nesting omitted

  • statestringrequired

    enum: "warning", "paused", "frozen"

    Further nesting omitted

  • reasonstringrequired

    bounce_rate, complaint_rate, core_lane_paused, multiple_lanes_paused, repeat_lane_pause, multiple_domains_paused, shared_organizational_root or complaint_burst.

    Further nesting omitted

  • started_atstringrequired

    format: "date-time"

    Further nesting omitted

  • review_requiredbooleanrequired

    Further nesting omitted

  • evidenceobjectrequired

    Further nesting omitted

  • resumeobjectrequired

    Further nesting omitted

  • top_sourcesarray

    Further nesting omitted

  • top_recipient_domainsarray

    Further nesting omitted

  • oneOf 2null
  • lanesarrayrequired
  • Each itemobject
  • lane_kindstringrequired

    enum: "mailbox", "product", "broadcast"

    Further nesting omitted

  • sending_stream_idstringrequired

    format: "uuid"

    Further nesting omitted

  • from_domainstringrequired

    Further nesting omitted

  • statestringrequired

    enum: "active", "warning", "paused"

    Further nesting omitted

  • probation_untilstring | nullrequired

    format: "date-time"

    Further nesting omitted

  • ratesobjectrequired

    Further nesting omitted

  • holdunspecifiedrequired

    Further nesting omitted

  • mailboxesarrayrequired
  • Each itemobject
  • mailbox_idstringrequired

    format: "uuid"

  • addressstringrequired
  • product_idstring | nullrequired

    format: "uuid"

  • statestringrequired

    enum: "paused"

  • holdobjectrequired
  • idstringrequired

    format: "uuid"

  • scopestringrequired

    enum: "mailbox", "lane", "domain", "workspace"

  • statestringrequired

    enum: "warning", "paused", "frozen"

  • reasonstringrequired

    bounce_rate, complaint_rate, core_lane_paused, multiple_lanes_paused, repeat_lane_pause, multiple_domains_paused, shared_organizational_root or complaint_burst.

  • started_atstringrequired

    format: "date-time"

  • review_requiredbooleanrequired
  • evidenceobjectrequired
  • Additional propertyAny value
  • resumeobjectrequired
  • self_servebooleanrequired

    Further nesting omitted

  • blocked_reasonstring | nullrequired

    Further nesting omitted

  • resumable_atstring | nullrequired

    format: "date-time"

    Further nesting omitted

  • top_sourcesarray
  • Each itemobject

    Further nesting omitted

  • top_recipient_domainsarray
  • Each itemobject

    Further nesting omitted

  • thresholdsobjectrequired

    The enforced thresholds (src/sending/reputation-policy.ts).

  • Additional propertyAny value

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/sending-health' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/sending-health/resume

Resume one lane, domain or mailbox pause after reviewing its rates and sources.

Workspace admin only. Allowed 24 hours after a lane or domain pause and once per 30 days per domain. A repeat pause within 30 days or a frozen workspace needs Banger review and is refused with 423. After a resume the lane sends in smaller batches for 24 hours; held Broadcasts and Journeys continue automatically.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • hold_idstringrequired

    The pause (hold.id) from getSendingHealth.

    format: "uuid"

  • acknowledge_reputation_riskbooleanrequired

    const: true

  • reasonstring

    What was fixed; recorded in the audit log.

    maxLength: 500

Success response 200

The pause was released.

application/json

  • valueobject
  • dataobjectrequired
  • resumedobjectrequired
  • idstringrequired

    format: "uuid"

  • scopestringrequired

    enum: "mailbox", "lane", "domain", "workspace"

  • statestringrequired

    enum: "warning", "paused", "frozen"

  • reasonstringrequired

    bounce_rate, complaint_rate, core_lane_paused, multiple_lanes_paused, repeat_lane_pause, multiple_domains_paused, shared_organizational_root or complaint_burst.

  • started_atstringrequired

    format: "date-time"

  • review_requiredbooleanrequired
  • evidenceobjectrequired
  • Additional propertyAny value
  • resumeobjectrequired
  • self_servebooleanrequired
  • blocked_reasonstring | nullrequired
  • resumable_atstring | nullrequired

    format: "date-time"

  • top_sourcesarray
  • Each itemobject
  • signalstringrequired

    enum: "hard_bounce", "complaint"

  • sourcestringrequired
  • source_idstring | nullrequired
  • countintegerrequired
  • top_recipient_domainsarray
  • Each itemobject
  • signalstringrequired

    enum: "hard_bounce", "complaint"

  • recipient_domainstringrequired
  • countintegerrequired
  • probation_untilstring | nullrequired

    format: "date-time"

  • healthobjectrequired
  • workspaceobjectrequired
  • statestringrequired

    enum: "active", "frozen"

  • holdunspecifiedrequired
  • oneOf 1object
  • idstringrequired

    format: "uuid"

    Further nesting omitted

  • scopestringrequired

    enum: "mailbox", "lane", "domain", "workspace"

    Further nesting omitted

  • statestringrequired

    enum: "warning", "paused", "frozen"

    Further nesting omitted

  • reasonstringrequired

    bounce_rate, complaint_rate, core_lane_paused, multiple_lanes_paused, repeat_lane_pause, multiple_domains_paused, shared_organizational_root or complaint_burst.

    Further nesting omitted

  • started_atstringrequired

    format: "date-time"

    Further nesting omitted

  • review_requiredbooleanrequired

    Further nesting omitted

  • evidenceobjectrequired

    Further nesting omitted

  • resumeobjectrequired

    Further nesting omitted

  • top_sourcesarray

    Further nesting omitted

  • top_recipient_domainsarray

    Further nesting omitted

  • oneOf 2null
  • domainsarrayrequired
  • Each itemobject
  • domain_idstringrequired

    format: "uuid"

  • domainstringrequired
  • product_idstring | nullrequired

    format: "uuid"

  • statestringrequired

    enum: "active", "paused"

  • holdunspecifiedrequired
  • oneOf 1object

    Further nesting omitted

  • oneOf 2null

    Further nesting omitted

  • lanesarrayrequired
  • Each itemobject

    Further nesting omitted

  • mailboxesarrayrequired
  • Each itemobject
  • mailbox_idstringrequired

    format: "uuid"

  • addressstringrequired
  • product_idstring | nullrequired

    format: "uuid"

  • statestringrequired

    enum: "paused"

  • holdobjectrequired
  • idstringrequired

    format: "uuid"

    Further nesting omitted

  • scopestringrequired

    enum: "mailbox", "lane", "domain", "workspace"

    Further nesting omitted

  • statestringrequired

    enum: "warning", "paused", "frozen"

    Further nesting omitted

  • reasonstringrequired

    bounce_rate, complaint_rate, core_lane_paused, multiple_lanes_paused, repeat_lane_pause, multiple_domains_paused, shared_organizational_root or complaint_burst.

    Further nesting omitted

  • started_atstringrequired

    format: "date-time"

    Further nesting omitted

  • review_requiredbooleanrequired

    Further nesting omitted

  • evidenceobjectrequired

    Further nesting omitted

  • resumeobjectrequired

    Further nesting omitted

  • top_sourcesarray

    Further nesting omitted

  • top_recipient_domainsarray

    Further nesting omitted

  • thresholdsobjectrequired

    The enforced thresholds (src/sending/reputation-policy.ts).

  • Additional propertyAny value

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/sending-health/resume' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "hold_id": "00000000-0000-4000-8000-000000000001",
  "acknowledge_reputation_risk": true,
  "reason": "example"
}'

Starters

GET/v1/workspaces/{workspaceId}/starters

listStarters

Starter layouts rendered in the product brand, each with a brief (job, when to send, metric, mechanic, subject lines to test), slots and default content. Listings are compact and default to the product's kind of business; request one starter by id for its body_html.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

id
query

One starter; includes body_html.

  • valuestring
business
query
  • valuestring

    enum: "all", "saas", "shop", "creator", "services", "local", "community"

stage
query
  • valuestring

    enum: "onboarding", "activation", "revenue", "retention", "publish", "account"

category
query
  • valuestring

    enum: "product", "lifecycle", "broadcast"

include_html
query
  • valueboolean
style
query

Visual style; defaults to the brand's email_style.

  • valuestring

    enum: "brand", "clarity", "editorial", "luxe", "material", "playful", "bold", "plain"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • idstringrequired
  • versionintegerrequired
  • categorystringrequired
  • message_kindstringrequired
  • familystringrequired
  • stagestringrequired
  • businessesarrayrequired
  • Each itemstring
  • namestringrequired
  • descriptionstringrequired
  • subjectstringrequired
  • body_textstringrequired
  • briefobjectrequired
  • jobstringrequired
  • send_whenstringrequired
  • metricstringrequired
  • mechanicstringrequired
  • subject_variantsarrayrequired
  • Each itemstring
  • keeparray
  • Each itemstring
  • avoidarray
  • Each itemstring
  • imageryobject
  • defaultstringrequired
  • slotstring
  • photo_ideastring
  • slotsarrayrequired
  • Each itemobject
  • keystringrequired

    pattern: "^[A-Za-z0-9_$.-]{1,200}$"

  • labelstring

    maxLength: 120

  • typestring

    enum: "text", "paragraph", "url", "image"

  • helpstring

    maxLength: 300

  • contentobjectrequired
  • Additional propertystring
  • body_htmlstring
  • businessstringrequired
  • stylestringrequired
  • businessesarrayrequired
  • Each itemobject
  • keystring
  • labelstring
  • hintstring
  • stagesarrayrequired
  • Each itemobject
  • keystring
  • labelstring
  • stylesarrayrequired
  • Each itemobject
  • keystringrequired
  • labelstringrequired
  • descriptionstringrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/starters?id=example&business=all&stage=onboarding&category=product&include_html=true&style=brand' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Suppressions

GET/v1/workspaces/{workspaceId}/suppressions

listSuppressions

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • email_hashstringrequired
  • reasonstringrequired

    enum: "unsubscribe", "hard_bounce", "complaint", "manual"

  • source_idstring | nullrequired
  • created_atstringrequired

    format: "date-time"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/suppressions' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/suppressions

createSuppression

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • emailstringrequired

    minLength: 3 · maxLength: 320

  • reasonstring

    default: "manual" · enum: "unsubscribe", "hard_bounce", "complaint", "manual"

  • source_idstring

    maxLength: 500

Success response 201

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • email_hashstringrequired
  • reasonstringrequired

    enum: "unsubscribe", "hard_bounce", "complaint", "manual"

  • source_idstring | nullrequired
  • created_atstringrequired

    format: "date-time"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/suppressions' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "email": "example",
  "reason": "manual",
  "source_id": "example"
}'
DELETE/v1/workspaces/{workspaceId}/suppressions/{emailHash}

deleteSuppression

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

emailHash
path · required
  • valuestring

    pattern: "^[0-9a-f]{64}$"

Request body

No request body is specified in the contract.

Success response 204

Suppression removed.

No response body.

curl example

curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/suppressions/{emailHash}' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Surface data

GET/v1/workspaces/{workspaceId}/surface-data/{surface}

Load a product screen through one authorized database transaction.

Returns the bounded first-paint data for one product-scoped screen. The request validates workspace membership and the selected product in the same tenant-isolated transaction as the endpoint queries. The webhooks screen includes event_definitions (Journey trigger and goal names, including drafts), event_stats (counts across saved incoming receipts), and receipts (newest first, up to 51 rows). Clients display 50 receipts and use the extra row to detect another page. Incoming webhooks include a public_url; credentials are fetched separately. Receipt metadata does not contain raw payloads or a historical test/live label. outgoing_event_types contains the fixed catalog of automatic Banger events and the manual webhook.test event, independent of configured endpoints.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

surface
path · required
  • valuestring

    enum: "home", "product", "broadcasts", "audience", "domains", "mailboxes", "journeys", "deliverability", "api_keys", "webhooks", "approvals", "connections", "logs"

limit
query
  • valueinteger

    minimum: 1 · maximum: 100 · default: 50

webhook_id
query

On the webhooks screen, restrict receipt history and outbound deliveries to this endpoint.

  • valuestring

    format: "uuid"

event_type
query

On the webhooks screen, filter incoming receipts by exact event name. Catalog definitions and totals remain product-wide.

  • valuestring

    maxLength: 120

receipt_before
query

Incoming receipt cursor, a JSON object with receivedAt, endpointId, and eventId from the last displayed row. Preserve receivedAt verbatim to retain sub-millisecond precision. URL-encode the JSON value.

  • valuestring

    maxLength: 4096

mailbox_id
query
  • valuestring

    format: "uuid"

approval_id
query
  • valuestring

    format: "uuid"

label_id
query
  • valuestring

    format: "uuid"

view
query
  • valuestring

    enum: "inbox", "sent", "drafts", "archive", "trash", "spam", "all"

since
query
  • valuestring

    format: "date-time"

Request body

No request body is specified in the contract.

Success response 200

Product-scoped first-paint screen data.

application/json

  • valueobject
  • dataobjectrequired

    Screen-specific aggregate selected by surface and query parameters. Keys and nested resource projections vary by surface (home, product, broadcasts, audience, domains, mailboxes, journeys, deliverability, api_keys, webhooks, approvals, connections, logs).

  • Additional propertyAny value

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/surface-data/{surface}?limit=50&webhook_id=00000000-0000-4000-8000-000000000001&event_type=example&receipt_before=example&mailbox_id=00000000-0000-4000-8000-000000000001&approval_id=00000000-0000-4000-8000-000000000001&label_id=00000000-0000-4000-8000-000000000001&view=inbox&since=2026-01-01T00%3A00%3A00Z' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Triage actions

GET/v1/workspaces/{workspaceId}/triage-actions

listTriageActions

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

mailbox_id
query
  • valuestring

    format: "uuid"

thread_id
query
  • valuestring

    format: "uuid"

rule_id
query
  • valuestring

    format: "uuid"

limit
query
  • valueinteger

    minimum: 1 · maximum: 100 · default: 50

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_idstringrequired

    format: "uuid"

  • rule_idstringrequired

    format: "uuid"

  • rule_namestringrequired
  • auto_set_for_label_idstring | nullrequired

    format: "uuid"

  • actionstringrequired
  • label_idstring | nullrequired

    format: "uuid"

  • label_namestring | nullrequired
  • label_emojistring | nullrequired
  • thread_subjectstringrequired
  • created_atstringrequired

    format: "date-time"

  • undone_atstring | nullrequired

    format: "date-time"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/triage-actions?mailbox_id=00000000-0000-4000-8000-000000000001&thread_id=00000000-0000-4000-8000-000000000001&rule_id=00000000-0000-4000-8000-000000000001&limit=50' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/triage-actions/{actionId}/undo

undoTriageAction

Not this. Reverse one Triage action and teach its rule the email is not a match.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

actionId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • undonebooleanrequired

    const: true

  • command_idstring | nullrequired

    format: "uuid"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/triage-actions/{actionId}/undo' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{}'

Triage rules

GET/v1/workspaces/{workspaceId}/triage-rules

listTriageRules

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

mailbox_id
query
  • valuestring

    format: "uuid"

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

createTriageRule

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

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header

Optional retry key, applied when a product is selected.

  • valuestring

    minLength: 1 · maxLength: 256

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

previewTriageRule

Which recent threads a When would match. Read-only; returns no scores.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • mailbox_idstringrequired

    format: "uuid"

  • rule_idstring

    format: "uuid"

  • descriptionstring

    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"

  • limitinteger

    minimum: 1 · maximum: 200

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

runTriageOnPastMail

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • mailbox_idstringrequired

    format: "uuid"

  • rule_idsarray

    maxItems: 50

  • Each itemstring

    format: "uuid"

  • daysinteger

    minimum: 1 · maximum: 90

  • include_other_actionsboolean

    Also archive

Success response 202

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • queued_threadsintegerrequired
  • daysintegerrequired
  • labels_onlybooleanrequired

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}

getTriageRule

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

ruleId
path · required
  • valuestring

    format: "uuid"

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}

updateTriageRule

A label's auto-set rule can only be edited through updateLabel.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

ruleId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header

Optional retry key, applied when a product is selected.

  • valuestring

    minLength: 1 · maxLength: 256

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}

deleteTriageRule

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

ruleId
path · required
  • valuestring

    format: "uuid"

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"

Work

GET/v1/workspaces/{workspaceId}/work

listWork

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

cursor
query
  • valuestring

    maxLength: 1024

limit
query
  • valueinteger

    minimum: 1 · maximum: 100 · default: 50

status
query
  • valuestring

    default: "open" · enum: "open", "waiting", "done"

Request body

No request body is specified in the contract.

Success response 200

Workspace-wide Work items.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • threadobjectrequired
  • idstringrequired

    format: "uuid"

  • mailbox_idstringrequired

    format: "uuid"

  • subjectstringrequired
  • snippetstringrequired
  • last_message_atstringrequired

    format: "date-time"

  • message_countintegerrequired
  • unread_countintegerrequired
  • is_archivedbooleanrequired
  • is_trashbooleanrequired
  • is_spambooleanrequired
  • is_starredbooleanrequired
  • is_sentbooleanrequired
  • has_attachmentsbooleanrequired
  • labelsarrayrequired
  • Each itemstring
  • participantsarray
  • Each itemobject
  • namestring

    Further nesting omitted

  • emailstringrequired

    format: "email"

    Further nesting omitted

  • statusstringrequired

    enum: "open", "waiting", "done"

  • priorityintegerrequired
  • assignee_identity_idstring
  • updated_atstringrequired

    format: "date-time"

  • pageobjectrequired
  • next_cursorstring
  • has_morebooleanrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/work?cursor=example&limit=50&status=open' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Connections

GET/v1/workspaces/{workspaceId}/connections

List Banger-managed product and business data connections.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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}

Validate and encrypt a Banger-managed source connection.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

adapterKey
path · required
  • valuestring

    enum: "anthropic", "figma", "github", "google-analytics", "google-calendar", "hubspot", "linear", "mailchimp", "notion", "openai", "slack", "snowflake", "zendesk"

Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

Request body required

application/json

  • valueobject

    No additional properties

  • api_keystringrequired

    API key or provider service-account JSON.

    minLength: 12 · maxLength: 10000

  • display_namestring

    maxLength: 100

  • configobject
  • Additional propertyAny value

Success response 200

Idempotent replay of an existing connection request.

application/json

  • valueobject
  • dataobjectrequired

    No additional properties

  • idstringrequired

    format: "uuid"

  • adapter_keystringrequired
  • categorystringrequired

    enum: "email", "customer", "product", "work", "data"

  • display_namestringrequired
  • statusstringrequired

    enum: "pending_validation", "active", "error", "disabled"

  • auth_kindstringrequired

    enum: "api_key", "oauth2", "service_account", "none"

  • freshness_modestringrequired

    enum: "webhook", "poll", "on_demand", "hybrid"

  • capabilitiesarrayrequired
  • Each itemstring
  • resource_scopeobjectrequired
  • Additional propertyAny value
  • configobjectrequired

    Non-secret adapter configuration such as a cloud host and project ID.

  • Additional propertyAny value
  • active_credential_versioninteger | null
  • external_account_idstring | null
  • external_account_namestring | null
  • last_validated_atstring | null

    format: "date-time"

  • last_success_atstring | null

    format: "date-time"

  • last_error_codestring | null
  • disabled_atstring | null

    format: "date-time"

  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/connections/adapters/{adapterKey}' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Idempotency-Key: examplexxxxxxxxx' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "api_key": "examplexxxxx",
  "display_name": "example",
  "config": {}
}'
DELETE/v1/workspaces/{workspaceId}/connections/{connectionId}

disableConnection

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

connectionId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

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

Revalidate the active credential and refresh account metadata.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

connectionId
path · required
  • valuestring

    format: "uuid"

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

Validate and atomically rotate a managed connection credential.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

connectionId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

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

Execute a typed, bounded read against a Banger-managed connection.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

connectionId
path · required
  • valuestring

    format: "uuid"

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

listConnectionGrants

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

connectionId
path · required
  • valuestring

    format: "uuid"

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}

grantConnectionAccess

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

connectionId
path · required
  • valuestring

    format: "uuid"

principalKind
path · required
  • valuestring

    enum: "agent", "automation", "api_key"

principalId
path · required
  • valuestring

    minLength: 1 · maxLength: 200

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}

revokeConnectionAccess

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

connectionId
path · required
  • valuestring

    format: "uuid"

principalKind
path · required
  • valuestring

    enum: "agent", "automation", "api_key"

principalId
path · required
  • valuestring

    minLength: 1 · maxLength: 200

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"

Providers

POST/v1/workspaces/{workspaceId}/providers/google/oauth/session

Start a PKCE-protected Gmail mailbox connection for this workspace.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Gmail authorization URL and poll contract.

application/json

  • valueobject
  • sessionobjectrequired

    No additional properties

  • sessionIdstringrequired

    format: "uuid"

  • authUrlstringrequired

    format: "uri"

  • expiresAtintegerrequired

    format: "int64"

  • pollIntervalMsintegerrequired

    minimum: 250

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/providers/google/oauth/session' \
  --header "Authorization: Bearer $BANGER_API_KEY"
GET/v1/workspaces/{workspaceId}/providers/google/oauth/sessions/{sessionId}

Poll a Gmail authorization session inside its workspace boundary.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

sessionId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Current Gmail authorization state.

application/json

  • valueobject
  • sessionobjectrequired

    No additional properties

  • statusstringrequired

    enum: "pending", "complete", "error", "expired"

  • mailboxIdstring | nullrequired

    format: "uuid"

  • emailstring | nullrequired

    format: "email"

  • errorstring | nullrequired
  • expiresAtintegerrequired

    format: "int64"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/providers/google/oauth/sessions/{sessionId}' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Provider connections

GET/v1/workspaces/{workspaceId}/provider-connections

listProviderConnections

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Provider connection metadata. Credential material is never returned.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • kindstringrequired
  • ownershipstringrequired

    enum: "customer", "banger"

  • statusstringrequired

    enum: "pending", "active", "suspended", "reconnect_required", "disabled"

  • display_namestringrequired
  • capabilitiesarrayrequired
  • Each itemstring
  • active_credential_versioninteger | null
  • credential_rotation_requiredbooleanrequired
  • last_validated_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"

  • verified_domainsarray
  • Each itemstring

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/provider-connections' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/provider-connections/resend

createResendProviderConnection

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

Request body required

application/json

  • valueobject

    No additional properties

  • api_keystringrequired

    minLength: 16 · maxLength: 500

  • display_namestring

    maxLength: 100

Success response 200

Idempotent replay of the created Resend connection.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • kindstringrequired
  • ownershipstringrequired

    enum: "customer", "banger"

  • statusstringrequired

    enum: "pending", "active", "suspended", "reconnect_required", "disabled"

  • display_namestringrequired
  • capabilitiesarrayrequired
  • Each itemstring
  • active_credential_versioninteger | null
  • credential_rotation_requiredbooleanrequired
  • last_validated_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"

  • verified_domainsarray
  • Each itemstring

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/provider-connections/resend' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Idempotency-Key: examplexxxxxxxxx' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "api_key": "examplexxxxxxxxx",
  "display_name": "example"
}'
PUT/v1/workspaces/{workspaceId}/provider-connections/{providerConnectionId}/credential

rotateResendProviderCredential

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

providerConnectionId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

Request body required

application/json

  • valueobject

    No additional properties

  • api_keystringrequired

    minLength: 16 · maxLength: 500

  • display_namestring

    maxLength: 100

Success response 200

Resend credential rotated.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • kindstringrequired
  • ownershipstringrequired

    enum: "customer", "banger"

  • statusstringrequired

    enum: "pending", "active", "suspended", "reconnect_required", "disabled"

  • display_namestringrequired
  • capabilitiesarrayrequired
  • Each itemstring
  • active_credential_versioninteger | null
  • credential_rotation_requiredbooleanrequired
  • last_validated_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"

  • verified_domainsarray
  • Each itemstring

curl example

curl --request PUT --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/provider-connections/{providerConnectionId}/credential' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Idempotency-Key: examplexxxxxxxxx' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "api_key": "examplexxxxxxxxx",
  "display_name": "example"
}'
DELETE/v1/workspaces/{workspaceId}/provider-connections/{providerConnectionId}

disableProviderConnection

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

providerConnectionId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

Request body

No request body is specified in the contract.

Success response 204

Provider connection and active credential revoked.

No response body.

curl example

curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/provider-connections/{providerConnectionId}' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Idempotency-Key: examplexxxxxxxxx'

Sending domains

GET/v1/workspaces/{workspaceId}/sending-domains

listNativeSendingDomains

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Banger-native sending domains for the workspace.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject

    No additional properties

  • domain_idstringrequired

    format: "uuid"

  • product_idstringrequired

    format: "uuid"

  • root_domainstringrequired
  • setup_modestring

    enum: "simple", "advanced"

  • domain_statusstringrequired

    enum: "pending", "verified", "failed", "disabled", "deleting", "deleted"

  • lanesarrayrequired

    minItems: 1 · maxItems: 3

  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • kindstringrequired

    enum: "mailbox", "product", "broadcast"

  • display_namestringrequired
  • from_domainstringrequired
  • mail_from_domainstring | nullrequired
  • inbound_domainstring | nullrequired
  • route_providerstringrequired

    enum: "banger", "resend"

  • selected_provider_connection_idstring | nullrequired

    format: "uuid"

  • inbound_providerstring | nullrequired

    enum: "banger", null

  • statusstringrequired

    enum: "pending", "active", "paused", "deleting", "deleted"

  • status_reasonstring | nullrequired
  • desired_revisionintegerrequired

    minimum: 1

  • observed_revisionintegerrequired

    minimum: 0

  • dns_readybooleanrequired
  • provider_readybooleanrequired
  • inbound_readybooleanrequired
  • outbound_readybooleanrequired
  • banger_transport_readybooleanrequired
  • banger_mail_from_domainstring | nullrequired
  • provisioning_job_idstring | nullrequired

    format: "uuid"

  • provisioning_statusstringrequired

    enum: "pending", "provisioning", "waiting_dns", "active", "failed", "deleting", "deleted", "not_required"

  • provisioning_error_codestring | null
  • provisioning_next_attempt_atstring | null
  • provisioning_last_checked_atstring | null
  • provider_identity_statusstring | null
  • provider_dkim_statusstring | null
  • dns_recordsarrayrequired
  • Each itemobject

    No additional properties

    Further nesting omitted

  • dns_recordsarrayrequired
  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • lane_idstringrequired

    format: "uuid"

  • providerstringrequired

    enum: "banger", "resend"

  • purposestringrequired
  • typestringrequired

    enum: "TXT", "MX", "CNAME"

  • namestringrequired
  • valuestringrequired
  • priorityinteger | nullrequired
  • requiredbooleanrequired
  • statusstringrequired

    enum: "pending", "verified", "error"

  • provider_statusstringrequired

    enum: "pending", "verified", "error", "not_applicable"

  • first_observed_atstring | nullrequired

    format: "date-time"

  • last_checked_atstring | nullrequired

    format: "date-time"

  • errorobjectrequired
  • Additional propertyAny value
  • provider_referencestring | nullrequired
  • deletionobject | nullrequired

    No additional properties

  • job_idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "pending", "processing", "waiting_provider", "completed", "failed"

  • last_error_codestring | nullrequired
  • cleanup_recordsarrayrequired

    Exact DNS records the user may remove after teardown completes.

  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

    Further nesting omitted

  • lane_idstringrequired

    format: "uuid"

    Further nesting omitted

  • providerstringrequired

    enum: "banger", "resend"

    Further nesting omitted

  • purposestringrequired

    Further nesting omitted

  • typestringrequired

    enum: "TXT", "MX", "CNAME"

    Further nesting omitted

  • namestringrequired

    Further nesting omitted

  • valuestringrequired

    Further nesting omitted

  • priorityinteger | nullrequired

    Further nesting omitted

  • requiredbooleanrequired

    Further nesting omitted

  • statusstringrequired

    enum: "pending", "verified", "error"

    Further nesting omitted

  • provider_statusstringrequired

    enum: "pending", "verified", "error", "not_applicable"

    Further nesting omitted

  • first_observed_atstring | nullrequired

    format: "date-time"

    Further nesting omitted

  • last_checked_atstring | nullrequired

    format: "date-time"

    Further nesting omitted

  • errorobjectrequired

    Further nesting omitted

  • provider_referencestring | nullrequired

    Further nesting omitted

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/sending-domains' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/sending-domains

createNativeSendingDomain

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

Request body required

application/json

  • valueobject

    No additional properties

  • domainstringrequired

    The product's exact domain or subdomain. By default Banger derives three separate lane subdomains.

    minLength: 3 · maxLength: 253

  • setup_modestring

    Simple provisions one mailbox transport for receiving and sending from selected mailbox addresses, including Broadcasts and Journeys. Advanced provisions separate sending lanes.

    default: "advanced" · enum: "simple", "advanced"

  • mailbox_modestring

    Simple setup defaults to the root when no mailbox prefix is supplied; advanced defaults to a subdomain. Subdomain preserves existing domain mail. Migrate requests Mailboxes at the exact domain. An occupied exact domain or lane requires a request through sending-domain-migrations followed by authorization in the signed-in Banger Approvals panel. Agent credentials cannot authorize migration. No old messages are imported and DNS is never changed automatically.

    enum: "subdomain", "migrate"

  • root_dmarc_confirmedboolean

    True only after the domain owner confirms all services sending from the root From domain authenticate with aligned SPF or DKIM. Required when Banger must prepare a new root DMARC p=reject policy. Dedicated subdomains do not need this confirmation.

  • lane_prefixesobject

    No additional properties

  • mailboxstring

    minLength: 1 · maxLength: 63 · default: "mail"

  • productstring

    minLength: 1 · maxLength: 63 · default: "tx"

  • broadcaststring

    minLength: 1 · maxLength: 63 · default: "broadcast"

  • route_providersobject

    Resend is accepted only when Banger already detected it in this domain's DNS and the selected product has an active connection. Clients must never advertise it otherwise.

    No additional properties

  • productstring

    default: "banger" · enum: "banger", "resend"

  • broadcaststring

    default: "banger" · enum: "banger", "resend"

  • route_domainsobject

    Exact verified domains synchronized from Resend. Required for each lane that keeps Resend.

    No additional properties

  • productstring

    minLength: 3 · maxLength: 253

  • broadcaststring

    minLength: 3 · maxLength: 253

Success response 200

Idempotent replay of a Banger-native sending-domain request.

application/json

  • valueobject
  • dataobjectrequired

    No additional properties

  • domain_idstringrequired

    format: "uuid"

  • product_idstringrequired

    format: "uuid"

  • root_domainstringrequired
  • setup_modestring

    enum: "simple", "advanced"

  • domain_statusstringrequired

    enum: "pending", "verified", "failed", "disabled", "deleting", "deleted"

  • lanesarrayrequired

    minItems: 1 · maxItems: 3

  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • kindstringrequired

    enum: "mailbox", "product", "broadcast"

  • display_namestringrequired
  • from_domainstringrequired
  • mail_from_domainstring | nullrequired
  • inbound_domainstring | nullrequired
  • route_providerstringrequired

    enum: "banger", "resend"

  • selected_provider_connection_idstring | nullrequired

    format: "uuid"

  • inbound_providerstring | nullrequired

    enum: "banger", null

  • statusstringrequired

    enum: "pending", "active", "paused", "deleting", "deleted"

  • status_reasonstring | nullrequired
  • desired_revisionintegerrequired

    minimum: 1

  • observed_revisionintegerrequired

    minimum: 0

  • dns_readybooleanrequired
  • provider_readybooleanrequired
  • inbound_readybooleanrequired
  • outbound_readybooleanrequired
  • banger_transport_readybooleanrequired
  • banger_mail_from_domainstring | nullrequired
  • provisioning_job_idstring | nullrequired

    format: "uuid"

  • provisioning_statusstringrequired

    enum: "pending", "provisioning", "waiting_dns", "active", "failed", "deleting", "deleted", "not_required"

  • provisioning_error_codestring | null
  • provisioning_next_attempt_atstring | null
  • provisioning_last_checked_atstring | null
  • provider_identity_statusstring | null
  • provider_dkim_statusstring | null
  • dns_recordsarrayrequired
  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

    Further nesting omitted

  • lane_idstringrequired

    format: "uuid"

    Further nesting omitted

  • providerstringrequired

    enum: "banger", "resend"

    Further nesting omitted

  • purposestringrequired

    Further nesting omitted

  • typestringrequired

    enum: "TXT", "MX", "CNAME"

    Further nesting omitted

  • namestringrequired

    Further nesting omitted

  • valuestringrequired

    Further nesting omitted

  • priorityinteger | nullrequired

    Further nesting omitted

  • requiredbooleanrequired

    Further nesting omitted

  • statusstringrequired

    enum: "pending", "verified", "error"

    Further nesting omitted

  • provider_statusstringrequired

    enum: "pending", "verified", "error", "not_applicable"

    Further nesting omitted

  • first_observed_atstring | nullrequired

    format: "date-time"

    Further nesting omitted

  • last_checked_atstring | nullrequired

    format: "date-time"

    Further nesting omitted

  • errorobjectrequired

    Further nesting omitted

  • provider_referencestring | nullrequired

    Further nesting omitted

  • dns_recordsarrayrequired
  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • lane_idstringrequired

    format: "uuid"

  • providerstringrequired

    enum: "banger", "resend"

  • purposestringrequired
  • typestringrequired

    enum: "TXT", "MX", "CNAME"

  • namestringrequired
  • valuestringrequired
  • priorityinteger | nullrequired
  • requiredbooleanrequired
  • statusstringrequired

    enum: "pending", "verified", "error"

  • provider_statusstringrequired

    enum: "pending", "verified", "error", "not_applicable"

  • first_observed_atstring | nullrequired

    format: "date-time"

  • last_checked_atstring | nullrequired

    format: "date-time"

  • errorobjectrequired
  • Additional propertyAny value
  • provider_referencestring | nullrequired
  • deletionobject | nullrequired

    No additional properties

  • job_idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "pending", "processing", "waiting_provider", "completed", "failed"

  • last_error_codestring | nullrequired
  • cleanup_recordsarrayrequired

    Exact DNS records the user may remove after teardown completes.

  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • lane_idstringrequired

    format: "uuid"

  • providerstringrequired

    enum: "banger", "resend"

  • purposestringrequired
  • typestringrequired

    enum: "TXT", "MX", "CNAME"

  • namestringrequired
  • valuestringrequired
  • priorityinteger | nullrequired
  • requiredbooleanrequired
  • statusstringrequired

    enum: "pending", "verified", "error"

  • provider_statusstringrequired

    enum: "pending", "verified", "error", "not_applicable"

  • first_observed_atstring | nullrequired

    format: "date-time"

  • last_checked_atstring | nullrequired

    format: "date-time"

  • errorobjectrequired
  • Additional propertyAny value
  • provider_referencestring | nullrequired

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/sending-domains' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Idempotency-Key: examplexxxxxxxxx' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "domain": "example",
  "setup_mode": "advanced",
  "mailbox_mode": "subdomain",
  "root_dmarc_confirmed": true,
  "lane_prefixes": {
    "mailbox": "mail",
    "product": "tx",
    "broadcast": "broadcast"
  },
  "route_providers": {
    "product": "banger",
    "broadcast": "banger"
  },
  "route_domains": {
    "product": "example",
    "broadcast": "example"
  }
}'
GET/v1/workspaces/{workspaceId}/sending-domains/{sendingDomainId}

getNativeSendingDomain

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

sendingDomainId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Current domain, stream, provisioning, and required DNS state.

application/json

  • valueobject
  • dataobjectrequired

    No additional properties

  • domain_idstringrequired

    format: "uuid"

  • product_idstringrequired

    format: "uuid"

  • root_domainstringrequired
  • setup_modestring

    enum: "simple", "advanced"

  • domain_statusstringrequired

    enum: "pending", "verified", "failed", "disabled", "deleting", "deleted"

  • lanesarrayrequired

    minItems: 1 · maxItems: 3

  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • kindstringrequired

    enum: "mailbox", "product", "broadcast"

  • display_namestringrequired
  • from_domainstringrequired
  • mail_from_domainstring | nullrequired
  • inbound_domainstring | nullrequired
  • route_providerstringrequired

    enum: "banger", "resend"

  • selected_provider_connection_idstring | nullrequired

    format: "uuid"

  • inbound_providerstring | nullrequired

    enum: "banger", null

  • statusstringrequired

    enum: "pending", "active", "paused", "deleting", "deleted"

  • status_reasonstring | nullrequired
  • desired_revisionintegerrequired

    minimum: 1

  • observed_revisionintegerrequired

    minimum: 0

  • dns_readybooleanrequired
  • provider_readybooleanrequired
  • inbound_readybooleanrequired
  • outbound_readybooleanrequired
  • banger_transport_readybooleanrequired
  • banger_mail_from_domainstring | nullrequired
  • provisioning_job_idstring | nullrequired

    format: "uuid"

  • provisioning_statusstringrequired

    enum: "pending", "provisioning", "waiting_dns", "active", "failed", "deleting", "deleted", "not_required"

  • provisioning_error_codestring | null
  • provisioning_next_attempt_atstring | null
  • provisioning_last_checked_atstring | null
  • provider_identity_statusstring | null
  • provider_dkim_statusstring | null
  • dns_recordsarrayrequired
  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

    Further nesting omitted

  • lane_idstringrequired

    format: "uuid"

    Further nesting omitted

  • providerstringrequired

    enum: "banger", "resend"

    Further nesting omitted

  • purposestringrequired

    Further nesting omitted

  • typestringrequired

    enum: "TXT", "MX", "CNAME"

    Further nesting omitted

  • namestringrequired

    Further nesting omitted

  • valuestringrequired

    Further nesting omitted

  • priorityinteger | nullrequired

    Further nesting omitted

  • requiredbooleanrequired

    Further nesting omitted

  • statusstringrequired

    enum: "pending", "verified", "error"

    Further nesting omitted

  • provider_statusstringrequired

    enum: "pending", "verified", "error", "not_applicable"

    Further nesting omitted

  • first_observed_atstring | nullrequired

    format: "date-time"

    Further nesting omitted

  • last_checked_atstring | nullrequired

    format: "date-time"

    Further nesting omitted

  • errorobjectrequired

    Further nesting omitted

  • provider_referencestring | nullrequired

    Further nesting omitted

  • dns_recordsarrayrequired
  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • lane_idstringrequired

    format: "uuid"

  • providerstringrequired

    enum: "banger", "resend"

  • purposestringrequired
  • typestringrequired

    enum: "TXT", "MX", "CNAME"

  • namestringrequired
  • valuestringrequired
  • priorityinteger | nullrequired
  • requiredbooleanrequired
  • statusstringrequired

    enum: "pending", "verified", "error"

  • provider_statusstringrequired

    enum: "pending", "verified", "error", "not_applicable"

  • first_observed_atstring | nullrequired

    format: "date-time"

  • last_checked_atstring | nullrequired

    format: "date-time"

  • errorobjectrequired
  • Additional propertyAny value
  • provider_referencestring | nullrequired
  • deletionobject | nullrequired

    No additional properties

  • job_idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "pending", "processing", "waiting_provider", "completed", "failed"

  • last_error_codestring | nullrequired
  • cleanup_recordsarrayrequired

    Exact DNS records the user may remove after teardown completes.

  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • lane_idstringrequired

    format: "uuid"

  • providerstringrequired

    enum: "banger", "resend"

  • purposestringrequired
  • typestringrequired

    enum: "TXT", "MX", "CNAME"

  • namestringrequired
  • valuestringrequired
  • priorityinteger | nullrequired
  • requiredbooleanrequired
  • statusstringrequired

    enum: "pending", "verified", "error"

  • provider_statusstringrequired

    enum: "pending", "verified", "error", "not_applicable"

  • first_observed_atstring | nullrequired

    format: "date-time"

  • last_checked_atstring | nullrequired

    format: "date-time"

  • errorobjectrequired
  • Additional propertyAny value
  • provider_referencestring | nullrequired

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/sending-domains/{sendingDomainId}' \
  --header "Authorization: Bearer $BANGER_API_KEY"
DELETE/v1/workspaces/{workspaceId}/sending-domains/{sendingDomainId}

deleteNativeSendingDomain

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

sendingDomainId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • confirm_domainstringrequired

    Must exactly match the root domain being deleted.

    minLength: 3 · maxLength: 253

Success response 202

Sending and receiving are stopped and idempotent provider teardown is queued. Email history and audit records are preserved.

application/json

  • valueobject
  • dataobjectrequired

    No additional properties

  • domain_idstringrequired

    format: "uuid"

  • product_idstringrequired

    format: "uuid"

  • root_domainstringrequired
  • setup_modestring

    enum: "simple", "advanced"

  • domain_statusstringrequired

    enum: "pending", "verified", "failed", "disabled", "deleting", "deleted"

  • lanesarrayrequired

    minItems: 1 · maxItems: 3

  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • kindstringrequired

    enum: "mailbox", "product", "broadcast"

  • display_namestringrequired
  • from_domainstringrequired
  • mail_from_domainstring | nullrequired
  • inbound_domainstring | nullrequired
  • route_providerstringrequired

    enum: "banger", "resend"

  • selected_provider_connection_idstring | nullrequired

    format: "uuid"

  • inbound_providerstring | nullrequired

    enum: "banger", null

  • statusstringrequired

    enum: "pending", "active", "paused", "deleting", "deleted"

  • status_reasonstring | nullrequired
  • desired_revisionintegerrequired

    minimum: 1

  • observed_revisionintegerrequired

    minimum: 0

  • dns_readybooleanrequired
  • provider_readybooleanrequired
  • inbound_readybooleanrequired
  • outbound_readybooleanrequired
  • banger_transport_readybooleanrequired
  • banger_mail_from_domainstring | nullrequired
  • provisioning_job_idstring | nullrequired

    format: "uuid"

  • provisioning_statusstringrequired

    enum: "pending", "provisioning", "waiting_dns", "active", "failed", "deleting", "deleted", "not_required"

  • provisioning_error_codestring | null
  • provisioning_next_attempt_atstring | null
  • provisioning_last_checked_atstring | null
  • provider_identity_statusstring | null
  • provider_dkim_statusstring | null
  • dns_recordsarrayrequired
  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

    Further nesting omitted

  • lane_idstringrequired

    format: "uuid"

    Further nesting omitted

  • providerstringrequired

    enum: "banger", "resend"

    Further nesting omitted

  • purposestringrequired

    Further nesting omitted

  • typestringrequired

    enum: "TXT", "MX", "CNAME"

    Further nesting omitted

  • namestringrequired

    Further nesting omitted

  • valuestringrequired

    Further nesting omitted

  • priorityinteger | nullrequired

    Further nesting omitted

  • requiredbooleanrequired

    Further nesting omitted

  • statusstringrequired

    enum: "pending", "verified", "error"

    Further nesting omitted

  • provider_statusstringrequired

    enum: "pending", "verified", "error", "not_applicable"

    Further nesting omitted

  • first_observed_atstring | nullrequired

    format: "date-time"

    Further nesting omitted

  • last_checked_atstring | nullrequired

    format: "date-time"

    Further nesting omitted

  • errorobjectrequired

    Further nesting omitted

  • provider_referencestring | nullrequired

    Further nesting omitted

  • dns_recordsarrayrequired
  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • lane_idstringrequired

    format: "uuid"

  • providerstringrequired

    enum: "banger", "resend"

  • purposestringrequired
  • typestringrequired

    enum: "TXT", "MX", "CNAME"

  • namestringrequired
  • valuestringrequired
  • priorityinteger | nullrequired
  • requiredbooleanrequired
  • statusstringrequired

    enum: "pending", "verified", "error"

  • provider_statusstringrequired

    enum: "pending", "verified", "error", "not_applicable"

  • first_observed_atstring | nullrequired

    format: "date-time"

  • last_checked_atstring | nullrequired

    format: "date-time"

  • errorobjectrequired
  • Additional propertyAny value
  • provider_referencestring | nullrequired
  • deletionobject | nullrequired

    No additional properties

  • job_idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "pending", "processing", "waiting_provider", "completed", "failed"

  • last_error_codestring | nullrequired
  • cleanup_recordsarrayrequired

    Exact DNS records the user may remove after teardown completes.

  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • lane_idstringrequired

    format: "uuid"

  • providerstringrequired

    enum: "banger", "resend"

  • purposestringrequired
  • typestringrequired

    enum: "TXT", "MX", "CNAME"

  • namestringrequired
  • valuestringrequired
  • priorityinteger | nullrequired
  • requiredbooleanrequired
  • statusstringrequired

    enum: "pending", "verified", "error"

  • provider_statusstringrequired

    enum: "pending", "verified", "error", "not_applicable"

  • first_observed_atstring | nullrequired

    format: "date-time"

  • last_checked_atstring | nullrequired

    format: "date-time"

  • errorobjectrequired
  • Additional propertyAny value
  • provider_referencestring | nullrequired

curl example

curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/sending-domains/{sendingDomainId}' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "confirm_domain": "example"
}'
DELETE/v1/workspaces/{workspaceId}/sending-domains/{sendingDomainId}/lanes/{laneKind}

removeNativeSendingLane

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

sendingDomainId
path · required
  • valuestring

    format: "uuid"

laneKind
path · required
  • valuestring

    enum: "mailbox", "product", "broadcast"

Request body required

application/json

  • valueobject

    No additional properties

  • confirm_domainstringrequired

    Exact subdomain of the selected lane.

Success response 202

Only the selected lane is stopped and queued for removal. Other lanes and message history are preserved.

application/json

  • valueobject
  • dataobjectrequired

    No additional properties

  • domain_idstringrequired

    format: "uuid"

  • product_idstringrequired

    format: "uuid"

  • root_domainstringrequired
  • setup_modestring

    enum: "simple", "advanced"

  • domain_statusstringrequired

    enum: "pending", "verified", "failed", "disabled", "deleting", "deleted"

  • lanesarrayrequired

    minItems: 1 · maxItems: 3

  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • kindstringrequired

    enum: "mailbox", "product", "broadcast"

  • display_namestringrequired
  • from_domainstringrequired
  • mail_from_domainstring | nullrequired
  • inbound_domainstring | nullrequired
  • route_providerstringrequired

    enum: "banger", "resend"

  • selected_provider_connection_idstring | nullrequired

    format: "uuid"

  • inbound_providerstring | nullrequired

    enum: "banger", null

  • statusstringrequired

    enum: "pending", "active", "paused", "deleting", "deleted"

  • status_reasonstring | nullrequired
  • desired_revisionintegerrequired

    minimum: 1

  • observed_revisionintegerrequired

    minimum: 0

  • dns_readybooleanrequired
  • provider_readybooleanrequired
  • inbound_readybooleanrequired
  • outbound_readybooleanrequired
  • banger_transport_readybooleanrequired
  • banger_mail_from_domainstring | nullrequired
  • provisioning_job_idstring | nullrequired

    format: "uuid"

  • provisioning_statusstringrequired

    enum: "pending", "provisioning", "waiting_dns", "active", "failed", "deleting", "deleted", "not_required"

  • provisioning_error_codestring | null
  • provisioning_next_attempt_atstring | null
  • provisioning_last_checked_atstring | null
  • provider_identity_statusstring | null
  • provider_dkim_statusstring | null
  • dns_recordsarrayrequired
  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

    Further nesting omitted

  • lane_idstringrequired

    format: "uuid"

    Further nesting omitted

  • providerstringrequired

    enum: "banger", "resend"

    Further nesting omitted

  • purposestringrequired

    Further nesting omitted

  • typestringrequired

    enum: "TXT", "MX", "CNAME"

    Further nesting omitted

  • namestringrequired

    Further nesting omitted

  • valuestringrequired

    Further nesting omitted

  • priorityinteger | nullrequired

    Further nesting omitted

  • requiredbooleanrequired

    Further nesting omitted

  • statusstringrequired

    enum: "pending", "verified", "error"

    Further nesting omitted

  • provider_statusstringrequired

    enum: "pending", "verified", "error", "not_applicable"

    Further nesting omitted

  • first_observed_atstring | nullrequired

    format: "date-time"

    Further nesting omitted

  • last_checked_atstring | nullrequired

    format: "date-time"

    Further nesting omitted

  • errorobjectrequired

    Further nesting omitted

  • provider_referencestring | nullrequired

    Further nesting omitted

  • dns_recordsarrayrequired
  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • lane_idstringrequired

    format: "uuid"

  • providerstringrequired

    enum: "banger", "resend"

  • purposestringrequired
  • typestringrequired

    enum: "TXT", "MX", "CNAME"

  • namestringrequired
  • valuestringrequired
  • priorityinteger | nullrequired
  • requiredbooleanrequired
  • statusstringrequired

    enum: "pending", "verified", "error"

  • provider_statusstringrequired

    enum: "pending", "verified", "error", "not_applicable"

  • first_observed_atstring | nullrequired

    format: "date-time"

  • last_checked_atstring | nullrequired

    format: "date-time"

  • errorobjectrequired
  • Additional propertyAny value
  • provider_referencestring | nullrequired
  • deletionobject | nullrequired

    No additional properties

  • job_idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "pending", "processing", "waiting_provider", "completed", "failed"

  • last_error_codestring | nullrequired
  • cleanup_recordsarrayrequired

    Exact DNS records the user may remove after teardown completes.

  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • lane_idstringrequired

    format: "uuid"

  • providerstringrequired

    enum: "banger", "resend"

  • purposestringrequired
  • typestringrequired

    enum: "TXT", "MX", "CNAME"

  • namestringrequired
  • valuestringrequired
  • priorityinteger | nullrequired
  • requiredbooleanrequired
  • statusstringrequired

    enum: "pending", "verified", "error"

  • provider_statusstringrequired

    enum: "pending", "verified", "error", "not_applicable"

  • first_observed_atstring | nullrequired

    format: "date-time"

  • last_checked_atstring | nullrequired

    format: "date-time"

  • errorobjectrequired
  • Additional propertyAny value
  • provider_referencestring | nullrequired

curl example

curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/sending-domains/{sendingDomainId}/lanes/{laneKind}' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "confirm_domain": "example"
}'
POST/v1/workspaces/{workspaceId}/sending-domains/{sendingDomainId}/lanes/{laneKind}/pause

pauseNativeSendingLane

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

sendingDomainId
path · required
  • valuestring

    format: "uuid"

laneKind
path · required
  • valuestring

    enum: "mailbox", "product", "broadcast"

Request body

No request body is specified in the contract.

Success response 200

The selected lane is paused without changing its DNS or another lane.

application/json

  • valueobject
  • dataobjectrequired

    No additional properties

  • domain_idstringrequired

    format: "uuid"

  • product_idstringrequired

    format: "uuid"

  • root_domainstringrequired
  • setup_modestring

    enum: "simple", "advanced"

  • domain_statusstringrequired

    enum: "pending", "verified", "failed", "disabled", "deleting", "deleted"

  • lanesarrayrequired

    minItems: 1 · maxItems: 3

  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • kindstringrequired

    enum: "mailbox", "product", "broadcast"

  • display_namestringrequired
  • from_domainstringrequired
  • mail_from_domainstring | nullrequired
  • inbound_domainstring | nullrequired
  • route_providerstringrequired

    enum: "banger", "resend"

  • selected_provider_connection_idstring | nullrequired

    format: "uuid"

  • inbound_providerstring | nullrequired

    enum: "banger", null

  • statusstringrequired

    enum: "pending", "active", "paused", "deleting", "deleted"

  • status_reasonstring | nullrequired
  • desired_revisionintegerrequired

    minimum: 1

  • observed_revisionintegerrequired

    minimum: 0

  • dns_readybooleanrequired
  • provider_readybooleanrequired
  • inbound_readybooleanrequired
  • outbound_readybooleanrequired
  • banger_transport_readybooleanrequired
  • banger_mail_from_domainstring | nullrequired
  • provisioning_job_idstring | nullrequired

    format: "uuid"

  • provisioning_statusstringrequired

    enum: "pending", "provisioning", "waiting_dns", "active", "failed", "deleting", "deleted", "not_required"

  • provisioning_error_codestring | null
  • provisioning_next_attempt_atstring | null
  • provisioning_last_checked_atstring | null
  • provider_identity_statusstring | null
  • provider_dkim_statusstring | null
  • dns_recordsarrayrequired
  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

    Further nesting omitted

  • lane_idstringrequired

    format: "uuid"

    Further nesting omitted

  • providerstringrequired

    enum: "banger", "resend"

    Further nesting omitted

  • purposestringrequired

    Further nesting omitted

  • typestringrequired

    enum: "TXT", "MX", "CNAME"

    Further nesting omitted

  • namestringrequired

    Further nesting omitted

  • valuestringrequired

    Further nesting omitted

  • priorityinteger | nullrequired

    Further nesting omitted

  • requiredbooleanrequired

    Further nesting omitted

  • statusstringrequired

    enum: "pending", "verified", "error"

    Further nesting omitted

  • provider_statusstringrequired

    enum: "pending", "verified", "error", "not_applicable"

    Further nesting omitted

  • first_observed_atstring | nullrequired

    format: "date-time"

    Further nesting omitted

  • last_checked_atstring | nullrequired

    format: "date-time"

    Further nesting omitted

  • errorobjectrequired

    Further nesting omitted

  • provider_referencestring | nullrequired

    Further nesting omitted

  • dns_recordsarrayrequired
  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • lane_idstringrequired

    format: "uuid"

  • providerstringrequired

    enum: "banger", "resend"

  • purposestringrequired
  • typestringrequired

    enum: "TXT", "MX", "CNAME"

  • namestringrequired
  • valuestringrequired
  • priorityinteger | nullrequired
  • requiredbooleanrequired
  • statusstringrequired

    enum: "pending", "verified", "error"

  • provider_statusstringrequired

    enum: "pending", "verified", "error", "not_applicable"

  • first_observed_atstring | nullrequired

    format: "date-time"

  • last_checked_atstring | nullrequired

    format: "date-time"

  • errorobjectrequired
  • Additional propertyAny value
  • provider_referencestring | nullrequired
  • deletionobject | nullrequired

    No additional properties

  • job_idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "pending", "processing", "waiting_provider", "completed", "failed"

  • last_error_codestring | nullrequired
  • cleanup_recordsarrayrequired

    Exact DNS records the user may remove after teardown completes.

  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • lane_idstringrequired

    format: "uuid"

  • providerstringrequired

    enum: "banger", "resend"

  • purposestringrequired
  • typestringrequired

    enum: "TXT", "MX", "CNAME"

  • namestringrequired
  • valuestringrequired
  • priorityinteger | nullrequired
  • requiredbooleanrequired
  • statusstringrequired

    enum: "pending", "verified", "error"

  • provider_statusstringrequired

    enum: "pending", "verified", "error", "not_applicable"

  • first_observed_atstring | nullrequired

    format: "date-time"

  • last_checked_atstring | nullrequired

    format: "date-time"

  • errorobjectrequired
  • Additional propertyAny value
  • provider_referencestring | nullrequired

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/sending-domains/{sendingDomainId}/lanes/{laneKind}/pause' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/sending-domains/{sendingDomainId}/lanes/{laneKind}/resume

resumeNativeSendingLane

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

sendingDomainId
path · required
  • valuestring

    format: "uuid"

laneKind
path · required
  • valuestring

    enum: "mailbox", "product", "broadcast"

Request body

No request body is specified in the contract.

Success response 200

The selected lane resumes when its saved DNS and provider state are ready.

application/json

  • valueobject
  • dataobjectrequired

    No additional properties

  • domain_idstringrequired

    format: "uuid"

  • product_idstringrequired

    format: "uuid"

  • root_domainstringrequired
  • setup_modestring

    enum: "simple", "advanced"

  • domain_statusstringrequired

    enum: "pending", "verified", "failed", "disabled", "deleting", "deleted"

  • lanesarrayrequired

    minItems: 1 · maxItems: 3

  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • kindstringrequired

    enum: "mailbox", "product", "broadcast"

  • display_namestringrequired
  • from_domainstringrequired
  • mail_from_domainstring | nullrequired
  • inbound_domainstring | nullrequired
  • route_providerstringrequired

    enum: "banger", "resend"

  • selected_provider_connection_idstring | nullrequired

    format: "uuid"

  • inbound_providerstring | nullrequired

    enum: "banger", null

  • statusstringrequired

    enum: "pending", "active", "paused", "deleting", "deleted"

  • status_reasonstring | nullrequired
  • desired_revisionintegerrequired

    minimum: 1

  • observed_revisionintegerrequired

    minimum: 0

  • dns_readybooleanrequired
  • provider_readybooleanrequired
  • inbound_readybooleanrequired
  • outbound_readybooleanrequired
  • banger_transport_readybooleanrequired
  • banger_mail_from_domainstring | nullrequired
  • provisioning_job_idstring | nullrequired

    format: "uuid"

  • provisioning_statusstringrequired

    enum: "pending", "provisioning", "waiting_dns", "active", "failed", "deleting", "deleted", "not_required"

  • provisioning_error_codestring | null
  • provisioning_next_attempt_atstring | null
  • provisioning_last_checked_atstring | null
  • provider_identity_statusstring | null
  • provider_dkim_statusstring | null
  • dns_recordsarrayrequired
  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

    Further nesting omitted

  • lane_idstringrequired

    format: "uuid"

    Further nesting omitted

  • providerstringrequired

    enum: "banger", "resend"

    Further nesting omitted

  • purposestringrequired

    Further nesting omitted

  • typestringrequired

    enum: "TXT", "MX", "CNAME"

    Further nesting omitted

  • namestringrequired

    Further nesting omitted

  • valuestringrequired

    Further nesting omitted

  • priorityinteger | nullrequired

    Further nesting omitted

  • requiredbooleanrequired

    Further nesting omitted

  • statusstringrequired

    enum: "pending", "verified", "error"

    Further nesting omitted

  • provider_statusstringrequired

    enum: "pending", "verified", "error", "not_applicable"

    Further nesting omitted

  • first_observed_atstring | nullrequired

    format: "date-time"

    Further nesting omitted

  • last_checked_atstring | nullrequired

    format: "date-time"

    Further nesting omitted

  • errorobjectrequired

    Further nesting omitted

  • provider_referencestring | nullrequired

    Further nesting omitted

  • dns_recordsarrayrequired
  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • lane_idstringrequired

    format: "uuid"

  • providerstringrequired

    enum: "banger", "resend"

  • purposestringrequired
  • typestringrequired

    enum: "TXT", "MX", "CNAME"

  • namestringrequired
  • valuestringrequired
  • priorityinteger | nullrequired
  • requiredbooleanrequired
  • statusstringrequired

    enum: "pending", "verified", "error"

  • provider_statusstringrequired

    enum: "pending", "verified", "error", "not_applicable"

  • first_observed_atstring | nullrequired

    format: "date-time"

  • last_checked_atstring | nullrequired

    format: "date-time"

  • errorobjectrequired
  • Additional propertyAny value
  • provider_referencestring | nullrequired
  • deletionobject | nullrequired

    No additional properties

  • job_idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "pending", "processing", "waiting_provider", "completed", "failed"

  • last_error_codestring | nullrequired
  • cleanup_recordsarrayrequired

    Exact DNS records the user may remove after teardown completes.

  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • lane_idstringrequired

    format: "uuid"

  • providerstringrequired

    enum: "banger", "resend"

  • purposestringrequired
  • typestringrequired

    enum: "TXT", "MX", "CNAME"

  • namestringrequired
  • valuestringrequired
  • priorityinteger | nullrequired
  • requiredbooleanrequired
  • statusstringrequired

    enum: "pending", "verified", "error"

  • provider_statusstringrequired

    enum: "pending", "verified", "error", "not_applicable"

  • first_observed_atstring | nullrequired

    format: "date-time"

  • last_checked_atstring | nullrequired

    format: "date-time"

  • errorobjectrequired
  • Additional propertyAny value
  • provider_referencestring | nullrequired

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/sending-domains/{sendingDomainId}/lanes/{laneKind}/resume' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/sending-domains/{sendingDomainId}/verify

verifyNativeSendingDomain

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

sendingDomainId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Banger identity and DNS verification were safely rechecked.

application/json

  • valueobject
  • dataobjectrequired

    No additional properties

  • domain_idstringrequired

    format: "uuid"

  • product_idstringrequired

    format: "uuid"

  • root_domainstringrequired
  • setup_modestring

    enum: "simple", "advanced"

  • domain_statusstringrequired

    enum: "pending", "verified", "failed", "disabled", "deleting", "deleted"

  • lanesarrayrequired

    minItems: 1 · maxItems: 3

  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • kindstringrequired

    enum: "mailbox", "product", "broadcast"

  • display_namestringrequired
  • from_domainstringrequired
  • mail_from_domainstring | nullrequired
  • inbound_domainstring | nullrequired
  • route_providerstringrequired

    enum: "banger", "resend"

  • selected_provider_connection_idstring | nullrequired

    format: "uuid"

  • inbound_providerstring | nullrequired

    enum: "banger", null

  • statusstringrequired

    enum: "pending", "active", "paused", "deleting", "deleted"

  • status_reasonstring | nullrequired
  • desired_revisionintegerrequired

    minimum: 1

  • observed_revisionintegerrequired

    minimum: 0

  • dns_readybooleanrequired
  • provider_readybooleanrequired
  • inbound_readybooleanrequired
  • outbound_readybooleanrequired
  • banger_transport_readybooleanrequired
  • banger_mail_from_domainstring | nullrequired
  • provisioning_job_idstring | nullrequired

    format: "uuid"

  • provisioning_statusstringrequired

    enum: "pending", "provisioning", "waiting_dns", "active", "failed", "deleting", "deleted", "not_required"

  • provisioning_error_codestring | null
  • provisioning_next_attempt_atstring | null
  • provisioning_last_checked_atstring | null
  • provider_identity_statusstring | null
  • provider_dkim_statusstring | null
  • dns_recordsarrayrequired
  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

    Further nesting omitted

  • lane_idstringrequired

    format: "uuid"

    Further nesting omitted

  • providerstringrequired

    enum: "banger", "resend"

    Further nesting omitted

  • purposestringrequired

    Further nesting omitted

  • typestringrequired

    enum: "TXT", "MX", "CNAME"

    Further nesting omitted

  • namestringrequired

    Further nesting omitted

  • valuestringrequired

    Further nesting omitted

  • priorityinteger | nullrequired

    Further nesting omitted

  • requiredbooleanrequired

    Further nesting omitted

  • statusstringrequired

    enum: "pending", "verified", "error"

    Further nesting omitted

  • provider_statusstringrequired

    enum: "pending", "verified", "error", "not_applicable"

    Further nesting omitted

  • first_observed_atstring | nullrequired

    format: "date-time"

    Further nesting omitted

  • last_checked_atstring | nullrequired

    format: "date-time"

    Further nesting omitted

  • errorobjectrequired

    Further nesting omitted

  • provider_referencestring | nullrequired

    Further nesting omitted

  • dns_recordsarrayrequired
  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • lane_idstringrequired

    format: "uuid"

  • providerstringrequired

    enum: "banger", "resend"

  • purposestringrequired
  • typestringrequired

    enum: "TXT", "MX", "CNAME"

  • namestringrequired
  • valuestringrequired
  • priorityinteger | nullrequired
  • requiredbooleanrequired
  • statusstringrequired

    enum: "pending", "verified", "error"

  • provider_statusstringrequired

    enum: "pending", "verified", "error", "not_applicable"

  • first_observed_atstring | nullrequired

    format: "date-time"

  • last_checked_atstring | nullrequired

    format: "date-time"

  • errorobjectrequired
  • Additional propertyAny value
  • provider_referencestring | nullrequired
  • deletionobject | nullrequired

    No additional properties

  • job_idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "pending", "processing", "waiting_provider", "completed", "failed"

  • last_error_codestring | nullrequired
  • cleanup_recordsarrayrequired

    Exact DNS records the user may remove after teardown completes.

  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

  • lane_idstringrequired

    format: "uuid"

  • providerstringrequired

    enum: "banger", "resend"

  • purposestringrequired
  • typestringrequired

    enum: "TXT", "MX", "CNAME"

  • namestringrequired
  • valuestringrequired
  • priorityinteger | nullrequired
  • requiredbooleanrequired
  • statusstringrequired

    enum: "pending", "verified", "error"

  • provider_statusstringrequired

    enum: "pending", "verified", "error", "not_applicable"

  • first_observed_atstring | nullrequired

    format: "date-time"

  • last_checked_atstring | nullrequired

    format: "date-time"

  • errorobjectrequired
  • Additional propertyAny value
  • provider_referencestring | nullrequired

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/sending-domains/{sendingDomainId}/verify' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Sending domain migrations

POST/v1/workspaces/{workspaceId}/sending-domain-migrations

requestNativeDomainMigration

Freeze the exact setup and observed DNS into a pending domain.migrate approval. Does not provision resources. Only a signed-in administrator may authorize it through the Approvals panel; agent credentials and automatic review are rejected. Authorization atomically rechecks the DNS snapshot and prepares the approved domain.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

Request body required

application/json

  • valueobject

    No additional properties

  • domainstringrequired

    The product's exact domain or subdomain. By default Banger derives three separate lane subdomains.

    minLength: 3 · maxLength: 253

  • setup_modestring

    Simple provisions one mailbox transport for receiving and sending from selected mailbox addresses, including Broadcasts and Journeys. Advanced provisions separate sending lanes.

    default: "advanced" · enum: "simple", "advanced"

  • mailbox_modestring

    Simple setup defaults to the root when no mailbox prefix is supplied; advanced defaults to a subdomain. Subdomain preserves existing domain mail. Migrate requests Mailboxes at the exact domain. An occupied exact domain or lane requires a request through sending-domain-migrations followed by authorization in the signed-in Banger Approvals panel. Agent credentials cannot authorize migration. No old messages are imported and DNS is never changed automatically.

    enum: "subdomain", "migrate"

  • root_dmarc_confirmedboolean

    True only after the domain owner confirms all services sending from the root From domain authenticate with aligned SPF or DKIM. Required when Banger must prepare a new root DMARC p=reject policy. Dedicated subdomains do not need this confirmation.

  • lane_prefixesobject

    No additional properties

  • mailboxstring

    minLength: 1 · maxLength: 63 · default: "mail"

  • productstring

    minLength: 1 · maxLength: 63 · default: "tx"

  • broadcaststring

    minLength: 1 · maxLength: 63 · default: "broadcast"

  • route_providersobject

    Resend is accepted only when Banger already detected it in this domain's DNS and the selected product has an active connection. Clients must never advertise it otherwise.

    No additional properties

  • productstring

    default: "banger" · enum: "banger", "resend"

  • broadcaststring

    default: "banger" · enum: "banger", "resend"

  • route_domainsobject

    Exact verified domains synchronized from Resend. Required for each lane that keeps Resend.

    No additional properties

  • productstring

    minLength: 3 · maxLength: 253

  • broadcaststring

    minLength: 3 · maxLength: 253

Success response 200

Existing migration request returned idempotently.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • requested_by_actor_idstringrequired
  • action_kindstringrequired
  • summarystringrequired
  • capability_scopesarrayrequired
  • Each itemstring
  • resource_scopeobjectrequired
  • Additional propertyarray
  • Each itemstring
  • payloadobjectrequired
  • Additional propertyAny value
  • payload_sha256stringrequired

    pattern: "^[0-9a-f]{64}$"

  • statusstringrequired

    enum: "pending", "approved", "rejected", "cancelled", "expired"

  • missedbooleanrequired
  • expires_atstringrequired

    format: "date-time"

  • decided_by_actor_idstring | null
  • decision_reasonstring | null
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • decided_atstring | null

    format: "date-time"

  • execution_job_idstring

    format: "uuid"

  • reviewobject

    No additional properties

  • dispositionstringrequired

    enum: "automatic", "human_required"

  • recipient_countinteger | nullrequired

    minimum: 0

  • reasonsarrayrequired
  • Each itemstring
  • checksarrayrequired
  • Each itemstring

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/sending-domain-migrations' \
  --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"
  }
}'

Webhooks

GET/v1/workspaces/{workspaceId}/webhooks

List inbound event sources and outbound event destinations.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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

Create a signed, retried destination or idempotent inbound event source.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • kindstringrequired

    enum: "outbound", "inbound"

  • namestringrequired

    minLength: 1 · maxLength: 120

  • source_keystring

    pattern: "^[a-z0-9][a-z0-9_-]{0,62}$" · default: "custom"

  • source_configobject

    Source-specific deterministic event evaluation and delivery mapping. Supported for Zendesk and Supabase Auth.

    No additional properties

  • vip_tagsarray

    minItems: 1 · maxItems: 20 · uniqueItems: true

  • Each itemstring

    pattern: "^[a-z0-9][a-z0-9_-]{0,63}$"

  • sla_warning_minutesinteger

    minimum: 1 · maximum: 10080

  • project_urlstring

    Supabase project URL.

    format: "uri"

  • mailbox_idstring

    Active Banger sending address used for Supabase Auth email.

    format: "uuid"

  • template_idsobject

    Banger template selected for each Supabase Auth email action.

    No additional properties

  • signupstringrequired

    format: "uuid"

  • invitestringrequired

    format: "uuid"

  • magiclinkstringrequired

    format: "uuid"

  • recoverystringrequired

    format: "uuid"

  • email_changestringrequired

    format: "uuid"

  • reauthenticationstringrequired

    format: "uuid"

  • password_changed_notificationstringrequired

    format: "uuid"

  • email_changed_notificationstringrequired

    format: "uuid"

  • phone_changed_notificationstringrequired

    format: "uuid"

  • identity_linked_notificationstringrequired

    format: "uuid"

  • identity_unlinked_notificationstringrequired

    format: "uuid"

  • mfa_factor_enrolled_notificationstringrequired

    format: "uuid"

  • mfa_factor_unenrolled_notificationstringrequired

    format: "uuid"

  • signing_secretstring

    Supabase Send Email Hook secret. Accepted only for an inbound Supabase source and encrypted at rest.

    minLength: 20 · maxLength: 500

  • endpoint_urlstring

    Required for outbound destinations only.

    format: "uri"

  • event_typesarray

    minItems: 1 · maxItems: 100 · uniqueItems: true

  • Each itemstring

Success response 201

Webhook created. Outbound signing secrets are shown once; inbound credential options can be reopened by authorized callers.

application/json

  • valueobject
  • dataunspecifiedrequired
  • allOf 1object
  • idstringrequired

    format: "uuid"

  • kindstringrequired

    enum: "outbound", "inbound"

  • source_keystringrequired

    pattern: "^[a-z0-9][a-z0-9_-]{0,62}$"

  • namestringrequired
  • endpoint_urlstring | null

    format: "uri"

  • statusstringrequired

    enum: "active", "disabled", "error"

  • event_typesarrayrequired
  • Each itemstring
  • connection_idstring | null

    format: "uuid"

  • delivered_countintegerrequired

    minimum: 0

  • failed_countintegerrequired

    minimum: 0

  • last_delivered_atstring | null

    format: "date-time"

  • last_received_atstring | null

    format: "date-time"

  • last_error_codestring | null
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

  • allOf 2object
  • signing_secretstring

    Outbound request signing secret

  • source_urlstring

    Inbound event URL containing its unguessable secret.

    format: "uri"

  • webhook_urlstring

    Public inbound URL to use with the Authorization header.

    format: "uri"

  • bearer_tokenstring

    Secret endpoint token to send as Authorization Bearer.

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/webhooks' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "kind": "outbound",
  "name": "example",
  "source_key": "custom",
  "source_config": {
    "vip_tags": [
      "example"
    ],
    "sla_warning_minutes": 1,
    "project_url": "https://example.com",
    "mailbox_id": "00000000-0000-4000-8000-000000000001",
    "template_ids": {
      "signup": "00000000-0000-4000-8000-000000000001",
      "invite": "00000000-0000-4000-8000-000000000001",
      "magiclink": "00000000-0000-4000-8000-000000000001",
      "recovery": "00000000-0000-4000-8000-000000000001",
      "email_change": "00000000-0000-4000-8000-000000000001",
      "reauthentication": "00000000-0000-4000-8000-000000000001",
      "password_changed_notification": "00000000-0000-4000-8000-000000000001",
      "email_changed_notification": "00000000-0000-4000-8000-000000000001",
      "phone_changed_notification": "00000000-0000-4000-8000-000000000001",
      "identity_linked_notification": "00000000-0000-4000-8000-000000000001",
      "identity_unlinked_notification": "00000000-0000-4000-8000-000000000001",
      "mfa_factor_enrolled_notification": "00000000-0000-4000-8000-000000000001",
      "mfa_factor_unenrolled_notification": "00000000-0000-4000-8000-000000000001"
    }
  },
  "signing_secret": "examplexxxxxxxxxxxxx",
  "endpoint_url": "https://example.com",
  "event_types": [
    "example"
  ]
}'
PATCH/v1/workspaces/{workspaceId}/webhooks/{endpointId}

Re-enable a disabled webhook without rotating its endpoint or secret.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

endpointId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • statusstringrequired

    enum: "active"

Success response 200

Webhook re-enabled.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • kindstringrequired

    enum: "outbound", "inbound"

  • source_keystringrequired

    pattern: "^[a-z0-9][a-z0-9_-]{0,62}$"

  • namestringrequired
  • endpoint_urlstring | null

    format: "uri"

  • statusstringrequired

    enum: "active", "disabled", "error"

  • event_typesarrayrequired
  • Each itemstring
  • connection_idstring | null

    format: "uuid"

  • delivered_countintegerrequired

    minimum: 0

  • failed_countintegerrequired

    minimum: 0

  • last_delivered_atstring | null

    format: "date-time"

  • last_received_atstring | null

    format: "date-time"

  • last_error_codestring | null
  • created_atstringrequired

    format: "date-time"

  • updated_atstringrequired

    format: "date-time"

curl example

curl --request PATCH --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/webhooks/{endpointId}' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "status": "active"
}'
DELETE/v1/workspaces/{workspaceId}/webhooks/{endpointId}

Disable a webhook and stop deliveries or inbound automation events.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

endpointId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 204

Webhook disabled.

No response body.

curl example

curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/webhooks/{endpointId}' \
  --header "Authorization: Bearer $BANGER_API_KEY"
GET/v1/workspaces/{workspaceId}/webhooks/{endpointId}/credentials

Reopen an active incoming webhook's existing credential options.

Requires automation:execute. Returns the same secret without creating or rotating resources. Never cache or log this response.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

endpointId
path · required
  • valuestring

    format: "uuid"

x-banger-product-id
header

Required unless the authenticated API key already binds the product.

  • valuestring

    format: "uuid"

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

List recent delivery attempts and HTTP outcomes for an outbound webhook.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

endpointId
path · required
  • valuestring

    format: "uuid"

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

Queue one signed synthetic event through the normal retrying delivery path.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

endpointId
path · required
  • valuestring

    format: "uuid"

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

selectOnboardingPath

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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

Read canonical seven-step onboarding without creating resources or sending email.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

x-banger-product-id
header

Selected product. Required when multiple active products exist.

  • valuestring

    format: "uuid"

details
query

Include editable drafts, brand, and authoritative DNS records.

  • valueinteger

    enum: 1

Request body

No request body is specified in the contract.

Success response 200

Persisted progress and independently verified capabilities.

application/json

  • valueobject
  • dataobjectrequired
  • product_idstringrequired

    format: "uuid"

  • lessonobject
  • stepstringrequired
  • purposestringrequired
  • setupstringrequired
  • boundarystringrequired
  • example_requeststringrequired
  • resultstringrequired
  • choicestringrequired
  • skipstring | nullrequired
  • guidancestring
  • current_stepstringrequired

    enum: "connect", "mailbox", "business", "journey", "broadcast", "identity", "sending"

  • completed_countintegerrequired
  • total_stepsintegerrequired

    enum: 4, 7

  • completebooleanrequired
  • shared_education_completeboolean
  • outcomestringrequired

    enum: "in_progress", "production_deferred", "production_ready"

  • recommended_actionstringrequired
  • readinessobjectrequired
  • Additional propertyboolean
  • progressobjectrequired
  • Additional propertyAny value
  • stepsarrayrequired
  • Each itemobject
  • idstringrequired
  • titlestringrequired
  • explanationstring
  • statusstringrequired

    enum: "not_started", "in_progress", "waiting", "needs_attention", "complete", "skipped"

  • blocking_dependencystring | null
  • recommended_actionstring
  • actionsarrayrequired
  • Each itemstring
  • resource_idsarrayrequired
  • Each itemstring
  • evidenceobjectrequired
  • Additional propertyAny value
  • Additional propertyAny value

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/guided?details=1' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'x-banger-product-id: 00000000-0000-4000-8000-000000000001'
POST/v1/workspaces/{workspaceId}/onboarding/guided

Execute one explicit retry-safe onboarding action for the selected product.

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

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

x-banger-product-id
header

Selected product. Required when multiple active products exist.

  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • actionstringrequired

    enum: "create_mailbox", "send_first", "skip_reply", "save_business", "discover_brand", "save_journey", "skip_journey", "save_broadcast", "skip_broadcast", "choose_identity", "defer_identity", "setup_receiving", "defer_receiving", "setup_sending", "verify_dns", "continue_domain", "add_inboxes", "skip_inboxes", "send_samples", "finish_for_now", "finish"

  • dataobject

    Business fields company_name, primary_goal, website_url and brand; draft fields name, subject, preview_text, body_text and edit; identity fields domain and local_part. Recipient input is never accepted.

  • Additional propertyAny value

Success response 200

Refreshed canonical state after the requested operation.

application/json

  • valueobject
  • dataobjectrequired
  • product_idstringrequired

    format: "uuid"

  • lessonobject
  • stepstringrequired
  • purposestringrequired
  • setupstringrequired
  • boundarystringrequired
  • example_requeststringrequired
  • resultstringrequired
  • choicestringrequired
  • skipstring | nullrequired
  • guidancestring
  • current_stepstringrequired

    enum: "connect", "mailbox", "business", "journey", "broadcast", "identity", "sending"

  • completed_countintegerrequired
  • total_stepsintegerrequired

    enum: 4, 7

  • completebooleanrequired
  • shared_education_completeboolean
  • outcomestringrequired

    enum: "in_progress", "production_deferred", "production_ready"

  • recommended_actionstringrequired
  • readinessobjectrequired
  • Additional propertyboolean
  • progressobjectrequired
  • Additional propertyAny value
  • stepsarrayrequired
  • Each itemobject
  • idstringrequired
  • titlestringrequired
  • explanationstring
  • statusstringrequired

    enum: "not_started", "in_progress", "waiting", "needs_attention", "complete", "skipped"

  • blocking_dependencystring | null
  • recommended_actionstring
  • actionsarrayrequired
  • Each itemstring
  • resource_idsarrayrequired
  • Each itemstring
  • evidenceobjectrequired
  • Additional propertyAny value
  • Additional propertyAny value

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/guided' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'x-banger-product-id: 00000000-0000-4000-8000-000000000001' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "action": "create_mailbox",
  "data": {}
}'
GET/v1/workspaces/{workspaceId}/onboarding/agent-state

Resume the shared browser and MCP onboarding journey.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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

Select the agent-led entry surface or the browser fallback.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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

Idempotently create the permanent hosted mailbox and start its real welcome-message round trip.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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

Send the OAuth-bound agent connection proof to the canonical hosted mailbox.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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

Record one explicit progressive-onboarding choice.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • decisionstringrequired

    enum: "agent_connection_skipped", "goals_chosen", "domain_bundle_approved", "dns_computer_use_authorized", "dns_manual_selected", "dns_records_applied", "services_reviewed", "persistent_mcp_acknowledged", "autopilot_proposed", "autopilot_skipped", "autopilot_activated"

  • detailsobject
  • Additional propertyAny value

Success response 200

The choice is persisted in the canonical journey.

application/json

  • valueobject
  • dataunspecifiedrequired
  • allOf 1object
  • workspace_idstringrequired

    format: "uuid"

  • statusstringrequired

    enum: "choose_agent", "discovering", "planning", "implementing", "validating", "ready", "complete"

  • entry_surfacestring | nullrequired

    enum: "codex", "chatgpt", "claude", "grok", "other_agent", "browser", null

  • agent_statusstringrequired

    enum: "not_connected", "connecting", "connected", "browser_only"

  • agent_client_namestring | nullrequired
  • domain_choicestringrequired

    enum: "undecided", "company_domain", "no_domain"

  • company_domainstring | nullrequired
  • domain_chosen_atstring | nullrequired

    format: "date-time"

  • business_contextobjectrequired
  • Additional propertyAny value
  • opportunity_planarrayrequired
  • Each itemobject
  • Additional propertyAny value
  • implementation_summaryobjectrequired
  • Additional propertyAny value
  • validation_summaryobjectrequired
  • Additional propertyAny value
  • journey_metadataobjectrequired
  • Additional propertyAny value
  • context_reviewed_atstring | nullrequired

    format: "date-time"

  • plan_proposed_atstring | nullrequired

    format: "date-time"

  • plan_approved_atstring | nullrequired

    format: "date-time"

  • completed_atstring | nullrequired

    format: "date-time"

  • versionintegerrequired

    format: "int64" · minimum: 1

  • updated_atstringrequired

    format: "date-time"

  • allOf 2object
  • domain_discoveryunspecifiedrequired
  • oneOf 1object
  • domainstringrequired
  • scan_statusstringrequired

    enum: "complete", "partial", "failed"

  • companyobjectrequired
  • domainstringrequired

    Further nesting omitted

  • website_urlstring | nullrequired

    format: "uri"

    Further nesting omitted

  • website_statusstringrequired

    enum: "available", "missing", "blocked", "error"

    Further nesting omitted

  • company_namestringrequired

    Further nesting omitted

  • summarystringrequired

    Further nesting omitted

  • audiencestringrequired

    Further nesting omitted

  • offeringsarrayrequired

    Further nesting omitted

  • logo_urlstring | nullrequired

    format: "uri"

    Further nesting omitted

  • favicon_urlstring | nullrequired

    format: "uri"

    Further nesting omitted

  • visual_identityobjectrequired

    Further nesting omitted

  • source_snapshotobjectrequired

    Further nesting omitted

  • dns_signalsarrayrequired
  • Each itemobject

    Further nesting omitted

  • dns_providerunspecifiedrequired
  • oneOf 1object

    No additional properties

    Further nesting omitted

  • oneOf 2null

    Further nesting omitted

  • provider_detectionsarrayrequired
  • Each itemobject

    Further nesting omitted

  • capability_summaryarrayrequired
  • Each itemobject

    Further nesting omitted

  • recommended_connectionsarrayrequired
  • Each itemobject

    No additional properties

    Further nesting omitted

  • connection_planarrayrequired
  • Each itemobject

    No additional properties

    Further nesting omitted

  • limitationsarrayrequired
  • Each itemstring

    Further nesting omitted

  • scanned_atstringrequired

    format: "date-time"

  • confirmed_atstring | nullrequired

    format: "date-time"

  • oneOf 2null
  • recommended_connectionsarrayrequired
  • Each itemobject

    No additional properties

  • keystringrequired
  • namestringrequired
  • categorystringrequired

    enum: "email", "customer", "product", "work", "data"

  • prioritystringrequired

    enum: "required", "recommended"

  • reasonstringrequired
  • sourcestringrequired

    enum: "dns", "business_context", "opportunity_plan", "banger_recommendation"

  • setup_modestringrequired

    enum: "oauth", "secure_credentials"

  • availablebooleanrequired
  • provider_keystring
  • evidencearrayrequired
  • Each itemobject

    Further nesting omitted

  • domain_bundleobject | nullrequired
  • Additional propertyAny value
  • growthobjectrequired
  • Additional propertyAny value
  • activationobjectrequired
  • modestringrequired

    enum: "hosted", "company_domain", "starter"

  • statusstringrequired

    enum: "hosted_mailbox_required", "hosted_mailbox_proving", "hosted_mailbox_ready", "needs_context", "needs_provisioning", "provisioning", "dns_required", "ready_for_proof", "proving", "activated", "starter_required", "starter_proving", "starter_ready"

  • domainstring | nullrequired
  • sending_domain_idstring | nullrequired

    format: "uuid"

  • mailbox_idstring | nullrequired

    format: "uuid"

  • mailbox_addressstring | nullrequired

    format: "email"

  • exact_dns_recordsarrayrequired
  • Each itemobject

    No additional properties

  • idstringrequired

    format: "uuid"

    Further nesting omitted

  • lane_idstringrequired

    format: "uuid"

    Further nesting omitted

  • providerstringrequired

    enum: "banger", "resend"

    Further nesting omitted

  • purposestringrequired

    Further nesting omitted

  • typestringrequired

    enum: "TXT", "MX", "CNAME"

    Further nesting omitted

  • namestringrequired

    Further nesting omitted

  • valuestringrequired

    Further nesting omitted

  • priorityinteger | nullrequired

    Further nesting omitted

  • requiredbooleanrequired

    Further nesting omitted

  • statusstringrequired

    enum: "pending", "verified", "error"

    Further nesting omitted

  • provider_statusstringrequired

    enum: "pending", "verified", "error", "not_applicable"

    Further nesting omitted

  • first_observed_atstring | nullrequired

    format: "date-time"

    Further nesting omitted

  • last_checked_atstring | nullrequired

    format: "date-time"

    Further nesting omitted

  • errorobjectrequired

    Further nesting omitted

  • provider_referencestring | nullrequired

    Further nesting omitted

  • checkpointsarrayrequired
  • Each itemobject
  • keystringrequired

    enum: "domain", "provider", "infrastructure", "dns", "mailbox", "product", "broadcast"

    Further nesting omitted

  • labelstringrequired

    Further nesting omitted

  • statusstringrequired

    enum: "pending", "working", "action_required", "verified"

    Further nesting omitted

  • detailstringrequired

    Further nesting omitted

  • lanesobjectrequired
  • mailboxobjectrequired
  • statusstringrequired

    enum: "pending", "working", "action_required", "verified"

    Further nesting omitted

  • detailstringrequired

    Further nesting omitted

  • transactionalobjectrequired
  • statusstringrequired

    enum: "pending", "working", "action_required", "verified"

    Further nesting omitted

  • detailstringrequired

    Further nesting omitted

  • marketingobjectrequired
  • statusstringrequired

    enum: "pending", "working", "action_required", "verified"

    Further nesting omitted

  • detailstringrequired

    Further nesting omitted

  • proofunspecifiedrequired
  • oneOf 1object
  • proof_idstringrequired

    format: "uuid"

    Further nesting omitted

  • mailbox_idstringrequired

    format: "uuid"

    Further nesting omitted

  • mailbox_addressstringrequired

    format: "email"

    Further nesting omitted

  • command_idstringrequired

    format: "uuid"

    Further nesting omitted

  • phasestringrequired

    enum: "sending", "sent", "received", "checked", "failed"

    Further nesting omitted

  • send_completebooleanrequired

    Further nesting omitted

  • receive_completebooleanrequired

    Further nesting omitted

  • round_trip_check_completebooleanrequired

    Further nesting omitted

  • agent_check_completebooleanrequired

    Further nesting omitted

  • completebooleanrequired

    Further nesting omitted

  • expected_subjectstringrequired

    Further nesting omitted

  • expected_body_textstringrequired

    Further nesting omitted

  • received_message_idstring

    format: "uuid"

    Further nesting omitted

  • received_thread_idstring

    format: "uuid"

    Further nesting omitted

  • received_subjectstring

    Further nesting omitted

  • received_body_textstring

    Further nesting omitted

  • received_atstring

    format: "date-time"

    Further nesting omitted

  • agent_labelstring

    Further nesting omitted

  • agent_suggested_actionstring

    Further nesting omitted

  • error_codestring

    Further nesting omitted

  • replayedbooleanrequired

    Further nesting omitted

  • oneOf 2object
  • proof_idstringrequired

    format: "uuid"

    Further nesting omitted

  • domain_idstringrequired

    format: "uuid"

    Further nesting omitted

  • native_domain_idstringrequired

    format: "uuid"

    Further nesting omitted

  • mailbox_idstringrequired

    format: "uuid"

    Further nesting omitted

  • mailbox_addressstringrequired

    format: "email"

    Further nesting omitted

  • transactional_send_intent_idstring

    format: "uuid"

    Further nesting omitted

  • marketing_send_intent_idstring

    format: "uuid"

    Further nesting omitted

  • transactional_subjectstringrequired

    Further nesting omitted

  • marketing_subjectstringrequired

    Further nesting omitted

  • phasestringrequired

    enum: "sending", "receiving", "received", "checked", "failed"

    Further nesting omitted

  • send_completebooleanrequired

    Further nesting omitted

  • transactional_receivedbooleanrequired

    Further nesting omitted

  • marketing_receivedbooleanrequired

    Further nesting omitted

  • receive_completebooleanrequired

    Further nesting omitted

  • agent_check_completebooleanrequired

    Further nesting omitted

  • completebooleanrequired

    Further nesting omitted

  • error_codestring

    Further nesting omitted

  • replayedbooleanrequired

    Further nesting omitted

  • oneOf 3null
  • overall_readybooleanrequired
  • production_readybooleanrequired
  • completedbooleanrequired
  • pendingbooleanrequired
  • next_actionstringrequired

    enum: "choose_agent", "provision_hosted_mailbox", "send_aha_1", "wait_for_aha_1", "offer_custom_domain", "review_domain_bundle", "provision_domain_bundle", "wait_for_dns_records", "ask_computer_use_permission", "configure_dns_with_computer_use", "present_manual_dns_instructions", "wait_for_dns_propagation", "send_aha_2", "wait_for_aha_2", "create_starter_mailbox", "run_starter_proof", "wait_for_starter_proof", "collect_business_context", "build_lifecycle_map", "review_growth_system", "connect_required_services", "explain_persistent_mcp", "offer_autopilot", "activate_autopilot", "validate", "complete", "open_dashboard"

  • action_requiredobjectrequired
  • typestringrequired
  • requiredbooleanrequired
  • actionstringrequired

    enum: "choose_agent", "provision_hosted_mailbox", "send_aha_1", "wait_for_aha_1", "offer_custom_domain", "review_domain_bundle", "provision_domain_bundle", "wait_for_dns_records", "ask_computer_use_permission", "configure_dns_with_computer_use", "present_manual_dns_instructions", "wait_for_dns_propagation", "send_aha_2", "wait_for_aha_2", "create_starter_mailbox", "run_starter_proof", "wait_for_starter_proof", "collect_business_context", "build_lifecycle_map", "review_growth_system", "connect_required_services", "explain_persistent_mcp", "offer_autopilot", "activate_autopilot", "validate", "complete", "open_dashboard"

  • urlstring | nullrequired

    format: "uri"

  • instructionsstring | nullrequired
  • secure_urlstring | nullrequired

    format: "uri"

  • mcp_urlstringrequired

    format: "uri"

  • dashboard_urlstringrequired

    format: "uri"

curl example

curl --request PUT --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/onboarding/agent-state/decision' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "decision": "agent_connection_skipped",
  "details": {}
}'
PUT/v1/workspaces/{workspaceId}/onboarding/agent-state/domain-choice

Persist the user's company-domain or no-domain onboarding decision and run canonical discovery.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • choicestringrequired

    enum: "company_domain", "no_domain"

  • domainstring

    minLength: 3 · maxLength: 253

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

Store reviewed business context supplied by the browser or connected agent.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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

Store personalized next-step choices after live email activation passes.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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

Record reviewed artifacts prepared from the opportunity plan.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • summaryobjectrequired
  • Additional propertyAny value

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

Approve the proposed opportunity map before the agent prepares sensitive changes.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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

Derive deterministic activation validation from Banger-owned proof state.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • summaryobject
  • Additional propertyAny value

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

Complete onboarding after deterministic validation passes.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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

Read the durable status of a starter-address round trip.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

mailbox_id
query · required
  • valuestring

    format: "uuid"

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

Start or resume a real send-and-receive proof for a starter address.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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

Read the durable status of the domain infrastructure checks.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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

Start or resume two real send-and-receive checks for verified Banger infrastructure.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • native_domain_idstringrequired

    format: "uuid"

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

selectActivationGoal

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • goalstringrequired

    enum: "work_inbox", "product_email", "campaign", "company_workflow"

Success response 200

The first outcome is selected and the guided run may open in the product shell.

application/json

  • valueobject
  • dataobjectrequired
  • goalstringrequired

    enum: "work_inbox", "product_email", "campaign", "company_workflow"

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

getWorkspaceDomainDiscovery

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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

scanWorkspaceDomain

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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

confirmWorkspaceDomainDiscovery

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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

Confirm the current OAuth agent connection

Requires the OAuth credential installed in the current agent client and automation:read scope.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

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"

Access

GET/v1/workspaces/{workspaceId}/access

List workspace members and active invitations.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Workspace directory.

application/json

  • valueobject
  • dataobjectrequired
  • actorIdstringrequired
  • identitiesarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • userIdstringrequired
  • emailstring

    format: "email"

  • displayNamestring
  • kindstringrequired

    const: "user"

  • rolestringrequired

    enum: "owner", "admin", "member", "viewer"

  • statusstringrequired

    enum: "active", "suspended"

  • pendingInvitationsarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • codestringrequired

    format: "uuid"

  • inviteCodestring

    format: "uuid"

  • invitedEmailstring

    format: "email"

  • workspaceIdstringrequired

    format: "uuid"

  • workspaceNamestringrequired
  • rolestringrequired

    enum: "admin", "member", "viewer"

  • accessScopestring

    const: "workspace"

  • statusstringrequired

    enum: "pending", "accepted"

  • expiresAtstringrequired

    format: "date-time"

  • notificationSentboolean

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/access' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Invitations

POST/v1/workspaces/{workspaceId}/invitations

Invite a human actor to the workspace.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • emailstringrequired

    format: "email" · maxLength: 320

  • rolestring

    default: "member" · enum: "admin", "member", "viewer"

  • mailbox_idsarray

    maxItems: 250

  • Each itemstring

    format: "uuid"

  • send_modestring

    default: "direct" · enum: "direct", "approval_required"

  • expires_in_hoursinteger

    minimum: 1 · maximum: 720 · default: 168

Success response 201

Invitation created.

application/json

  • valueobject
  • dataobjectrequired
  • idstringrequired

    format: "uuid"

  • codestringrequired

    format: "uuid"

  • inviteCodestring

    format: "uuid"

  • invitedEmailstring

    format: "email"

  • workspaceIdstringrequired

    format: "uuid"

  • workspaceNamestringrequired
  • rolestringrequired

    enum: "admin", "member", "viewer"

  • accessScopestring

    const: "workspace"

  • statusstringrequired

    enum: "pending", "accepted"

  • expiresAtstringrequired

    format: "date-time"

  • notificationSentboolean

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/invitations' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "email": "person@example.com",
  "role": "member",
  "mailbox_ids": [
    "00000000-0000-4000-8000-000000000001"
  ],
  "send_mode": "direct",
  "expires_in_hours": 168
}'

API keys

GET/v1/workspaces/{workspaceId}/api-keys

listWorkspaceApiKeys

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Active scoped API keys. Secret values are never returned.

application/json

  • valueobject
  • dataarrayrequired
  • Each itemobject
  • idstringrequired

    format: "uuid"

  • namestringrequired
  • prefixstringrequired
  • scopesarrayrequired
  • Each itemstring

    enum: "mail:read", "mail:write", "mail:send", "contacts:read", "contacts:write", "campaigns:read", "campaigns:write", "campaigns:send", "automation:read", "automation:execute", "connections:read", "connections:use", "connections:admin", "workspace:admin"

  • expires_atstring

    format: "date-time"

  • last_used_atstring

    format: "date-time"

  • created_atstringrequired

    format: "date-time"

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/api-keys' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/api-keys

createWorkspaceApiKey

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject

    No additional properties

  • namestringrequired

    minLength: 1 · maxLength: 100

  • scopesarrayrequired

    minItems: 1 · uniqueItems: true

  • Each itemstring

    enum: "mail:read", "mail:write", "mail:send", "contacts:read", "contacts:write", "campaigns:read", "campaigns:write", "campaigns:send", "automation:read", "automation:execute", "connections:read", "connections:use", "connections:admin", "workspace:admin"

  • expires_atstring

    format: "date-time"

Success response 201

API key created. The token is returned only once.

application/json

  • valueobject
  • dataunspecifiedrequired
  • allOf 1object
  • idstringrequired

    format: "uuid"

  • namestringrequired
  • prefixstringrequired
  • scopesarrayrequired
  • Each itemstring

    enum: "mail:read", "mail:write", "mail:send", "contacts:read", "contacts:write", "campaigns:read", "campaigns:write", "campaigns:send", "automation:read", "automation:execute", "connections:read", "connections:use", "connections:admin", "workspace:admin"

  • expires_atstring

    format: "date-time"

  • last_used_atstring

    format: "date-time"

  • created_atstringrequired

    format: "date-time"

  • allOf 2object
  • tokenstringrequired

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/api-keys' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "name": "example",
  "scopes": [
    "mail:read"
  ],
  "expires_at": "2026-01-01T00:00:00Z"
}'
DELETE/v1/workspaces/{workspaceId}/api-keys/{apiKeyId}

revokeWorkspaceApiKey

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

apiKeyId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 204

API key revoked.

No response body.

curl example

curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/api-keys/{apiKeyId}' \
  --header "Authorization: Bearer $BANGER_API_KEY"

Billing

GET/v1/workspaces/{workspaceId}/billing

Read billing, usage, and available plans

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • billingobjectrequired
  • workspaceIdstringrequired

    format: "uuid"

  • tierstringrequired

    enum: "free", "starter", "pro", "business", "scale", "enterprise"

  • planKeystringrequired

    enum: "free", "starter", "pro", "business", "scale", "enterprise"

  • statusstringrequired
  • planIntervalstring | nullrequired

    enum: "month", "year", null

  • stripeCustomerIdstring | nullrequired
  • stripeSubscriptionIdstring | nullrequired
  • currentPeriodEndinteger | nullrequired

    Unix timestamp in milliseconds.

  • cancelAtPeriodEndbooleanrequired
  • prepaidPlanKeystring | nullrequired
  • prepaidUntilinteger | nullrequired

    Unix timestamp in milliseconds.

  • usageobjectrequired
  • storageBytesnumberrequired
  • storageLimitBytesnumberrequired
  • sendsThisMonthnumberrequired
  • sendLimitnumberrequired
  • sendsTodaynumberrequired
  • dailySendLimitnumber | nullrequired
  • periodEndinteger | nullrequired

    Unix timestamp in milliseconds.

  • catalogobjectrequired
  • plansarrayrequired
  • Each itemobject
  • planKeystringrequired

    enum: "free", "starter", "pro", "business", "scale", "enterprise"

  • labelstringrequired
  • sendLimitnumberrequired
  • storageGbnumberrequired
  • gmailImportLimitnumberrequired
  • triageRuleLimitnumberrequired
  • triageRunLimitnumberrequired
  • pricesarrayrequired
  • Each itemobject

    Further nesting omitted

  • addonsarrayrequired

    maxItems: 0

  • Each itemunspecified
  • agentPaymentunspecifiedrequired
  • anyOf 1object
  • network_idstringrequired
  • currencystringrequired

    enum: "usd"

  • howstringrequired
  • optionsarrayrequired
  • Each itemobject
  • plan_keystringrequired

    enum: "starter", "pro"

    Further nesting omitted

  • intervalstringrequired

    enum: "month", "year"

    Further nesting omitted

  • monthsintegerrequired

    enum: 1, 12

    Further nesting omitted

  • amount_centsintegerrequired

    Further nesting omitted

  • anyOf 2null

curl example

curl --request GET --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/billing' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/billing

Synchronize billing from Stripe

Alias of POST /billing/sync. Requires workspace:admin.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • billingobjectrequired
  • workspaceIdstringrequired

    format: "uuid"

  • tierstringrequired

    enum: "free", "starter", "pro", "business", "scale", "enterprise"

  • planKeystringrequired

    enum: "free", "starter", "pro", "business", "scale", "enterprise"

  • statusstringrequired
  • planIntervalstring | nullrequired

    enum: "month", "year", null

  • stripeCustomerIdstring | nullrequired
  • stripeSubscriptionIdstring | nullrequired
  • currentPeriodEndinteger | nullrequired

    Unix timestamp in milliseconds.

  • cancelAtPeriodEndbooleanrequired
  • prepaidPlanKeystring | nullrequired
  • prepaidUntilinteger | nullrequired

    Unix timestamp in milliseconds.

  • usageobjectrequired
  • storageBytesnumberrequired
  • storageLimitBytesnumberrequired
  • sendsThisMonthnumberrequired
  • sendLimitnumberrequired
  • sendsTodaynumberrequired
  • dailySendLimitnumber | nullrequired
  • periodEndinteger | nullrequired

    Unix timestamp in milliseconds.

  • catalogobjectrequired
  • plansarrayrequired
  • Each itemobject
  • planKeystringrequired

    enum: "free", "starter", "pro", "business", "scale", "enterprise"

  • labelstringrequired
  • sendLimitnumberrequired
  • storageGbnumberrequired
  • gmailImportLimitnumberrequired
  • triageRuleLimitnumberrequired
  • triageRunLimitnumberrequired
  • pricesarrayrequired
  • Each itemobject

    Further nesting omitted

  • addonsarrayrequired

    maxItems: 0

  • Each itemunspecified
  • agentPaymentunspecifiedrequired
  • anyOf 1object
  • network_idstringrequired
  • currencystringrequired

    enum: "usd"

  • howstringrequired
  • optionsarrayrequired
  • Each itemobject
  • plan_keystringrequired

    enum: "starter", "pro"

    Further nesting omitted

  • intervalstringrequired

    enum: "month", "year"

    Further nesting omitted

  • monthsintegerrequired

    enum: 1, 12

    Further nesting omitted

  • amount_centsintegerrequired

    Further nesting omitted

  • anyOf 2null

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/billing' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/billing/sync

Synchronize the latest Stripe subscription

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • billingobjectrequired
  • workspaceIdstringrequired

    format: "uuid"

  • tierstringrequired

    enum: "free", "starter", "pro", "business", "scale", "enterprise"

  • planKeystringrequired

    enum: "free", "starter", "pro", "business", "scale", "enterprise"

  • statusstringrequired
  • planIntervalstring | nullrequired

    enum: "month", "year", null

  • stripeCustomerIdstring | nullrequired
  • stripeSubscriptionIdstring | nullrequired
  • currentPeriodEndinteger | nullrequired

    Unix timestamp in milliseconds.

  • cancelAtPeriodEndbooleanrequired
  • prepaidPlanKeystring | nullrequired
  • prepaidUntilinteger | nullrequired

    Unix timestamp in milliseconds.

  • usageobjectrequired
  • storageBytesnumberrequired
  • storageLimitBytesnumberrequired
  • sendsThisMonthnumberrequired
  • sendLimitnumberrequired
  • sendsTodaynumberrequired
  • dailySendLimitnumber | nullrequired
  • periodEndinteger | nullrequired

    Unix timestamp in milliseconds.

  • catalogobjectrequired
  • plansarrayrequired
  • Each itemobject
  • planKeystringrequired

    enum: "free", "starter", "pro", "business", "scale", "enterprise"

  • labelstringrequired
  • sendLimitnumberrequired
  • storageGbnumberrequired
  • gmailImportLimitnumberrequired
  • triageRuleLimitnumberrequired
  • triageRunLimitnumberrequired
  • pricesarrayrequired
  • Each itemobject

    Further nesting omitted

  • addonsarrayrequired

    maxItems: 0

  • Each itemunspecified
  • agentPaymentunspecifiedrequired
  • anyOf 1object
  • network_idstringrequired
  • currencystringrequired

    enum: "usd"

  • howstringrequired
  • optionsarrayrequired
  • Each itemobject
  • plan_keystringrequired

    enum: "starter", "pro"

    Further nesting omitted

  • intervalstringrequired

    enum: "month", "year"

    Further nesting omitted

  • monthsintegerrequired

    enum: 1, 12

    Further nesting omitted

  • amount_centsintegerrequired

    Further nesting omitted

  • anyOf 2null

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/billing/sync' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/billing/checkout

Start checkout or open the billing portal

Requires workspace:admin. Only paid self-serve plans are sold. An active subscription opens the customer portal. Snake-case fields take precedence over camel-case aliases.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • plan_keystring

    enum: "starter", "pro", "business", "scale"

  • planKeystring

    enum: "starter", "pro", "business", "scale"

  • intervalstring

    default: "month" · enum: "month", "year"

  • billing_attempt_idstring

    Optional retry identifier: 8–64 letters, digits or hyphens. Invalid identifiers are ignored.

  • billingAttemptIdstring
  • anyOf 1unspecified
  • anyOf 2unspecified

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • urlstringrequired

    format: "uri"

  • kindstringrequired

    enum: "checkout", "portal"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/billing/checkout' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '"example"'
POST/v1/workspaces/{workspaceId}/billing/portal

Open the customer billing portal

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • urlstringrequired

    format: "uri"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/billing/portal' \
  --header "Authorization: Bearer $BANGER_API_KEY"
POST/v1/workspaces/{workspaceId}/billing/agent-payment

Buy prepaid plan time with a Shared Payment Token

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body required

application/json

  • valueobject
  • plan_keystringrequired

    enum: "starter", "pro"

  • intervalstring

    default: "month" · enum: "month", "year"

  • shared_payment_tokenstringrequired

    pattern: "^spt_[A-Za-z0-9_]{6,200}$"

Success response 200

Successful response.

application/json

  • valueobject
  • dataobjectrequired
  • statusstringrequired
  • payment_intent_idstringrequired
  • messagestringrequired
  • plan_keystring

    enum: "starter", "pro"

  • prepaid_untilstring | null

    format: "date-time"

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}/billing/agent-payment' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "plan_key": "starter",
  "interval": "month",
  "shared_payment_token": "example"
}'

Workspaces

POST/v1/workspaces

createWorkspace

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
Idempotency-Key
header · required
  • valuestring

    minLength: 16 · maxLength: 128

Request body required

application/json

  • valueobject

    No additional properties

  • namestringrequired

    minLength: 1 · maxLength: 200

Success response 200

Idempotent replay of a previously created workspace.

application/json

  • valueobject
  • dataunspecifiedrequired
  • allOf 1object
  • idstringrequired

    format: "uuid"

  • namestringrequired
  • shardstringrequired
  • rolestringrequired

    enum: "owner", "admin", "member", "viewer"

  • revisionintegerrequired

    format: "int64"

  • allOf 2object
  • replayedbooleanrequired

curl example

curl --request POST --globoff 'https://api.bangermail.com/v1/workspaces' \
  --header "Authorization: Bearer $BANGER_API_KEY" \
  --header 'Idempotency-Key: examplexxxxxxxxx' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "name": "example"
}'
DELETE/v1/workspaces/{workspaceId}

Permanently delete an owned workspace and queue physical object cleanup.

Requires the authenticated actor to be an owner. Static workspace API keys cannot delete a workspace; a human session or user-authorized OAuth grant with workspace:admin is required. Paid subscriptions must be cancelled first. PostgreSQL state is deleted atomically and all B2 object versions under the workspace prefix are purged asynchronously.

Authentication: Bearer workspace API key.

Parameters

Name / locationSchema
workspaceId
path · required
  • valuestring

    format: "uuid"

Request body

No request body is specified in the contract.

Success response 202

The canonical workspace was deleted and physical object cleanup was queued.

application/json

  • valueobject
  • dataobjectrequired

    No additional properties

  • idstringrequired

    format: "uuid"

  • namestringrequired
  • deletedbooleanrequired

    const: true

  • storage_cleanupstringrequired

    const: "queued"

  • next_workspace_idstring

    format: "uuid"

curl example

curl --request DELETE --globoff 'https://api.bangermail.com/v1/workspaces/{workspaceId}' \
  --header "Authorization: Bearer $BANGER_API_KEY"