{"id":749,"date":"2026-10-29T13:22:20","date_gmt":"2026-10-29T13:22:20","guid":{"rendered":"https:\/\/vectalk.com.br\/blog\/crear-plantilla-api-whatsapp\/"},"modified":"2026-10-29T13:22:39","modified_gmt":"2026-10-29T13:22:39","slug":"crear-plantilla-api-whatsapp","status":"publish","type":"post","link":"https:\/\/vectalk.com.br\/blog\/es\/crear-plantilla-api-whatsapp\/","title":{"rendered":"C\u00f3mo crear, editar y eliminar plantillas con la API de WhatsApp"},"content":{"rendered":"\n<p><em>Actualizado el 29\/10\/2026<\/em><\/p>\n\n\n\n<p>Para crear una plantilla con la API de WhatsApp, haces <code>POST \/&lt;WABA_ID&gt;\/message_templates<\/code> con <code>name<\/code>, <code>language<\/code>, <code>category<\/code> y el arreglo <code>components<\/code>, incluyendo un valor de ejemplo para cada variable. Meta responde con el <code>id<\/code> de la plantilla y el estado <code>PENDING<\/code>; cuando termina la revisi\u00f3n, llega el webhook <code>message_template_status_update<\/code>. Para editar, usa <code>POST \/&lt;TEMPLATE_ID&gt;<\/code>; para eliminar, <code>DELETE \/&lt;WABA_ID&gt;\/message_templates?name=...<\/code>, con <code>hsm_id<\/code> si quieres borrar un solo idioma.<\/p>\n\n\n\n<p>Esta gu\u00eda muestra los payloads de cada operaci\u00f3n, los l\u00edmites de edici\u00f3n y eliminaci\u00f3n y los errores que m\u00e1s traban a quien automatiza plantillas. El concepto de plantilla y sus reglas de uso est\u00e1n en la gu\u00eda de <a href=\"https:\/\/vectalk.com.br\/blog\/es\/plantillas-api-whatsapp\/\">plantillas de la API de WhatsApp<\/a>; aqu\u00ed el foco es el ciclo de vida por API.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">D\u00f3nde viven las plantillas despu\u00e9s del 23\/09\/2026<\/h2>\n\n\n\n<p>Desde el 23 de septiembre de 2026, Meta separa la antigua cuenta de WhatsApp Business (WABA) en <strong>cuenta de WhatsApp<\/strong> (el n\u00famero y el perfil) y <strong>cuenta de mensajes<\/strong> (plantillas, facturaci\u00f3n y webhooks). La documentaci\u00f3n de plantillas ya habla de &#8220;Messaging account&#8221;: las plantillas son activos de la cuenta de mensajes, y cada cuenta de mensajes tiene las suyas.<\/p>\n\n\n\n<p>En la pr\u00e1ctica, el c\u00f3digo no cambia. Las cuentas de mensajes heredaron el ID de la WABA, y los ejemplos de la documentaci\u00f3n siguen usando <code>\/&lt;WABA_ID&gt;\/message_templates<\/code>. Es decir: el mismo ID que ya usabas sirve para crear, listar y eliminar. La consecuencia que importa es otra: las plantillas no se comparten entre cuentas de mensajes. Si dos proveedores usan el mismo n\u00famero, cada uno tiene su cuenta de mensajes y necesita las plantillas creadas en ella. La estructura completa est\u00e1 en <a href=\"https:\/\/vectalk.com.br\/blog\/es\/cuenta-whatsapp-cuenta-de-mensajes-waba\/\">cuenta de WhatsApp vs. cuenta de mensajes<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Antes de empezar<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ID de la cuenta<\/strong>: el WABA ID (o ID de la cuenta de mensajes, que es el mismo). Si no sabes d\u00f3nde est\u00e1, revisa <a href=\"https:\/\/vectalk.com.br\/blog\/es\/encontrar-phone-number-id-whatsapp\/\">d\u00f3nde encontrar el Phone Number ID y el WABA ID<\/a>.<\/li>\n\n\n<li><strong>Token<\/strong>: necesita el permiso <code>whatsapp_business_management<\/code>. Seg\u00fan la documentaci\u00f3n, con solo <code>whatsapp_business_messaging<\/code> el borrado devuelve un error con c\u00f3digo 200. Para producci\u00f3n, usa un <a href=\"https:\/\/vectalk.com.br\/blog\/es\/token-permanente-api-whatsapp-es\/\">token permanente de usuario del sistema<\/a>.<\/li>\n\n\n<li><strong>Versi\u00f3n de la Graph API<\/strong>: los ejemplos usan <code>v26.0<\/code>. C\u00e1mbiala por la que uses.<\/li>\n\n\n<li><strong>L\u00edmites de la cuenta<\/strong>: hasta 100 plantillas creadas por hora por cuenta de mensajes. El total es de 250 plantillas si el portafolio comercial no est\u00e1 verificado y de hasta 6.000 si est\u00e1 verificado y tiene nombre visible aprobado en al menos una cuenta de WhatsApp.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Los campos de la creaci\u00f3n<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Campo<\/th><th>Obligatorio<\/th><th>Qu\u00e9 es<\/th><\/tr><\/thead><tbody><tr><td><code>name<\/code><\/td><td>S\u00ed<\/td><td>Min\u00fasculas, n\u00fameros y guion bajo; hasta 512 caracteres<\/td><\/tr><tr><td><code>language<\/code><\/td><td>S\u00ed<\/td><td>C\u00f3digo de idioma, como <code>es_MX<\/code>, <code>es_AR<\/code> o <code>pt_BR<\/code><\/td><\/tr><tr><td><code>category<\/code><\/td><td>S\u00ed<\/td><td><code>MARKETING<\/code>, <code>UTILITY<\/code> o <code>AUTHENTICATION<\/code><\/td><\/tr><tr><td><code>components<\/code><\/td><td>En la pr\u00e1ctica, s\u00ed<\/td><td><code>HEADER<\/code>, <code>BODY<\/code>, <code>FOOTER<\/code> y <code>BUTTONS<\/code><\/td><\/tr><tr><td><code>parameter_format<\/code><\/td><td>No<\/td><td><code>POSITIONAL<\/code> (<code>{{1}}<\/code>) o <code>NAMED<\/code> (<code>{{nombre}}<\/code>)<\/td><\/tr><tr><td><code>message_send_ttl_seconds<\/code><\/td><td>No<\/td><td>Tiempo de vida del mensaje enviado<\/td><\/tr><tr><td><code>library_template_name<\/code><\/td><td>No<\/td><td>Crea a partir de un modelo de la biblioteca de Meta<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>El nombre no es \u00fanico: puedes tener <code>pedido_enviado<\/code> en <code>es_MX<\/code> y en <code>pt_BR<\/code>, y cada combinaci\u00f3n nombre + idioma es una plantilla con ID propio. La respuesta de la creaci\u00f3n trae tres campos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"id\": \"1252715608684590\",\n  \"status\": \"PENDING\",\n  \"category\": \"UTILITY\"\n}<\/code><\/pre>\n\n\n\n<p>Guarda el <code>id<\/code>. Es la clave para consultar, editar y eliminar solo ese idioma.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ejemplo 1: utilidad con variables posicionales<\/h2>\n\n\n\n<p>Cada variable necesita un valor de ejemplo; sin eso, la creaci\u00f3n falla. En el cuerpo, los ejemplos van en <code>example.body_text<\/code>, un arreglo dentro de otro arreglo, en el orden de las variables.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl -X POST \"https:\/\/graph.facebook.com\/v26.0\/&lt;WABA_ID&gt;\/message_templates\" \\\n  -H \"Authorization: Bearer &lt;TOKEN&gt;\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"name\": \"pedido_enviado\",\n    \"language\": \"es_MX\",\n    \"category\": \"UTILITY\",\n    \"components\": [\n      {\n        \"type\": \"HEADER\",\n        \"format\": \"TEXT\",\n        \"text\": \"Pedido {{1}} enviado\",\n        \"example\": { \"header_text\": [\"#4821\"] }\n      },\n      {\n        \"type\": \"BODY\",\n        \"text\": \"Hola, {{1}}. Tu pedido va en camino y deber\u00eda llegar a m\u00e1s tardar el {{2}}. N\u00famero de gu\u00eda: {{3}}.\",\n        \"example\": { \"body_text\": [[\"Ana\", \"05\/11\", \"MX123456789\"]] }\n      },\n      {\n        \"type\": \"FOOTER\",\n        \"text\": \"Responde este mensaje si necesitas ayuda\"\n      }\n    ]\n  }'<\/code><\/pre>\n\n\n\n<p>El encabezado de texto acepta una sola variable. Su ejemplo va en <code>header_text<\/code> (arreglo simple) y el del cuerpo en <code>body_text<\/code> (arreglo de arreglos). Confundir uno con otro es un error frecuente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ejemplo 2: variables con nombre<\/h2>\n\n\n\n<p>Con <code>parameter_format: \"NAMED\"<\/code>, las variables tienen nombre en lugar de n\u00famero, y los ejemplos pasan a <code>body_text_named_params<\/code> (en el encabezado, <code>header_text_named_params<\/code>), cada uno con <code>param_name<\/code> y <code>example<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"name\": \"factura_disponible\",\n  \"language\": \"es_MX\",\n  \"category\": \"UTILITY\",\n  \"parameter_format\": \"NAMED\",\n  \"components\": [\n    {\n      \"type\": \"BODY\",\n      \"text\": \"Hola, {{primer_nombre}}. Tu factura {{numero_factura}} vence el {{vencimiento}}.\",\n      \"example\": {\n        \"body_text_named_params\": [\n          { \"param_name\": \"primer_nombre\", \"example\": \"Carlos\" },\n          { \"param_name\": \"numero_factura\", \"example\": \"2026-10-0193\" },\n          { \"param_name\": \"vencimiento\", \"example\": \"10\/11\/2026\" }\n        ]\n      }\n    }\n  ]\n}<\/code><\/pre>\n\n\n\n<p>Las variables con nombre hacen el env\u00edo m\u00e1s legible y evitan cambiar <code>{{2}}<\/code> por <code>{{3}}<\/code> cuando alguien reescribe el texto. En los ejemplos de Meta, los nombres usan min\u00fasculas y guion bajo; sigue el mismo patr\u00f3n. El formato tambi\u00e9n vale para el env\u00edo: una plantilla <code>NAMED<\/code> se env\u00eda con <code>parameter_name<\/code> en cada par\u00e1metro, como mostramos en <a href=\"https:\/\/vectalk.com.br\/blog\/es\/enviar-plantilla-api-whatsapp\/\">c\u00f3mo enviar una plantilla por la API<\/a>.<\/p>\n\n\n\n<p>Un recordatorio de factura de tu propio cliente, como el del ejemplo, es utilidad. Cobrar deudas en nombre de terceros est\u00e1 prohibido por la Pol\u00edtica de Mensajer\u00eda Comercial, en cualquier categor\u00eda.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ejemplo 3: encabezado con imagen, video o documento<\/h2>\n\n\n\n<p>Para un encabezado multimedia, el ejemplo no es una URL: es un <strong>handle<\/strong> generado por la Resumable Upload API de la Graph API. Son dos llamadas, y la primera usa el <strong>App ID<\/strong> de tu app de Meta, no el WABA ID.<\/p>\n\n\n\n<p>Paso 1, abrir la sesi\u00f3n de carga:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl -X POST \"https:\/\/graph.facebook.com\/v26.0\/&lt;APP_ID&gt;\/uploads?file_name=banner.jpg&amp;file_length=184320&amp;file_type=image\/jpeg\" \\\n  -H \"Authorization: Bearer &lt;TOKEN&gt;\"<\/code><\/pre>\n\n\n\n<p>La respuesta trae <code>{\"id\": \"upload:&lt;UPLOAD_SESSION_ID&gt;\"}<\/code>. Paso 2, enviar el archivo binario a esa sesi\u00f3n:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl -X POST \"https:\/\/graph.facebook.com\/v26.0\/upload:&lt;UPLOAD_SESSION_ID&gt;\" \\\n  -H \"Authorization: OAuth &lt;TOKEN&gt;\" \\\n  -H \"file_offset: 0\" \\\n  --data-binary @banner.jpg<\/code><\/pre>\n\n\n\n<p>F\u00edjate en el encabezado <code>Authorization: OAuth<\/code>, tal como aparece en la documentaci\u00f3n. La respuesta trae <code>{\"h\": \"4::aW...\"}<\/code>, y ese valor va en <code>example.header_handle<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"type\": \"HEADER\",\n  \"format\": \"IMAGE\",\n  \"example\": { \"header_handle\": [\"4::aW...\"] }\n}<\/code><\/pre>\n\n\n\n<p>La Resumable Upload API acepta <code>application\/pdf<\/code>, <code>image\/jpeg<\/code>, <code>image\/jpg<\/code>, <code>image\/png<\/code> y <code>video\/mp4<\/code>. En <code>format<\/code> usa <code>IMAGE<\/code>, <code>VIDEO<\/code> o <code>DOCUMENT<\/code> (el formato <code>GIF<\/code> existe solo para la Marketing Messages API). El archivo de ejemplo es solo para la revisi\u00f3n: en el env\u00edo mandas el archivo real de cada destinatario.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ejemplo 4: marketing con botones<\/h2>\n\n\n\n<p>Los botones van en un \u00fanico componente <code>BUTTONS<\/code>. Esta plantilla de campa\u00f1a combina URL con sufijo din\u00e1mico, c\u00f3digo de cup\u00f3n y respuesta r\u00e1pida:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"name\": \"cupon_buen_fin\",\n  \"language\": \"es_MX\",\n  \"category\": \"MARKETING\",\n  \"components\": [\n    {\n      \"type\": \"BODY\",\n      \"text\": \"{{1}}, lleg\u00f3 el Buen Fin: {{2}} de descuento en toda la tienda hasta el domingo.\",\n      \"example\": { \"body_text\": [[\"Marina\", \"20%\"]] }\n    },\n    {\n      \"type\": \"BUTTONS\",\n      \"buttons\": [\n        {\n          \"type\": \"URL\",\n          \"text\": \"Ver ofertas\",\n          \"url\": \"https:\/\/tienda.ejemplo.com.mx\/ofertas?c={{1}}\",\n          \"example\": [\"bf2026\"]\n        },\n        { \"type\": \"COPY_CODE\", \"example\": \"BUENFIN20\" },\n        { \"type\": \"QUICK_REPLY\", \"text\": \"No m\u00e1s promociones\" }\n      ]\n    }\n  ]\n}<\/code><\/pre>\n\n\n\n<p>La URL acepta una variable, siempre al final. El ejemplo de la URL es un arreglo; el de <code>COPY_CODE<\/code> es un string. Si mezclas respuestas r\u00e1pidas con otros tipos de bot\u00f3n, deben ir agrupadas (todas antes o todas despu\u00e9s de las dem\u00e1s); si no, la API devuelve error. Las tarjetas con imagen y bot\u00f3n usan otro formato, la plantilla carrusel.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">L\u00edmites de los componentes<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Elemento<\/th><th>L\u00edmite<\/th><\/tr><\/thead><tbody><tr><td>Texto del encabezado<\/td><td>60 caracteres, 1 variable<\/td><\/tr><tr><td>Cuerpo<\/td><td>1.024 caracteres<\/td><\/tr><tr><td>Pie de p\u00e1gina<\/td><td>60 caracteres<\/td><\/tr><tr><td>Texto de bot\u00f3n (URL, tel\u00e9fono, respuesta r\u00e1pida)<\/td><td>25 caracteres<\/td><\/tr><tr><td>Ejemplo de c\u00f3digo de cup\u00f3n<\/td><td>20 caracteres<\/td><\/tr><tr><td>URL del bot\u00f3n<\/td><td>2.000 caracteres, 1 variable<\/td><\/tr><tr><td>Botones en total<\/td><td>10<\/td><\/tr><tr><td>Botones de URL<\/td><td>2<\/td><\/tr><tr><td>Botones de tel\u00e9fono<\/td><td>1<\/td><\/tr><tr><td>Botones de copiar c\u00f3digo<\/td><td>1<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>La documentaci\u00f3n advierte adem\u00e1s que las plantillas con 4 o m\u00e1s botones, o con respuesta r\u00e1pida junto a otro tipo de bot\u00f3n, no se ven en WhatsApp para escritorio. No uses Markdown en el encabezado de texto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Categor\u00eda: qu\u00e9 pasa si te equivocas<\/h2>\n\n\n\n<p>La categor\u00eda que declaras no es la \u00faltima palabra. Desde el 9 de abril de 2025, si env\u00edas una plantilla como <code>UTILITY<\/code> y Meta concluye que es de marketing, se <strong>aprueba como <code>MARKETING<\/code><\/strong>, sin necesidad del antiguo <code>allow_category_change: true<\/code> (ese comportamiento pas\u00f3 a ser el predeterminado). En otros casos, la plantilla vuelve <code>REJECTED<\/code> con el motivo <code>INCORRECT_CATEGORY<\/code>.<\/p>\n\n\n\n<p>Meta tambi\u00e9n revisa plantillas ya aprobadas. Antes de cambiar la categor\u00eda de una, dispara el webhook <code>template_category_update<\/code> con el campo <code>correct_category<\/code>; despu\u00e9s del cambio, el evento trae <code>previous_category<\/code> y <code>new_category<\/code>. Para cambios de utilidad a marketing, la documentaci\u00f3n habla de un aviso con 1 d\u00eda de anticipaci\u00f3n, que no se da a empresas ya advertidas por uso indebido. Tienes 60 d\u00edas para apelar en Business Support Home.<\/p>\n\n\n\n<p>La diferencia de precio hace que valga la pena acertar. En Brasil, desde el 1\/10\/2026, un mensaje de marketing cuesta R$ 0,3217 (reales brasile\u00f1os) contra R$ 0,0350 uno de utilidad; las tarifas de tu pa\u00eds est\u00e1n en la lista de precios de Meta. Lee <a href=\"https:\/\/vectalk.com.br\/blog\/es\/categorias-plantillas-whatsapp\/\">c\u00f3mo Meta clasifica las plantillas<\/a> antes de automatizar la creaci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Consultar el estado<\/h2>\n\n\n\n<p>Para una plantilla espec\u00edfica, pide los campos que te interesan:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl \"https:\/\/graph.facebook.com\/v26.0\/&lt;TEMPLATE_ID&gt;?fields=name,language,status,category,rejected_reason,quality_score\" \\\n  -H \"Authorization: Bearer &lt;TOKEN&gt;\"<\/code><\/pre>\n\n\n\n<p>Para listar, usa <code>GET \/&lt;WABA_ID&gt;\/message_templates<\/code>. Sin <code>fields<\/code>, la respuesta trae <code>name<\/code>, <code>parameter_format<\/code>, <code>components<\/code>, <code>language<\/code>, <code>status<\/code>, <code>category<\/code>, <code>sub_category<\/code> e <code>id<\/code>. Puedes filtrar y paginar:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl \"https:\/\/graph.facebook.com\/v26.0\/&lt;WABA_ID&gt;\/message_templates?fields=name,status,category&amp;status=rejected&amp;limit=50\" \\\n  -H \"Authorization: Bearer &lt;TOKEN&gt;\"<\/code><\/pre>\n\n\n\n<p>La respuesta trae <code>data<\/code> y <code>paging<\/code>, con los cursores <code>before<\/code> y <code>after<\/code> y la URL <code>next<\/code>. Sigue <code>next<\/code> hasta que ya no exista.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Recibir cambios de estado por webhook<\/h2>\n\n\n\n<p>Consultar en bucle funciona, pero lo correcto es suscribir el webhook de tu app al campo <code>message_template_status_update<\/code>. El evento llega con <code>field: \"message_template_status_update\"<\/code> y, en <code>value<\/code>, los campos <code>event<\/code>, <code>message_template_id<\/code>, <code>message_template_name<\/code>, <code>message_template_language<\/code>, <code>message_template_category<\/code> y <code>reason<\/code>. Un ejemplo con valores ilustrativos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"object\": \"whatsapp_business_account\",\n  \"entry\": [{\n    \"id\": \"&lt;WABA_ID&gt;\",\n    \"time\": 1761730000,\n    \"changes\": [{\n      \"field\": \"message_template_status_update\",\n      \"value\": {\n        \"event\": \"REJECTED\",\n        \"message_template_id\": 1252715608684590,\n        \"message_template_name\": \"cupon_buen_fin\",\n        \"message_template_language\": \"es_MX\",\n        \"message_template_category\": \"MARKETING\",\n        \"reason\": \"INVALID_FORMAT\",\n        \"rejection_info\": {\n          \"reason\": \"...\",\n          \"recommendation\": \"...\"\n        }\n      }\n    }]\n  }]\n}<\/code><\/pre>\n\n\n\n<p>Los valores de <code>event<\/code> m\u00e1s \u00fatiles para automatizar:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><code>event<\/code><\/th><th>Qu\u00e9 hacer<\/th><\/tr><\/thead><tbody><tr><td><code>APPROVED<\/code><\/td><td>Habilitar la plantilla en tu sistema<\/td><\/tr><tr><td><code>REJECTED<\/code><\/td><td>Leer <code>reason<\/code> (y <code>rejection_info<\/code> en casos de <code>INVALID_FORMAT<\/code>), corregir y editar<\/td><\/tr><tr><td><code>PAUSED<\/code> \/ <code>FLAGGED<\/code><\/td><td>Avisar al equipo; la plantilla tiene calidad baja<\/td><\/tr><tr><td><code>DISABLED<\/code><\/td><td>Dejar de usarla; <code>disable_info<\/code> trae la fecha<\/td><\/tr><tr><td><code>REINSTATED<\/code> \/ <code>UNARCHIVED<\/code><\/td><td>Volver a habilitarla<\/td><\/tr><tr><td><code>ARCHIVED<\/code><\/td><td>Archivada por inactividad; se elimina en 28 d\u00edas si no se desarchiva<\/td><\/tr><tr><td><code>LIMIT_EXCEEDED<\/code><\/td><td>La cuenta lleg\u00f3 al l\u00edmite de plantillas<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Los motivos de <code>reason<\/code> incluyen <code>INCORRECT_CATEGORY<\/code>, <code>TAG_CONTENT_MISMATCH<\/code>, <code>INVALID_FORMAT<\/code>, <code>PROMOTIONAL<\/code>, <code>ABUSIVE_CONTENT<\/code> y <code>SCAM<\/code>. Las correcciones m\u00e1s comunes est\u00e1n en <a href=\"https:\/\/vectalk.com.br\/blog\/es\/plantilla-rechazada-whatsapp\/\">plantilla rechazada: motivos y c\u00f3mo corregir<\/a>, y las pausas en <a href=\"https:\/\/vectalk.com.br\/blog\/es\/plantilla-pausada-whatsapp\/\">plantilla pausada o desactivada<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Editar una plantilla<\/h2>\n\n\n\n<p>La edici\u00f3n es un <code>POST<\/code> al ID de la plantilla, y el arreglo <code>components<\/code> que env\u00edas <strong>reemplaza todos los componentes<\/strong>. No se puede editar un componente aislado: manda la plantilla completa.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl -X POST \"https:\/\/graph.facebook.com\/v26.0\/&lt;TEMPLATE_ID&gt;\" \\\n  -H \"Authorization: Bearer &lt;TOKEN&gt;\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"components\": [\n      {\n        \"type\": \"BODY\",\n        \"text\": \"Hola, {{1}}. Tu pedido va en camino y llega a m\u00e1s tardar el {{2}}. Gu\u00eda: {{3}}.\",\n        \"example\": { \"body_text\": [[\"Ana\", \"05\/11\", \"MX123456789\"]] }\n      }\n    ]\n  }'<\/code><\/pre>\n\n\n\n<p>La respuesta es <code>{\"success\": true}<\/code>. Las reglas de la p\u00e1gina de gesti\u00f3n de plantillas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Se pueden editar plantillas <code>APPROVED<\/code>, <code>REJECTED<\/code> o <code>PAUSED<\/code> (la referencia de la API menciona aprobadas y rechazadas).<\/li>\n\n\n<li>Los campos editables son categor\u00eda, componentes y tiempo de vida, pero <strong>la categor\u00eda de una plantilla aprobada no se puede editar<\/strong>.<\/li>\n\n\n<li>Una plantilla aprobada se puede editar <strong>como m\u00e1ximo una vez cada 24 horas y hasta 10 veces en 30 d\u00edas<\/strong>. Las rechazadas y pausadas no tienen ese l\u00edmite.<\/li>\n\n\n<li>Despu\u00e9s de editarse, una plantilla aprobada o pausada vuelve a revisi\u00f3n; si la pasa, sigue aprobada.<\/li>\n\n<\/ul>\n\n\n\n<p>Si necesitas cambiar el nombre, el idioma o la categor\u00eda de una plantilla aprobada, crea una plantilla nueva.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Eliminar plantillas<\/h2>\n\n\n\n<p>El borrado usa el endpoint de listado con <code>DELETE<\/code>. Hay tres formas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\"># Borra TODOS los idiomas con ese nombre\ncurl -X DELETE \"https:\/\/graph.facebook.com\/v26.0\/&lt;WABA_ID&gt;\/message_templates?name=pedido_enviado\" \\\n  -H \"Authorization: Bearer &lt;TOKEN&gt;\"\n\n# Borra solo la plantilla con ese ID (un idioma)\ncurl -X DELETE \"https:\/\/graph.facebook.com\/v26.0\/&lt;WABA_ID&gt;\/message_templates?hsm_id=1252715608684590&amp;name=pedido_enviado\" \\\n  -H \"Authorization: Bearer &lt;TOKEN&gt;\"<\/code><\/pre>\n\n\n\n<p>La tercera es <code>hsm_ids<\/code>, con un arreglo JSON de hasta 100 IDs. No se puede combinar con <code>name<\/code> ni con <code>hsm_id<\/code>, y un solo ID inv\u00e1lido hace fallar toda la solicitud.<\/p>\n\n\n\n<p>Qu\u00e9 pasa despu\u00e9s:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Los mensajes ya enviados y a\u00fan no entregados dejan la plantilla en <code>PENDING_DELETION<\/code>, y WhatsApp intenta entregarlos durante 30 d\u00edas.<\/li>\n\n\n<li>El nombre de una plantilla aprobada eliminada <strong>no se puede reutilizar durante 30 d\u00edas<\/strong>.<\/li>\n\n\n<li>Las plantillas desactivadas (<code>DISABLED<\/code>) no se pueden eliminar.<\/li>\n\n\n<li>Eliminar un nombre que no existe devuelve error.<\/li>\n\n<\/ul>\n\n\n\n<p>Antes de correr una limpieza, recuerda que Meta archiva las plantillas sin uso durante 12 meses y programa su eliminaci\u00f3n 28 d\u00edas despu\u00e9s. A veces la limpieza manual ni siquiera hace falta.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Errores comunes al automatizar<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Falta un ejemplo<\/strong>: cada variable necesita uno, incluida la de la URL del bot\u00f3n.<\/li>\n\n\n<li><strong><code>header_text<\/code> como arreglo de arreglos<\/strong>, o <code>body_text<\/code> como arreglo simple: los formatos son distintos.<\/li>\n\n\n<li><strong>Una URL en <code>header_handle<\/code><\/strong>: el ejemplo multimedia es el handle de la Resumable Upload API.<\/li>\n\n\n<li><strong>WABA ID en la carga<\/strong>: la sesi\u00f3n de carga se abre con el App ID.<\/li>\n\n\n<li><strong>Token sin <code>whatsapp_business_management<\/code><\/strong>: puede listar o crear, pero el borrado falla con c\u00f3digo 200.<\/li>\n\n\n<li><strong>M\u00e1s de 100 creaciones por hora<\/strong> en una cuenta de mensajes.<\/li>\n\n\n<li><strong>Recrear con el mismo nombre justo despu\u00e9s de borrar<\/strong> una aprobada: espera 30 d\u00edas o usa otro nombre.<\/li>\n\n\n<li><strong>Editar una aprobada dos veces el mismo d\u00eda<\/strong>: la segunda edici\u00f3n choca con el l\u00edmite de 24 horas.<\/li>\n\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo hacerlo con Vectalk<\/h2>\n\n\n\n<p>Vectalk es un proxy de la <a href=\"https:\/\/vectalk.com.br\/blog\/es\/api-oficial-de-whatsapp\/\">API oficial de WhatsApp<\/a>, y las mismas operaciones est\u00e1n en su API, con token de instancia (el WABA ID se resuelve con el token, as\u00ed que no va en la URL):<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Operaci\u00f3n<\/th><th>Ruta en Vectalk<\/th><\/tr><\/thead><tbody><tr><td>Listar o filtrar por nombre<\/td><td><code>GET https:\/\/apis.vectalk.com.br\/api\/templates?name=pedido_enviado<\/code><\/td><\/tr><tr><td>Crear<\/td><td><code>POST https:\/\/apis.vectalk.com.br\/api\/templates<\/code><\/td><\/tr><tr><td>Editar (solo <code>APPROVED<\/code> o <code>REJECTED<\/code>)<\/td><td><code>POST https:\/\/apis.vectalk.com.br\/api\/templates\/{templateId}<\/code><\/td><\/tr><tr><td>Eliminar por nombre<\/td><td><code>DELETE https:\/\/apis.vectalk.com.br\/api\/templates?name=pedido_enviado<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>El cuerpo de la creaci\u00f3n usa los mismos campos de Meta (<code>name<\/code>, <code>language<\/code>, <code>category<\/code>, <code>components<\/code>), y la respuesta trae <code>id<\/code>, <code>status: \"PENDING\"<\/code> y <code>category<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl -X POST https:\/\/apis.vectalk.com.br\/api\/templates \\\n  -H \"Authorization: Bearer &lt;TOKEN_DE_INSTANCIA&gt;\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"name\": \"pedido_enviado\",\n    \"language\": \"es_MX\",\n    \"category\": \"UTILITY\",\n    \"components\": [\n      {\n        \"type\": \"BODY\",\n        \"text\": \"Hola, {{1}}. Tu pedido va en camino y deber\u00eda llegar a m\u00e1s tardar el {{2}}.\",\n        \"example\": { \"body_text\": [[\"Ana\", \"05\/11\"]] }\n      }\n    ]\n  }'<\/code><\/pre>\n\n\n\n<p>Los tokens de organizaci\u00f3n no acceden a plantillas; crea un token vinculado a la instancia en <strong>Configuraci\u00f3n \u2192 API Tokens<\/strong>. Si prefieres no escribir JSON, el panel tiene la secci\u00f3n de plantillas con la Biblioteca de Modelos. Los detalles de cada ruta est\u00e1n en la <a href=\"https:\/\/docs.vectalk.com.br\/api-reference\/templates\/create\">documentaci\u00f3n de plantillas de Vectalk<\/a> (en portugu\u00e9s), y la cuenta se crea en <a href=\"https:\/\/apps.vectalk.com.br\/register\">apps.vectalk.com.br\/register<\/a>. Para ideas de texto por sector, mira los <a href=\"https:\/\/vectalk.com.br\/blog\/es\/ejemplos-plantillas-whatsapp\/\">60 ejemplos de plantillas<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Preguntas frecuentes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfCu\u00e1nto tarda Meta en aprobar una plantilla creada por API?<\/h3>\n\n\n\n<p>La p\u00e1gina de gesti\u00f3n de plantillas no fija un plazo \u00fanico. La plantilla nace <code>PENDING<\/code>, y te enteras del resultado por el webhook <code>message_template_status_update<\/code> o consultando <code>GET \/&lt;TEMPLATE_ID&gt;?fields=status<\/code>. No armes un flujo que dependa de una aprobaci\u00f3n inmediata.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfUso el WABA ID o el ID de la cuenta de mensajes?<\/h3>\n\n\n\n<p>Son el mismo n\u00famero. En la separaci\u00f3n del 23\/09\/2026, las cuentas de mensajes heredaron el ID de la WABA, y la documentaci\u00f3n de plantillas sigue usando <code>\/&lt;WABA_ID&gt;\/message_templates<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPuedo cambiar la categor\u00eda de una plantilla aprobada?<\/h3>\n\n\n\n<p>No con la edici\u00f3n: la documentaci\u00f3n dice que la categor\u00eda de una plantilla aprobada no se puede editar. Crea otra plantilla con la categor\u00eda correcta. Quien s\u00ed puede recategorizar una aprobada es Meta, y lo avisa con el webhook <code>template_category_update<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfC\u00f3mo creo la misma plantilla en varios idiomas?<\/h3>\n\n\n\n<p>Haz un <code>POST<\/code> por idioma con el mismo <code>name<\/code> y otro <code>language<\/code> (por ejemplo, <code>es_MX<\/code>, <code>es_AR<\/code> y <code>es_CO<\/code>). Cada una recibe su <code>id<\/code>. Para borrar un solo idioma, usa <code>name<\/code> + <code>hsm_id<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfEl cliente ve la imagen de ejemplo?<\/h3>\n\n\n\n<p>No. El handle de ejemplo sirve solo para la revisi\u00f3n de Meta. En el env\u00edo pasas el archivo real en el componente <code>header<\/code>, por link o media ID.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Fuentes oficiales consultadas el 29\/10\/2026:<\/strong> <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/overview\" target=\"_blank\" rel=\"noreferrer noopener\">Templates overview (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/template-management\" target=\"_blank\" rel=\"noreferrer noopener\">Template management (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/reference\/whatsapp-business-account\/message-template-api\" target=\"_blank\" rel=\"noreferrer noopener\">Message Templates API (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/components\" target=\"_blank\" rel=\"noreferrer noopener\">Template components (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/template-categorization\" target=\"_blank\" rel=\"noreferrer noopener\">Template categorization (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/webhooks\/reference\/message_template_status_update\" target=\"_blank\" rel=\"noreferrer noopener\">Webhook message_template_status_update (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/docs\/graph-api\/guides\/upload\" target=\"_blank\" rel=\"noreferrer noopener\">Resumable Upload API (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/account-model-evolution\/\" target=\"_blank\" rel=\"noreferrer noopener\">Actualizaciones de las cuentas de WhatsApp Business (Meta)<\/a>, <a href=\"https:\/\/docs.vectalk.com.br\/api-reference\/templates\/create\">Plantillas en la API de Vectalk<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Del POST a message_templates al borrado por hsm_id: payloads completos para crear, consultar, editar y eliminar plantillas de la API de WhatsApp sin abrir el Administrador.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[12],"tags":[],"class_list":["post-749","post","type-post","status-publish","format-standard","hentry","category-uncategorized-es"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Crear plantilla con la API de WhatsApp: gu\u00eda | Vectalk<\/title>\n<meta name=\"description\" content=\"C\u00f3mo crear una plantilla con la API de WhatsApp: message_templates, ejemplos obligatorios, categor\u00eda, webhook de estado, l\u00edmites de edici\u00f3n y borrado.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vectalk.com.br\/blog\/es\/crear-plantilla-api-whatsapp\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Crear plantilla con la API de WhatsApp: gu\u00eda | Vectalk\" \/>\n<meta property=\"og:description\" content=\"C\u00f3mo crear una plantilla con la API de WhatsApp: message_templates, ejemplos obligatorios, categor\u00eda, webhook de estado, l\u00edmites de edici\u00f3n y borrado.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vectalk.com.br\/blog\/es\/crear-plantilla-api-whatsapp\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Vectalk\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-29T13:22:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-29T13:22:39+00:00\" \/>\n<meta name=\"author\" content=\"wanderleyfcunha\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"wanderleyfcunha\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/crear-plantilla-api-whatsapp\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/crear-plantilla-api-whatsapp\\\/\"},\"author\":{\"name\":\"wanderleyfcunha\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"headline\":\"C\u00f3mo crear, editar y eliminar plantillas con la API de WhatsApp\",\"datePublished\":\"2026-10-29T13:22:20+00:00\",\"dateModified\":\"2026-10-29T13:22:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/crear-plantilla-api-whatsapp\\\/\"},\"wordCount\":2193,\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/crear-plantilla-api-whatsapp\\\/\",\"url\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/crear-plantilla-api-whatsapp\\\/\",\"name\":\"Crear plantilla con la API de WhatsApp: gu\u00eda | Vectalk\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#website\"},\"datePublished\":\"2026-10-29T13:22:20+00:00\",\"dateModified\":\"2026-10-29T13:22:39+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"description\":\"C\u00f3mo crear una plantilla con la API de WhatsApp: message_templates, ejemplos obligatorios, categor\u00eda, webhook de estado, l\u00edmites de edici\u00f3n y borrado.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/crear-plantilla-api-whatsapp\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/crear-plantilla-api-whatsapp\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/crear-plantilla-api-whatsapp\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C\u00f3mo crear, editar y eliminar plantillas con la API de WhatsApp\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/\",\"name\":\"Blog Vectalk\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\",\"name\":\"wanderleyfcunha\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g\",\"caption\":\"wanderleyfcunha\"},\"sameAs\":[\"https:\\\/\\\/vectalk.com.br\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Crear plantilla con la API de WhatsApp: gu\u00eda | Vectalk","description":"C\u00f3mo crear una plantilla con la API de WhatsApp: message_templates, ejemplos obligatorios, categor\u00eda, webhook de estado, l\u00edmites de edici\u00f3n y borrado.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vectalk.com.br\/blog\/es\/crear-plantilla-api-whatsapp\/","og_locale":"en_US","og_type":"article","og_title":"Crear plantilla con la API de WhatsApp: gu\u00eda | Vectalk","og_description":"C\u00f3mo crear una plantilla con la API de WhatsApp: message_templates, ejemplos obligatorios, categor\u00eda, webhook de estado, l\u00edmites de edici\u00f3n y borrado.","og_url":"https:\/\/vectalk.com.br\/blog\/es\/crear-plantilla-api-whatsapp\/","og_site_name":"Blog Vectalk","article_published_time":"2026-10-29T13:22:20+00:00","article_modified_time":"2026-10-29T13:22:39+00:00","author":"wanderleyfcunha","twitter_card":"summary_large_image","twitter_misc":{"Written by":"wanderleyfcunha","Est. reading time":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vectalk.com.br\/blog\/es\/crear-plantilla-api-whatsapp\/#article","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/es\/crear-plantilla-api-whatsapp\/"},"author":{"name":"wanderleyfcunha","@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"headline":"C\u00f3mo crear, editar y eliminar plantillas con la API de WhatsApp","datePublished":"2026-10-29T13:22:20+00:00","dateModified":"2026-10-29T13:22:39+00:00","mainEntityOfPage":{"@id":"https:\/\/vectalk.com.br\/blog\/es\/crear-plantilla-api-whatsapp\/"},"wordCount":2193,"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/vectalk.com.br\/blog\/es\/crear-plantilla-api-whatsapp\/","url":"https:\/\/vectalk.com.br\/blog\/es\/crear-plantilla-api-whatsapp\/","name":"Crear plantilla con la API de WhatsApp: gu\u00eda | Vectalk","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/#website"},"datePublished":"2026-10-29T13:22:20+00:00","dateModified":"2026-10-29T13:22:39+00:00","author":{"@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"description":"C\u00f3mo crear una plantilla con la API de WhatsApp: message_templates, ejemplos obligatorios, categor\u00eda, webhook de estado, l\u00edmites de edici\u00f3n y borrado.","breadcrumb":{"@id":"https:\/\/vectalk.com.br\/blog\/es\/crear-plantilla-api-whatsapp\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vectalk.com.br\/blog\/es\/crear-plantilla-api-whatsapp\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/vectalk.com.br\/blog\/es\/crear-plantilla-api-whatsapp\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vectalk.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"C\u00f3mo crear, editar y eliminar plantillas con la API de WhatsApp"}]},{"@type":"WebSite","@id":"https:\/\/vectalk.com.br\/blog\/#website","url":"https:\/\/vectalk.com.br\/blog\/","name":"Blog Vectalk","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vectalk.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b","name":"wanderleyfcunha","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g","caption":"wanderleyfcunha"},"sameAs":["https:\/\/vectalk.com.br\/blog"]}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/749","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/comments?post=749"}],"version-history":[{"count":1,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/749\/revisions"}],"predecessor-version":[{"id":752,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/749\/revisions\/752"}],"wp:attachment":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/media?parent=749"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/categories?post=749"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/tags?post=749"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}