Skip to content

Updating visuals

If you see any images containing outdated UI, please bear with us.

We are updating all content as quickly as possible to mirror our new UI.

Twilio integration ​

Twilio is a platform for sending text messages, making phone calls and verifying phone numbers. This integration lets your WeWeb backend send SMS, MMS and WhatsApp messages, start and control voice calls, send one-time verification codes (two-factor authentication) and check them, and show your message and call history in a table.

It is a good fit when your app needs to reach people on their phone: an order update by SMS, a reminder call, or a code to confirm that a phone number really belongs to the person signing up.

Use cases ​

  • Send an SMS when an order ships or an appointment is confirmed.
  • Send a one-time code to a user's phone and check the code they type in, to verify their number or add a second sign-in step.
  • Send a WhatsApp message with the same action as an SMS.
  • Call a customer and play a recorded or spoken message.
  • Show the messages or calls of your Twilio account in a Data Grid, through a table.

Setup ​

Twilio connects with two values from your Twilio account: the Account SID (the ID of your account, starting with AC) and the Auth Token (its password).

  1. Sign in to the Twilio Console. On the home page, the Account Info panel shows your Account SID and Auth Token.
  2. Copy both values.
  3. In WeWeb, open Data & API → Integrations, select Twilio, and click Add Connection.
  4. Paste the Account SID and the Auth Token for each environment you use (Editor, Staging, Production). Staging only appears if your plan includes it.
  5. Click Create.
  6. Test the connection: in a backend workflow, add the Send Message action, set To to your own phone number, From to your Twilio phone number, and Body to a short text, then run the workflow. You should receive the SMS within a few seconds.
  7. To send codes with Start Verification, create a Verify service in the Twilio Console (Verify → Services → Create new). It then appears in the Verify Service dropdown of the verification actions.
A new Twilio connection, with the Connection Name, the Editor and Production tabs, and the Account SID and Auth Token fields

TESTING WITH A TRIAL ACCOUNT

A Twilio trial account can only send messages and make calls to numbers you have verified in the Twilio Console (Phone Numbers → Verified Caller IDs), and every SMS starts with "Sent from your Twilio trial account". Test with your own number first. Upgrade the account to reach anyone else.

USE THE SAME TWILIO ACCOUNT IN EVERY ENVIRONMENT

The Verify Service dropdown is always filled with the credentials of the Editor environment. Your workflows store the ID of the service you picked, and your live app looks for that same service with the Production credentials. If Production points to another Twilio account, the service isn't found there and verifications fail with a 404 error.

How Twilio works with WeWeb ​

A few Twilio concepts shape every action on this page.

Backend actions only ​

All Twilio actions run on your WeWeb server, in backend workflows, so your Auth Token never reaches your users' browsers. To send a message from a page, for example when a user clicks a button, create an API endpoint in Data & API that runs the Twilio action, then call that API from your interface.

Learn more about APIs →

Phone numbers in E.164 format ​

Twilio only accepts phone numbers in the international format called E.164: a +, the country code, then the number without spaces, dashes or the leading 0. For example, the French number 06 12 34 56 78 becomes +33612345678, and the US number (555) 123-4567 becomes +15551234567.

A number in any other format is refused with an error. If your users type their number in a form, ask for the country separately or check the format before sending.

Sender numbers and Messaging Services ​

Messages and calls are sent from a phone number you own in Twilio (Phone Numbers → Manage → Active numbers). For messages, you can send from a Messaging Service instead: a group of numbers that Twilio picks from for you. Its ID starts with MG and is in the Twilio Console under Messaging → Services.

SIDs ​

Twilio gives everything an ID called a SID, made of two letters and 32 characters. The two letters tell you what it is:

Starts withWhat it is
ACYour account
SM or MMA message
CAA call
MGA Messaging Service
VAA Verify service
VEA verification

Actions return the SID as sid. Keep it if you want to check a message or a call later with Fetch Message or Fetch Call.

Delivery happens after the action ​

Send Message returns as soon as Twilio has accepted the message, usually with status set to queued. Twilio then sends it in the background. To know whether it was delivered, run Fetch Message later with the message's sid, or set a Status Callback URL: Twilio calls that URL each time the status changes (queued, sent, delivered, undelivered, failed).

Calls work the same way: Make Call returns with status set to queued, and the call goes through ringing, in-progress and completed.

