curl --request GET \
--url https://app.thinnest.ai/api/v1/templates/{name} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.thinnest.ai/api/v1/templates/{name}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.thinnest.ai/api/v1/templates/{name}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"name": "diwali_offer_v2",
"language": "en",
"category": "marketing",
"status": "rejected",
"agent": "ag_5c4a5f93-2b1e-4c0a-9d3f-7e8a1b2c3d4e",
"body": "Hi {{1}}, this Diwali take 20% off everything at Kesar Naturals with code {{2}}.",
"variableCount": 2,
"variableLabels": [
{
"position": 1,
"sample": "Priya"
},
{
"position": 2,
"sample": "FESTIVE20"
}
],
"buttonVariableCount": 0,
"headerKind": "text",
"createdAt": "2026-09-28T07:45:03.112Z",
"headerText": "Diwali sale is live",
"footer": "Reply STOP to opt out",
"buttons": [
{
"kind": "url",
"label": "Shop now",
"url": "https://kesarnaturals.in/diwali"
}
],
"reviewNote": "WhatsApp found this template's content does not match its category."
}{
"error": "Send a valid API key as `Authorization: Bearer <key>`."
}{
"error": "That template was not found."
}{
"error": "That name exists in 2 languages (en, hi). Pass `?language=`."
}{
"error": "Over 240 requests a minute. Slow down and retry."
}Get Template
Returns one WhatsApp template by name, with its parts — header text, footer, buttons — and, when WhatsApp refused it, the reason in reviewNote. Poll it after Submit Template to follow the review: status moves from pending to approved or rejected. Pass language when the name exists in more than one.
curl --request GET \
--url https://app.thinnest.ai/api/v1/templates/{name} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.thinnest.ai/api/v1/templates/{name}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.thinnest.ai/api/v1/templates/{name}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"name": "diwali_offer_v2",
"language": "en",
"category": "marketing",
"status": "rejected",
"agent": "ag_5c4a5f93-2b1e-4c0a-9d3f-7e8a1b2c3d4e",
"body": "Hi {{1}}, this Diwali take 20% off everything at Kesar Naturals with code {{2}}.",
"variableCount": 2,
"variableLabels": [
{
"position": 1,
"sample": "Priya"
},
{
"position": 2,
"sample": "FESTIVE20"
}
],
"buttonVariableCount": 0,
"headerKind": "text",
"createdAt": "2026-09-28T07:45:03.112Z",
"headerText": "Diwali sale is live",
"footer": "Reply STOP to opt out",
"buttons": [
{
"kind": "url",
"label": "Shop now",
"url": "https://kesarnaturals.in/diwali"
}
],
"reviewNote": "WhatsApp found this template's content does not match its category."
}{
"error": "Send a valid API key as `Authorization: Bearer <key>`."
}{
"error": "That template was not found."
}{
"error": "That name exists in 2 languages (en, hi). Pass `?language=`."
}{
"error": "Over 240 requests a minute. Slow down and retry."
}Authorizations
Your API key (ta_live_…) from Settings → API keys, sent as Authorization: Bearer <key>. Keep it on a server: it can message every customer you have. A key is full, build or read-only; a request its level does not allow is refused with 403.
Headers
Developers only: the customer workspace this request acts in — its org_… id from POST /customers. Leave it out to act in your own workspace.
"org_3fKq9TzQ1mN8vB2xR7cLpA"
Path Parameters
The template's name: lowercase letters, numbers and underscores.
^[a-z0-9_]{1,512}$Query Parameters
The template's language code. Needed only when the name exists in more than one language; without it such a name is a 409 that lists them.
Response
The template.
A WhatsApp template with its parts and review note.
The template's name — what Send Message and Create Campaign take.
"order_ready"
Its language code.
"en"
WhatsApp's category, which decides its price and its rules.
utility, marketing, authentication draft until submitted, pending while WhatsApp reviews it, then approved or rejected. WhatsApp may later pause an approved template that recipients flag. Only approved can be sent.
draft, pending, approved, rejected, paused The agent the template belongs to (ag_…).
"ag_5c4a5f93-2b1e-4c0a-9d3f-7e8a1b2c3d4e"
The message, with {{1}}, {{2}} … for the blanks. For an authentication template, the sentence WhatsApp writes around the code.
How many body values a send must carry, in order: the highest {{n}} in the body.
x >= 0The example given for each body blank.
Show child attributes
Show child attributes
How many button values a send must carry: one per link button whose address ends in a blank.
x >= 0The header. image, video or document means a send must pass a media link for it.
none, text, image, video, document When it was created.
A text header's words. null for any other header.
The footer line. Empty when there is none.
The template's buttons, in order.
Show child attributes
Show child attributes
Why WhatsApp refused it, when it did. null otherwise.