Boom Ai WhatsApp templates API
The WhatsApp templates API from Boom Ai — 3 operation(s) for whatsapp templates.
The WhatsApp templates API from Boom Ai — 3 operation(s) for whatsapp templates.
openapi: 3.1.0
info:
title: Boom CDP Custom Objects WhatsApp templates API
version: 1.0.0
description: 'Boom''s public REST API — one uniform surface over every platform capability. CDP: upsert people and custom objects, define object and relationship types, link and unlink relationships, and record behavioral events — one record per request or up to 1000 per request via the `/batch` endpoints. Segments: read (list, read, membership) and full authoring — discover the filterable catalog, validate a filter, create and update segments, preview match counts, and trigger evaluation. Initiatives: create and configure outreach initiatives, link WhatsApp templates, drive the lifecycle (launch, cancel, archive), and read collected-data summaries. Participants: enroll people into an active initiative, track their status, read conversation transcripts, and stop outreach. Journeys: read-only access to always-on message flows and their metrics. WhatsApp templates: list your WhatsApp numbers and list, read, and create message templates. The same capabilities are exposed as MCP tools with identical schemas.'
servers:
- url: https://www.useboom.ai
description: Production
- url: https://dev.useboom.ai
description: Development (sandbox — use a development organization API key)
security:
- bearerAuth: []
tags:
- name: WhatsApp templates
paths:
/api/v1/templates:
get:
operationId: templates_list
summary: List templates
description: List your WhatsApp templates and each one's approval status. Reviews are async (~24–48h) — re-read to see updates.
tags:
- WhatsApp templates
parameters:
- name: status
in: query
required: false
schema:
$schema: https://json-schema.org/draft/2020-12/schema
type: string
enum:
- DRAFT
- PENDING
- APPROVED
- REJECTED
- name: category
in: query
required: false
schema:
$schema: https://json-schema.org/draft/2020-12/schema
type: string
enum:
- UTILITY
- MARKETING
- AUTHENTICATION
- name: contentType
in: query
required: false
schema:
$schema: https://json-schema.org/draft/2020-12/schema
type: string
enum:
- TEXT
- MEDIA
- QUICK_REPLY
- CALL_TO_ACTION
- CARD
responses:
'200':
description: Success
content:
application/json:
schema:
$schema: https://json-schema.org/draft/2020-12/schema
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: string
description: Template id.
name:
type: string
description: Template name (unique per WhatsApp number).
language:
type: string
description: WhatsApp language code the template was created for, e.g. `es_MX`.
category:
type: string
enum:
- UTILITY
- MARKETING
- AUTHENTICATION
contentType:
type: string
enum:
- TEXT
- MEDIA
- QUICK_REPLY
- CALL_TO_ACTION
- CARD
content:
description: The message content (shape per `contentType`).
variables:
anyOf:
- type: object
propertyNames:
type: string
additionalProperties:
type: string
- type: 'null'
description: Example values for `{{1}}`-style placeholders.
phoneNumbers:
type: array
items:
type: string
description: WhatsApp numbers this template can be sent from.
status:
type: string
enum:
- DRAFT
- PENDING
- APPROVED
- REJECTED
description: DRAFT (not yet submitted), PENDING (in WhatsApp review, typically 24-48h), APPROVED, or REJECTED (see rejectionReason).
rejectionReason:
anyOf:
- type: string
- type: 'null'
createdAt:
type: string
description: ISO 8601 timestamp.
updatedAt:
type: string
description: ISO 8601 timestamp.
required:
- id
- name
- language
- category
- contentType
- content
- variables
- phoneNumbers
- status
- rejectionReason
- createdAt
- updatedAt
additionalProperties: false
next_cursor:
type: 'null'
required:
- data
- next_cursor
additionalProperties: false
'400':
description: Validation failed or the request cannot proceed.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Stable machine-readable error code (snake_case).
message:
type: string
required:
- code
- message
required:
- error
'401':
description: Missing, malformed, or revoked API key.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Stable machine-readable error code (snake_case).
message:
type: string
required:
- code
- message
required:
- error
'404':
description: The resource does not exist in this organization.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Stable machine-readable error code (snake_case).
message:
type: string
required:
- code
- message
required:
- error
'409':
description: Conflicts with the current state (duplicates, wrong lifecycle state).
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Stable machine-readable error code (snake_case).
message:
type: string
required:
- code
- message
required:
- error
'422':
description: The request is well-formed but semantically invalid.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Stable machine-readable error code (snake_case).
message:
type: string
required:
- code
- message
required:
- error
'429':
description: Rate limit exceeded — retry after `Retry-After`.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Stable machine-readable error code (snake_case).
message:
type: string
required:
- code
- message
required:
- error
'500':
description: Internal server error.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Stable machine-readable error code (snake_case).
message:
type: string
required:
- code
- message
required:
- error
'503':
description: Transient error — retry with a narrower request.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Stable machine-readable error code (snake_case).
message:
type: string
required:
- code
- message
required:
- error
post:
operationId: templates_create
summary: Create template
description: 'Create a WhatsApp template and submit it for WhatsApp approval, which is asynchronous (~24–48h). Example (TEXT): `{ "name": "order_shipped", "language": "es", "category": "UTILITY", "contentType": "TEXT", "content": { "body": "Hola {{1}}, tu pedido ya salió." }, "variables": { "1": "Ana" } }`. Example with buttons (CALL_TO_ACTION): `{ "name": "order_shipped_cta", "language": "es", "category": "UTILITY", "contentType": "CALL_TO_ACTION", "content": { "body": "Hola {{1}}, tu pedido ya salió.", "actions": [{ "type": "URL", "title": "Ver pedido", "url": "https://example.com/orders/{{2}}" }] }, "variables": { "1": "Ana", "2": "12345" } }`. Example with reply buttons (QUICK_REPLY): `{ "name": "order_feedback", "language": "es", "category": "UTILITY", "contentType": "QUICK_REPLY", "content": { "body": "¿Te gustó tu compra?", "actions": [{ "title": "Sí", "id": "yes" }, { "title": "No", "id": "no" }] } }`. Example with a header and image (CARD): `{ "name": "order_shipped_card", "language": "es", "category": "UTILITY", "contentType": "CARD", "content": { "headerType": "media", "mediaUrl": "https://example.com/banner.jpg", "body": "Hola {{1}}, tu pedido ya salió.", "footer": "Gracias por tu compra", "actions": [{ "type": "URL", "title": "Ver pedido", "url": "https://example.com/orders/{{2}}" }] }, "variables": { "1": "Ana", "2": "12345" } }`.'
tags:
- WhatsApp templates
requestBody:
required: true
content:
application/json:
schema:
$schema: https://json-schema.org/draft/2020-12/schema
type: object
properties:
name:
type: string
minLength: 1
maxLength: 255
description: Template name, unique per WhatsApp number.
language:
type: string
minLength: 2
maxLength: 10
description: WhatsApp language code, e.g. `es`, `en`. A regional variant like `es_MX` or `en_US` is normalized to its base code.
category:
type: string
enum:
- UTILITY
- MARKETING
- AUTHENTICATION
contentType:
type: string
enum:
- TEXT
- MEDIA
- QUICK_REPLY
- CALL_TO_ACTION
- CARD
content:
type: object
propertyNames:
type: string
additionalProperties: {}
description: 'Message content. Shape depends on `contentType`: TEXT `{ body }`; MEDIA `{ body?, media: [url] }`; QUICK_REPLY `{ body, actions: [{ title, id }] }`; CALL_TO_ACTION `{ body, actions: [{ type: URL|PHONE_NUMBER, title, url|phone }] }`; CARD `{ headerType, headerText|mediaUrl, body, footer?, actions? }`. Use `{{1}}`, `{{2}}`… for variables. Example (TEXT): `{ "body": "Hola {{1}}, tu pedido está en camino" }`. Example (CALL_TO_ACTION, adds a button): `{ "body": "Hola {{1}}, tu pedido está en camino", "actions": [{ "type": "URL", "title": "Ver pedido", "url": "https://example.com/orders/{{2}}" }] }`. Example (QUICK_REPLY, adds reply buttons): `{ "body": "¿Te gustó tu compra?", "actions": [{ "title": "Sí", "id": "yes" }, { "title": "No", "id": "no" }] }`. Example (CARD, header + optional footer/button): `{ "headerType": "text", "headerText": "Pedido en camino", "body": "Hola {{1}}, tu pedido ya salió.", "footer": "Gracias por tu compra", "actions": [{ "type": "URL", "title": "Ver pedido", "url": "https://example.com/orders/{{2}}" }] }`.'
variables:
description: 'Example values for placeholders, e.g. `{ "1": "Ana" }` for `{{1}}`. Required for every placeholder used.'
type: object
propertyNames:
type: string
additionalProperties:
type: string
phoneNumbers:
description: WhatsApp numbers (E.164) to create the template for. Omit to use the first active number connected to your organization.
minItems: 1
type: array
items:
type: string
minLength: 1
required:
- name
- language
- category
- contentType
- content
responses:
'201':
description: Success
content:
application/json:
schema:
$schema: https://json-schema.org/draft/2020-12/schema
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: string
description: Template id.
name:
type: string
description: Template name (unique per WhatsApp number).
language:
type: string
description: WhatsApp language code the template was created for, e.g. `es_MX`.
category:
type: string
enum:
- UTILITY
- MARKETING
- AUTHENTICATION
contentType:
type: string
enum:
- TEXT
- MEDIA
- QUICK_REPLY
- CALL_TO_ACTION
- CARD
content:
description: The message content (shape per `contentType`).
variables:
anyOf:
- type: object
propertyNames:
type: string
additionalProperties:
type: string
- type: 'null'
description: Example values for `{{1}}`-style placeholders.
phoneNumbers:
type: array
items:
type: string
description: WhatsApp numbers this template can be sent from.
status:
type: string
enum:
- DRAFT
- PENDING
- APPROVED
- REJECTED
description: DRAFT (not yet submitted), PENDING (in WhatsApp review, typically 24-48h), APPROVED, or REJECTED (see rejectionReason).
rejectionReason:
anyOf:
- type: string
- type: 'null'
createdAt:
type: string
description: ISO 8601 timestamp.
updatedAt:
type: string
description: ISO 8601 timestamp.
required:
- id
- name
- language
- category
- contentType
- content
- variables
- phoneNumbers
- status
- rejectionReason
- createdAt
- updatedAt
additionalProperties: false
description: The created template(s) — one per WhatsApp account backing the chosen numbers.
required:
- data
additionalProperties: false
'400':
description: Validation failed or the request cannot proceed.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Stable machine-readable error code (snake_case).
message:
type: string
required:
- code
- message
required:
- error
'401':
description: Missing, malformed, or revoked API key.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Stable machine-readable error code (snake_case).
message:
type: string
required:
- code
- message
required:
- error
'404':
description: The resource does not exist in this organization.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Stable machine-readable error code (snake_case).
message:
type: string
required:
- code
- message
required:
- error
'409':
description: Conflicts with the current state (duplicates, wrong lifecycle state).
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Stable machine-readable error code (snake_case).
message:
type: string
required:
- code
- message
required:
- error
'422':
description: The request is well-formed but semantically invalid.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Stable machine-readable error code (snake_case).
message:
type: string
required:
- code
- message
required:
- error
'429':
description: Rate limit exceeded — retry after `Retry-After`.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Stable machine-readable error code (snake_case).
message:
type: string
required:
- code
- message
required:
- error
'500':
description: Internal server error.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Stable machine-readable error code (snake_case).
message:
type: string
required:
- code
- message
required:
- error
'503':
description: Transient error — retry with a narrower request.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Stable machine-readable error code (snake_case).
message:
type: string
required:
- code
- message
required:
- error
/api/v1/templates/{id}:
get:
operationId: templates_get
summary: Get template
description: Get one WhatsApp template by id, including its approval status and any rejection reason.
tags:
- WhatsApp templates
parameters:
- name: id
in: path
required: true
schema:
$schema: https://json-schema.org/draft/2020-12/schema
type: string
minLength: 1
description: Template id.
responses:
'200':
description: Success
content:
application/json:
schema:
$schema: https://json-schema.org/draft/2020-12/schema
type: object
properties:
id:
type: string
description: Template id.
name:
type: string
description: Template name (unique per WhatsApp number).
language:
type: string
description: WhatsApp language code the template was created for, e.g. `es_MX`.
category:
type: string
enum:
- UTILITY
- MARKETING
- AUTHENTICATION
contentType:
type: string
enum:
- TEXT
- MEDIA
- QUICK_REPLY
- CALL_TO_ACTION
- CARD
content:
description: The message content (shape per `contentType`).
variables:
anyOf:
- type: object
propertyNames:
type: string
additionalProperties:
type: string
- type: 'null'
description: Example values for `{{1}}`-style placeholders.
phoneNumbers:
type: array
items:
type: string
description: WhatsApp numbers this template can be sent from.
status:
type: string
enum:
- DRAFT
- PENDING
- APPROVED
- REJECTED
description: DRAFT (not yet submitted), PENDING (in WhatsApp review, typically 24-48h), APPROVED, or REJECTED (see rejectionReason).
rejectionReason:
anyOf:
- type: string
- type: 'null'
createdAt:
type: string
description: ISO 8601 timestamp.
updatedAt:
type: string
description: ISO 8601 timestamp.
required:
- id
- name
- language
- category
- contentType
- content
- variables
- phoneNumbers
- status
- rejectionReason
- createdAt
- updatedAt
additionalProperties: false
'400':
description: Validation failed or the request cannot proceed.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Stable machine-readable error code (snake_case).
message:
type: string
required:
- code
- message
required:
- error
'401':
description: Missing, malformed, or revoked API key.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Stable machine-readable error code (snake_case).
message:
type: string
required:
- code
- message
required:
- error
'404':
description: The resource does not exist in this organization.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Stable machine-readable error code (snake_case).
message:
type: string
required:
- code
- message
required:
- error
'409':
description: Conflicts with the current state (duplicates, wrong lifecycle state).
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Stable machine-readable error code (snake_case).
message:
type: string
required:
- code
- message
required:
- error
'422':
description: The request is well-formed but semantically invalid.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Stable machine-readable error code (snake_case).
message:
type: string
required:
- code
- message
required:
- error
'429':
description: Rate limit exceeded — retry after `Retry-After`.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Stable machine-readable error code (snake_case).
message:
type: string
required:
- code
- message
required:
- error
'500':
description: Internal server error.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Stable machine-readable error code (snake_case).
# --- truncated at 32 KB (39 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/boom-ai/refs/heads/main/openapi/boom-ai-whatsapp-templates-api-openapi.yml