דלג לתוכן הראשי
A template combines what Texter knows (routing rules, departments, send defaults) with what WhatsApp knows (provider_template: approval status and localized content). A template you just created lives in localizationDrafts until you submit it; approved content appears under provider_template.localizations.
Example template object
{
  "_id": "690868f7962e17ab3033f91b",
  "name": "inbox_marketing_95",
  "title": "Order ready notification",
  "usage": "inbox",
  "chatStatus": 1,
  "created": 1762158839563,
  "updatedAt": "2025-11-03T08:33:59.563Z",
  "departments": [],
  "isDefault": false,
  "channelInfo": {
    "name": "whatsapp",
    "accountId": "972509876543"
  },
  "provider_template": {
    "name": "inbox_marketing_95",
    "category": "MARKETING",
    "localizations": [
      {
        "language": "he",
        "status": "APPROVED",
        "components": [
          {
            "type": "BODY",
            "text": "היי {{1}} מעדכן שהזמנה מספר {{2}} מוכנה לאיסוף",
            "example": {
              "body_text": [
                [
                  "רועי",
                  "15033"
                ]
              ]
            }
          },
          {
            "type": "FOOTER",
            "text": "להסרה השב הסר"
          }
        ]
      }
    ],
    "metadata": {}
  },
  "defaults": {
    "he": {
      "body": [
        "רועי",
        "15033"
      ]
    }
  },
  "localizationDrafts": {}
}

Top-level

FieldTypeDescription
_idstringUnique identifier of the template in Texter
namestringInternal template name - this is the template ID used in API calls Example: bulk_marketing_272
titlestringHuman-readable title shown in Texter’s UI
usagestringinbox (1-to-1) or bulk (broadcast)
creatednumberWhen the template was created (epoch ms)
updatedAtstringLast update (ISO date-time)
departmentsstring[]Department IDs allowed to use this template. Can be empty
isDefaultbooleanWhether this is the default template for the account. Only one template can be default
providerstringChannel adapter that owns this template (relevant when multiple WhatsApp account types are connected)
channelInfoobjectThe channel account this template belongs to: {name, accountId} (for WhatsApp, accountId is the business phone number)

Reply behavior

What happens after the recipient replies to this template.
FieldTypeDescription
chatStatusnumberStatus the chat moves to after the reply: 0 BOT, 1 PENDING, 2 ASSIGNED, 3 RESOLVED
setBotNodestringBot node to start from, when chatStatus routes to the bot
botstringSpecific bot to run, when chatStatus routes to the bot
replyTextstringText automatically sent when the recipient replies
responsibleAgentstringAgent (email) the chat is assigned to after the reply
responsibleDepartmentstringDepartment ID the chat is assigned to after the reply
attachedFileobjectFile ({name, url}) automatically sent after the reply, when configured

provider_template

FieldTypeDescription
provider_template.namestringTemplate name as registered with WhatsApp. Typically matches name
provider_template.categorystringMARKETING or UTILITY. WhatsApp may change it on approval
provider_template.localizationsobject[]All localizations known to WhatsApp - see the next section. Empty while only drafts exist
provider_template.metadataobjectExtra provider metadata

Localizations

Each item of provider_template.localizations[] describes one language variant as seen by WhatsApp.
The WhatsApp provider also passes through raw fields that vary by account type: WhatsApp Cloud accounts add id, name, category, previous_category, parameter_format; other account types add createdAt, lastUpdated and qualityScore ({score, reasons} - e.g. GREEN, YELLOW, RED).
FieldTypeDescription
statusstringREQUESTED, SUBMIT_FAILED, PENDING, APPROVED, REJECTED, DELETION_PENDING, DELETED, SUBMITTED
rejectionReasonstringReason for rejection Example: NONE
languagestringWhatsApp locale code (he, en, en_US, pt_BR… - 71 locales supported)
componentsobject[]The HEADER / BODY / FOOTER / BUTTONS that make up this variant - see the next section
metadataobjectChannel-specific metadata, when present

Components

Each item of a localization’s components[] array:
FieldTypeDescription
typestringHEADER, BODY, FOOTER, BUTTONS
textstringText for BODY / FOOTER. BODY supports {{1}}-style variables; WhatsApp limits it to ~1024 chars (MARKETING) / ~550 chars (UTILITY)
formatstringHEADER only: IMAGE, VIDEO, DOCUMENT, LOCATION
example.header_handlestring[]Media headers: exactly one HTTP(S) example media URL (required by WhatsApp)
example.body_textstring[][]Example values for body variables. Required when the body has variables; must match the variable count and order
buttonsobject[]BUTTONS only: up to 3 QUICK_REPLY buttons or up to 2 call-to-action buttons (URL / PHONE_NUMBER / FLOW) - the groups cannot be mixed
buttons[].textstringButton label. FLOW buttons: max 25 characters
buttons[].urlstringURL buttons: target URL, optionally with a single {{1}} variable at the end
buttons[].example.urlstringRequired when url has a variable: a resolved example starting with the exact same literal prefix
buttons[].phone_numberstringPHONE_NUMBER buttons: E.164 number
buttons[].flow_idstringFLOW buttons: published Flow ID from Meta
buttons[].flow_actionstringFLOW buttons: navigate (default) or data_exchange
buttons[].navigate_screenstringFLOW buttons: screen id to open first. Required with navigate. Case-sensitive

defaults

Per-language values prefilled when sending the template if the caller does not provide overrides. Keyed by language code.
FieldTypeDescription
defaults.{lang}.bodystring[]Default BODY variable values, in {{n}} order
defaults.{lang}.headerobjectDefault header media: {type, url, filename?} (filename for documents)
defaults.{lang}.buttonsobject[]Default button payloads ({type, payload}), e.g. a default dynamic-URL value

localizationDrafts

Map of language code to a draft localization - content created in Texter but not yet submitted to WhatsApp. Same component structure as approved localizations, without status.
FieldTypeDescription
localizationDrafts.{lang}.languagestringLanguage code of this draft
localizationDrafts.{lang}.componentsobject[]Draft components (same shape as the Components section)

Localization status values

StatusMeaning
REQUESTEDSubmitted, waiting for WhatsApp
SUBMIT_FAILEDSubmission to WhatsApp failed
PENDINGUnder WhatsApp review
APPROVEDApproved - can be sent
REJECTEDRejected by WhatsApp (see rejectionReason)
DELETION_PENDINGDeletion requested, not yet final
DELETEDDeleted at WhatsApp
SUBMITTEDAccepted for processing
Category values: MARKETING · UTILITY - WhatsApp may recategorize on approval. More enums and the ID cheat sheet: Enums & Common Fields.