
Twilio Email Send
- 98 installs
- 26 repo stars
- Updated July 29, 2026
- twilio/ai
A Twilio-native email delivery API using Basic Auth with Twilio credentials, supporting single/batch sends (max 10,000 recipients), Liquid personalization, and asynchronous operation polling for batch status tracking.
About
The Twilio Email Send skill enables developers to integrate Twilio's native email service into applications. It supports single sends, batch sends up to 10,000 recipients, Liquid-based personalization, and asynchronous operation tracking. Authentication uses standard Twilio credentials (Account SID + Auth Token or API Key SID + Secret), distinct from SendGrid. The API returns a 202 Accepted response with an operationId for polling delivery status. Maximum message size is 10MB including attachments. Verified sender domains are required for compliance with CAN-SPAM and GDPR regulations. Error handling covers rate limiting, authentication failures, and malformed payloads.
- Batch sends up to 10,000 recipients per request with async 202 Accepted response
- Liquid templating ({{variable}}) for dynamic personalization per recipient
- Operation tracking via polling operationLocation for status visibility
- Distinct from SendGrid - requires Twilio credentials, not SG. API keys
- Verified sender domain requirement for compliance and deliverability
Twilio Email Send by the numbers
- 98 all-time installs (skills.sh)
- +3 installs in the week ending Jul 27, 2026 (Skillselion tracking)
- Ranked #2,991 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
- Data as of Jul 30, 2026 (Skillselion catalog sync)
twilio-email-send capabilities & compatibility
- Capabilities
- post single and batch emails (max 10,000 recipie · liquid templating for dynamic content ({{variabl · per recipient variable injection · asynchronous operation submission with 202 accep · operation status polling via get operationlocati · html and plain text content · sender name and address configuration · error handling and validation
What twilio-email-send says it does
Use when the caller has Twilio credentials (Account SID + Auth Token or API Key SID + Secret) and needs to send email via comms.twilio.com/v1/Emails.
Covers single sends, batch sends up to 10,000 recipients, Liquid personalization, operation tracking, and error handling.
Always confirm recipients, subject, and content with the user before sending. Email is irreversible once delivered.
Do NOT use if the caller has a SendGrid API key (SG.-prefix) — use twilio-sendgrid-email-send instead.
npx skills add https://github.com/twilio/ai --skill twilio-email-sendAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 98 |
|---|---|
| repo stars | ★ 26 |
| Last updated | July 29, 2026 |
| Repository | twilio/ai ↗ |
What it does
Send single and batch emails (up to 10,000 recipients) via Twilio Email API with Liquid templating and operation tracking.
Who is it for?
Transactional email, batch communications, personalized multi-recipient campaigns, CRM integrations, and notification systems leveraging Twilio infrastructure.
Skip if: SendGrid API integrations (use twilio-sendgrid-email-send instead), synchronous delivery confirmation, Unicode sender addresses, or payloads exceeding 10MB.
When should I use this skill?
Caller has Twilio Account SID + Auth Token (or API Key SID + Secret) and needs to send single or batch emails with tracking; NOT when caller has SG.-prefix SendGrid keys.
What you get
Applications can deliver personalized emails to individuals and batches up to 10,000 recipients with confirmed operation status via polling, ensuring compliance-ready sender verification.
- 202 Accepted response with operationId and operationLocation URI
- Operation status resource (poll for batch processing progress)
- Delivery confirmation via operation tracking
By the numbers
- Maximum 10,000 recipients per single request
- Maximum 10MB message size including attachments
- Maximum 10,000 bytes combined tag length
Files
Overview
Agent safety: Always confirm recipients, subject, and content with the user before sending. Email is irreversible once delivered. Never send email autonomously without explicit user approval — especially for batch sends to multiple recipients.
Twilio Email is a separate product from SendGrid. Both send email, but they use different APIs, credentials, templating languages, and endpoints. If you have a SendGrid API key (SG.-prefix), use twilio-sendgrid-email-send instead.
| Twilio Email (this skill) | SendGrid | |
|---|---|---|
| Base URL | https://comms.twilio.com/v1/emails | https://api.sendgrid.com/v3/mail/send |
| Auth | Twilio Account SID + Auth Token (or API Key SID + Secret) | SendGrid API key (SG.-prefix) |
| Templating | Liquid ({{variable}}) | Handlebars ({{variable}}) |
| Max recipients/request | 10,000 | 1,000 |
| Max message size | 10MB (including attachments) | 30MB |
| Status tracking | Operation resource (poll operationLocation) | Event Webhooks (async POST) |
| Console | console.twilio.com | app.sendgrid.com |
---
Prerequisites
- A Twilio account — see
twilio-account-setupfor signup and credentials - A Verified Sender: an approved domain identity configured in the Twilio console that must match the
fromaddress domain - Compliance with regional anti-spam regulations (CAN-SPAM, GDPR)
For a complete setup guide, see the Email Onboarding guide in the Twilio console.
---
Authentication
The API uses Basic Authentication with either:
- Account SID + Auth Token
- API Key SID + API Key Secret
These are standard Twilio credentials — the same ones used for SMS, Voice, and other Twilio APIs.
---
Send a Simple Email
POST https://comms.twilio.com/v1/Emails
The endpoint is asynchronous — it returns 202 Accepted with an operationId, not a delivery confirmation.
curl -X POST "https://comms.twilio.com/v1/Emails" \
--header "Content-Type: application/json" \
--data '{
"from": {
"address": "support@example.com",
"name": "Support Team"
},
"to": [
{
"address": "john.doe@example.com",
"name": "John Doe"
}
],
"content": {
"subject": "Your subject line",
"html": "<p>Your message content in HTML format.</p>",
"text": "Your message content in plain text."
}
}' \
-u $TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKENResponse (202 Accepted):
{
"operationId": "...",
"operationLocation": "https://comms.twilio.com/v1/Emails/Operations/..."
}Poll operationLocation to track delivery status.
---
Batch Sending
Send the same message to multiple recipients in a single request by adding entries to the to array. Maximum 10,000 recipients per request.
{
"from": {
"address": "support@example.com",
"name": "Support Team"
},
"to": [
{
"address": "john.doe@example.com",
"name": "John Doe"
},
{
"address": "jane.smith@example.com",
"name": "Jane Smith"
}
],
"content": {
"subject": "Your subject line",
"html": "<p>Your message content in HTML format.</p>",
"text": "Your message content in plain text."
}
}---
Liquid Personalization
Use Liquid templating in the content.subject, content.html, and content.text fields. For each variable referenced (e.g. {{firstName}}), provide a matching key in the variables object for every recipient in the to array.
{
"from": {
"address": "noreply@example.com",
"name": "Support Team"
},
"to": [
{
"address": "alice@example.com",
"name": "Alice",
"variables": {"firstName": "Alice", "orderId": "123"}
},
{
"address": "bob@example.com",
"name": "Bob",
"variables": {"firstName": "Bob", "orderId": "456"}
}
],
"content": {
"subject": "Hi {{firstName}}, your order update",
"html": "<p>Hi {{firstName}}, order #{{orderId}} has shipped.</p>",
"text": "Hi {{firstName}}, order #{{orderId}} has shipped."
}
}Ensure every recipient has all referenced variables defined.
---
Operation Tracking
After submitting a send, use the Operation resource to monitor batch status.
1. Submit email via POST /v1/emails — response includes operationId and operationLocation 2. Poll status via GET to the operationLocation URI 3. The operation tracks progress for the entire batch
This is especially important for large recipient lists where processing is not instantaneous.
---
Error Codes
| Status Code | Description | Action |
|---|---|---|
| 202 | Accepted | Request accepted, Operation created. Poll operationLocation for status. |
| 400 | Bad Request | Malformed or ambiguous request content. Check JSON payload. |
| 401 | Unauthorized | Verify Account SID and Auth Token / API Key are correct. |
| 429 | Too Many Requests | Rate limited. Back off and retry. |
| 500 | Internal Server Error | Twilio server-side issue. Retry with backoff. |
| 503 | Service Unavailable | Temporarily unavailable. Retry after a short delay. |
Validation errors return as many issues as possible in a single response to help debug quickly.
---
CANNOT
- Cannot use SendGrid API keys — Twilio Email uses Twilio Account SID + Auth Token or API Key SID + Secret.
SG.-prefix keys do not work. Usetwilio-sendgrid-email-sendfor SendGrid. - Cannot send more than 10,000 recipients per request — Split into multiple requests for larger lists.
- Cannot exceed 10MB per message — Total size including attachments must be under 10MB (smaller than SendGrid's 30MB limit).
- Cannot use Unicode in the `from` field — Unicode encoding is not supported for sender addresses.
- Cannot use Handlebars templating — Twilio Email uses Liquid, not Handlebars. If you see
{{#if}}or{{#each}}, that's Handlebars/SendGrid syntax. - Cannot get synchronous delivery confirmation — The API is async.
202 Acceptedmeans queued, not delivered. Poll the Operation resource for status. - Tags total length cannot exceed 10,000 bytes — Combined length of all tags on a request is limited.
---
Next Steps
- Account setup and credentials:
twilio-account-setup - SendGrid email (separate product):
twilio-sendgrid-email-send - SMS sending:
twilio-sms-send-message
interface:
display_name: "Twilio Email Send"
short_description: "Send email using Twilio credentials via comms.twilio.com. Covers single and batch sends up to 10,000 recipients, Liquid personalization, and operation tracking."
icon_small: "./assets/icon-small.png"
icon_large: "./assets/icon-large.png"
brand_color: "#EF223A"
default_prompt: "How do I send email using my Twilio account?"
policy:
allow_implicit_invocation: true
Related skills
FAQ
How do I send batch emails to multiple recipients?
Add multiple objects to the `to` array in a single POST request. Maximum 10,000 recipients per request. Include unique `variables` for each recipient if using Liquid personalization ({{firstName}}, {{orderId}}, etc.).
Why does the API return 202 Accepted instead of a delivery confirmation?
Twilio Email is asynchronous. The 202 response includes `operationId` and `operationLocation`. Poll the `operationLocation` URI via GET to track batch processing status and individual recipient delivery outcomes.
I have a SendGrid API key (SG. prefix). Can I use this skill?
No. Twilio Email and SendGrid are separate products with different APIs, credentials, and templating languages. Use `twilio-sendgrid-email-send` for SendGrid keys. This skill requires Twilio Account SID + Auth Token or API Key SID + Secret.