Sending WhatsApp messages ​

Send Message also sends WhatsApp messages. Add whatsapp: in front of both numbers: To becomes whatsapp:+15551234567, and From becomes your WhatsApp-enabled Twilio number, like whatsapp:+15557654321.

To try it before your WhatsApp sender is approved, use the Twilio Sandbox for WhatsApp (Messaging → Try it out → Send a WhatsApp message in the Twilio Console): join it from your phone, then send from the sandbox number.

WHATSAPP RULES

WhatsApp only lets businesses send free-form text to people who messaged them in the last 24 hours. Outside that window, WhatsApp requires an approved template, which Twilio handles on its side. See Twilio's WhatsApp documentation for the details.

Verifying phone numbers with one-time codes ​

Twilio Verify sends a one-time code by SMS, call, email or WhatsApp, and checks the code the user types in. Twilio creates the code, sends it and remembers it: you never store it yourself.

You need a Verify service first. In the Twilio Console, open Verify → Services and click Create new. Its name appears in the messages your users receive.

A verification flow uses two backend workflows (usually two API endpoints):

  1. Send the code: add Start Verification, pick your Verify Service, set To to the user's phone number and choose a Channel (for example SMS). The user receives a code.
  2. Check the code: add Check Verification with the same Verify Service and the same To, and set Code to what the user typed.
  3. Add a True/False split after Check Verification: the code is correct when status is approved (or valid is true).

A WRONG CODE IS NOT AN ERROR

When the user types a wrong code, Check Verification doesn't fail: it returns status set to pending and valid set to false. Always check status or valid before letting the user in.

A code expires after 10 minutes. Once a code has been approved or has expired, checking it again fails with a 404 error: send a new code with Start Verification.

If the Verify Service dropdown is empty, WeWeb shows No Verify services found. Please verify your Account SID and Auth Token, and create a Verify service in the Twilio Console. After you create a service, click the refresh icon next to the dropdown.

Making and controlling calls ​

Make Call calls a number from one of your Twilio numbers. When the person picks up, Twilio follows instructions written in TwiML, Twilio's language for calls. For example, this TwiML reads a sentence out loud:

xml
<Response><Say>Hello, your order is ready for pickup.</Say></Response>

You can give these instructions in two ways, with the Call Instructions option:

  • With TwiML URL, you give the address of a page that returns TwiML. Twilio fetches it when the call is answered. https://demo.twilio.com/docs/voice.xml is a demo page you can use for a first test.
  • With Inline TwiML, you type or bind the TwiML itself in the action.

While a call is live, Update Call can hang it up, cancel it before it is answered, or switch it to new instructions.

Learn more about TwiML in Twilio's documentation →

Using Twilio as a data source for tables ​

Besides calling Twilio actions from workflows, you can show the messages or calls of your Twilio account in a table. That table can be bound to table components (e.g. Data Grid) or fetched from the interface with the Table View: Fetch action.

Add a Twilio table ​

  1. In WeWeb, go to the Data & API tab, then open the Tables subtab → Add Table.
  2. Choose Twilio as the data source.
  3. Select your Twilio Connection.
  4. Select the Resource: Messages or Calls.
  5. Give the table a Name. WeWeb suggests Twilio Messages or Twilio Calls.
  6. Click Continue. The table is now available in your project.
The Setup Twilio step of Add Table, with the Connection, Resource and Name fields

Twilio tables only display data: to send a message or make a call, use the actions. They show the most recent records first, and each row has these columns:

ResourceColumns
Messagessid, accountSid, from, to, body, status, direction, numSegments, numMedia, price, priceUnit, messagingServiceSid, apiVersion, errorCode, errorMessage, dateSent, dateCreated, dateUpdated, uri, subresourceUris
Callssid, accountSid, from, to, status, direction, duration, price, priceUnit, startTime, endTime, dateCreated, dateUpdated, answeredBy, forwardedFrom, callerName, uri

Configure a view ​

Views define which records the table returns. On the Twilio table you added:

  1. Create or edit a view for that table.
  2. Open Configuration and set any of these optional filters:
    • For messages: To, From and Date Sent (a date like 2026-01-15).
    • For calls: To, From, Status and Start Time (a date like 2026-01-15).
    • For both: Limit, the number of records per page, from 1 to 1000 (50 by default).
  3. Click Save.
The Configuration popup of a Twilio Messages view, with the To, From, Date Sent and Limit filters

