← Files YCloud Developer KitARCHIVED FILE
skills/ycloud-whatsapp-templates/references/openapi.md
56 KB · Oct 4, 2026 · 12:32 UTC
<!-- Generated by scripts/build_openapi_skill_references.py; do not edit. -->
# OpenAPI contract: WhatsApp templates
## Provenance
- Source: `ycloud-api-v2.yaml` (pinned release snapshot).
- Source SHA-256: `8592bd4cc37186655a480dd86ce6bac6731543727327a2871d9103a0b8ed9e81`
- OpenAPI version: `3.0.0`
- API info.version: `v2`
- This derived reference does not replace the upstream API Owner's canonical source.
- Generated deterministically from normalized JSON; do not edit this file by hand.
## Scope and handoff
- These seven operations manage template lifecycle and analytics only. Sending an existing template is a Messages concern. Create, edit, delete, and other external mutations are plan/confirmation only in this MVP; delete is high risk.
- Operation coverage: `7`
## Operations
### `POST /whatsapp/templates` — `whatsapp_template-create`
- Summary: Create a template
- Description:
> Creates a WhatsApp template.
- Parameters: none
- Request body: required
- `application/json`: `#/components/schemas/WhatsappTemplateCreateRequest`
- `$ref`: `#/components/schemas/WhatsappTemplateCreateRequest`
- Responses:
- `200`: Successfully created a WhatsApp template.
- `application/json`: `#/components/schemas/WhatsappTemplate`
- `$ref`: `#/components/schemas/WhatsappTemplate`
### `GET /whatsapp/templates` — `whatsapp_template-list`
- Summary: List templates
- Description:
> Returns a paginated list of WhatsApp templates you've previously created.
>
> Archived templates are included when they match the query. Use `filter.status=ARCHIVED` to list archived templates explicitly.
- Parameters:
- `page` (query, optional): `integer (int32)`
> Page number of the results to be returned, 1-based.
- Constraints: minimum=1; maximum=100; default=1
- `limit` (query, optional): `integer (int32)`
> A limit on the number of results to be returned, or number of results per page, between 1 and 100, defaults to 10.
- Constraints: minimum=1; maximum=100; default=10
- `includeTotal` (query, optional): `boolean`
> Return results inside an object that contains the total result count or not.
- Constraints: default=false
- `filter.wabaId` (query, optional): `string`
> **Required if you have more than 100 WABAs.**
> WhatsApp Business Account ID.
- Constraints: example="whatsapp-business-account-id"
- `filter.name` (query, optional): `string`
> Name of the template.
- Constraints: maxLength=512; pattern="[a-z0-9_]{1,512}"; example="sample_whatsapp_template"
- `filter.language` (query, optional): `string`
> Language code of the template. See [Supported Languages](https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/supported-languages) for all codes.
- Constraints: example="en"
- `filter.status` (query, optional): `string`
> Comma-separated template statuses to filter by. Supported values include `PENDING`, `REJECTED`, `APPROVED`, `PAUSED`, `DISABLED`, `ARCHIVED`, `IN_APPEAL`, and `DELETED`.
- Constraints: example="APPROVED,ARCHIVED"
- Request body: none
- Responses:
- `200`: Successfully retrieved a paginated list of objects.
- `application/json`: `#/components/schemas/WhatsappTemplatePage`
- `$ref`: `#/components/schemas/WhatsappTemplatePage`
### `GET /whatsapp/templates/{wabaId}/{name}/{language}` — `whatsapp_template-retrieve-by-name-and-language`
- Summary: Retrieve a template
- Description:
> Retrieves a WhatsApp template by name and language.
>
> The returned template `status` may be `ARCHIVED`.
- Parameters:
- `wabaId` (path, required): `string`
> WhatsApp Business Account ID.
- Constraints: example="whatsapp-business-account-id"
- `name` (path, required): `string`
> Name of the template.
- Constraints: minimum=1; maximum=512; pattern="[a-z0-9_]{1,512}"; example="sample_whatsapp_template"
- `language` (path, required): `string`
> Language code of the template. See [Supported Languages](https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/supported-languages) for all codes.
- Constraints: example="en"
- Request body: none
- Responses:
- `200`: Successfully retrieved the template.
- `application/json`: `#/components/schemas/WhatsappTemplate`
- `$ref`: `#/components/schemas/WhatsappTemplate`
- `404`: The requested resource does not exist.
- `application/json`: `#/components/schemas/ErrorResponse`
- `$ref`: `#/components/schemas/ErrorResponse`
### `PATCH /whatsapp/templates/{wabaId}/{name}/{language}` — `whatsapp_template-edit-by-name-and-language`
- Summary: Edit a template
- Description:
> Edits a WhatsApp template by name and language.
> Editing a template replaces its old contents entirely, so include any components you wish to preserve as well as components you wish to update using the components parameter.
>
> Only templates in `APPROVED`, `REJECTED`, or `PAUSED` status can be edited. `ARCHIVED` templates cannot be edited.
- Parameters:
- `wabaId` (path, required): `string`
> WhatsApp Business Account ID.
- Constraints: example="whatsapp-business-account-id"
- `name` (path, required): `string`
> Name of the template.
- Constraints: minimum=1; maximum=512; pattern="[a-z0-9_]{1,512}"; example="sample_whatsapp_template"
- `language` (path, required): `string`
> Language code of the template. See [Supported Languages](https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/supported-languages) for all codes.
- Constraints: example="en"
- Request body: optional
- `application/json`: `#/components/schemas/WhatsappTemplateEditRequest`
- `$ref`: `#/components/schemas/WhatsappTemplateEditRequest`
- Responses:
- `200`: Successfully edited the template.
- `application/json`: `#/components/schemas/WhatsappTemplate`
- `$ref`: `#/components/schemas/WhatsappTemplate`
- `404`: The requested resource does not exist.
- `application/json`: `#/components/schemas/ErrorResponse`
- `$ref`: `#/components/schemas/ErrorResponse`
### `DELETE /whatsapp/templates/{wabaId}/{name}` — `whatsapp_template-delete-by-name`
- Summary: Delete templates by name
- Description:
> Deletes WhatsApp templates by name. If that template name exists in multiple languages, all languages will be deleted.
> HTTP status `404` is returned if no templates are found for the specific name.
- Parameters:
- `wabaId` (path, required): `string`
> WhatsApp Business Account ID.
- Constraints: example="whatsapp-business-account-id"
- `name` (path, required): `string`
> Name of the template.
- Constraints: minimum=1; maximum=512; pattern="[a-z0-9_]{1,512}"; example="sample_whatsapp_template"
- Request body: none
- Responses:
- `200`: Successfully deleted the template(s).
- `application/json`: `array`
- `404`: The requested resource does not exist.
- `application/json`: `#/components/schemas/ErrorResponse`
- `$ref`: `#/components/schemas/ErrorResponse`
### `DELETE /whatsapp/templates/{wabaId}/{name}/{language}` — `whatsapp_template-delete-by-name-and-language`
- Summary: Delete a template
- Description:
> Deletes a WhatsApp template by name and language.
- Parameters:
- `wabaId` (path, required): `string`
> WhatsApp Business Account ID.
- Constraints: example="whatsapp-business-account-id"
- `name` (path, required): `string`
> Name of the template.
- Constraints: minimum=1; maximum=512; pattern="[a-z0-9_]{1,512}"; example="sample_whatsapp_template"
- `language` (path, required): `string`
> Language code of the template. See [Supported Languages](https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/supported-languages) for all codes.
- Constraints: example="en"
- Request body: none
- Responses:
- `200`: Successfully deleted the template.
- `application/json`: `#/components/schemas/WhatsappTemplate`
- `$ref`: `#/components/schemas/WhatsappTemplate`
- `404`: The requested resource does not exist.
- `application/json`: `#/components/schemas/ErrorResponse`
- `$ref`: `#/components/schemas/ErrorResponse`
### `POST /whatsapp/templates/analytics` — `whatsapp_template-analytics`
- Summary: Retrieve WhatsApp template analytics
- Description:
> Returns daily YCloud message metrics and, when available, Meta Template Insights
> for one WhatsApp template. Authenticate with `X-API-Key`.
> `analyticsStatus` describes Meta Template Insights only; it does not describe YCloud metrics.
> Dates are interpreted in the WABA timezone, both boundaries are inclusive, and the range
> must contain between 1 and 90 calendar days.
>
> The selected template must currently exist under the requested WABA. REST resolves and
> validates the template before querying any statistics. A missing template returns `404`,
> a template that belongs to another WABA returns `403`, and a template lookup failure returns
> `500`; none of these errors returns partial statistics.
- Parameters: none
- Request body: required
- `application/json`: `#/components/schemas/WhatsappTemplateAnalyticsRequest`
- `$ref`: `#/components/schemas/WhatsappTemplateAnalyticsRequest`
- Responses:
- `200`: Successfully retrieved template analytics.
- `application/json`: `#/components/schemas/WhatsappTemplateAnalytics`
- `$ref`: `#/components/schemas/WhatsappTemplateAnalytics`
- `400`: The request parameters are invalid.
- `application/json`: `#/components/schemas/ErrorResponse`
- `$ref`: `#/components/schemas/ErrorResponse`
- `403`: The WABA or template is not accessible.
- `application/json`: `#/components/schemas/ErrorResponse`
- `$ref`: `#/components/schemas/ErrorResponse`
- `404`: The WABA does not exist, or the template selected by either supported selector was not found.
- `application/json`: `#/components/schemas/ErrorResponse`
- `$ref`: `#/components/schemas/ErrorResponse`
- `500`: A required dependency, such as current template resolution or YCloud message statistics, could not be retrieved. Meta Template Insights failures after successful template validation are returned as a 200 response with analyticsStatus set to ERROR.
- `application/json`: `#/components/schemas/ErrorResponse`
- `$ref`: `#/components/schemas/ErrorResponse`
## Referenced schema and parameter shapes
### `filter_wabaId`
- Reference: `#/components/parameters/filter_wabaId`
- Parameter name: `filter.wabaId`
- Location: `query`
- Required: `false`
- Description:
> **Required if you have more than 100 WABAs.**
> WhatsApp Business Account ID.
- Schema: `string`
- Constraints: example="whatsapp-business-account-id"
### `includeTotal`
- Reference: `#/components/parameters/includeTotal`
- Parameter name: `includeTotal`
- Location: `query`
- Required: `false`
- Description:
> Return results inside an object that contains the total result count or not.
- Schema: `boolean`
- Constraints: default=false
### `limit`
- Reference: `#/components/parameters/limit`
- Parameter name: `limit`
- Location: `query`
- Required: `false`
- Description:
> A limit on the number of results to be returned, or number of results per page, between 1 and 100, defaults to 10.
- Schema: `integer (int32)`
- Constraints: minimum=1; maximum=100; default=10
### `page`
- Reference: `#/components/parameters/page`
- Parameter name: `page`
- Location: `query`
- Required: `false`
- Description:
> Page number of the results to be returned, 1-based.
- Schema: `integer (int32)`
- Constraints: minimum=1; maximum=100; default=1
### `wabaId-in_path`
- Reference: `#/components/parameters/wabaId-in_path`
- Parameter name: `wabaId`
- Location: `path`
- Required: `true`
- Description:
> WhatsApp Business Account ID.
- Schema: `string`
- Constraints: example="whatsapp-business-account-id"
### `Error`
- Reference: `#/components/schemas/Error`
- Shape: `object`
- Required properties: `status`, `code`
- Properties:
- `code`: `string` (required)
- Description:
> One of a server-defined error codes. Some `4xx` errors that could be handled programmatically include an error code that briefly explains the error reported.
- Constraints: example="NOT_FOUND"
- `docUrl`: `string`
- Description:
> A URL to more information about the error.
- Constraints: example=""
- `message`: `string`
- Description:
> A human-readable representation of the error. It is intended as an aid to developers and is not suitable for exposure to end users.
- Constraints: example="The requested resource does not exist."
- `requestId`: `string`
- Description:
> Each API request has an associated request ID. It conveys the response header `YCloud-Request-ID` used for the convenience of the consumer.
- Constraints: example="req_1KjtKI80IKoaJNa6n6p"
- `status`: `integer (int32)` (required)
- Description:
> HTTP status code, [RFC 7231, Section 6](https://datatracker.ietf.org/doc/html/rfc7231#section-6). It conveys the HTTP status code used for the convenience of the consumer.
- Constraints: pattern="[45]\\d{2}"; example=404
- `target`: `string`
- Description:
> The target of the error.
- Constraints: example=""
- `whatsappApiError`: `#/components/schemas/WhatsappApiError`
- Description:
> The original error object returned by WhatsApp. See [Handling Errors](https://developers.facebook.com/docs/graph-api/guides/error-handling), [Cloud API Error Codes](https://developers.facebook.com/docs/whatsapp/cloud-api/support/error-codes).
>
> Note: This field is returned if we tried to request the WhatsApp Business API and got an error response.
### `ErrorResponse`
- Reference: `#/components/schemas/ErrorResponse`
- Shape: `object`
- Required properties: `error`
- Properties:
- `error`: `#/components/schemas/Error` (required)
### `Page`
- Reference: `#/components/schemas/Page`
- Shape: `object`
- Description:
> Represents a given page of items.
- Required properties: `offset`, `limit`, `length`
- Properties:
- `items`: `array`
- Items: `object`
- `length`: `integer (int32)` (required)
- Description:
> The actual number of items in the page.
- Constraints: minimum=0
- `limit`: `integer (int32)` (required)
- Description:
> A limit on the number of items to be returned, between 1 and 100, defaults to 10.
- Constraints: minimum=1
- `offset`: `integer (int32)` (required)
- Description:
> The position of the item this page starts from, zero-based. e.g., the 11th item is at offset 10.
- Constraints: minimum=0
- `total`: `integer (int32)`
- Description:
> The total number of items. This field is returned only when the request parameter `includeTotal` is set to `true`.
- Constraints: minimum=0
### `WhatsappApiError`
- Reference: `#/components/schemas/WhatsappApiError`
- Shape: `object`
- Description:
> The original error object returned by WhatsApp. See [Handling Errors](https://developers.facebook.com/docs/graph-api/guides/error-handling), [Cloud API Error Codes](https://developers.facebook.com/docs/whatsapp/cloud-api/support/error-codes).
- Required properties: `message`, `code`
- Properties:
- `code`: `string` (required)
- Description:
> An error code.
- Constraints: example=200002
- `error_data`: `object`
- Description:
> Additional data about the error. A string or map.
> - For template APIs, this field is a string describing the reason for the error.
> - For message APIs, this field is a map with property `details` describing the reason for the error.
- `error_subcode`: `string`
- Description:
> Additional code about the error.
- Constraints: example=2388109
- `error_user_msg`: `string`
- Description:
> The message to display to the user. The language of the message is based on the locale of the API request.
- Constraints: example="This message template cannot be created."
- `error_user_title`: `string`
- Description:
> The title of the dialog, if shown. The language of the message is based on the locale of the API request.
- Constraints: example="Message Cannot Be Submitted"
- `fbtrace_id`: `string`
- Description:
> Internal support identifier. When reporting a bug related to a Graph API call, include the fbtrace_id to help us find log data for debugging.
- Constraints: example="AVGjJ7ia2zJkrHG"
- `is_transient`: `boolean`
- Description:
> Whether the error is transient.
- Constraints: example=false
- `message`: `string` (required)
- Description:
> A human-readable description of the error.
- Constraints: example="HSM Template creation failed"
- `type`: `string`
- Description:
> Error type.
- Constraints: example="OAuthException"
### `WhatsappTemplate`
- Reference: `#/components/schemas/WhatsappTemplate`
- Shape: `object`
- Description:
> See [WhatsApp Templates](https://developers.facebook.com/docs/whatsapp/business-management-api/message-templates).
- Required properties: `wabaId`, `name`, `language`
- Properties:
- `category`: `#/components/schemas/WhatsappTemplateCategory`
- `components`: `array`
- Description:
> Template components. A template consists of `HEADER`, `BODY`, `FOOTER`, and `BUTTONS` components. `BODY` component is required, the other types are optional.
- Constraints: minItems=1
- Items: `#/components/schemas/WhatsappTemplateComponent`
- `createTime`: `string (date-time)`
- Description:
> The time at which this object is created, formatted in [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339). e.g., `2022-06-01T12:00:00.000Z`.
- Constraints: example="2022-06-01T12:00:00.000Z"
- `ctaUrlLinkTrackingOptedOut`: `boolean`
- Description:
> Whether Meta CTA URL click tracking is disabled. Historical `null` values are returned as `true`.
- Constraints: example=true
- `disableDate`: `string`
- Description:
> The date at which the template will be disabled. When a WhatsApp template `FLAGGED` event is received, this field is set.
- Constraints: example="December 9, 2022"
- `language`: `string` (required)
- Description:
> Language code of the template. See [Supported Languages](https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/supported-languages) for all codes.
- Constraints: example="en"
- `messageSendTtlSeconds`: `integer (int32)`
- Description:
> If we are unable to deliver a message for an amount of time that exceeds its time-to-live, we will stop retrying and drop the message.
> By default, messages that use an authentication template have a default TTL of **10 minutes**, and messages that use a utility or marketing template have a default TTL of **30 days**.
> Set its value between `30` and `900` seconds (i.e., 30 seconds to 15 minutes) for authentication templates, or `30` and `43200` seconds (i.e., 30 seconds to 12 hours) for utility templates, or `43200` and `2592000` seconds (i.e., 12 hours to 30 days) for marketing templates. Alternatively, you can set this value to `-1`, which will set a custom TTL of 30 days for either type of template.
> We encourage you to set a time-to-live for all of your authentication templates, preferably equal to or less than your code expiration time, to ensure your customers only get a message when a code is still usable.
> Authentication templates created before October 23, 2024, have a default TTL of 30 days.
- Constraints: example=600
- `name`: `string` (required)
- Description:
> Name of the template.
- Constraints: maxLength=512; pattern="[a-z0-9_]{1,512}"
- `officialTemplateId`: `string`
- Description:
> Official template ID assigned by WhatsApp. This ID is used to identify the template in WhatsApp's system.
- Constraints: example="official-template-id"
- `previousCategory`: `string`
- Description:
> This field indicates the template's previous category (or `null`, for newly created templates after April 1, 2023). Compare this value to the template's `category` field value, which indicates the template's current category.
- `qualityRating`: `#/components/schemas/WhatsappTemplateQualityRating`
- `reason`: `string`
- Description:
> The reason why the template is rejected.
- `status`: `#/components/schemas/WhatsappTemplateStatus`
- `statusUpdateEvent`: `#/components/schemas/WhatsappTemplateStatusUpdateEventEnum`
- Description:
> The WhatsApp template status update event that caused this webhook. For `ARCHIVED`, the template `status` is `ARCHIVED`. For `UNARCHIVED`, the template `status` is the current status returned by Meta, for example `APPROVED`; it does not represent a new approval review.
- `subCategory`: `#/components/schemas/WhatsappTemplateSubCategory`
- `updateTime`: `string (date-time)`
- Description:
> The time at which this object is updated, formatted in [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339). e.g., `2022-06-01T12:00:00.000Z`.
- Constraints: example="2022-06-01T12:00:00.000Z"
- `wabaId`: `string` (required)
- Description:
> WhatsApp Business Account ID.
- Constraints: example="whatsapp-business-account-id"
- `whatsappApiError`: `#/components/schemas/WhatsappApiError`
### `WhatsappTemplateAnalytics`
- Reference: `#/components/schemas/WhatsappTemplateAnalytics`
- Shape: `object`
- Required properties: `wabaId`, `officialTemplateId`, `templateName`, `language`, `timezone`, `analyticsStatus`, `startDate`, `endDate`, `dataPoints`
- Properties:
- `analyticsStatus`: `string` (required)
- Description:
> Meta Template Insights status only; it does not describe YCloud message metrics.
> NO_DATA means the Meta query completed without data for the requested date range.
> ERROR indicates that Template Insights are unavailable because of an error after the
> current template was successfully resolved and validated.
- Constraints: enum=["ENABLED", "NOT_ENABLED", "UNSUPPORTED_REGION", "PERMISSION_DENIED", "NO_DATA", "ERROR"]
- `dataPoints`: `array` (required)
- Description:
> One item for every date in the requested range, ordered by date ascending. Missing metrics are returned as zero and missing button details as an empty array.
- Items: `#/components/schemas/WhatsappTemplateAnalyticsDataPoint`
- `endDate`: `string (date)` (required)
- Description:
> Inclusive end date from the request.
- `language`: `string` (required)
- Description:
> Template language used for the statistics query.
- `officialTemplateId`: `string` (required)
- Description:
> Resolved official WhatsApp/Meta template ID. Successful queries resolve a current template; the property remains nullable for contract compatibility.
- Constraints: nullable=true
- `startDate`: `string (date)` (required)
- Description:
> Inclusive start date from the request.
- `templateName`: `string` (required)
- Description:
> Template name used for the statistics query.
- `timezone`: `string` (required)
- Description:
> IANA timezone resolved from the WABA configuration and used to interpret the date range.
- `wabaId`: `string` (required)
- Description:
> WhatsApp Business Account ID.
### `WhatsappTemplateAnalyticsButtonClick`
- Reference: `#/components/schemas/WhatsappTemplateAnalyticsButtonClick`
- Shape: `object`
- Required properties: `type`, `buttonContent`, `count`
- Properties:
- `buttonContent`: `string` (required)
- Description:
> Button content associated with the clicks.
- `count`: `integer (int64)` (required)
- Description:
> Number of clicks for this button entry.
- `type`: `string` (required)
- Description:
> Type of button associated with the clicks. Values may include quick_reply_button, unique_url_button, or url_button.
### `WhatsappTemplateAnalyticsDataPoint`
- Reference: `#/components/schemas/WhatsappTemplateAnalyticsDataPoint`
- Shape: `object`
- Required properties: `date`, `sent`, `delivered`, `failed`, `read`, `clicks`, `uniqueReplies`, `buttonClicks`
- Properties:
- `buttonClicks`: `array` (required)
- Description:
> Button click breakdown for this template on this date. Empty when no details are available.
- Items: `#/components/schemas/WhatsappTemplateAnalyticsButtonClick`
- `clicks`: `integer (int64)` (required)
- Description:
> Total number of clicks recorded for this template on this date. Interpret zero together with analyticsStatus.
- `date`: `string (date)` (required)
- `delivered`: `integer (int64)` (required)
- Description:
> Number of those messages that were delivered.
- `failed`: `integer (int64)` (required)
- Description:
> Number of those messages whose status is failed or expired.
- `read`: `integer (int64)` (required)
- Description:
> Number of those messages that were read.
- `sent`: `integer (int64)` (required)
- Description:
> Number of messages created on this date for the selected template.
- `uniqueReplies`: `integer (int64)` (required)
- Description:
> Number of unique replies recorded for this template on this date. This is mapped from Meta replied and is a Meta Template Insights metric.
### `WhatsappTemplateAnalyticsRequest`
- Reference: `#/components/schemas/WhatsappTemplateAnalyticsRequest`
- Shape: `object`
- Description:
> Specify exactly one template selector: either officialTemplateId alone, or templateName together
> with language. officialTemplateId cannot be combined with templateName or language.
- Required properties: `wabaId`, `startDate`, `endDate`
- Properties:
- `endDate`: `string (date)` (required)
- Description:
> Inclusive end date interpreted in the WABA timezone. The inclusive range must not exceed 90 calendar days.
- Constraints: example="2026-07-07"
- `language`: `string`
- Description:
> Template language code. Must be provided together with templateName when officialTemplateId is absent.
- Constraints: nullable=true; example="en_US"
- `officialTemplateId`: `string`
- Description:
> Official WhatsApp/Meta template ID exposed by the existing template REST APIs.
- Constraints: nullable=true; example="875432109876543"
- `startDate`: `string (date)` (required)
- Description:
> Inclusive start date interpreted in the WABA timezone.
- Constraints: example="2026-07-01"
- `templateName`: `string`
- Description:
> Exact template name. Must be provided together with language when officialTemplateId is absent.
- Constraints: nullable=true; example="order_update"
- `wabaId`: `string` (required)
- Constraints: example="102012345678901"
### `WhatsappTemplateCategory`
- Reference: `#/components/schemas/WhatsappTemplateCategory`
- Shape: `string`
- Description:
> Category of WhatsApp templates.
> - `AUTHENTICATION`: Enable businesses to authenticate users with one-time passcodes, potentially at multiple steps in the login process (e.g., account verification, account recovery, integrity challenges).
> - `MARKETING`: Include promotions or offers, informational updates, or invitations for customers to respond / take action. Any conversation that does not qualify as utility or authentication is a marketing conversation.
> - `UTILITY`: Facilitate a specific, agreed-upon request or transaction or update to a customer about an ongoing transaction, including post-purchase notifications and recurring billing statements.
- Constraints: enum=["AUTHENTICATION", "MARKETING", "UTILITY"]
### `WhatsappTemplateComponent`
- Reference: `#/components/schemas/WhatsappTemplateComponent`
- Shape: `object`
- Properties:
- `add_security_recommendation`: `boolean`
- Description:
> **Optional. Only applicable in the `BODY` component of an AUTHENTICATION template.**
> Set to `true` if you want the template to include the string, *For your security, do not share this code.* Set to `false` to exclude the string.
- `buttons`: `array`
- Description:
> **Required for type `BUTTONS`.**
> Buttons are optional interactive components that perform specific actions when tapped. Templates can have a mixture of up to 10 button components total, although there are limits to individual buttons of the same type as well as combination limits.
> If a template has more than three buttons, two buttons will appear in the delivered message and the remaining buttons will be replaced with a **See all options** button. Tapping the **See all options** button reveals the remaining buttons.
- Constraints: maxItems=10
- Items: `#/components/schemas/WhatsappTemplateComponentButton`
- `cards`: `array`
- Description:
> **Required for type `CAROUSEL`.**
> Carousel templates support up to 10 carousel cards.
- Constraints: maxItems=10
- Items: `#/components/schemas/WhatsappTemplateComponentCard`
- `code_expiration_minutes`: `integer (int32)`
- Description:
> **Optional. Only applicable in the `FOOTER` component of an AUTHENTICATION template.**
> Indicates number of minutes the password or code is valid.
> If omitted, the code expiration warning will not be displayed in the delivered message.
> Minimum 1, maximum 90.
- Constraints: minimum=1; maximum=90; example=5
- `example`: `#/components/schemas/WhatsappTemplateComponentExample`
- `format`: `string`
- Description:
> **Required for type `HEADER`.**
- Constraints: enum=["TEXT", "IMAGE", "GIF", "VIDEO", "DOCUMENT", "LOCATION"]
- `limited_time_offer`: `#/components/schemas/WhatsappTemplateComponentLimitedTimeOffer`
- `text`: `string`
- Description:
> For body text (type = `BODY`), maximum 1024 characters.
> For header text (type = `HEADER`, format = `TEXT`), maximum 60 characters.
> For footer text (type = `FOOTER`), maximum 60 characters.
> For card body text (`CAROUSEL` card component type = `BODY`), maximum 160 characters.
- Constraints: maxLength=1024
- `type`: `string`
- Description:
> **Required.** Template component type.
> - `BODY`: Body components are text-only components and are required by all templates. Templates are limited to one body component.
> - `HEADER`: Headers are optional components that appear at the top of template messages. Headers support text, media (images, gif, videos, documents). Templates are limited to one header component.
> - `FOOTER`: Footers are optional text-only components that appear immediately after the body component. Templates are limited to one footer component.
> - `BUTTONS`: Buttons are optional interactive components that perform specific actions when tapped.
> - `LIMITED_TIME_OFFER`: Use for limited-time offer templates. The delivered message can display an offer expiration details section with a heading, an optional expiration timer, and the offer code itself.
> - `CAROUSEL`: Carousel templates allow you to send a single text message (1), accompanied by a set of up to 10 carousel cards (2) in a horizontally scrollable view.
> - `CALL_PERMISSION_REQUEST`: Sending a template message allows you to initiate a user conversation with a call permission request.
- Constraints: enum=["BODY", "HEADER", "FOOTER", "BUTTONS", "LIMITED_TIME_OFFER", "CAROUSEL", "CALL_PERMISSION_REQUEST"]
### `WhatsappTemplateComponentButton`
- Reference: `#/components/schemas/WhatsappTemplateComponentButton`
- Shape: `object`
- Required properties: `type`
- Properties:
- `app_deep_link`: `#/components/schemas/WhatsappTemplateComponentButtonAppDeepLink`
- `autofill_text`: `string`
- Description:
> **One-tap and zero-tap buttons only.**
> One-tap button text.
> Maximum 25 characters.
- Constraints: maxLength=25; example="Autofill"
- `example`: `array`
- Description:
> Sample full URL for a `URL` button with a variable.
- Items: `string`
- `flow_action`: `string`
- Description:
> **Use for button type `FLOW`.**
> Either `navigate` or `data_exchange`. Defaults to `navigate`.
- Constraints: example="navigate"
- `flow_id`: `string`
- Description:
> **Conditionally required for button type `FLOW`.**
> The unique ID of the Flow. Cannot be used if `flow_name` or `flow_json` parameters are provided. Only one of these parameters is allowed.
- Constraints: example="1"
- `flow_json`: `string`
- Description:
> **Conditionally required for button type `FLOW`.**
> The Flow JSON encoded as string with escaping. The Flow JSON specifies the content of the Flow. Cannot be used if `flow_id` or `flow_name` parameters are provided. Only one of these parameters is allowed.
- `flow_name`: `string`
- Description:
> **Conditionally required for button type `FLOW`.**
> The name of the Flow. Cannot be used if `flow_id` or `flow_json` parameters are provided. Only one of these parameters is allowed. The Flow ID is stored in the message template, not the name, so changing the Flow name will not affect existing message templates.
- `navigate_screen`: `string`
- Description:
> **Required if `flow_action` is `navigate`.**
> The unique ID of the Screen in the Flow.
- Constraints: example="WELCOME_SCREEN"
- `otp_type`: `#/components/schemas/WhatsappTemplateComponentButtonOtpType`
- Description:
> **Required for button type `OTP`.**
> Indicates button OTP type.
> Set to `COPY_CODE` if you want the template to use a copy code button, `ONE_TAP` to have it use a one-tap autofill button, or `ZERO_TAP` to have no button at all.
- `package_name`: `string`
- Description:
> **Deprecated since 2025-07-23. Use `supported_apps` instead.**
> **One-tap and zero-tap buttons only.**
> Your Android app's package name.
- Constraints: deprecated=true; example="com.example.myapplication"
- `phone_number`: `string`
- Description:
> **Required for button type `PHONE_NUMBER`.**
> Alphanumeric string. Business phone number to be (display phone number) called when the user taps the button.
> 20 characters maximum.
- Constraints: maxLength=20; example=15550051310
- `signature_hash`: `string`
- Description:
> **Deprecated since 2025-07-23. Use `supported_apps` instead.**
> **One-tap and zero-tap buttons only.**
> Your app signing key hash. See [App Signing Key Hash](https://developers.facebook.com/docs/whatsapp/business-management-api/authentication-templates/zero-tap-authentication-templates#app-signing-key-hash).
- Constraints: deprecated=true; example="K8a%2FAINcGX7"
- `supported_apps`: `array`
- Description:
> **One-tap and zero-tap buttons only.**
> List of supported apps.
- Items: `#/components/schemas/WhatsappTemplateComponentButtonOtpSupportedApp`
- `text`: `string`
- Description:
> **Required for button type `PHONE_NUMBER` or `URL`.** Button text.
> For `CODE_CODE` buttons, the text is a pre-set value and cannot be customized.
> For `OTP` buttons, if omitted, the text will default to a pre-set value localized to the template's language. For example, `Copy Code` for English (US). If your template is using a one-tap autofill button and you supply this value, the authentication template message will display a copy code button with this text if we are unable to validate your [handshake](https://developers.facebook.com/docs/whatsapp/business-management-api/authentication-templates/autofill-button-authentication-templates#handshake). Maximum 25 characters.
- Constraints: maxLength=25
- `type`: `#/components/schemas/WhatsappTemplateComponentButtonType` (required)
- `url`: `string`
- Description:
> **Required for button type `URL`.** URL of website.
> There can be at most 1 variable at the end of the URL. Example: `https://www.luckyshrub.com/shop?promo={{1}}`.
> 2000 characters maximum.
- Constraints: maxLength=2000
- `zero_tap_terms_accepted`: `boolean`
- Description:
> **Zero-tap buttons only.**
> Set to `true` to indicate that you understand that your use of zero-tap authentication is subject to the WhatsApp Business Terms of Service, and that it's your responsibility to ensure your customers expect that the code will be automatically filled in on their behalf when they choose to receive the zero-tap code through WhatsApp.
> If set to `false`, the template will not be created as you need to accept zero-tap terms before creating zero-tap enabled message templates.
### `WhatsappTemplateComponentButtonAppDeepLink`
- Reference: `#/components/schemas/WhatsappTemplateComponentButtonAppDeepLink`
- Shape: `object`
- Properties:
- `android_deep_link`: `string`
- Description:
> Required if using a URL button component mapped to a deep link.The WhatsApp client will attempt to load this URI if the WhatsApp user taps the button on an Android device.
- Constraints: example="luckyshrub://deals/summer/"
- `android_fallback_playstore_url`: `string`
- Description:
> Optional. URL of a website that the WhatsApp client will attempt to load in the device’s default web browser when the button is tapped but unable to load the Android deep link URI.
- Constraints: example="https://www.luckyshrub.com/deals/summer/"
- `meta_app_id`: `string`
- Description:
> Required if using a URL button mapped to a deep link. APP ID.
- Constraints: example="2892949377516980"
### `WhatsappTemplateComponentButtonOtpSupportedApp`
- Reference: `#/components/schemas/WhatsappTemplateComponentButtonOtpSupportedApp`
- Shape: `object`
- Description:
> The supported_apps array allows you define pairs of app package names and signing key hashes for up to 5 apps. This can be useful if you have different app builds and want each of them to be able to initiate the handshake:
- Properties:
- `package_name`: `string`
- Description:
> Your Android app's package name.
- Constraints: example="com.example.myapplication"
- `signature_hash`: `string`
- Description:
> Your app signing key hash. See [App Signing Key Hash](https://developers.facebook.com/docs/whatsapp/business-management-api/authentication-templates/zero-tap-authentication-templates#app-signing-key-hash).
- Constraints: example="K8a%2FAINcGX7"
### `WhatsappTemplateComponentButtonOtpType`
- Reference: `#/components/schemas/WhatsappTemplateComponentButtonOtpType`
- Shape: `string`
- Description:
> Indicates button OTP type.
> Set to `COPY_CODE` if you want the template to use a copy code button, `ONE_TAP` to have it use a one-tap autofill button, or `ZERO_TAP` to have no button at all.
- Constraints: enum=["COPY_CODE", "ONE_TAP", "ZERO_TAP"]
### `WhatsappTemplateComponentButtonType`
- Reference: `#/components/schemas/WhatsappTemplateComponentButtonType`
- Shape: `string`
- Description:
> Button type.
> - `PHONE_NUMBER`: Phone number buttons call the specified business phone number when tapped by the app user. Templates are limited to one phone number button.
> - `URL`: URL buttons load the specified URL in the device's default web browser when tapped by the app user. Templates are limited to two URL buttons.
> - `QUICK_REPLY`: Quick reply buttons are custom text-only buttons that immediately message you with the specified text string when tapped by the app user. Templates are limited to 10 quick reply buttons. If using quick reply buttons with other buttons, buttons must be organized into two groups: quick reply buttons and non-quick reply buttons.
> - `COPY_CODE`: Copy code buttons copy a text string (defined when the template is sent in a template message) to the device's clipboard when tapped by the app user. Templates are limited to one copy code button.
> - `OTP`: One-time password (OTP) buttons are a special type of URL button component used with authentication templates.
> - `CATALOG`: When a customer taps the **View catalog** button in a catalog template message, your product catalog appears within WhatsApp.
> - `MPM`: Customers can browse products and sections by tapping the **View items** button in a multi-product template message.
> - `FLOW`: Use this type to specify the [Flow](https://developers.facebook.com/docs/whatsapp/flows) to be sent with the template message.
> - `ORDER_DETAILS`: Provides a order details button with `Review and Pay` text.
> - `VOICE_CALL`: Triggers a WhatsApp call, when clicked by a WhatsApp customer.
- Constraints: enum=["PHONE_NUMBER", "URL", "QUICK_REPLY", "COPY_CODE", "OTP", "CATALOG", "MPM", "FLOW", "ORDER_DETAILS", "VOICE_CALL"]
### `WhatsappTemplateComponentCard`
- Reference: `#/components/schemas/WhatsappTemplateComponentCard`
- Shape: `object`
- Description:
> Carousel templates support up to 10 carousel cards. Cards must have a media header (image or video) and can optionally include body text and up to 2 quick reply buttons, phone number buttons, or URL buttons (button types can be mixed).
- Properties:
- `components`: `array`
- Description:
> **Required.**
> Card components.
- Items: `#/components/schemas/WhatsappTemplateComponentCardComponent`
### `WhatsappTemplateComponentCardComponent`
- Reference: `#/components/schemas/WhatsappTemplateComponentCardComponent`
- Shape: `object`
- Properties:
- `buttons`: `array`
- Description:
> **Required for type `BUTTONS`.**
> Cards must have at least one button. Supports 2 buttons. Buttons can be the same or a mix of quick reply buttons, phone number buttons, or URL buttons.
- Constraints: minItems=1; maxItems=2
- Items: `#/components/schemas/WhatsappTemplateComponentButton`
- `example`: `#/components/schemas/WhatsappTemplateComponentExample`
- `format`: `string`
- Description:
> **Required for type `HEADER`.**
> Cards must have a media header (image or video).
- Constraints: enum=["IMAGE", "VIDEO"]
- `text`: `string`
- Description:
> **Required for type `BODY`.**
> Card body text supports variables. Maximum 160 characters.
- Constraints: maxLength=160
- `type`: `string`
- Description:
> **Required.**
> Card component type.
> - `BODY`: Body components are text-only components. Cards must have body text.
> - `HEADER`: Cards must have a media header (image or video).
> - `BUTTONS`: Buttons are interactive components that perform specific actions when tapped. Cards must have at least one button, up to 2 buttons.
- Constraints: enum=["BODY", "HEADER", "BUTTONS"]
### `WhatsappTemplateComponentExample`
- Reference: `#/components/schemas/WhatsappTemplateComponentExample`
- Shape: `object`
- Description:
> **Required** when:
> - `type` is `HEADER`, and `format` is one of `IMAGE`, `GIF`, `VIDEO`, or `DOCUMENT`. Provide a sample media URL in `header_url`.
> - `type` is `HEADER`, `format` is `TEXT`, and a variable is used in `text`. Provide a sample value for that variable in `header_text`. There can be at most 1 variable in `HEADER` text.
> - `type` is `BODY`, and variables are used in `text`. Provide sample values for those variables in `body_text`.
- Properties:
- `body_text`: `array`
- Description:
> Sample values for variables in `text` of a `BODY` component.
- Items: `array`
- `header_text`: `array`
- Description:
> Sample value for the variable in `text` of a `HEADER` component.
- Items: `string`
- `header_url`: `array`
- Description:
> Sample media URL for a `HEADER` component whose format is one of `IMAGE`, `GIF`, `VIDEO`, or `DOCUMENT`.
> Supported types:
> - For `IMAGE`, the URL must end with one of `.jpg`, `.jpeg`, or `.png`, size limit is 5MB.
> - For `GIF`, the URL must end with `.mp4`, size limit is 3.5MB.
> - For `VIDEO`, the URL must end with `.mp4`, size limit is 16MB.
> - For `DOCUMENT`, the URL must end with `.pdf`, size limit is 100MB.
- Items: `string`
### `WhatsappTemplateComponentLimitedTimeOffer`
- Reference: `#/components/schemas/WhatsappTemplateComponentLimitedTimeOffer`
- Shape: `object`
- Description:
> Use for `LIMITED_TIME_OFFER` components.
- Properties:
- `has_expiration`: `boolean`
- Description:
> **Optional.**
> Set to `true` to have the [offer expiration details](https://developers.facebook.com/docs/whatsapp/business-management-api/message-templates/limited-time-offer-templates#offer-expiration-details) appear in the delivered message.
> If set to `true`, the copy code button component must be included in the `buttons` array, and must appear first in the array.
> If set to `false`, offer expiration details will not appear in the delivered message and the copy code button component is optional. If including the copy code button, it must appear first in the `buttons` array.
- `text`: `string`
- Description:
> **Required.**
> Offer details text.
> Maximum 16 characters.
- Constraints: maxLength=16; example="Expiring offer!"
### `WhatsappTemplateCreateRequest`
- Reference: `#/components/schemas/WhatsappTemplateCreateRequest`
- Shape: `object`
- Description:
> See [WhatsApp Templates](https://developers.facebook.com/docs/whatsapp/business-management-api/message-templates).
- Required properties: `wabaId`, `name`, `language`, `category`, `components`
- Properties:
- `category`: `#/components/schemas/WhatsappTemplateCategory` (required)
- `components`: `array` (required)
- Items: `#/components/schemas/WhatsappTemplateComponent`
- `ctaUrlLinkTrackingOptedOut`: `boolean`
- Description:
> **Optional.**
> Indicates if template button click tracking is disabled. Set to `true` to disable button click tracking on the template, or `false` to enable.
> You can disable button click tracking on an individual template by setting this field to `true`. Once disabled, button engagement/clicks will not be displayed in the WhatsApp Manager when viewing the template's insights.
> If not provided or set to `null`, this value defaults to `true`, which means button click tracking is disabled by default.
- Constraints: example=true
- `language`: `string` (required)
- Description:
> Language code of the template. See [Supported Languages](https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/supported-languages) for all codes.
- Constraints: example="en"
- `messageSendTtlSeconds`: `integer (int32)`
- Description:
> If we are unable to deliver a message for an amount of time that exceeds its time-to-live, we will stop retrying and drop the message.
> By default, messages that use an authentication template have a default TTL of **10 minutes**, and messages that use a utility or marketing template have a default TTL of **30 days**.
> Set its value between `30` and `900` seconds (i.e., 30 seconds to 15 minutes) for authentication templates, or `30` and `43200` seconds (i.e., 30 seconds to 12 hours) for utility templates, or `43200` and `2592000` seconds (i.e., 12 hours to 30 days) for marketing templates. Alternatively, you can set this value to `-1`, which will set a custom TTL of 30 days for either type of template.
> We encourage you to set a time-to-live for all of your authentication templates, preferably equal to or less than your code expiration time, to ensure your customers only get a message when a code is still usable.
> Authentication templates created before October 23, 2024, have a default TTL of 30 days.
- Constraints: example=600
- `name`: `string` (required)
- Description:
> Name of the template.
- Constraints: maxLength=512; pattern="[a-z0-9_]{1,512}"; example="sample_whatsapp_template"
- `subCategory`: `#/components/schemas/WhatsappTemplateSubCategory`
- `wabaId`: `string` (required)
- Description:
> WhatsApp Business Account ID.
- Constraints: example="whatsapp-business-account-id"
### `WhatsappTemplateEditRequest`
- Reference: `#/components/schemas/WhatsappTemplateEditRequest`
- Shape: `object`
- Description:
> The request body to edit a WhatsApp template.
- Required properties: `components`
- Properties:
- `components`: `array` (required)
- Items: `#/components/schemas/WhatsappTemplateComponent`
- `ctaUrlLinkTrackingOptedOut`: `boolean`
- Description:
> **Optional.**
> Indicates if template button click tracking is disabled. Set to `true` to disable button click tracking on the template, or `false` to enable.
> You can disable button click tracking on an individual template by setting this field to `true`. Once disabled, button engagement/clicks will not be displayed in the WhatsApp Manager when viewing the template's insights.
> If not provided or set to `null`, this value defaults to `true`, which means button click tracking is disabled by default.
- Constraints: example=true
- `messageSendTtlSeconds`: `integer (int32)`
- Description:
> If we are unable to deliver a message for an amount of time that exceeds its time-to-live, we will stop retrying and drop the message.
> By default, messages that use an authentication template have a default TTL of **10 minutes**, and messages that use a utility or marketing template have a default TTL of **30 days**.
> Set its value between `30` and `900` seconds (i.e., 30 seconds to 15 minutes) for authentication templates, or `30` and `43200` seconds (i.e., 30 seconds to 12 hours) for utility templates, or `43200` and `2592000` seconds (i.e., 12 hours to 30 days) for marketing templates. Alternatively, you can set this value to `-1`, which will set a custom TTL of 30 days for either type of template.
> We encourage you to set a time-to-live for all of your authentication templates, preferably equal to or less than your code expiration time, to ensure your customers only get a message when a code is still usable.
> Authentication templates created before October 23, 2024, have a default TTL of 30 days.
- Constraints: example=600
### `WhatsappTemplatePage`
- Reference: `#/components/schemas/WhatsappTemplatePage`
- Shape: `object`
- Description:
> Represents a given page of WhatsApp templates.
- `allOf` composition (preserved; not inferred SDK inheritance):
- `#/components/schemas/Page`
- `$ref`: `#/components/schemas/Page`
- Properties:
- `items`: `array`
- Description:
> An array containing WhatsApp template objects.
- Items: `#/components/schemas/WhatsappTemplate`
- Effective wire object after merging `allOf` (use this shape in response adapters):
- Required properties: `offset`, `limit`, `length`
- Properties:
- `items`: `array`
- Items: `#/components/schemas/WhatsappTemplate`
- `length`: `integer (int32)` (required)
- `limit`: `integer (int32)` (required)
- `offset`: `integer (int32)` (required)
- `total`: `integer (int32)`
### `WhatsappTemplateQualityRating`
- Reference: `#/components/schemas/WhatsappTemplateQualityRating`
- Shape: `string`
- Description:
> Quality rating of WhatsApp template. One of `GREEN`, `YELLOW`, `RED`, or `UNKNOWN`. See also [Template Quality Rating](https://developers.facebook.com/docs/whatsapp/message-templates/guidelines/#quality-rating).
> - `GREEN`: High quality.
> - `YELLOW`: Medium quality.
> - `RED`: Low quality.
> - `UNKNOWN`: Unknown quality.
- Constraints: enum=["GREEN", "YELLOW", "RED", "UNKNOWN"]
### `WhatsappTemplateStatus`
- Reference: `#/components/schemas/WhatsappTemplateStatus`
- Shape: `string`
- Description:
> The status of a WhatsApp template.
> - `PENDING`: The template is still under review. Review can take up to 24 hours.
> - `REJECTED`: The template has been rejected during review process.
> - `APPROVED`: The template is approved, and you may begin sending it to customers.
> - `PAUSED`: The template has been paused due to recurring negative feedback from customers. Message templates with this status cannot be sent to customers. See [Template Pausing](https://developers.facebook.com/docs/whatsapp/message-templates/guidelines#template-pausing).
> - `DISABLED`: The template has been disabled due to recurring negative feedback from customers or for violating one or more of our policies. Message templates with this status cannot be sent to customers. You may be able to edit a disabled message template and request an appeal. See [Appeals](https://developers.facebook.com/docs/whatsapp/message-templates/guidelines#appeals).
> - `ARCHIVED`: The template has been archived. Archived templates cannot be sent or edited.
> - `IN_APPEAL`: The template is in appeal. See also [Template Appeals](https://developers.facebook.com/docs/whatsapp/message-templates/guidelines#appeals).
> - `DELETED`: The template is deleted.
- Constraints: enum=["PENDING", "REJECTED", "APPROVED", "PAUSED", "DISABLED", "ARCHIVED", "IN_APPEAL", "DELETED"]; example="REJECTED"
### `WhatsappTemplateStatusUpdateEventEnum`
- Reference: `#/components/schemas/WhatsappTemplateStatusUpdateEventEnum`
- Shape: `string`
- Description:
> Used when an event happened on WhatsApp template status updates.
> - `PENDING`: Pending.
> - `APPROVED`: Approved.
> - `REJECTED`: Rejected.
> - `IN_APPEAL`: In appeal. See also [Template Appeals](https://developers.facebook.com/docs/whatsapp/message-templates/guidelines#appeals).
> - `PAUSED`: Paused. See also [Template Pausing](https://developers.facebook.com/docs/whatsapp/message-templates/guidelines#template-pausing).
> - `FLAGGED`: Flagged. The template is scheduled for disabling.
> - `DISABLED`: Disabled. See also [Template Pausing](https://developers.facebook.com/docs/whatsapp/message-templates/guidelines#template-pausing).
> - `ARCHIVED`: Archived. The template status is updated to `ARCHIVED`.
> - `UNARCHIVED`: Unarchived. The template status is restored to the current status returned by Meta. If the status is `APPROVED`, this event still does not represent a new approval review.
> - `REINSTATED`: Reinstated.
> - `PENDING_DELETION`: Pending deletion.
- Constraints: enum=["PENDING", "APPROVED", "REJECTED", "IN_APPEAL", "PAUSED", "FLAGGED", "DISABLED", "ARCHIVED", "UNARCHIVED", "REINSTATED", "PENDING_DELETION"]
### `WhatsappTemplateSubCategory`
- Reference: `#/components/schemas/WhatsappTemplateSubCategory`
- Shape: `string`
- Description:
> Subcategory of WhatsApp templates.
> - ORDER_STATUS: Order status template is categorized as `UTILITY` template and apart from name and language of choice, it has general template components such as `BODY`, `FOOTER` and additionally subcategory as `ORDER_STATUS`.
- Constraints: enum=["ORDER_STATUS"]
## Codegen interpretation and unknowns
- `operationId` identifies the OpenAPI operation; it is not an SDK method name.
- `allOf` is wire-level schema composition. Response adapters must merge inherited and local properties; generated model inheritance/flattening is only a codegen shape, not additional API behavior.
- `x-group-parameters`, `x-enum-varnames`, and `x-enum-descriptions` are generator hints, not business rules.
- Description-only constraints (including conditional fields, precedence, and endpoint-specific behavior) remain verbatim above.
- This OpenAPI snapshot does not confirm cross-cutting error, retry/`Retry-After`, rate-limit, idempotency, delivery, or webhook-signature behavior. Consult the reviewed `runtime.md`; if neither source confirms a fact, do not fill it in.
SHA-256: 1bafefb2f62a43527add30ea9b1dfa27e87c6b2b7139c2384f2e6122c418f29b