BAPBA Protocol
GuidesHost Guides

WhatsApp message templates

Required WhatsApp Business API message templates for BAP notifications — register these in your Meta Business Manager before using WhatsApp as a connector.

WhatsApp message templates

The WhatsApp Business Cloud API requires pre-approved message templates for business-initiated messages (messages sent outside the 24-hour customer service window). Since BAP sends proactive notifications — liveness checks, transfer alerts, OTPs — you must register these templates in your Meta Business Manager before WhatsApp delivery will work.

This page lists every template BAP uses. Register all of them in Meta Business Manager → WhatsApp Manager → Message Templates.

Before you start

  1. Complete the WhatsApp connector setup first
  2. Your Meta Business account must be verified
  3. Templates are submitted for review and typically approved within minutes for UTILITY category

URL buttons

Templates that direct the user to a website include a Call to Action (CTA) URL button. WhatsApp requires a static domain prefix — replace https://app.example.com with your actual deployment domain when registering. The dynamic suffix {{1}} lets BAP append the specific path and query parameters at send time.

Template reference

All templates use English (en) language and UTILITY category unless noted otherwise. Body variables are shown as {{1}}, {{2}}, etc. Button URL variables are scoped separately from body variables.


1. bap_verification_otp

One-time verification codes for host login, survivor authentication, and OTP flows.

FieldValue
CategoryAUTHENTICATION
Languageen

Body:

{{1}} is your BA Protocol verification code. It expires in 10 minutes. Do not share it with anyone.

Button:

TypeTextParameter
Copy codeCopy code (auto-added by Meta)OTP code

Variables:

ComponentVariableDescriptionExample
Body{{1}}6-digit OTP code482901
Button{{1}}Same OTP code (for copy-code button)482901

Register this as AUTHENTICATION with a Copy code button. Meta auto-adds the button — BAP passes the OTP code as both the body and button parameter.


2. bap_liveness_check

Periodic "are you alive?" pings sent to the host based on their check-in interval (HCIT).

FieldValue
CategoryUTILITY
Languageen

Body:

This is a scheduled liveness check from BA Protocol. Please confirm you are alive by tapping the button below.

This check expires in {{1}} minutes.

Button:

TypeTextURL
URLConfirm I'm alivehttps://app.example.com/{{1}}

Variables:

ComponentVariableDescriptionExample
Body{{1}}Expiry in minutes15
Button URL{{1}}Path and query stringliveness/confirm?token=abc123

3. bap_transfer_initiated_host

Sent to the host when the will transfer process begins (host presumed dead after missed liveness checks).

FieldValue
CategoryUTILITY
Languageen

Body:

A will transfer has been initiated on BA Protocol. You have until {{1}} to cancel it from your dashboard.

Button:

TypeTextURL
URLGo to dashboardhttps://app.example.com/{{1}}

Variables:

ComponentVariableDescriptionExample
Body{{1}}Cancel deadline (RFC 1123 format)Mon, 31 Mar 2026 12:00:00 UTC
Button URL{{1}}Pathdashboard

4. bap_transfer_reminder

Periodic urgent reminders to the host while the cancel window is open.

FieldValue
CategoryUTILITY
Languageen

Body:

URGENT: A will transfer is in progress on BA Protocol.{{1}} Please cancel it immediately.

Button:

TypeTextURL
URLCancel at dashboardhttps://app.example.com/{{1}}

Variables:

ComponentVariableDescriptionExample
Body{{1}}Time remaining (prefixed with space) You have 2 hours remaining.
Button URL{{1}}Pathdashboard

5. bap_transfer_initiated_survivor

Sent to survivors when the host is presumed dead and the transfer process begins.

FieldValue
CategoryUTILITY
Languageen

Body:

The will transfer process has been initiated on BA Protocol. The host has been confirmed deceased or presumed dead.

You will need to verify your identity with a one-time code to access the will.

Button:

TypeTextURL
URLAccess willhttps://app.example.com/{{1}}

Variables:

ComponentVariableDescriptionExample
Button URL{{1}}Path and query stringtransfer/lookup?tid=abc&sid=def

6. bap_awaiting_auth

Sent to survivors after the cancel window expires and authentication is open.

FieldValue
CategoryUTILITY
Languageen

Body:

The cancel window has passed on BA Protocol. You can now authenticate to access the will.