The Status filter of calls takes one of: Queued, Ringing, In Progress, Completed, Busy, Failed, No Answer, Canceled.

NEW VIEWS ARE PUBLIC

A new view starts as Public: anyone who can open your app can fetch it, and your messages hold your users' phone numbers. Click Public in the view header and switch it to Authenticated, or restrict it further. Learn more about view access →

Twilio only tells WeWeb how to get the next page, so use a Load more button rather than numbered pages. When everything is loaded, the load more action returns the error No more data to load.: put it inside a Try/Catch and use the Catch branch to show an end-of-list message.

Use the table in the interface ​

  • Bind a view: in the binding menu, under Table Views, select the view. Bind it to a Data Grid, repeating group, or list.
  • Table View: Fetch: in an interface workflow, add the Table View: Fetch action, choose your Twilio table view, and pass any parameters the view expects.

For the general pattern of tables, views, and fetching data, see Working with data and Table View: Fetch.

Common pitfalls (setup & usage) ​

The message never arrives on a trial account ​

A trial account can only send to numbers verified in the Twilio Console, and Twilio refuses other numbers with error 21608. Add the number under Phone Numbers → Verified Caller IDs, or upgrade your account.

A phone number is refused ​

Twilio needs the E.164 format: +, country code, number, no spaces. 0612345678 or +33 6 12 34 56 78 fail with error 21211. See Phone numbers in E.164 format.

The From number is refused ​

From must be a number you own in Twilio and that can send SMS (or calls, for Make Call). Twilio refuses any other number with error 21606 for messages. Copy it from Phone Numbers → Manage → Active numbers, in E.164 format.

Send Message says "queued" but the person got nothing ​

queued only means Twilio accepted the message. Run Fetch Message with its sid a little later: status and errorCode tell you why it wasn't delivered (for example undelivered because the carrier blocked it, or because the person replied STOP). The Messaging → Logs page of the Twilio Console shows the same information.

The code is always refused ​

Check Verification must use the same Verify Service and exactly the same To as Start Verification: +33612345678 and +33 6 12 34 56 78 are two different values. A code is also refused once it is older than 10 minutes or after too many attempts. A refused code returns status set to pending, not an error.

It works in the editor but not in the live app ​

The Production credentials belong to another Twilio account, which doesn't have the Verify service your workflow uses, or is still a trial account. See the tip above.

Update Call fails ​

Update Call only works on a call that is still live (queued, ringing or in-progress). Cancel only stops a call that hasn't been answered yet: to end an answered call, use Complete (hang up).

All Actions ​

Nine actions, grouped like in the action list: messages, calls and verification. Each action name links to its details below.

ActionDescription
Send MessageSend an SMS, MMS or WhatsApp message.
Fetch MessageGet one message and its delivery status.
List MessagesList the messages sent and received by your account.
Make CallCall a phone number and run TwiML instructions.
Fetch CallGet one call, its status and its duration.
List CallsList the calls made and received by your account.
Update CallHang up, cancel or redirect a live call.
Start VerificationSend a one-time code to a phone number or email.
Check VerificationCheck the code a user typed in.

Action details ​

Send Message ​

Send an SMS, MMS or WhatsApp message. Choose the sender with Send From: From Number shows the From field, Messaging Service shows Messaging Service SID. You need either a Body or at least one media URL.

The Send Message action, sending an SMS from a From Number with a To number and a Body, and the Media & Advanced section open

Inputs

Display KeyExample InputDescriptionRestrictions
To+15551234567Number to send the message to.Required. E.164 format, or whatsapp:+… for WhatsApp
From+15557654321Your Twilio number to send from.Required when Send From is From Number. E.164 format, or whatsapp:+… for WhatsApp
Messaging Service SIDMGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxMessaging Service to send from, instead of a number.Required when Send From is Messaging Service. Starts with MG
BodyYour order has shipped!Text of the message.Required unless Media URLs has at least one URL
Media URLs
Optional
["https://example.com/image.jpg"]Public links to images or files to attach, which turns the SMS into an MMS.List of URLs anyone can open. Under Media & Advanced
Status Callback URL
Optional
https://example.com/twilio/statusURL that Twilio calls each time the delivery status changes.Under Media & Advanced

Example output

