Skip to main content
authentication OTP delivery. Meta defines the text — you don’t write the message body, only the button and the validity.

How it works

The code is not registered here. The template is the mold, and Meta fixes the text around it — “«code» is your verification code”. You generate and send the code at send time, a different one per customer. That is why the body and the footer go without text: what you control is whether the security line shows, how long the code lasts and how the customer receives it.

At creation and at send time

Fields in this model

The button text is written and translated by Meta based on the template language. Whatever you send there is ignored.
The model below uses COPY_CODE, the only one that needs no app details. For autofill, the button changes:

Full JSON

Two JSON payloads: one creates the template, and Meta approves it once. The other sends the message, and goes on every dispatch, with that send’s values in the variables marked with braces.

1. Create the template

POST /whatsapp/businesses/{wabaId}/templates — see API reference.

2. Send it once approved

POST /v1/channels/{channelId}/messages — see Send template.

What Meta rejects here

  • ONE_TAP or ZERO_TAP without supported_apps.
  • Zero tap without accepting the terms.
  • Code validity outside the 1 to 90 minute range.
  • Send validity shorter than the code validity: the message stops being delivered before the code expires, and the customer loses both.