pay
Enable secure payment processing during voice calls. When implemented in your voice application, it manages the entire payment flow, including data collection, validation, and processing, through your configured payment gateway.
An object that accepts the pay parameters.
Transaction Types
The pay method supports two primary transaction types: charges and tokenization.
Charges
When you need to process a payment right away, use a charge transaction. This collects the payment details and processes the transaction in real-time.
- YAML
- JSON
version: 1.0.0
sections:
main:
- pay:
charge_amount: 25.00
payment_connector_url: "https://example.com/process"
{
"version": "1.0.0",
"sections": {
"main": [
{
"pay": {
"charge_amount": 25,
"payment_connector_url": "https://example.com/process"
}
}
]
}
}
Setting any positive value for charge_amount initiates a charge transaction.
Tokenization
Tokenization allows you to securely store payment information for future use. Instead of processing a payment immediately, it generates a secure token that represents the payment method.
To initiate a tokenization transaction, either pass charge_amount as 0 or omit the charge_amount attribute entirely.
The token is provided and stored by your payment processor and can be used for future transactions without requiring customers to re-enter their payment details. Note that this behavior may vary depending on the payment processor you are using.
- YAML
- JSON
version: 1.0.0
sections:
main:
- pay:
charge_amount: 0
payment_connector_url: "https://example.com/process"
{
"version": "1.0.0",
"sections": {
"main": [
{
"pay": {
"charge_amount": 0,
"payment_connector_url": "https://example.com/process"
}
}
]
}
}
Parameters
The URL to make POST requests with all the gathered payment details. This URL is used to process the final payment transaction and return the results through the response. Visit the payment_connector_url page for more important details.
The amount to charge against payment method passed in the request. Float value with no currency prefix passed as string.
dtmfThe method of how to collect the payment details. Currently only dtmf mode is supported.
en-USLanguage to use for prompts being played to the caller by the pay method. Supported languages are listed in the Voice and Languages page.
1Number of times the pay method will retry to collect payment details.
0The minimum length of the postal code the user must enter.
Array of parameter objects to pass to your payment processor.
Indicates the payment method which is going to be used in this payment request. Currently only credit-card is supported.
trueTakes true, false or real postcode (if it's known beforehand) to let pay method know whether to prompt for postal code.
Array of prompt objects for customizing the audio prompts during different stages of the payment process.
trueTakes true or false to let pay method know whether to prompt for security code.
The URL to send requests for each status change during the payment process. See the status_url request body section for more details.
5Limit in seconds that pay method waits for the caller to press another digit before moving on to validate the digits captured.
reusableWhether the payment is a one off payment or re-occurring.
Allowed values: one-time, reusable.
visa mastercard amexList of payment cards allowed to use in the requested payment process separated by space.
Allowed values: visa, mastercard, amex, maestro, discover, jcb, diners-club.
womanText-to-speech voice to use. Supported voices are listed in the Voice and Languages page.
status_url request body
The status_url parameter is used to send requests for each status change during the payment process.
The URL to send requests to for each status change during the payment process.
Request format
Below is an example of the request body that will be sent to the status_url.
{
"event_type": "calling.call.pay",
"event_channel": "swml:XXXX-XXXX-XXXX-XXXX-XXXX",
"timestamp": 1743707517.12267,
"project_id": "XXXX-XXXX-XXXX-XXXX-XXXX",
"space_id": "XXXX-XXXX-XXXX-XXXX-XXXX",
"params": {
"status_url": "https://example.com/status",
"status_url_method": "POST",
"for": "payment-completed",
"error_type": "",
"payment_method": "credit-card",
"payment_card_number": "************1234",
"payment_card_type": "visa",
"security_code": "***",
"expiration_date": "1225",
"payment_card_postal_code": "23112",
"control_id": "XXXX-XXXX-XXXX-XXXX-XXXX",
"call_id": "XXXX-XXXX-XXXX-XXXX-XXXX",
"node_id": "XXXX-XXXX-XXXX-XXXX-XXXX"
}
}
Variables
The following variables are available after the payment process completes:
An object containing the payment results of the payment process. Please refer to the pay_payment_results section for more details.
The result of the payment process. Please refer to the pay_result section for possible values.
pay_payment_results
Example
{
"payment_token": "1234567890",
"payment_confirmation_code": "1234567890",
"payment_card_number": "1234567890",
"payment_card_type": "visa",
"payment_card_expiration_date": "12/2025",
"payment_card_security_code": "123",
"payment_card_postal_code": "12345",
"payment_error": "Invalid card number",
"payment_error_code": "invalid-card-number",
"connector_error": {
"code": "invalid-card-number",
"message": "Invalid card number"
}
}
pay_result
The payment failed because the caller entered too many failed attempts.
The payment failed because the caller interrupted the payment process with a * key.
The payment failed because the caller stopped the payment process with the STOP command.
Examples
Simple payment collection
- YAML
- JSON
version: 1.0.0
sections:
main:
- pay:
charge_amount: '20.45'
payment_connector_url: "https://example.com/process"
status_url: "https://example.com/status"
{
"version": "1.0.0",
"sections": {
"main": [
{
"pay": {
"charge_amount": "20.45",
"payment_connector_url": "https://example.com/process",
"status_url": "https://example.com/status"
}
}
]
}
}
Basic tokenization
- YAML
- JSON
version: 1.0.0
sections:
main:
- pay:
token_type: "reusable"
charge_amount: '0'
payment_connector_url: "https://example.com/tokenize"
{
"version": "1.0.0",
"sections": {
"main": [
{
"pay": {
"token_type": "reusable",
"charge_amount": "0",
"payment_connector_url": "https://example.com/tokenize"
}
}
]
}
}
Retry logic
- YAML
- JSON
version: 1.0.0
sections:
main:
- pay:
charge_amount: '75.00'
payment_connector_url: "https://example.com/process"
max_attempts: 3
timeout: 10
{
"version": "1.0.0",
"sections": {
"main": [
{
"pay": {
"charge_amount": "75.00",
"payment_connector_url": "https://example.com/process",
"max_attempts": 3,
"timeout": 10
}
}
]
}
}
International payment with custom prompts
- YAML
- JSON
version: 1.0.0
sections:
main:
- pay:
charge_amount: '100.00'
payment_connector_url: "https://example.com/process"
currency: "pln"
language: "pl-PL"
description: "Polish zloty transaction"
prompts:
- for: "payment-card-number"
actions:
- type: "Say"
phrase: "Witamy w telefonicznym systemie płatności"
- type: "Say"
phrase: "Proszę wprowadzić numer karty płatniczej"
- for: "payment-card-number"
error_type: "invalid-card-number timeout invalid-card-type"
actions:
- type: "Say"
phrase: "Wprowadziłeś błędny numer karty płatniczej. Proszę spróbować ponownie"
- for: "payment-completed"
actions:
- type: "Say"
phrase: "Płatność zakończona powodzeniem"
{
"version": "1.0.0",
"sections": {
"main": [
{
"pay": {
"charge_amount": "100.00",
"payment_connector_url": "https://example.com/process",
"currency": "pln",
"language": "pl-PL",
"description": "Polish zloty transaction",
"prompts": [
{
"for": "payment-card-number",
"actions": [
{
"type": "Say",
"phrase": "Witamy w telefonicznym systemie płatności"
},
{
"type": "Say",
"phrase": "Proszę wprowadzić numer karty płatniczej"
}
]
},
{
"for": "payment-card-number",
"error_type": "invalid-card-number timeout invalid-card-type",
"actions": [
{
"type": "Say",
"phrase": "Wprowadziłeś błędny numer karty płatniczej. Proszę spróbować ponownie"
}
]
},
{
"for": "payment-completed",
"actions": [
{
"type": "Say",
"phrase": "Płatność zakończona powodzeniem"
}
]
}
]
}
}
]
}
}