Elocuenti · Schema
TemplateCreateBody
The template to create. It is sent to WhatsApp for review: it is usable once its status is `approved`.
CompanyArtificial IntelligenceConversational AIOmnichannelAutomationIntegration
Properties
| Name | Type | Description |
|---|---|---|
| name | string | The name of the template, which you also use to read and delete it: lowercase letters, digits and underscores, starting with a letter (up to 512 characters). It cannot be changed afterwards. |
| language | string | The language of the template, as WhatsApp writes it: two or three lowercase letters, optionally with the country in capitals (`es`, `en`, `es_MX`, `pt_BR`). A name can have one template per language. |
| category | string | What the template is for. `utility` is for messages about something the customer already did (an order, a delivery, an appointment). `marketing` is for promotions and offers. WhatsApp checks the conte |
| header | object | |
| body | object | |
| footer | string | A short line under the message (up to 60 characters), with no variables. |
| buttons | array |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/elocuenti-com/json-schema/elocuenti-com-template-create-body-schema.json",
"title": "TemplateCreateBody",
"description": "The template to create. It is sent to WhatsApp for review: it is usable once its status is `approved`.",
"x-generated": "2026-11-10",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/elocuenti-com-templates-api-openapi.yml#/components/schemas/TemplateCreateBody",
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 512,
"pattern": "^[a-z][a-z0-9_]*$",
"description": "The name of the template, which you also use to read and delete it: lowercase letters, digits and underscores, starting with a letter (up to 512 characters). It cannot be changed afterwards.",
"title": "Name"
},
"language": {
"type": "string",
"maxLength": 10,
"pattern": "^[a-z]{2,3}(_[A-Z]{2})?$",
"description": "The language of the template, as WhatsApp writes it: two or three lowercase letters, optionally with the country in capitals (`es`, `en`, `es_MX`, `pt_BR`). A name can have one template per language.",
"title": "Language"
},
"category": {
"type": "string",
"enum": [
"marketing",
"utility"
],
"description": "What the template is for. `utility` is for messages about something the customer already did (an order, a delivery, an appointment). `marketing` is for promotions and offers. WhatsApp checks the content against the category and may reassign it: the answer shows the category WhatsApp kept. Templates of the `authentication` category (one-time codes) are made in the dashboard.",
"title": "Category"
},
"header": {
"$ref": "#/$defs/TemplateHeaderInput"
},
"body": {
"$ref": "#/$defs/TemplateBodyInput"
},
"footer": {
"description": "A short line under the message (up to 60 characters), with no variables.",
"type": "string",
"minLength": 1,
"maxLength": 60,
"title": "Footer"
},
"buttons": {
"minItems": 1,
"maxItems": 10,
"type": "array",
"items": {
"$ref": "#/$defs/TemplateButtonInput"
},
"title": "Buttons"
}
},
"required": [
"name",
"language",
"category",
"body"
],
"additionalProperties": false,
"$defs": {
"TemplateBodyInput": {
"type": "object",
"properties": {
"text": {
"type": "string",
"minLength": 1,
"maxLength": 1024,
"description": "The message (up to 1024 characters). Write the places where each message changes as `{{1}}`, `{{2}}`… numbered from 1 with no gaps, up to 10. It cannot start or end with a variable, and it needs enough fixed text around them.",
"title": "Text"
}
},
"required": [
"text"
],
"additionalProperties": false,
"description": "The body of the template (required).",
"title": "TemplateBodyInput"
},
"TemplateButtonInput": {
"oneOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "QUICK_REPLY",
"title": "Type"
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"description": "The button's label (up to 20 characters).",
"title": "Text"
}
},
"required": [
"type",
"text"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "URL",
"title": "Type"
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 25,
"description": "The button's label (up to 25 characters).",
"title": "Text"
},
"url": {
"type": "string",
"maxLength": 2000,
"description": "The address the button opens: it must start with `https://` (up to 2000 characters). To change it per message, end it with a single `{{1}}` (for example `https://ejemplo.com/pedido/{{1}}`) and send `example`.",
"title": "Url"
}
},
"required": [
"type",
"text",
"url"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "PHONE_NUMBER",
"title": "Type"
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 25,
"description": "The button's label (up to 25 characters).",
"title": "Text"
},
"phone_number": {
"type": "string",
"maxLength": 16,
"pattern": "^\\+[1-9]\\d{6,14}$",
"description": "The number the button calls, in international format (E.164): a plus sign, the country code and the number.",
"title": "Phone Number"
}
},
"required": [
"type",
"text",
"phone_number"
],
"additionalProperties": false
}
],
"description": "A button. Up to 10 in total: quick replies (`QUICK_REPLY`, which cannot be mixed with the other types), up to 2 links (`URL`) and 1 call button (`PHONE_NUMBER`).",
"title": "TemplateButtonInput"
},
"TemplateHeaderInput": {
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "text",
"description": "The kind of header. Only `text` can be created through the API.",
"title": "Type"
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"description": "The header text (up to 60 characters). It can hold one variable, written `{{1}}`; then `example` is required.",
"title": "Text"
}
},
"required": [
"type",
"text"
],
"additionalProperties": false,
"description": "The header of the template (optional).",
"title": "TemplateHeaderInput"
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/elocuenti-com-template-create-body"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.