json
{
  "sid": "SM1f0e8ae6ade43cb3c0ce4525424e404f",
  "accountSid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "to": "+15551234567",
  "from": "+15557654321",
  "body": "Your order has shipped!",
  "status": "queued",
  "direction": "outbound-api",
  "numSegments": "1",
  "numMedia": "0",
  "messagingServiceSid": null,
  "errorCode": null,
  "errorMessage": null,
  "price": null,
  "priceUnit": "USD",
  "dateCreated": "2026-10-16T10:00:00.000Z",
  "dateSent": null,
  "dateUpdated": "2026-10-16T10:00:00.000Z"
}

Documentation of API endpoint that powers action: Twilio API – Create a Message (POST /2010-04-01/Accounts/{AccountSid}/Messages.json)

Fetch Message ​

Get one message, with its current delivery status. Use it after Send Message to check whether the message was delivered.

Inputs

Display KeyExample InputDescriptionRestrictions
Message SIDSM1f0e8ae6ade43cb3c0ce4525424e404fSID of the message, as returned by Send Message or List Messages.Required. Starts with SM or MM

Example output

json
{
  "sid": "SM1f0e8ae6ade43cb3c0ce4525424e404f",
  "to": "+15551234567",
  "from": "+15557654321",
  "body": "Your order has shipped!",
  "status": "delivered",
  "direction": "outbound-api",
  "numSegments": "1",
  "errorCode": null,
  "errorMessage": null,
  "price": "-0.00790",
  "priceUnit": "USD",
  "dateCreated": "2026-10-16T10:00:00.000Z",
  "dateSent": "2026-10-16T10:00:01.000Z",
  "dateUpdated": "2026-10-16T10:00:03.000Z"
}

Documentation of API endpoint that powers action: Twilio API – Fetch a Message (GET /2010-04-01/Accounts/{AccountSid}/Messages/{Sid}.json)

List Messages ​

List the messages sent and received by your account, most recent first. Every filter is optional: with none, you get the latest messages.

Inputs

Display KeyExample InputDescriptionRestrictions
To
Optional
+15551234567Only messages sent to this number.E.164 format
From
Optional
+15557654321Only messages sent from this number.E.164 format
Date Sent
Optional
2026-01-15Only messages sent on this date.YYYY-MM-DD
Limit
Optional
50How many messages to return at most.Number. Default 50

Example output

json
[
  {
    "sid": "SM1f0e8ae6ade43cb3c0ce4525424e404f",
    "to": "+15551234567",
    "from": "+15557654321",
    "body": "Your order has shipped!",
    "status": "delivered",
    "direction": "outbound-api",
    "dateSent": "2026-10-16T10:00:01.000Z"
  },
  {
    "sid": "SM9c2d1e0f3a4b5c6d7e8f9a0b1c2d3e4f",
    "to": "+15557654321",
    "from": "+15551234567",
    "body": "Thanks!",
    "status": "received",
    "direction": "inbound",
    "dateSent": "2026-10-16T10:05:12.000Z"
  }
]

direction tells you who sent the message: inbound for messages your number received, outbound-api for messages sent with Send Message.

Documentation of API endpoint that powers action: Twilio API – Read multiple Messages (GET /2010-04-01/Accounts/{AccountSid}/Messages.json)

Make Call ​

Call a phone number from one of your Twilio numbers. When the call is answered, Twilio runs the TwiML instructions you give with Call Instructions: TwiML URL shows the TwiML URL field, Inline TwiML shows the Inline TwiML field.

Inputs

Display KeyExample InputDescriptionRestrictions
To+15551234567Number to call.Required. E.164 format
From+15557654321Your Twilio number to call from.Required. E.164 format. Must be a number you own in Twilio
TwiML URLhttps://demo.twilio.com/docs/voice.xmlAddress of a page that returns the TwiML to run when the call is answered.Required when Call Instructions is TwiML URL
Inline TwiML<Response><Say>Hello from WeWeb</Say></Response>TwiML to run when the call is answered.Required when Call Instructions is Inline TwiML
HTTP Method
Optional
POSTHow Twilio requests the TwiML URL.Valid: POST, GET. Under Advanced
Status Callback URL
Optional
https://example.com/twilio/call-statusURL that Twilio calls when the call ends.Under Advanced

Example output

