Skip to main content

Actions

The ballerinax/twilio package exposes the following clients:

ClientPurpose
ClientFull Twilio REST API access: messaging, voice calls, phone numbers, recordings, conferences, and account management.

Client

Full Twilio REST API access: messaging, voice calls, phone numbers, recordings, conferences, and account management.

Configuration

FieldTypeDefaultDescription
authAuthTokenConfig|ApiKeyConfigRequiredAuthentication configuration: either Auth Token or API Key based.
httpVersionHttpVersionHTTP_2_0HTTP protocol version.
http1SettingsClientHttp1Settings()Configurations for HTTP/1.x protocol.
http2SettingsClientHttp2Settings()Configurations for HTTP/2 protocol.
timeoutdecimal60Request timeout in seconds.
forwardedstring"disable"The choice of setting forwarded/x-forwarded header.
retryConfigRetryConfig()Retry configuration for failed requests.
responseLimitsResponseLimitConfigs()Configurations associated with inbound response size limits.
secureSocketClientSecureSocket()SSL/TLS configuration.
proxyProxyConfig()Proxy server configuration.
compressionCompressionCOMPRESSION_AUTOHTTP compression configuration.
circuitBreakerCircuitBreakerConfig()Circuit breaker configuration for fault tolerance.
poolConfigPoolConfiguration()HTTP connection pool configuration.
cacheCacheConfig()HTTP response cache configuration.
validationbooleantrueEnable/disable payload validation.

Initializing the client

Using Auth Token authentication:

import ballerinax/twilio;

configurable string accountSid = ?;
configurable string authToken = ?;

twilio:Client twilioClient = check new ({
auth: {
accountSid: accountSid,
authToken: authToken
}
});

Using API Key authentication:

import ballerinax/twilio;

configurable string accountSid = ?;
configurable string apiKey = ?;
configurable string apiSecret = ?;

twilio:Client twilioClient = check new ({
auth: {
accountSid: accountSid,
apiKey: apiKey,
apiSecret: apiSecret
}
});

Operations

Messaging

createMessage

Sends an SMS, MMS, or WhatsApp message.

Parameters:

NameTypeRequiredDescription
payloadCreateMessageRequestYesMessage details including To, From, Body, and optional MediaUrl.
accountSidstringNoAccount SID override. Defaults to the authenticated account.

Returns: Message|error

Sample code:

twilio:CreateMessageRequest messageRequest = {
To: "+1234567890",
From: "+0987654321",
Body: "Hello from Ballerina"
};

twilio:Message response = check twilioClient->createMessage(messageRequest);

Sample response:

{"sid": "SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "status": "queued", "to": "+1234567890", "from": "+0987654321", "body": "Hello from Ballerina", "num_segments": "1", "direction": "outbound-api"}
fetchMessage

Retrieves a message by its SID.

Parameters:

NameTypeRequiredDescription
sidstringYesThe Message SID.
accountSidstringNoAccount SID override.

Returns: Message|error

Sample code:

twilio:Message message = check twilioClient->fetchMessage("SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

Sample response:

{"sid": "SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "status": "delivered", "to": "+1234567890", "from": "+0987654321", "body": "Hello from Ballerina", "date_sent": "Mon, 10 Mar 2026 14:30:00 +0000"}
listMessage

Lists messages, optionally filtered by sender, recipient, or date.

Parameters:

NameTypeRequiredDescription
tostringNoFilter by recipient phone number.
fromstringNoFilter by sender phone number.
dateSentstringNoFilter by date sent (YYYY-MM-DD).
pageSizeintNoNumber of records to return per page.
accountSidstringNoAccount SID override.

Returns: ListMessageResponse|error

Sample code:

twilio:ListMessageResponse messages = check twilioClient->listMessage(to = "+1234567890", pageSize = 10);

Sample response:

{"messages": [{"sid": "SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "status": "delivered", "to": "+1234567890", "body": "Hello"}], "page_size": 10, "page": 0}
deleteMessage

Deletes a message by its SID.

Parameters:

NameTypeRequiredDescription
sidstringYesThe Message SID to delete.
accountSidstringNoAccount SID override.

Returns: http:Response|error

Sample code:

http:Response response = check twilioClient->deleteMessage("SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

Voice calls

createCall

Initiates an outbound voice call.

Parameters:

NameTypeRequiredDescription
payloadCreateCallRequestYesCall details: see required and optional fields below.
accountSidstringNoAccount SID override.

CreateCallRequest required fields:

NameTypeDescription
TostringThe phone number to call, in E.164 format.
FromstringYour Twilio number to use as the caller ID, in E.164 format.
note

Provide exactly one of Url, Twiml, or ApplicationSid to specify the call instructions:

  • Url: URL of a TwiML document or Twilio Application to fetch call instructions from.
  • Twiml: Inline TwiML string for simple call flows that do not require a separate server.
  • ApplicationSid: SID of a Twilio Application with configured voice URLs.

Optional fields include StatusCallback, StatusCallbackMethod, StatusCallbackEvent, Record, Timeout, and others: see the Twilio REST API reference for the full list.

Returns: Call|error

Sample code:

twilio:CreateCallRequest callRequest = {
To: "+1234567890",
From: "+0987654321",
Url: "http://demo.twilio.com/docs/voice.xml",
StatusCallback: "https://your-app.example.com/status",
StatusCallbackMethod: "POST"
};

twilio:Call response = check twilioClient->createCall(callRequest);

Sample response:

{"sid": "CAxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "status": "queued", "to": "+1234567890", "from": "+0987654321", "direction": "outbound-api"}
fetchCall

Retrieves details of a call by its SID.

Parameters:

NameTypeRequiredDescription
sidstringYesThe Call SID.
accountSidstringNoAccount SID override.

Returns: Call|error

Sample code:

twilio:Call call = check twilioClient->fetchCall("CAxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

Sample response:

{"sid": "CAxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "status": "completed", "to": "+1234567890", "from": "+0987654321", "duration": "45", "price": "-0.0085", "price_unit": "USD"}
listCall

Lists calls, optionally filtered by status, phone number, or date.

Parameters:

NameTypeRequiredDescription
tostringNoFilter by recipient.
fromstringNoFilter by caller.
statusCall_enum_statusNoFilter by call status.
pageSizeintNoNumber of records per page.
accountSidstringNoAccount SID override.

Returns: ListCallResponse|error

Sample code:

twilio:ListCallResponse calls = check twilioClient->listCall(status = "completed", pageSize = 20);

Sample response:

{"calls": [{"sid": "CAxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "status": "completed", "duration": "45"}], "page_size": 20, "page": 0}
deleteCall

Deletes a call record by its SID.

Parameters:

NameTypeRequiredDescription
sidstringYesThe Call SID to delete.
accountSidstringNoAccount SID override.

Returns: http:Response|error

Sample code:

http:Response response = check twilioClient->deleteCall("CAxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

Account management

createAccount

Creates a new Twilio sub-account.

Parameters:

NameTypeRequiredDescription
payloadCreateAccountRequestYesAccount creation details including optional FriendlyName.

Returns: Account|error

Sample code:

twilio:CreateAccountRequest accountRequest = {
FriendlyName: "My Sub Account"
};

twilio:Account subAccount = check twilioClient->createAccount(accountRequest);

Sample response:

{"sid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "friendly_name": "My Sub Account", "status": "active", "type": "Full"}
fetchAccount

Retrieves account details by SID.

Parameters:

NameTypeRequiredDescription
sidstringYesThe Account SID.

Returns: Account|error

Sample code:

twilio:Account account = check twilioClient->fetchAccount("ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

Sample response:

{"sid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "friendly_name": "My Account", "status": "active", "type": "Full"}
fetchBalance

Retrieves the account balance.

Parameters:

NameTypeRequiredDescription
accountSidstringNoAccount SID. Defaults to the authenticated account.

Returns: Balance|error

Sample code:

twilio:Balance balance = check twilioClient->fetchBalance();

Sample response:

{"account_sid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "balance": "25.50", "currency": "USD"}
listAccount

Lists accounts, optionally filtered by name or status.

Parameters:

NameTypeRequiredDescription
friendlyNamestringNoFilter by friendly name.
statusAccount_enum_statusNoFilter by account status.
pageSizeintNoNumber of records per page.

Returns: ListAccountResponse|error

Sample code:

twilio:ListAccountResponse accounts = check twilioClient->listAccount(status = "active");

Sample response:

{"accounts": [{"sid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "friendly_name": "My Account", "status": "active"}], "page_size": 50, "page": 0}
updateAccount

Updates properties of an account.

Parameters:

NameTypeRequiredDescription
sidstringYesThe Account SID of the account to update.
payloadUpdateAccountRequestYesUpdate parameters.

UpdateAccountRequest fields:

NameTypeRequiredDescription
FriendlyNamestringNoA human-readable name for the account.
StatusAccount_enum_statusNoThe new status for the account: active, suspended, or closed.

Returns: Account|error

Sample code:

twilio:Account updated = check twilioClient->updateAccount("ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", {
FriendlyName: "Updated Account Name"
});

Phone number management

createIncomingPhoneNumber

Purchases a new phone number for your account.

Parameters:

NameTypeRequiredDescription
payloadCreateIncomingPhoneNumberRequestYesPhone number purchase details including the number or area code.
accountSidstringNoAccount SID override.

Returns: Incoming_phone_number|error

Sample code:

twilio:Incoming_phone_number number = check twilioClient->createIncomingPhoneNumber({
PhoneNumber: "+1234567890"
});

Sample response:

{"sid": "PNxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "phone_number": "+1234567890", "friendly_name": "(123) 456-7890", "capabilities": {"voice": true, "sms": true, "mms": true}}
listIncomingPhoneNumber

Lists phone numbers owned by the account.

Parameters:

NameTypeRequiredDescription
phoneNumberstringNoFilter by phone number.
friendlyNamestringNoFilter by friendly name.
pageSizeintNoNumber of records per page.
accountSidstringNoAccount SID override.

Returns: ListIncomingPhoneNumberResponse|error

Sample code:

twilio:ListIncomingPhoneNumberResponse numbers = check twilioClient->listIncomingPhoneNumber(pageSize = 20);

Sample response:

{"incoming_phone_numbers": [{"sid": "PNxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "phone_number": "+1234567890", "friendly_name": "(123) 456-7890"}], "page_size": 20}
listAvailablePhoneNumberLocal

Searches for available local phone numbers to purchase.

Parameters:

NameTypeRequiredDescription
countryCodestringYesISO 3166-1 alpha-2 country code (e.g., "US").
areaCodeintNoFilter by area code.
smsEnabledbooleanNoFilter for SMS-capable numbers.
voiceEnabledbooleanNoFilter for voice-capable numbers.
accountSidstringNoAccount SID override.

Returns: ListAvailablePhoneNumberLocalResponse|error

Sample code:

twilio:ListAvailablePhoneNumberLocalResponse available = check twilioClient->listAvailablePhoneNumberLocal(
"US", areaCode = 415, smsEnabled = true
);

Sample response:

{"available_phone_numbers": [{"phone_number": "+14155551234", "friendly_name": "(415) 555-1234", "capabilities": {"voice": true, "SMS": true, "MMS": true}}]}

Recordings

listRecording

Lists recordings for the account.

Parameters:

NameTypeRequiredDescription
dateCreatedstringNoFilter by creation date (YYYY-MM-DD).
pageSizeintNoNumber of records per page.
accountSidstringNoAccount SID override.

Returns: ListRecordingResponse|error

Sample code:

twilio:ListRecordingResponse recordings = check twilioClient->listRecording(pageSize = 10);

Sample response:

{"recordings": [{"sid": "RExxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "duration": "30", "status": "completed", "call_sid": "CAxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}], "page_size": 10}
fetchRecording

Retrieves a recording by its SID.

Parameters:

NameTypeRequiredDescription
sidstringYesThe Recording SID.
accountSidstringNoAccount SID override.

Returns: Recording|error

Sample code:

twilio:Recording recording = check twilioClient->fetchRecording("RExxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

Sample response:

{"sid": "RExxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "duration": "30", "status": "completed", "call_sid": "CAxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "price": "-0.0025", "price_unit": "USD"}
deleteRecording

Deletes a recording by its SID.

Parameters:

NameTypeRequiredDescription
sidstringYesThe Recording SID to delete.
accountSidstringNoAccount SID override.

Returns: http:Response|error

Sample code:

http:Response response = check twilioClient->deleteRecording("RExxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

Conferences

listConference

Lists conferences for the account.

Parameters:

NameTypeRequiredDescription
friendlyNamestringNoFilter by conference friendly name.
statusConference_enum_statusNoFilter by conference status.
pageSizeintNoNumber of records per page.
accountSidstringNoAccount SID override.

Returns: ListConferenceResponse|error

Sample code:

twilio:ListConferenceResponse conferences = check twilioClient->listConference(status = "completed", pageSize = 10);

Sample response:

{"conferences": [{"sid": "CFxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "friendly_name": "MyConference", "status": "completed"}], "page_size": 10}
fetchConference

Retrieves a conference by its SID.

Parameters:

NameTypeRequiredDescription
sidstringYesThe Conference SID.
accountSidstringNoAccount SID override.

Returns: Conference|error

Sample code:

twilio:Conference conference = check twilioClient->fetchConference("CFxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

Sample response:

{"sid": "CFxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "friendly_name": "MyConference", "status": "completed", "region": "us1"}

Queue management

createQueue

Creates a new call queue.

Parameters:

NameTypeRequiredDescription
payloadCreateQueueRequestYesQueue creation details including FriendlyName.
accountSidstringNoAccount SID override.

Returns: Queue|error

Sample code:

twilio:Queue queue = check twilioClient->createQueue({
FriendlyName: "Support Queue"
});

Sample response:

{"sid": "QUxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "friendly_name": "Support Queue", "current_size": 0, "max_size": 1000}
listQueue

Lists call queues for the account.

Parameters:

NameTypeRequiredDescription
pageSizeintNoNumber of records per page.
accountSidstringNoAccount SID override.

Returns: ListQueueResponse|error

Sample code:

twilio:ListQueueResponse queues = check twilioClient->listQueue(pageSize = 10);

Sample response:

{"queues": [{"sid": "QUxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "friendly_name": "Support Queue", "current_size": 0}], "page_size": 10}

Usage

listUsageRecord

Lists usage records for the account.

Parameters:

NameTypeRequiredDescription
categoryUsage_record_enum_categoryNoFilter by usage category (e.g., sms, calls).
startDatestringNoStart date for the usage period (YYYY-MM-DD).
endDatestringNoEnd date for the usage period (YYYY-MM-DD).
pageSizeintNoNumber of records per page.
accountSidstringNoAccount SID override.

Returns: ListUsageRecordResponse|error

Sample code:

twilio:ListUsageRecordResponse usage = check twilioClient->listUsageRecord(pageSize = 10);

Sample response:

{"usage_records": [{"category": "sms", "description": "SMS Messages", "count": "150", "price": "1.125", "price_unit": "USD"}], "page_size": 10}

What's next

  • Trigger Reference: Event-driven webhook integration using the Twilio listener.
  • Example: Complete example integrations for the Twilio connector and trigger.
  • Setup Guide: Create a Twilio account and obtain credentials.