vercel-labs/twilio
Emulated Twilio REST APIs for local development and testing. Use when the user needs to test Twilio Messaging, Verify, Voice, phone numbers, webhooks, status callbacks, inbound SMS simulation, or Twilio SDK integrations without hitting the real Twilio service.
npx skills add https://github.com/vercel-labs/emulate --skill twilio
Stateful Twilio REST emulation with seeded accounts, Auth Tokens, API keys, incoming phone numbers, Programmable Messaging, Messaging Services, Verify, basic Voice calls, Conversations REST resources, signed webhooks, local simulator routes, and an inspector.
npx emulate --service twilio
Default URL: http://localhost:4013 when all services are started, or http://localhost:4000 when Twilio is the only service.
TWILIO_ACCOUNT_SID=AC00000000000000000000000000000000
TWILIO_AUTH_TOKEN=twilio_test_auth_token
TWILIO_API_KEY=SK00000000000000000000000000000000
TWILIO_API_SECRET=twilio_test_api_secret
TWILIO_PHONE_NUMBER=+15551234567
TWILIO_VERIFY_SERVICE_SID=VA00000000000000000000000000000000
| Real Twilio URL | Emulator URL |
|-----------------|--------------|
| https://api.twilio.com/2010-04-01/... | $TWILIO_EMULATOR_URL/2010-04-01/... |
| https://messaging.twilio.com/v1/... | $TWILIO_EMULATOR_URL/messaging/v1/... |
| https://verify.twilio.com/v2/... | $TWILIO_EMULATOR_URL/verify/v2/... |
The official Node SDK builds absolute Twilio product URLs. In SDK tests, use a custom request client that rewrites those hosts to the emulator prefixes above.
HTTP Basic auth accepts either:
POST /2010-04-01/Accounts/{AccountSid}/Messages.json - create outbound messageGET /2010-04-01/Accounts/{AccountSid}/Messages.json - list messagesPOST /2010-04-01/Accounts/{AccountSid}/Calls.json - create outbound callPOST /verify/v2/Services/{ServiceSid}/Verifications - start verificationPOST /verify/v2/Services/{ServiceSid}/VerificationCheck - check verification codePOST /conversations/v1/Services/{ServiceSid}/Conversations - create ConversationPOST /conversations/v1/Services/{ServiceSid}/Conversations/{ConversationSid}/Participants - add participantPOST /conversations/v1/Services/{ServiceSid}/Conversations/{ConversationSid}/Messages - add messagePOST /_twilio/simulate/inbound-message - simulate inbound SMSPOST /_twilio/simulate/message-status - simulate message status callbackPOST /_twilio/simulate/inbound-call - simulate inbound call123456.CustomCode when creating a Verification to force a per-verification code.GET /_twilio/simulate/verification-code?To=...&ServiceSid=... with Basic auth to fetch the latest local code for an E2E test.POST /_twilio/simulate/verification-status with VerificationSid or To to force local Verify state.POST /_twilio/simulate/inbound-message to test inbound SMS webhooks.inbound_request_url before falling back to the phone number sms_url.POST /_twilio/simulate/message-status to test outbound status callbacks.No real SMS, MMS, WhatsApp, email, voice, carrier, compliance, billing, SendGrid, Studio, Flex, TaskRouter, Video, Sync, Segment, Conversations SDK websocket behavior, or complete TwiML interpreter behavior is implemented.
Take vercel-labs/twilio from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference npx.
Without those the skill loads but fails at the first command.