json
{
  "sid": "CAe1644a7eed5088b159577c5802d8be38",
  "accountSid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "to": "+15551234567",
  "from": "+15557654321",
  "status": "queued",
  "direction": "outbound-api",
  "duration": null,
  "startTime": null,
  "endTime": null,
  "price": null,
  "priceUnit": "USD",
  "dateCreated": "2026-10-16T10:00:00.000Z"
}

Documentation of API endpoint that powers action: Twilio API – Create a Call (POST /2010-04-01/Accounts/{AccountSid}/Calls.json)

Fetch Call ​

Get one call, with its current status and, once it has ended, its duration.

Inputs

Display KeyExample InputDescriptionRestrictions
Call SIDCAe1644a7eed5088b159577c5802d8be38SID of the call, as returned by Make Call or List Calls.Required. Starts with CA

Example output

json
{
  "sid": "CAe1644a7eed5088b159577c5802d8be38",
  "to": "+15551234567",
  "from": "+15557654321",
  "status": "completed",
  "direction": "outbound-api",
  "duration": "42",
  "answeredBy": null,
  "price": "-0.01400",
  "priceUnit": "USD",
  "startTime": "2026-10-16T10:00:05.000Z",
  "endTime": "2026-10-16T10:00:47.000Z"
}

duration is in seconds.

Documentation of API endpoint that powers action: Twilio API – Fetch a Call (GET /2010-04-01/Accounts/{AccountSid}/Calls/{Sid}.json)

List Calls ​

List the calls made and received by your account, most recent first. Every filter is optional: with none, you get the latest calls.

Inputs

Display KeyExample InputDescriptionRestrictions
To
Optional
+15551234567Only calls to this number.E.164 format
From
Optional
+15557654321Only calls from this number.E.164 format
Status
Optional
CompletedOnly calls with this status.Valid: Queued, Ringing, In Progress, Completed, Busy, Failed, No Answer, Canceled. Can't be bound
Start Time
Optional
2026-01-15Only calls that started on this date.YYYY-MM-DD
Limit
Optional
50How many calls to return at most.Number. Default 50

Example output

json
[
  {
    "sid": "CAe1644a7eed5088b159577c5802d8be38",
    "to": "+15551234567",
    "from": "+15557654321",
    "status": "completed",
    "direction": "outbound-api",
    "duration": "42",
    "startTime": "2026-10-16T10:00:05.000Z",
    "endTime": "2026-10-16T10:00:47.000Z"
  }
]

Documentation of API endpoint that powers action: Twilio API – Read multiple Calls (GET /2010-04-01/Accounts/{AccountSid}/Calls.json)

Update Call ​

Change a call that is still live. Pick what to do in Action:

  • Choose Complete (hang up) to end the call.
  • Choose Cancel to stop a call that hasn't been answered yet.
  • Choose Redirect to URL to switch the call to the TwiML of another page, set in TwiML URL.
  • Choose Redirect to TwiML to switch the call to the TwiML you set in Inline TwiML.

Inputs

Display KeyExample InputDescriptionRestrictions
Call SIDCAe1644a7eed5088b159577c5802d8be38SID of the live call.Required. Starts with CA
ActionComplete (hang up)What to do with the call.Valid: Complete (hang up), Cancel, Redirect to URL, Redirect to TwiML. Default Complete (hang up). Can't be bound
TwiML URLhttps://demo.twilio.com/docs/voice.xmlAddress of a page that returns the new TwiML.Required when Action is Redirect to URL
Inline TwiML<Response><Say>Goodbye</Say></Response>New TwiML to run.Required when Action is Redirect to TwiML
HTTP Method
Optional
POSTHow Twilio requests the TwiML URL.Valid: POST, GET. Under Advanced, only shown with Redirect to URL

Example output

json
{
  "sid": "CAe1644a7eed5088b159577c5802d8be38",
  "to": "+15551234567",
  "from": "+15557654321",
  "status": "completed",
  "direction": "outbound-api",
  "duration": "18",
  "startTime": "2026-10-16T10:00:05.000Z",
  "endTime": "2026-10-16T10:00:23.000Z"
}

Documentation of API endpoint that powers action: Twilio API – Update a Call (POST /2010-04-01/Accounts/{AccountSid}/Calls/{Sid}.json)

Start Verification ​

Send a one-time code to a phone number or an email address, through a Twilio Verify service. See Verifying phone numbers with one-time codes for the full flow.

Inputs

