curl --request POST \
--url https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"language": "<string>",
"message_send_ttl_seconds": 123,
"allow_category_change": true,
"library_template_name": "<string>",
"library_template_body_inputs": [
{
"add_contact_number": true,
"add_learn_more_link": true,
"add_security_recommendation": true,
"add_track_package_link": true,
"code_expiration_minutes": 45
}
],
"library_template_button_inputs": [
{
"url": {
"base_url": "<string>",
"url_suffix_example": "<string>"
},
"phone_number": "<string>"
}
],
"components": [
{
"text": "<string>",
"example": {
"body_text": [
[
"<string>"
]
],
"body_text_named_params": [
{
"param_name": "<string>",
"example": "<string>"
}
],
"header_text": [
"<string>"
],
"header_text_named_params": [
{
"param_name": "<string>",
"example": "<string>"
}
],
"header_handle": [
"<string>"
]
},
"add_security_recommendation": true,
"code_expiration_minutes": 45,
"buttons": [
{
"text": "<string>",
"url": "<string>",
"phone_number": "<string>",
"example": "<string>",
"supported_apps": [
{
"package_name": "<string>",
"signature_hash": "<string>"
}
],
"zero_tap_terms_accepted": true,
"flow_id": "<string>",
"flow_name": "<string>",
"flow_json": "<string>",
"navigate_screen": "<string>"
}
],
"cards": [
{
"components": "<array>"
}
],
"limited_time_offer": {
"text": "<string>",
"has_expiration": true
}
}
]
}
'import requests
url = "https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates"
payload = {
"name": "<string>",
"language": "<string>",
"message_send_ttl_seconds": 123,
"allow_category_change": True,
"library_template_name": "<string>",
"library_template_body_inputs": [
{
"add_contact_number": True,
"add_learn_more_link": True,
"add_security_recommendation": True,
"add_track_package_link": True,
"code_expiration_minutes": 45
}
],
"library_template_button_inputs": [
{
"url": {
"base_url": "<string>",
"url_suffix_example": "<string>"
},
"phone_number": "<string>"
}
],
"components": [
{
"text": "<string>",
"example": {
"body_text": [["<string>"]],
"body_text_named_params": [
{
"param_name": "<string>",
"example": "<string>"
}
],
"header_text": ["<string>"],
"header_text_named_params": [
{
"param_name": "<string>",
"example": "<string>"
}
],
"header_handle": ["<string>"]
},
"add_security_recommendation": True,
"code_expiration_minutes": 45,
"buttons": [
{
"text": "<string>",
"url": "<string>",
"phone_number": "<string>",
"example": "<string>",
"supported_apps": [
{
"package_name": "<string>",
"signature_hash": "<string>"
}
],
"zero_tap_terms_accepted": True,
"flow_id": "<string>",
"flow_name": "<string>",
"flow_json": "<string>",
"navigate_screen": "<string>"
}
],
"cards": [{ "components": "<array>" }],
"limited_time_offer": {
"text": "<string>",
"has_expiration": True
}
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
language: '<string>',
message_send_ttl_seconds: 123,
allow_category_change: true,
library_template_name: '<string>',
library_template_body_inputs: [
{
add_contact_number: true,
add_learn_more_link: true,
add_security_recommendation: true,
add_track_package_link: true,
code_expiration_minutes: 45
}
],
library_template_button_inputs: [
{
url: {base_url: '<string>', url_suffix_example: '<string>'},
phone_number: '<string>'
}
],
components: [
{
text: '<string>',
example: {
body_text: [['<string>']],
body_text_named_params: [{param_name: '<string>', example: '<string>'}],
header_text: ['<string>'],
header_text_named_params: [{param_name: '<string>', example: '<string>'}],
header_handle: ['<string>']
},
add_security_recommendation: true,
code_expiration_minutes: 45,
buttons: [
{
text: '<string>',
url: '<string>',
phone_number: '<string>',
example: '<string>',
supported_apps: [{package_name: '<string>', signature_hash: '<string>'}],
zero_tap_terms_accepted: true,
flow_id: '<string>',
flow_name: '<string>',
flow_json: '<string>',
navigate_screen: '<string>'
}
],
cards: [{components: '<array>'}],
limited_time_offer: {text: '<string>', has_expiration: true}
}
]
})
};
fetch('https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'language' => '<string>',
'message_send_ttl_seconds' => 123,
'allow_category_change' => true,
'library_template_name' => '<string>',
'library_template_body_inputs' => [
[
'add_contact_number' => true,
'add_learn_more_link' => true,
'add_security_recommendation' => true,
'add_track_package_link' => true,
'code_expiration_minutes' => 45
]
],
'library_template_button_inputs' => [
[
'url' => [
'base_url' => '<string>',
'url_suffix_example' => '<string>'
],
'phone_number' => '<string>'
]
],
'components' => [
[
'text' => '<string>',
'example' => [
'body_text' => [
[
'<string>'
]
],
'body_text_named_params' => [
[
'param_name' => '<string>',
'example' => '<string>'
]
],
'header_text' => [
'<string>'
],
'header_text_named_params' => [
[
'param_name' => '<string>',
'example' => '<string>'
]
],
'header_handle' => [
'<string>'
]
],
'add_security_recommendation' => true,
'code_expiration_minutes' => 45,
'buttons' => [
[
'text' => '<string>',
'url' => '<string>',
'phone_number' => '<string>',
'example' => '<string>',
'supported_apps' => [
[
'package_name' => '<string>',
'signature_hash' => '<string>'
]
],
'zero_tap_terms_accepted' => true,
'flow_id' => '<string>',
'flow_name' => '<string>',
'flow_json' => '<string>',
'navigate_screen' => '<string>'
]
],
'cards' => [
[
'components' => '<array>'
]
],
'limited_time_offer' => [
'text' => '<string>',
'has_expiration' => true
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"language\": \"<string>\",\n \"message_send_ttl_seconds\": 123,\n \"allow_category_change\": true,\n \"library_template_name\": \"<string>\",\n \"library_template_body_inputs\": [\n {\n \"add_contact_number\": true,\n \"add_learn_more_link\": true,\n \"add_security_recommendation\": true,\n \"add_track_package_link\": true,\n \"code_expiration_minutes\": 45\n }\n ],\n \"library_template_button_inputs\": [\n {\n \"url\": {\n \"base_url\": \"<string>\",\n \"url_suffix_example\": \"<string>\"\n },\n \"phone_number\": \"<string>\"\n }\n ],\n \"components\": [\n {\n \"text\": \"<string>\",\n \"example\": {\n \"body_text\": [\n [\n \"<string>\"\n ]\n ],\n \"body_text_named_params\": [\n {\n \"param_name\": \"<string>\",\n \"example\": \"<string>\"\n }\n ],\n \"header_text\": [\n \"<string>\"\n ],\n \"header_text_named_params\": [\n {\n \"param_name\": \"<string>\",\n \"example\": \"<string>\"\n }\n ],\n \"header_handle\": [\n \"<string>\"\n ]\n },\n \"add_security_recommendation\": true,\n \"code_expiration_minutes\": 45,\n \"buttons\": [\n {\n \"text\": \"<string>\",\n \"url\": \"<string>\",\n \"phone_number\": \"<string>\",\n \"example\": \"<string>\",\n \"supported_apps\": [\n {\n \"package_name\": \"<string>\",\n \"signature_hash\": \"<string>\"\n }\n ],\n \"zero_tap_terms_accepted\": true,\n \"flow_id\": \"<string>\",\n \"flow_name\": \"<string>\",\n \"flow_json\": \"<string>\",\n \"navigate_screen\": \"<string>\"\n }\n ],\n \"cards\": [\n {\n \"components\": \"<array>\"\n }\n ],\n \"limited_time_offer\": {\n \"text\": \"<string>\",\n \"has_expiration\": true\n }\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"language\": \"<string>\",\n \"message_send_ttl_seconds\": 123,\n \"allow_category_change\": true,\n \"library_template_name\": \"<string>\",\n \"library_template_body_inputs\": [\n {\n \"add_contact_number\": true,\n \"add_learn_more_link\": true,\n \"add_security_recommendation\": true,\n \"add_track_package_link\": true,\n \"code_expiration_minutes\": 45\n }\n ],\n \"library_template_button_inputs\": [\n {\n \"url\": {\n \"base_url\": \"<string>\",\n \"url_suffix_example\": \"<string>\"\n },\n \"phone_number\": \"<string>\"\n }\n ],\n \"components\": [\n {\n \"text\": \"<string>\",\n \"example\": {\n \"body_text\": [\n [\n \"<string>\"\n ]\n ],\n \"body_text_named_params\": [\n {\n \"param_name\": \"<string>\",\n \"example\": \"<string>\"\n }\n ],\n \"header_text\": [\n \"<string>\"\n ],\n \"header_text_named_params\": [\n {\n \"param_name\": \"<string>\",\n \"example\": \"<string>\"\n }\n ],\n \"header_handle\": [\n \"<string>\"\n ]\n },\n \"add_security_recommendation\": true,\n \"code_expiration_minutes\": 45,\n \"buttons\": [\n {\n \"text\": \"<string>\",\n \"url\": \"<string>\",\n \"phone_number\": \"<string>\",\n \"example\": \"<string>\",\n \"supported_apps\": [\n {\n \"package_name\": \"<string>\",\n \"signature_hash\": \"<string>\"\n }\n ],\n \"zero_tap_terms_accepted\": true,\n \"flow_id\": \"<string>\",\n \"flow_name\": \"<string>\",\n \"flow_json\": \"<string>\",\n \"navigate_screen\": \"<string>\"\n }\n ],\n \"cards\": [\n {\n \"components\": \"<array>\"\n }\n ],\n \"limited_time_offer\": {\n \"text\": \"<string>\",\n \"has_expiration\": true\n }\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"language\": \"<string>\",\n \"message_send_ttl_seconds\": 123,\n \"allow_category_change\": true,\n \"library_template_name\": \"<string>\",\n \"library_template_body_inputs\": [\n {\n \"add_contact_number\": true,\n \"add_learn_more_link\": true,\n \"add_security_recommendation\": true,\n \"add_track_package_link\": true,\n \"code_expiration_minutes\": 45\n }\n ],\n \"library_template_button_inputs\": [\n {\n \"url\": {\n \"base_url\": \"<string>\",\n \"url_suffix_example\": \"<string>\"\n },\n \"phone_number\": \"<string>\"\n }\n ],\n \"components\": [\n {\n \"text\": \"<string>\",\n \"example\": {\n \"body_text\": [\n [\n \"<string>\"\n ]\n ],\n \"body_text_named_params\": [\n {\n \"param_name\": \"<string>\",\n \"example\": \"<string>\"\n }\n ],\n \"header_text\": [\n \"<string>\"\n ],\n \"header_text_named_params\": [\n {\n \"param_name\": \"<string>\",\n \"example\": \"<string>\"\n }\n ],\n \"header_handle\": [\n \"<string>\"\n ]\n },\n \"add_security_recommendation\": true,\n \"code_expiration_minutes\": 45,\n \"buttons\": [\n {\n \"text\": \"<string>\",\n \"url\": \"<string>\",\n \"phone_number\": \"<string>\",\n \"example\": \"<string>\",\n \"supported_apps\": [\n {\n \"package_name\": \"<string>\",\n \"signature_hash\": \"<string>\"\n }\n ],\n \"zero_tap_terms_accepted\": true,\n \"flow_id\": \"<string>\",\n \"flow_name\": \"<string>\",\n \"flow_json\": \"<string>\",\n \"navigate_screen\": \"<string>\"\n }\n ],\n \"cards\": [\n {\n \"components\": \"<array>\"\n }\n ],\n \"limited_time_offer\": {\n \"text\": \"<string>\",\n \"has_expiration\": true\n }\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "1613165359891625",
"status": "PENDING",
"category": "UTILITY"
}{
"error": {
"timestamp": "2026-10-19T12:00:00Z",
"status": 422,
"errors": [
{
"description": "",
"name": "META_WHATSAPP_ERROR",
"message": "Tu mensaje no se puede enviar porque incluye contenido que otras personas en Facebook denunciaron como abusivo.",
"code": "368"
}
]
}
}{
"error": 401,
"message": "Unauthorized"
}{
"error": {
"errors": [
{
"code": "100",
"name": "META_WHATSAPP_ERROR",
"subCode": "2388024",
"message": "Invalid parameter",
"description": "There is already Portuguese (BR) content for this template. You can create a new template and try again."
}
]
}
}{
"error": "integration_unavailable",
"message": "The operation could not be completed right now. Try again in a few moments."
}{
"error": "outcome_unknown",
"message": "The operation did not finish in time and may still be completed. Check the result before trying again."
}Referencia de la API
La llamada que crea la plantilla: ruta, autenticación, respuestas y errores
curl --request POST \
--url https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"language": "<string>",
"message_send_ttl_seconds": 123,
"allow_category_change": true,
"library_template_name": "<string>",
"library_template_body_inputs": [
{
"add_contact_number": true,
"add_learn_more_link": true,
"add_security_recommendation": true,
"add_track_package_link": true,
"code_expiration_minutes": 45
}
],
"library_template_button_inputs": [
{
"url": {
"base_url": "<string>",
"url_suffix_example": "<string>"
},
"phone_number": "<string>"
}
],
"components": [
{
"text": "<string>",
"example": {
"body_text": [
[
"<string>"
]
],
"body_text_named_params": [
{
"param_name": "<string>",
"example": "<string>"
}
],
"header_text": [
"<string>"
],
"header_text_named_params": [
{
"param_name": "<string>",
"example": "<string>"
}
],
"header_handle": [
"<string>"
]
},
"add_security_recommendation": true,
"code_expiration_minutes": 45,
"buttons": [
{
"text": "<string>",
"url": "<string>",
"phone_number": "<string>",
"example": "<string>",
"supported_apps": [
{
"package_name": "<string>",
"signature_hash": "<string>"
}
],
"zero_tap_terms_accepted": true,
"flow_id": "<string>",
"flow_name": "<string>",
"flow_json": "<string>",
"navigate_screen": "<string>"
}
],
"cards": [
{
"components": "<array>"
}
],
"limited_time_offer": {
"text": "<string>",
"has_expiration": true
}
}
]
}
'import requests
url = "https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates"
payload = {
"name": "<string>",
"language": "<string>",
"message_send_ttl_seconds": 123,
"allow_category_change": True,
"library_template_name": "<string>",
"library_template_body_inputs": [
{
"add_contact_number": True,
"add_learn_more_link": True,
"add_security_recommendation": True,
"add_track_package_link": True,
"code_expiration_minutes": 45
}
],
"library_template_button_inputs": [
{
"url": {
"base_url": "<string>",
"url_suffix_example": "<string>"
},
"phone_number": "<string>"
}
],
"components": [
{
"text": "<string>",
"example": {
"body_text": [["<string>"]],
"body_text_named_params": [
{
"param_name": "<string>",
"example": "<string>"
}
],
"header_text": ["<string>"],
"header_text_named_params": [
{
"param_name": "<string>",
"example": "<string>"
}
],
"header_handle": ["<string>"]
},
"add_security_recommendation": True,
"code_expiration_minutes": 45,
"buttons": [
{
"text": "<string>",
"url": "<string>",
"phone_number": "<string>",
"example": "<string>",
"supported_apps": [
{
"package_name": "<string>",
"signature_hash": "<string>"
}
],
"zero_tap_terms_accepted": True,
"flow_id": "<string>",
"flow_name": "<string>",
"flow_json": "<string>",
"navigate_screen": "<string>"
}
],
"cards": [{ "components": "<array>" }],
"limited_time_offer": {
"text": "<string>",
"has_expiration": True
}
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
language: '<string>',
message_send_ttl_seconds: 123,
allow_category_change: true,
library_template_name: '<string>',
library_template_body_inputs: [
{
add_contact_number: true,
add_learn_more_link: true,
add_security_recommendation: true,
add_track_package_link: true,
code_expiration_minutes: 45
}
],
library_template_button_inputs: [
{
url: {base_url: '<string>', url_suffix_example: '<string>'},
phone_number: '<string>'
}
],
components: [
{
text: '<string>',
example: {
body_text: [['<string>']],
body_text_named_params: [{param_name: '<string>', example: '<string>'}],
header_text: ['<string>'],
header_text_named_params: [{param_name: '<string>', example: '<string>'}],
header_handle: ['<string>']
},
add_security_recommendation: true,
code_expiration_minutes: 45,
buttons: [
{
text: '<string>',
url: '<string>',
phone_number: '<string>',
example: '<string>',
supported_apps: [{package_name: '<string>', signature_hash: '<string>'}],
zero_tap_terms_accepted: true,
flow_id: '<string>',
flow_name: '<string>',
flow_json: '<string>',
navigate_screen: '<string>'
}
],
cards: [{components: '<array>'}],
limited_time_offer: {text: '<string>', has_expiration: true}
}
]
})
};
fetch('https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'language' => '<string>',
'message_send_ttl_seconds' => 123,
'allow_category_change' => true,
'library_template_name' => '<string>',
'library_template_body_inputs' => [
[
'add_contact_number' => true,
'add_learn_more_link' => true,
'add_security_recommendation' => true,
'add_track_package_link' => true,
'code_expiration_minutes' => 45
]
],
'library_template_button_inputs' => [
[
'url' => [
'base_url' => '<string>',
'url_suffix_example' => '<string>'
],
'phone_number' => '<string>'
]
],
'components' => [
[
'text' => '<string>',
'example' => [
'body_text' => [
[
'<string>'
]
],
'body_text_named_params' => [
[
'param_name' => '<string>',
'example' => '<string>'
]
],
'header_text' => [
'<string>'
],
'header_text_named_params' => [
[
'param_name' => '<string>',
'example' => '<string>'
]
],
'header_handle' => [
'<string>'
]
],
'add_security_recommendation' => true,
'code_expiration_minutes' => 45,
'buttons' => [
[
'text' => '<string>',
'url' => '<string>',
'phone_number' => '<string>',
'example' => '<string>',
'supported_apps' => [
[
'package_name' => '<string>',
'signature_hash' => '<string>'
]
],
'zero_tap_terms_accepted' => true,
'flow_id' => '<string>',
'flow_name' => '<string>',
'flow_json' => '<string>',
'navigate_screen' => '<string>'
]
],
'cards' => [
[
'components' => '<array>'
]
],
'limited_time_offer' => [
'text' => '<string>',
'has_expiration' => true
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"language\": \"<string>\",\n \"message_send_ttl_seconds\": 123,\n \"allow_category_change\": true,\n \"library_template_name\": \"<string>\",\n \"library_template_body_inputs\": [\n {\n \"add_contact_number\": true,\n \"add_learn_more_link\": true,\n \"add_security_recommendation\": true,\n \"add_track_package_link\": true,\n \"code_expiration_minutes\": 45\n }\n ],\n \"library_template_button_inputs\": [\n {\n \"url\": {\n \"base_url\": \"<string>\",\n \"url_suffix_example\": \"<string>\"\n },\n \"phone_number\": \"<string>\"\n }\n ],\n \"components\": [\n {\n \"text\": \"<string>\",\n \"example\": {\n \"body_text\": [\n [\n \"<string>\"\n ]\n ],\n \"body_text_named_params\": [\n {\n \"param_name\": \"<string>\",\n \"example\": \"<string>\"\n }\n ],\n \"header_text\": [\n \"<string>\"\n ],\n \"header_text_named_params\": [\n {\n \"param_name\": \"<string>\",\n \"example\": \"<string>\"\n }\n ],\n \"header_handle\": [\n \"<string>\"\n ]\n },\n \"add_security_recommendation\": true,\n \"code_expiration_minutes\": 45,\n \"buttons\": [\n {\n \"text\": \"<string>\",\n \"url\": \"<string>\",\n \"phone_number\": \"<string>\",\n \"example\": \"<string>\",\n \"supported_apps\": [\n {\n \"package_name\": \"<string>\",\n \"signature_hash\": \"<string>\"\n }\n ],\n \"zero_tap_terms_accepted\": true,\n \"flow_id\": \"<string>\",\n \"flow_name\": \"<string>\",\n \"flow_json\": \"<string>\",\n \"navigate_screen\": \"<string>\"\n }\n ],\n \"cards\": [\n {\n \"components\": \"<array>\"\n }\n ],\n \"limited_time_offer\": {\n \"text\": \"<string>\",\n \"has_expiration\": true\n }\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"language\": \"<string>\",\n \"message_send_ttl_seconds\": 123,\n \"allow_category_change\": true,\n \"library_template_name\": \"<string>\",\n \"library_template_body_inputs\": [\n {\n \"add_contact_number\": true,\n \"add_learn_more_link\": true,\n \"add_security_recommendation\": true,\n \"add_track_package_link\": true,\n \"code_expiration_minutes\": 45\n }\n ],\n \"library_template_button_inputs\": [\n {\n \"url\": {\n \"base_url\": \"<string>\",\n \"url_suffix_example\": \"<string>\"\n },\n \"phone_number\": \"<string>\"\n }\n ],\n \"components\": [\n {\n \"text\": \"<string>\",\n \"example\": {\n \"body_text\": [\n [\n \"<string>\"\n ]\n ],\n \"body_text_named_params\": [\n {\n \"param_name\": \"<string>\",\n \"example\": \"<string>\"\n }\n ],\n \"header_text\": [\n \"<string>\"\n ],\n \"header_text_named_params\": [\n {\n \"param_name\": \"<string>\",\n \"example\": \"<string>\"\n }\n ],\n \"header_handle\": [\n \"<string>\"\n ]\n },\n \"add_security_recommendation\": true,\n \"code_expiration_minutes\": 45,\n \"buttons\": [\n {\n \"text\": \"<string>\",\n \"url\": \"<string>\",\n \"phone_number\": \"<string>\",\n \"example\": \"<string>\",\n \"supported_apps\": [\n {\n \"package_name\": \"<string>\",\n \"signature_hash\": \"<string>\"\n }\n ],\n \"zero_tap_terms_accepted\": true,\n \"flow_id\": \"<string>\",\n \"flow_name\": \"<string>\",\n \"flow_json\": \"<string>\",\n \"navigate_screen\": \"<string>\"\n }\n ],\n \"cards\": [\n {\n \"components\": \"<array>\"\n }\n ],\n \"limited_time_offer\": {\n \"text\": \"<string>\",\n \"has_expiration\": true\n }\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"language\": \"<string>\",\n \"message_send_ttl_seconds\": 123,\n \"allow_category_change\": true,\n \"library_template_name\": \"<string>\",\n \"library_template_body_inputs\": [\n {\n \"add_contact_number\": true,\n \"add_learn_more_link\": true,\n \"add_security_recommendation\": true,\n \"add_track_package_link\": true,\n \"code_expiration_minutes\": 45\n }\n ],\n \"library_template_button_inputs\": [\n {\n \"url\": {\n \"base_url\": \"<string>\",\n \"url_suffix_example\": \"<string>\"\n },\n \"phone_number\": \"<string>\"\n }\n ],\n \"components\": [\n {\n \"text\": \"<string>\",\n \"example\": {\n \"body_text\": [\n [\n \"<string>\"\n ]\n ],\n \"body_text_named_params\": [\n {\n \"param_name\": \"<string>\",\n \"example\": \"<string>\"\n }\n ],\n \"header_text\": [\n \"<string>\"\n ],\n \"header_text_named_params\": [\n {\n \"param_name\": \"<string>\",\n \"example\": \"<string>\"\n }\n ],\n \"header_handle\": [\n \"<string>\"\n ]\n },\n \"add_security_recommendation\": true,\n \"code_expiration_minutes\": 45,\n \"buttons\": [\n {\n \"text\": \"<string>\",\n \"url\": \"<string>\",\n \"phone_number\": \"<string>\",\n \"example\": \"<string>\",\n \"supported_apps\": [\n {\n \"package_name\": \"<string>\",\n \"signature_hash\": \"<string>\"\n }\n ],\n \"zero_tap_terms_accepted\": true,\n \"flow_id\": \"<string>\",\n \"flow_name\": \"<string>\",\n \"flow_json\": \"<string>\",\n \"navigate_screen\": \"<string>\"\n }\n ],\n \"cards\": [\n {\n \"components\": \"<array>\"\n }\n ],\n \"limited_time_offer\": {\n \"text\": \"<string>\",\n \"has_expiration\": true\n }\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "1613165359891625",
"status": "PENDING",
"category": "UTILITY"
}{
"error": {
"timestamp": "2026-10-19T12:00:00Z",
"status": 422,
"errors": [
{
"description": "",
"name": "META_WHATSAPP_ERROR",
"message": "Tu mensaje no se puede enviar porque incluye contenido que otras personas en Facebook denunciaron como abusivo.",
"code": "368"
}
]
}
}{
"error": 401,
"message": "Unauthorized"
}{
"error": {
"errors": [
{
"code": "100",
"name": "META_WHATSAPP_ERROR",
"subCode": "2388024",
"message": "Invalid parameter",
"description": "There is already Portuguese (BR) content for this template. You can create a new template and try again."
}
]
}
}{
"error": "integration_unavailable",
"message": "The operation could not be completed right now. Try again in a few moments."
}{
"error": "outcome_unknown",
"message": "The operation did not finish in time and may still be completed. Check the result before trying again."
}wabaId, el schema campo por campo y lo que vuelve en cada caso. El playground de arriba dispara la llamada de verdad.
La plantilla nace con estado PENDING y pasa a APPROVED o REJECTED después de la revisión de Meta. Usa Sincronizar plantillas para forzar la actualización del estado.
wabaId sale del endpoint de Listar WABAs.snake_case, sin espacios ni caracteres especiales, y no se puede cambiar después de creado.Elegir el modelo
Campos de la plantilla
Validaciones
Autorizaciones
Secret Key generada en el panel de Seguridad de Omni Z-API
Parámetros de ruta
ID de la WABA (obtenido con Listar WABAs)
"428083093730937"
Cuerpo
Nombre de la plantilla: minúsculas, números y guion bajo. No se puede cambiar después de creada.
512^[a-z0-9_]+$Varios tipos tienen categoría fija. Ver "Tipos de plantilla".
UTILITY, MARKETING, AUTHENTICATION Idioma en el formato de Meta, como pt_BR o en_US.
Sintaxis de las variables. Nombrado es el formato actual de Meta.
NAMED, POSITIONAL Validez del envío en segundos. Rango por categoría: autenticación 30 a 900, marketing 43200 a 2592000, utility 30 a 43200. El valor -1 es un atajo de 30 días.
Permite que Meta recategorice la plantilla en la revisión.
Nombre del modelo en la biblioteca de Meta. Ver "Template Library".
Ajustes de cuerpo que acepta el modelo de la biblioteca.
Show child attributes
Show child attributes
Datos de los botones del modelo de la biblioteca.
Show child attributes
Show child attributes
Cada ítem es un componente, identificado por el campo type. Los campos de abajo pertenecen a un type específico, y lo que acepta cada tipo de plantilla está en "Tipos de plantilla".
Show child attributes
Show child attributes