← Twilio Developer KitCONTENT HISTORYWHAT CHANGED · RULE-BASED ANALYSIS
Update to Twilio Developer Kit
Snapshot Sep 30, 2026 · 22:50 UTC · version 0.2.2
Collection source: not recorded for this historical snapshot.
First saved snapshot
No earlier snapshot is available to establish a change.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"name": "twilio-content-template-builder",
"description": "Create, manage, and send message templates using Twilio's Content API. Covers template creation for WhatsApp, SMS, RCS, and MMS; variable usage; WhatsApp Meta approval; and sending templates via ContentSid. Use this skill when building structured messages that require pre-approval or consistent formatting across channels.",
"included_files": [
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 243
}
],
"skill_md_contents": "---\nname: twilio-content-template-builder\ndescription: >\n Create, manage, and send message templates using Twilio's Content API.\n Covers template creation for WhatsApp, SMS, RCS, and MMS; variable usage;\n WhatsApp Meta approval; and sending templates via ContentSid. Use this skill\n when building structured messages that require pre-approval or consistent\n formatting across channels.\n---\n\n## Overview\n\nThe Content API creates channel-agnostic templates identified by a `ContentSid` (`HX...`). WhatsApp templates must be approved by Meta before use outside the 24-hour service window.\n\n---\n\n## Prerequisites\n\n- Twilio account — New to Twilio? See `twilio-account-setup`\n- For WhatsApp templates: active WhatsApp sender\n — See `twilio-whatsapp-send-message` (sandbox) or `twilio-whatsapp-manage-senders` (production)\n- Environment variables:\n - `TWILIO_ACCOUNT_SID`\n - `TWILIO_AUTH_TOKEN`\n — See `twilio-iam-auth-setup` for credential setup and best practices\n- SDK: `pip install twilio` / `npm install twilio`\n\n---\n\n## Quickstart\n\n**Step 1 — Create a template via Console** (simplest)\n\nConsole > Messaging > Content Template Builder > Create new. Use `{{1}}`, `{{2}}` for variables. Save to get a `ContentSid`.\n\n**Step 2 — Send the template**\n\n**Python**\n```python\nimport os\nfrom twilio.rest import Client\n\nclient = Client(os.environ[\"TWILIO_ACCOUNT_SID\"], os.environ[\"TWILIO_AUTH_TOKEN\"])\n\nmessage = client.messages.create(\n from_=\"whatsapp:+14155238886\",\n to=\"whatsapp:+15558675310\",\n content_sid=\"HXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\n content_variables='{\"1\": \"Sarah\", \"2\": \"March 28\", \"3\": \"10:00 AM\"}'\n)\nprint(message.sid)\n```\n\n**Node.js**\n```node\nconst twilio = require(\"twilio\");\nconst client = twilio(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);\n\nconst message = await client.messages.create({\n from: \"whatsapp:+14155238886\",\n to: \"whatsapp:+15558675310\",\n contentSid: \"HXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\n contentVariables: JSON.stringify({ \"1\": \"Sarah\", \"2\": \"March 28\", \"3\": \"10:00 AM\" }),\n});\n```\n\n---\n\n## Key Patterns\n\n### Create a Template via API\n\n**Python**\n```python\ntemplate = client.content.v1.contents.create(\n friendly_name=\"appointment-reminder\",\n language=\"en\",\n types={\n \"twilio/text\": {\n \"body\": \"Hi {{1}}, your appointment is on {{2}} at {{3}}. Reply YES to confirm.\"\n }\n }\n)\nprint(template.sid) # HXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n```\n\n**Node.js**\n```node\nconst template = await client.content.v1.contents.create({\n friendlyName: \"appointment-reminder\",\n language: \"en\",\n types: {\n \"twilio/text\": {\n body: \"Hi {{1}}, your appointment is on {{2}} at {{3}}. Reply YES to confirm.\",\n },\n },\n});\nconsole.log(template.sid);\n```\n\n### Submit for WhatsApp Approval\n\n**Python**\n```python\napproval = client.content.v1 \\\n .contents(template.sid) \\\n .approval_requests \\\n .create(name=\"appointment-reminder\", category=\"UTILITY\")\nprint(approval.status) # PENDING\n```\n\n**Node.js**\n```node\nconst approval = await client.content.v1\n .contents(templateSid)\n .approvalRequests.create({ name: \"appointment-reminder\", category: \"UTILITY\" });\nconsole.log(approval.status);\n```\n\nCategories: `UTILITY`, `MARKETING`, `AUTHENTICATION`\n\n### Check Approval Status\n\n**Python**\n```python\ncontent = client.content.v1.contents(template.sid).fetch()\nprint(content.approval_requests.status) # APPROVED | REJECTED | PENDING\n```\n\n**Node.js**\n```node\nconst content = await client.content.v1.contents(templateSid).fetch();\nconsole.log(content.approvalRequests.status);\n```\n\nApproval typically takes under 1 hour.\n\n### List and Delete Templates\n\n**Python**\n```python\nfor template in client.content.v1.contents.list():\n print(template.sid, template.friendly_name, template.language)\n\nclient.content.v1.contents(\"HXxxxxxxxxxx\").delete()\n```\n\n**Node.js**\n```node\nconst templates = await client.content.v1.contents.list();\ntemplates.forEach(t => console.log(t.sid, t.friendlyName, t.language));\n\nawait client.content.v1.contents(\"HXxxxxxxxxxx\").remove();\n```\n\n### Supported Content Types\n\n| Type | `types` key | Channels |\n|------|------------|---------|\n| Plain text | `twilio/text` | All |\n| Media (image, video) | `twilio/media` | WhatsApp, MMS, RCS |\n| Quick reply buttons | `twilio/quick-reply` | WhatsApp, RCS |\n| Call-to-action buttons | `twilio/call-to-action` | WhatsApp, RCS |\n| List picker | `twilio/list-picker` | WhatsApp |\n| Card | `twilio/card` | RCS |\n| Carousel | `twilio/carousel` | RCS |\n\n### RCS Fallback Text\n\nWhen sending a rich RCS template (card, carousel, quick reply) via a Messaging Service with SMS fallback configured, Twilio uses the template's `twilio/text` body as the SMS fallback copy. Any template intended for RCS should include a `twilio/text` entry so recipients on non-RCS devices still receive a readable message.\n\n---\n\n## Variable Rules\n\n- Use `{{1}}`, `{{2}}` — sequential, no skipping\n- Max 100 variables per template\n- Provide sample values for WhatsApp submissions\n- Non-variable to variable ratio must be at least `(2x + 1) : x`\n\n---\n\n## CANNOT\n\n- **Cannot use WhatsApp templates without Meta approval** — Plan for up to 24 hours review time\n- **Cannot resubmit a rejected template with the same name** — Use a different name for resubmission\n- **Cannot include custom variables in AUTHENTICATION templates** — Fixed format required by Meta\n\n---\n\n## Next Steps\n\n- **Channel overview and onboarding guide:** `twilio-messaging-overview`\n- **Send WhatsApp messages:** `twilio-whatsapp-send-message`\n- **Register a production WhatsApp sender:** `twilio-whatsapp-manage-senders`\n"
}SHA-256: d726280b639602680c20597e2679c128bc24fb1e01b48c3b2a5ea8fb3691ca12