Display KeyExample InputDescriptionRestrictions
Verify ServiceMy AppVerify service that sends the code, picked from the services of your Twilio account.Required. Can't be bound
To+15551234567Phone number or email address to send the code to.Required. E.164 format, or an email address with the Email channel
ChannelSMSHow to send the code.Required. Valid: SMS, Call, Email, WhatsApp. Can't be bound

Example output

json
{
  "sid": "VEXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "serviceSid": "VAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "accountSid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "to": "+15551234567",
  "channel": "sms",
  "status": "pending",
  "valid": false,
  "dateCreated": "2026-10-16T10:00:00.000Z",
  "dateUpdated": "2026-10-16T10:00:00.000Z"
}

EMAIL CODES

The Email channel needs extra setup in Twilio: an email integration with SendGrid on your Verify service. See Twilio's Verify email guide.

Documentation of API endpoint that powers action: Twilio API – Start a new Verification (POST /v2/Services/{ServiceSid}/Verifications)

Check Verification ​

Check the code a user typed in. The code is correct when status is approved and valid is true. A wrong code returns status set to pending, without an error.

Inputs

Display KeyExample InputDescriptionRestrictions
Verify ServiceMy AppVerify service the code was sent with.Required. Same service as in Start Verification. Can't be bound
To+15551234567Phone number or email address the code was sent to.Required. Exactly the same value as in Start Verification
Code123456Code the user typed in.Required

Example output

json
{
  "sid": "VEXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "serviceSid": "VAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "to": "+15551234567",
  "channel": "sms",
  "status": "approved",
  "valid": true,
  "dateCreated": "2026-10-16T10:00:00.000Z",
  "dateUpdated": "2026-10-16T10:01:30.000Z"
}

Documentation of API endpoint that powers action: Twilio API – Check a Verification (POST /v2/Services/{ServiceSid}/VerificationCheck)

Error handling ​

Errors from Twilio stop the workflow, and the workflow logs show Twilio's message, such as The 'To' number 0612345678 is not a valid phone number. Twilio also gives each error a number, like 21211, explained in Twilio's error dictionary.

When Send Message or Make Call fails inside a Try/Catch, the caught error also has errorCode (Twilio's number), status (the HTTP code) and moreInfo (a link to the error's page), so you can show a different message for each case.

Error code and typeReason
400 Bad RequestTwilio refused the values sent. Common Twilio codes: 21211 (invalid To number), 21606 (From isn't one of your numbers, or can't send SMS), 21608 (trial account sending to an unverified number), 21610 (the person replied STOP), 21220 (Update Call on a call that has already ended), 60200 (invalid value in a verification).
401 UnauthorizedThe Account SID or the Auth Token is wrong, or the token was changed in Twilio (code 20003).
404 Not FoundThe message, call or Verify service doesn't exist in this account (code 20404). For Check Verification, the code has already been approved, has expired, or was never sent to this To.
429 Too Many RequestsToo many requests at once (code 20429), or too many codes sent to or checked for the same number (60203 and 60202 for Verify). Wait and retry.
500, 503A Twilio-side error. Retry later.

FAQs ​

Where do I find my Account SID and Auth Token?

On the home page of the Twilio Console, in the Account Info panel. The Auth Token is hidden until you choose to show it.

Can I send a message from a page?

Not directly: Twilio actions only run in backend workflows. Create an API endpoint in Data & API that runs Send Message, and call it from your page's workflow. Protect it so only signed-in users can call it, or anyone could send messages with your Twilio account.

How do I know if a message was delivered?

Send Message returns queued. Run Fetch Message with the returned sid a little later, or set a Status Callback URL so Twilio tells you each time the status changes. delivered means it reached the phone.

How do I confirm a user's phone number?

Build two API endpoints: one that runs Start Verification with the number the user typed, and one that runs Check Verification with the code they received. When status is approved, save the number as confirmed, for example in your users table. See Verifying phone numbers with one-time codes.

How do I send WhatsApp messages?

Use Send Message and add whatsapp: in front of both To and From. See Sending WhatsApp messages.

Why is the Verify Service dropdown empty?

Your account has no Verify service yet, or the Editor credentials are wrong. Create a service in the Twilio Console under Verify → Services, then click the refresh icon next to the dropdown.

CONTINUE LEARNING

Twilio actions run in backend workflows. Learn how to build an API endpoint that your pages can call to send a message or a verification code.

Learn more about APIs →