curl --request POST \
--url https://api.algosmiths.com/api/v1/templates/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"components": [
{
"text": "<string>",
"buttons": [
{
"text": "<string>",
"phone_number": "<string>",
"url": "<string>",
"autofill_text": "<string>",
"package_name": "<string>",
"signature_hash": "<string>",
"example": [
"<string>"
],
"zero_tap_terms_accepted": true,
"supported_apps": [
{
"package_name": "<string>",
"signature_hash": "<string>"
}
],
"active_for_days": 123
}
],
"example": {
"header_text": [
"<string>"
],
"header_handle": [
"<string>"
],
"body_text": [
[
"<string>"
]
]
},
"add_security_recommendation": true,
"code_expiration_minutes": 123
}
],
"allow_category_change": true,
"language": "en_US",
"source_library_template_id": 123,
"whatsapp_business_account_id": 123
}
'import requests
url = "https://api.algosmiths.com/api/v1/templates/"
payload = {
"name": "<string>",
"components": [
{
"text": "<string>",
"buttons": [
{
"text": "<string>",
"phone_number": "<string>",
"url": "<string>",
"autofill_text": "<string>",
"package_name": "<string>",
"signature_hash": "<string>",
"example": ["<string>"],
"zero_tap_terms_accepted": True,
"supported_apps": [
{
"package_name": "<string>",
"signature_hash": "<string>"
}
],
"active_for_days": 123
}
],
"example": {
"header_text": ["<string>"],
"header_handle": ["<string>"],
"body_text": [["<string>"]]
},
"add_security_recommendation": True,
"code_expiration_minutes": 123
}
],
"allow_category_change": True,
"language": "en_US",
"source_library_template_id": 123,
"whatsapp_business_account_id": 123
}
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>',
components: [
{
text: '<string>',
buttons: [
{
text: '<string>',
phone_number: '<string>',
url: '<string>',
autofill_text: '<string>',
package_name: '<string>',
signature_hash: '<string>',
example: ['<string>'],
zero_tap_terms_accepted: true,
supported_apps: [{package_name: '<string>', signature_hash: '<string>'}],
active_for_days: 123
}
],
example: {
header_text: ['<string>'],
header_handle: ['<string>'],
body_text: [['<string>']]
},
add_security_recommendation: true,
code_expiration_minutes: 123
}
],
allow_category_change: true,
language: 'en_US',
source_library_template_id: 123,
whatsapp_business_account_id: 123
})
};
fetch('https://api.algosmiths.com/api/v1/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.algosmiths.com/api/v1/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>',
'components' => [
[
'text' => '<string>',
'buttons' => [
[
'text' => '<string>',
'phone_number' => '<string>',
'url' => '<string>',
'autofill_text' => '<string>',
'package_name' => '<string>',
'signature_hash' => '<string>',
'example' => [
'<string>'
],
'zero_tap_terms_accepted' => true,
'supported_apps' => [
[
'package_name' => '<string>',
'signature_hash' => '<string>'
]
],
'active_for_days' => 123
]
],
'example' => [
'header_text' => [
'<string>'
],
'header_handle' => [
'<string>'
],
'body_text' => [
[
'<string>'
]
]
],
'add_security_recommendation' => true,
'code_expiration_minutes' => 123
]
],
'allow_category_change' => true,
'language' => 'en_US',
'source_library_template_id' => 123,
'whatsapp_business_account_id' => 123
]),
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.algosmiths.com/api/v1/templates/"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"components\": [\n {\n \"text\": \"<string>\",\n \"buttons\": [\n {\n \"text\": \"<string>\",\n \"phone_number\": \"<string>\",\n \"url\": \"<string>\",\n \"autofill_text\": \"<string>\",\n \"package_name\": \"<string>\",\n \"signature_hash\": \"<string>\",\n \"example\": [\n \"<string>\"\n ],\n \"zero_tap_terms_accepted\": true,\n \"supported_apps\": [\n {\n \"package_name\": \"<string>\",\n \"signature_hash\": \"<string>\"\n }\n ],\n \"active_for_days\": 123\n }\n ],\n \"example\": {\n \"header_text\": [\n \"<string>\"\n ],\n \"header_handle\": [\n \"<string>\"\n ],\n \"body_text\": [\n [\n \"<string>\"\n ]\n ]\n },\n \"add_security_recommendation\": true,\n \"code_expiration_minutes\": 123\n }\n ],\n \"allow_category_change\": true,\n \"language\": \"en_US\",\n \"source_library_template_id\": 123,\n \"whatsapp_business_account_id\": 123\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.algosmiths.com/api/v1/templates/")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"components\": [\n {\n \"text\": \"<string>\",\n \"buttons\": [\n {\n \"text\": \"<string>\",\n \"phone_number\": \"<string>\",\n \"url\": \"<string>\",\n \"autofill_text\": \"<string>\",\n \"package_name\": \"<string>\",\n \"signature_hash\": \"<string>\",\n \"example\": [\n \"<string>\"\n ],\n \"zero_tap_terms_accepted\": true,\n \"supported_apps\": [\n {\n \"package_name\": \"<string>\",\n \"signature_hash\": \"<string>\"\n }\n ],\n \"active_for_days\": 123\n }\n ],\n \"example\": {\n \"header_text\": [\n \"<string>\"\n ],\n \"header_handle\": [\n \"<string>\"\n ],\n \"body_text\": [\n [\n \"<string>\"\n ]\n ]\n },\n \"add_security_recommendation\": true,\n \"code_expiration_minutes\": 123\n }\n ],\n \"allow_category_change\": true,\n \"language\": \"en_US\",\n \"source_library_template_id\": 123,\n \"whatsapp_business_account_id\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.algosmiths.com/api/v1/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 \"components\": [\n {\n \"text\": \"<string>\",\n \"buttons\": [\n {\n \"text\": \"<string>\",\n \"phone_number\": \"<string>\",\n \"url\": \"<string>\",\n \"autofill_text\": \"<string>\",\n \"package_name\": \"<string>\",\n \"signature_hash\": \"<string>\",\n \"example\": [\n \"<string>\"\n ],\n \"zero_tap_terms_accepted\": true,\n \"supported_apps\": [\n {\n \"package_name\": \"<string>\",\n \"signature_hash\": \"<string>\"\n }\n ],\n \"active_for_days\": 123\n }\n ],\n \"example\": {\n \"header_text\": [\n \"<string>\"\n ],\n \"header_handle\": [\n \"<string>\"\n ],\n \"body_text\": [\n [\n \"<string>\"\n ]\n ]\n },\n \"add_security_recommendation\": true,\n \"code_expiration_minutes\": 123\n }\n ],\n \"allow_category_change\": true,\n \"language\": \"en_US\",\n \"source_library_template_id\": 123,\n \"whatsapp_business_account_id\": 123\n}"
response = http.request(request)
puts response.read_body{
"business_account_id": "<string>",
"whatsapp_account_id": "<string>",
"name": "<string>",
"components": "<unknown>",
"language": "<string>",
"status": "DRAFT",
"category": "ACCOUNT_UPDATE",
"business_account": 123,
"template_id": "<string>",
"quality_score": "GREEN",
"rejected_reason": "<string>",
"is_default": true,
"source_library_template": 123
}{}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Create a message template
Goes through Meta’s normal PENDING → APPROVED review, same as the dashboard. Set source_library_template_id to adopt a pre-vetted Template Library entry (tracks provenance on the created template).
curl --request POST \
--url https://api.algosmiths.com/api/v1/templates/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"components": [
{
"text": "<string>",
"buttons": [
{
"text": "<string>",
"phone_number": "<string>",
"url": "<string>",
"autofill_text": "<string>",
"package_name": "<string>",
"signature_hash": "<string>",
"example": [
"<string>"
],
"zero_tap_terms_accepted": true,
"supported_apps": [
{
"package_name": "<string>",
"signature_hash": "<string>"
}
],
"active_for_days": 123
}
],
"example": {
"header_text": [
"<string>"
],
"header_handle": [
"<string>"
],
"body_text": [
[
"<string>"
]
]
},
"add_security_recommendation": true,
"code_expiration_minutes": 123
}
],
"allow_category_change": true,
"language": "en_US",
"source_library_template_id": 123,
"whatsapp_business_account_id": 123
}
'import requests
url = "https://api.algosmiths.com/api/v1/templates/"
payload = {
"name": "<string>",
"components": [
{
"text": "<string>",
"buttons": [
{
"text": "<string>",
"phone_number": "<string>",
"url": "<string>",
"autofill_text": "<string>",
"package_name": "<string>",
"signature_hash": "<string>",
"example": ["<string>"],
"zero_tap_terms_accepted": True,
"supported_apps": [
{
"package_name": "<string>",
"signature_hash": "<string>"
}
],
"active_for_days": 123
}
],
"example": {
"header_text": ["<string>"],
"header_handle": ["<string>"],
"body_text": [["<string>"]]
},
"add_security_recommendation": True,
"code_expiration_minutes": 123
}
],
"allow_category_change": True,
"language": "en_US",
"source_library_template_id": 123,
"whatsapp_business_account_id": 123
}
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>',
components: [
{
text: '<string>',
buttons: [
{
text: '<string>',
phone_number: '<string>',
url: '<string>',
autofill_text: '<string>',
package_name: '<string>',
signature_hash: '<string>',
example: ['<string>'],
zero_tap_terms_accepted: true,
supported_apps: [{package_name: '<string>', signature_hash: '<string>'}],
active_for_days: 123
}
],
example: {
header_text: ['<string>'],
header_handle: ['<string>'],
body_text: [['<string>']]
},
add_security_recommendation: true,
code_expiration_minutes: 123
}
],
allow_category_change: true,
language: 'en_US',
source_library_template_id: 123,
whatsapp_business_account_id: 123
})
};
fetch('https://api.algosmiths.com/api/v1/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.algosmiths.com/api/v1/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>',
'components' => [
[
'text' => '<string>',
'buttons' => [
[
'text' => '<string>',
'phone_number' => '<string>',
'url' => '<string>',
'autofill_text' => '<string>',
'package_name' => '<string>',
'signature_hash' => '<string>',
'example' => [
'<string>'
],
'zero_tap_terms_accepted' => true,
'supported_apps' => [
[
'package_name' => '<string>',
'signature_hash' => '<string>'
]
],
'active_for_days' => 123
]
],
'example' => [
'header_text' => [
'<string>'
],
'header_handle' => [
'<string>'
],
'body_text' => [
[
'<string>'
]
]
],
'add_security_recommendation' => true,
'code_expiration_minutes' => 123
]
],
'allow_category_change' => true,
'language' => 'en_US',
'source_library_template_id' => 123,
'whatsapp_business_account_id' => 123
]),
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.algosmiths.com/api/v1/templates/"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"components\": [\n {\n \"text\": \"<string>\",\n \"buttons\": [\n {\n \"text\": \"<string>\",\n \"phone_number\": \"<string>\",\n \"url\": \"<string>\",\n \"autofill_text\": \"<string>\",\n \"package_name\": \"<string>\",\n \"signature_hash\": \"<string>\",\n \"example\": [\n \"<string>\"\n ],\n \"zero_tap_terms_accepted\": true,\n \"supported_apps\": [\n {\n \"package_name\": \"<string>\",\n \"signature_hash\": \"<string>\"\n }\n ],\n \"active_for_days\": 123\n }\n ],\n \"example\": {\n \"header_text\": [\n \"<string>\"\n ],\n \"header_handle\": [\n \"<string>\"\n ],\n \"body_text\": [\n [\n \"<string>\"\n ]\n ]\n },\n \"add_security_recommendation\": true,\n \"code_expiration_minutes\": 123\n }\n ],\n \"allow_category_change\": true,\n \"language\": \"en_US\",\n \"source_library_template_id\": 123,\n \"whatsapp_business_account_id\": 123\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.algosmiths.com/api/v1/templates/")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"components\": [\n {\n \"text\": \"<string>\",\n \"buttons\": [\n {\n \"text\": \"<string>\",\n \"phone_number\": \"<string>\",\n \"url\": \"<string>\",\n \"autofill_text\": \"<string>\",\n \"package_name\": \"<string>\",\n \"signature_hash\": \"<string>\",\n \"example\": [\n \"<string>\"\n ],\n \"zero_tap_terms_accepted\": true,\n \"supported_apps\": [\n {\n \"package_name\": \"<string>\",\n \"signature_hash\": \"<string>\"\n }\n ],\n \"active_for_days\": 123\n }\n ],\n \"example\": {\n \"header_text\": [\n \"<string>\"\n ],\n \"header_handle\": [\n \"<string>\"\n ],\n \"body_text\": [\n [\n \"<string>\"\n ]\n ]\n },\n \"add_security_recommendation\": true,\n \"code_expiration_minutes\": 123\n }\n ],\n \"allow_category_change\": true,\n \"language\": \"en_US\",\n \"source_library_template_id\": 123,\n \"whatsapp_business_account_id\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.algosmiths.com/api/v1/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 \"components\": [\n {\n \"text\": \"<string>\",\n \"buttons\": [\n {\n \"text\": \"<string>\",\n \"phone_number\": \"<string>\",\n \"url\": \"<string>\",\n \"autofill_text\": \"<string>\",\n \"package_name\": \"<string>\",\n \"signature_hash\": \"<string>\",\n \"example\": [\n \"<string>\"\n ],\n \"zero_tap_terms_accepted\": true,\n \"supported_apps\": [\n {\n \"package_name\": \"<string>\",\n \"signature_hash\": \"<string>\"\n }\n ],\n \"active_for_days\": 123\n }\n ],\n \"example\": {\n \"header_text\": [\n \"<string>\"\n ],\n \"header_handle\": [\n \"<string>\"\n ],\n \"body_text\": [\n [\n \"<string>\"\n ]\n ]\n },\n \"add_security_recommendation\": true,\n \"code_expiration_minutes\": 123\n }\n ],\n \"allow_category_change\": true,\n \"language\": \"en_US\",\n \"source_library_template_id\": 123,\n \"whatsapp_business_account_id\": 123\n}"
response = http.request(request)
puts response.read_body{
"business_account_id": "<string>",
"whatsapp_account_id": "<string>",
"name": "<string>",
"components": "<unknown>",
"language": "<string>",
"status": "DRAFT",
"category": "ACCOUNT_UPDATE",
"business_account": 123,
"template_id": "<string>",
"quality_score": "GREEN",
"rejected_reason": "<string>",
"is_default": true,
"source_library_template": 123
}{}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
Workspace API key, e.g. Authorization: Bearer cb_live_.... Create one in Settings → API Keys. See public_api.md § 3 for scopes.
Body
1 - 512ACCOUNT_UPDATE- ACCOUNT_UPDATEPAYMENT_UPDATE- PAYMENT_UPDATEPERSONAL_FINANCE_UPDATE- PERSONAL_FINANCE_UPDATESHIPPING_UPDATE- SHIPPING_UPDATERESERVATION_UPDATE- RESERVATION_UPDATEISSUE_RESOLUTION- ISSUE_RESOLUTIONAPPOINTMENT_UPDATE- APPOINTMENT_UPDATETRANSPORTATION_UPDATE- TRANSPORTATION_UPDATETICKET_UPDATE- TICKET_UPDATEALERT_UPDATE- ALERT_UPDATEAUTO_REPLY- AUTO_REPLYTRANSACTIONAL- TRANSACTIONALOTP- OTPUTILITY- UTILITYMARKETING- MARKETINGAUTHENTICATION- AUTHENTICATION
ACCOUNT_UPDATE, PAYMENT_UPDATE, PERSONAL_FINANCE_UPDATE, SHIPPING_UPDATE, RESERVATION_UPDATE, ISSUE_RESOLUTION, APPOINTMENT_UPDATE, TRANSPORTATION_UPDATE, TICKET_UPDATE, ALERT_UPDATE, AUTO_REPLY, TRANSACTIONAL, OTP, UTILITY, MARKETING, AUTHENTICATION Show child attributes
Show child attributes
af- afsq- sqar- araz- azbn- bnbg- bgca- cazh_CN- zh_CNzh_HK- zh_HKzh_TW- zh_TWhr- hrcs- csda- danl- nlen- enen_GB- en_GBen_US- en_USet- etfil- filfi- fifr- frka- kade- deel- elgu- guha- hahe- hehi- hihu- huid- idga- gait- itja- jakn- knkk- kkrw_RW- rw_RWko- koky_KG- ky_KGlo- lolv- lvlt- ltmk- mkms- msml- mlmr- mrnb- nbfa- fapl- plpt_BR- pt_BRpt_PT- pt_PTpa- paro- roru- rusr- srsk- sksl- sles- eses_AR- es_ARes_ES- es_ESes_MX- es_MXsw- swsv- svta- tate- teth- thtr- truk- ukur- uruz- uzvi- vizu- zu
af, sq, ar, az, bn, bg, ca, zh_CN, zh_HK, zh_TW, hr, cs, da, nl, en, en_GB, en_US, et, fil, fi, fr, ka, de, el, gu, ha, he, hi, hu, id, ga, it, ja, kn, kk, rw_RW, ko, ky_KG, lo, lv, lt, mk, ms, ml, mr, nb, fa, pl, pt_BR, pt_PT, pa, ro, ru, sr, sk, sl, es, es_AR, es_ES, es_MX, sw, sv, ta, te, th, tr, uk, ur, uz, vi, zu Provide the WhatsApp Business Account ID. If multiple accounts are present, provide the account ID otherwise it will be defaulted to the first account
Response
/api/v1/ view of a template.
Deliberately narrower than the dashboard's: the internal DB pk and the create-wizard's saved UI state are implementation details of the dashboard's draft flow, and putting them on the public surface would make them a contract we'd owe compatibility on. Keeping them out here is what lets TemplateSerializer expose them freely.
5128DRAFT- DraftAPPROVED- APPROVEDIN_APPEAL- IN_APPEALPENDING- PENDINGREJECTED- REJECTEDPENDING_DELETION- PENDING_DELETIONDELETED- DELETEDDISABLED- DISABLEDPAUSED- PAUSEDLIMIT_EXCEEDED- LIMIT_EXCEEDEDARCHIVED- ARCHIVED
DRAFT, APPROVED, IN_APPEAL, PENDING, REJECTED, PENDING_DELETION, DELETED, DISABLED, PAUSED, LIMIT_EXCEEDED, ARCHIVED ACCOUNT_UPDATE- ACCOUNT_UPDATEPAYMENT_UPDATE- PAYMENT_UPDATEPERSONAL_FINANCE_UPDATE- PERSONAL_FINANCE_UPDATESHIPPING_UPDATE- SHIPPING_UPDATERESERVATION_UPDATE- RESERVATION_UPDATEISSUE_RESOLUTION- ISSUE_RESOLUTIONAPPOINTMENT_UPDATE- APPOINTMENT_UPDATETRANSPORTATION_UPDATE- TRANSPORTATION_UPDATETICKET_UPDATE- TICKET_UPDATEALERT_UPDATE- ALERT_UPDATEAUTO_REPLY- AUTO_REPLYTRANSACTIONAL- TRANSACTIONALOTP- OTPUTILITY- UTILITYMARKETING- MARKETINGAUTHENTICATION- AUTHENTICATION
ACCOUNT_UPDATE, PAYMENT_UPDATE, PERSONAL_FINANCE_UPDATE, SHIPPING_UPDATE, RESERVATION_UPDATE, ISSUE_RESOLUTION, APPOINTMENT_UPDATE, TRANSPORTATION_UPDATE, TICKET_UPDATE, ALERT_UPDATE, AUTO_REPLY, TRANSACTIONAL, OTP, UTILITY, MARKETING, AUTHENTICATION 255GREEN- GREENYELLOW- YELLOWRED- REDUNKNOWN- UNKNOWNBLANK- BLANK
GREEN, YELLOW, RED, UNKNOWN, BLANK 
