Skip to main content

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.

NameTypeDefaultDescription
payRequiredobject-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.

version: 1.0.0
sections:
main:
- pay:
charge_amount: 25.00
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.

note

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.

version: 1.0.0
sections:
main:
- pay:
charge_amount: 0
payment_connector_url: "https://example.com/process"

Parameters

NameTypeDefaultDescription
payment_connector_urlRequiredstring-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.
charge_amountOptionalstring-The amount to charge against payment method passed in the request. Float value with no currency prefix passed as string.
currencyOptionalstringusdUses the ISO 4217 currency code of the charge amount.
descriptionOptionalstring-Custom description of the payment provided in the request.
inputOptionalstringdtmfThe method of how to collect the payment details. Currently only dtmf mode is supported.
languageOptionalstringen-USLanguage to use for prompts being played to the caller by the pay method. Supported languages are listed in the Voice and Languages page.
max_attemptsOptionalinteger1Number of times the pay method will retry to collect payment details.
min_postal_code_lengthOptionalinteger0The minimum length of the postal code the user must enter.
parametersOptionalobject[]-Array of parameter objects to pass to your payment processor.
payment_methodOptionalstring-Indicates the payment method which is going to be used in this payment request. Currently only credit-card is supported.
postal_codeOptionalboolean|stringtrueTakes true, false or real postcode (if it's known beforehand) to let pay method know whether to prompt for postal code.
promptsOptionalobject[]-Array of prompt objects for customizing the audio prompts during different stages of the payment process.
security_codeOptionalbooleantrueTakes true or false to let pay method know whether to prompt for security code.
status_urlOptionalstring-The URL to send requests for each status change during the payment process. See the status_url request body section for more details.
timeoutOptionalinteger5Limit in seconds that pay method waits for the caller to press another digit before moving on to validate the digits captured.
token_typeOptionalstringreusableWhether the payment is a one off payment or re-occurring.
Allowed values: one-time, reusable.
valid_card_typesOptionalstringvisa 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.
voiceOptionalstringwomanText-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.

NameTypeDescription
event_typestringThe type of event that is being reported. Will always be calling.call.pay.
event_channelstringThe channel that the event is being reported from.
timestampnumberThe timestamp of the event in the format of unix timestamp.
project_idstringThe project ID the event is being reported from.
space_idstringThe space ID the event is being reported from.
paramsobjectAn object containing the parameters of the event.
params.status_urlstringThe URL to send requests to for each status change during the payment process.
params.status_url_methodstringThe method to use for the requests to the status_url.
params.forstringThe status of the payment process.
params.error_typestringThe error type of the payment process.
params.payment_methodstringThe payment method of the payment process.
params.payment_card_numberstringThe payment card number of the payment process.
params.payment_card_typestringThe payment card type of the payment process.
params.security_codestringThe security code of the payment process.
params.expiration_datestringThe expiration date of the payment process.
params.payment_card_postal_codestringThe payment card postal code of the payment process.
params.control_idstringThe control ID of the payment process.
params.call_idstringThe call ID of the payment process.
params.node_idstringThe node ID of 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:

NameTypeDescription
pay_payment_resultsobjectAn object containing the payment results of the payment process. Please refer to the pay_payment_results section for more details.
pay_resultstringThe result of the payment process. Please refer to the pay_result section for possible values.

pay_payment_results

NameTypeDescription
payment_tokenstringPayment token from processor
payment_confirmation_codestringConfirmation code for the transaction
payment_card_numberstringRedacted card number
payment_card_typestringType of card used
payment_card_expiration_datestringCard expiration date
payment_card_security_codestringRedacted security code
payment_card_postal_codestringPostal code used
payment_errorstringError description if payment failed
payment_error_codestringError code if payment failed
connector_errorobjectConnector-specific error object
connector_error.codestringConnector-specific error code
connector_error.messagestringConnector-specific error message

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

NameTypeDescription
successstringThe payment was successful.
too-many-failed-attemptsstringThe payment failed because the caller entered too many failed attempts.
payment-connector-errorstringThe payment failed because of an error from the payment connector.
caller-interrupted-with-starstringThe payment failed because the caller interrupted the payment process with a * key.
relay-pay-stopstringThe payment failed because the caller stopped the payment process with the STOP command.
caller-hung-upstringThe payment failed because the caller hung up.
validation-errorstringThe payment failed because of a validation error.
internal-errorstringThe payment failed because of an internal error.

Examples

Simple payment collection

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

version: 1.0.0
sections:
main:
- pay:
token_type: "reusable"
charge_amount: '0'
payment_connector_url: "https://example.com/tokenize"

Retry logic

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

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"