You will receive a one-time verification code on this channel.

Button:

TypeTextURL
URLAccess willhttps://app.example.com/{{1}}

Variables:

ComponentVariableDescriptionExample
Button URL{{1}}Path and query stringtransfer/lookup?tid=abc&sid=def

7. bap_transfer_cancelled

Sent to survivors when the host cancels the transfer or confirms they are alive.

FieldValue
CategoryUTILITY
Languageen

Body:

The will transfer on BA Protocol has been cancelled. The host has confirmed they are alive.

No variables or buttons — this is a static template.


8. bap_beneficiary_added

Sent when a host adds a new survivor to their will.

FieldValue
CategoryUTILITY
Languageen

Body:

Hi, {{1}} has designated you as a beneficiary on BA Protocol. You have been granted access to a secure digital document.

{{2}}

You can use a backup code or a one-time verification code to access your document when it becomes available.

Button:

TypeTextURL
URLView detailshttps://app.example.com/{{1}}

Variables:

ComponentVariableDescriptionExample
Body{{1}}Host display nameJohn Doe
Body{{2}}Backup codes or fallback messageYour backup codes: A1B2C3, D4E5F6, G7H8I9
Button URL{{1}}Pathtransfer/lookup

When backup codes are generated, BAP passes the formatted codes as {{2}}. When no codes are available, it sends "Your backup codes will be shared with you separately."


9. bap_test

Sent when testing a WhatsApp connector from the dashboard.

FieldValue
CategoryUTILITY
Languageen

Body:

This is a test message from BA Protocol. If you received this, your WhatsApp connector is working correctly.

No variables or buttons — this is a static template.


Registering templates via Meta Business Manager

  1. Go to Meta Business ManagerWhatsApp ManagerMessage Templates
  2. Click Create Template
  3. For each template above:
    • Category: Select as listed (UTILITY or AUTHENTICATION)
    • Name: Use the exact name (e.g. bap_liveness_check)
    • Language: English (en)
    • Body: Copy the body text exactly, including {{1}}, {{2}} placeholders
    • Buttons (where listed): Add a Call to ActionVisit Website button. Set the URL type to Dynamic, enter your domain as the static prefix (e.g. https://app.yourdomain.com/), and append {{1}} as the dynamic suffix
    • Leave Header and Footer empty
  4. Submit for review — UTILITY templates are typically approved within minutes

Registering templates via the Management API

If you prefer automation, use the WhatsApp Business Management API:

# Example: register the liveness check template (with CTA button)
curl -X POST \
  "https://graph.facebook.com/v21.0/{WABA_ID}/message_templates" \
  -H "Authorization: Bearer {ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "bap_liveness_check",
    "language": "en",
    "category": "UTILITY",
    "components": [
      {
        "type": "BODY",
        "text": "This is a scheduled liveness check from BA Protocol. Please confirm you are alive by tapping the button below.\n\nThis check expires in {{1}} minutes.",
        "example": {
          "body_text": [["15"]]
        }
      },
      {
        "type": "BUTTONS",
        "buttons": [
          {
            "type": "URL",
            "text": "Confirm I'\''m alive",
            "url": "https://app.example.com/{{1}}",
            "example": ["liveness/confirm?token=abc123"]
          }
        ]
      }
    ]
  }'

Replace https://app.example.com with your actual deployment domain in every button URL before registering. WhatsApp validates that the domain is owned by your Meta Business account.

All templates as API payloads

Custom branding

If you've customized your APP_NAME environment variable, you may want to replace "BA Protocol" in the template bodies with your app name before registering. WhatsApp templates are immutable once approved — to change the text, you must delete the template and create a new one with a different name (e.g. bap_liveness_check_v2).

Troubleshooting

IssueSolution
Template rejectedEnsure the category is correct. AUTHENTICATION has strict body format rules — if rejected, use UTILITY instead
Messages not deliveredVerify all 9 templates are approved and the template names match exactly
"Template not found" errorTemplate names are case-sensitive and must match the constants in the BAP codebase exactly
Rate limited by MetaWhatsApp has messaging limits based on your business tier — new accounts start at 250 messages/day
Button URL rejectedThe domain in the URL must be verified in your Meta Business Manager. Ensure you replaced app.example.com with your actual domain

Next steps

On this page