Learn how to use our serverless platform to create voice, video and messaging applications and services by reading our getting started guide. It's the best way to become familiar with the platform architecture and capabilities.
Smart 2FA API lets you to send One Time Password (OTP) using SMS, Voice or email. 2FA allows you to add a second layer of security to your Application in addition to the user-id and password. The flexibility of using any channel makes sure your users get OTP even when they experience issue with one of the channels.
Environment | URL |
---|---|
Production | https://comms.tatacommunications.com |
Verification Code Resource URI | /2fa/send |
HTTP POST: Send a verification code through SMS, phone call or email to the specified destination.
Parameter | Description |
---|---|
service (Required) | The name of your service. |
from (Required) | The source address that is making a call, or sending the SMS or email containing the verification code. |
to (Required) | The destination address to send the OTP message containing the verification code. |
body (Required) | The content of the OTP message. Use {code} as a placeholder for the location of the verification code in your SMS content. This {code} will be replaced automatically with a random code generated by the system |
channel (Optional) | A method for sending OTP message. There are 3 options: sms, call, email. If not passed, default is sms. |
accountSid (Optional) | OTP message will be sent on behalf of given accountSid. The accountSid has to be valid sub-account. |
subject (Required in email channel) | Email subject for the OTP message, it’s required only in email channel. |
language (Optional) | Text-to-Speech (TTS) language for announcing OTP message over call channel. AWS Polly is default TTS engine. To use another engine, use format like: . for example: awspolly.ja-JP. More information about language, please visit the Say-RCML documentation. |
repeat (Optional) | Number of times the TTS OTP message will be played. It’s only required in call channel, default value is 1. |
length (Optional) | Number of digits for OTP. By default, 6 digits number will be generated for OTP code. |
voice (Optional) | Man or woman voice for TTS call channel. |
timeout (Optional) | Time in seconds for which OTP is valid. Post timeout period, OTP is automatically canceled if still not successfully verified. Default is 300 seconds. |
guardTime (Optional) | If send is called again to send new OTP passing same service and to parameter while previous OTP generated is still valid, the previous OTP is Canceled and new OTP is sent. However if guardTime (in seconds) parameter is passed in send request, old OTP is valid for guardTime and then cancelled. This is to accomodate scenarios where the underlying SMS, Call or email channel may be slow to deliver the message and by the time new OTP is generated, user might have received old OTP. |
limits (Optional) | Key-Value pair Limits to restrict on number of OTPs generated based on criteria that developers select. For further details please look at Limit section. |
Responde Body | Description |
---|---|
Code | Sub error code for the request. |
Message | Message for describing sub error code. |
requestID | The unique OTP request identifier for the OTP request. |
Send API will return Error Code and corresponding HTTP Error as mentioned in Common Response Error Code In addition below are the Errors that it can return
Error Code | HTTP Status | Error Message | Description | Category |
---|---|---|---|---|
453 | 404 | Too many OTP request to same destination Number | OTP is sent to same destination number within 1 min of previously sent. 2FA system limits number of OTP sent to same number to maximum one per min. | Send |
495 | 409 | Invalid Limit Name: XXX | Send API is called with Limits name that is not defined. | Send API |
copy
{
"service" : "2FA", // the name of your service
"from" : "+XXXXXXXXX", // the SMS sender phone number
"to" : "+XXXXXXXXXX", // the SMS recepient phone number
"body": "Your verification code is: \{code}" // SMS body, containing the verification code
}
From the bash terminal you can run the command below:
copy
curl -X POST \
https://comms.tatacommunications.com/2fa/send \
--user ' \{your_account_SID}:\{your_account_token}' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json' \
-d '{
"service" : "2FA",
"from" : "XXXXXXXXXXX",
"to" : "ZZZZZZZZZZZ",
"body": "Your verification code is: \{code}"
}'
If send is successful, below is the response returned:
copy
{"code":200,"message":"OK","requestID":"OTPYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"}
Example of sending OTP with limits:
curl -X POST \
https://yourdomain.com/2fa/send \
--user ' \{your_account_SID}:\{your_account_token}' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json' \
-d '{
"service" : "2FA",
"from" : "XXXXXXXXXXX",
"to" : "ZZZZZZZZZZZ",
"body": "Your verification code is: \{code}",
"limits" : { "limit_on_phone": "+1205XXXXXXX" }
}'
User receives the one-time PIN code via SMS, phone call or email, gets back to your application and enters it in order to complete the verification process. Verifying the code is simple and requires basic authorization that includes your account SID and auth token.
Environment | URL |
---|---|
Production | https://comms.tatacommunications.com |
Verification Code Resource URI | /2fa/verify |
HTTP Method: POST: Verifies the code that was sent through SMS, phone call or email to the destination
Parameter | Description |
---|---|
service | The name of your service. For backward compatibility, this is mandatory if the API is called by passing the number instead of requestId as explained below. |
requestId | The requestID was received when initiating the OTP message. This parameter can be ignored if the service and number attributes are being used. It is also not needed if using the number to verify the OTP. |
number | The phone number to which the SMS containing the verification code was sent to. Not needed if you are using verify via requestId. The requestId will be ignored even if passed. |
accountSid | If OTP message was initiated on behalf on accountSid, verify will require to have same accountSid to be able to verify the OTP request. |
code | The verification code that was sent to the user through SMS. |
Responde Body | Description |
---|---|
Code | Sub error code for the request. |
Message | Message for describing sub error code. |
requestID | The unique OTP request identifier for the OTP request. |
verify API will return Error Code and corresponding HTTP Error as mentioned in Common Response Error Code. In addition below are the Error’s that it can return
Error Code | HTTP Status | Error Message | Description | Category |
---|---|---|---|---|
470 | 404 | Invalid OTP Unique Id | Verify is called for UniqueID which is not present in-system | Verify |
471 | 409 | OTP is already verified | Verify is called for UniqueId which is present in-system but already verified successfully | Verify |
474 | 401 | Invalid OTP Code | Verify is called for UniqueId which is present and Invalid Code is passed | Verify |
copy
{
"service" : "2FA", // the name of your service
"requestId" : "OTPYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY", // the unique OTP Id generated when send was called
"code": "XXXXXX" // the verification code
}
From the bash terminal you can run the command below:
copy
curl -X POST \
https://comms.tatacommunications.com/2fa/verify \
--user ' \{your_account_SID}:\{your_account_token}' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json' \
-d '{
"service" : "2FA",
"requestId" : "OTPYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY",
"code": "XXXXXX"
}
Control API allows App developers to cancel already OTP.
Environment | URL |
---|---|
Production | https://comms.tatacommunications.com |
Verification Code Resource URI | /2fa/cancel |
HTTP Method: POST: Cancel the code that was sent through SMS/ Call/ Email to the destination
Parameter | Description |
---|---|
requestId (Required) | The requestID was received when initiating OTP message. |
accountSid (Optional) | If OTP message was initiated on behalf on accountSid, it requires to have same accountSid to be able to cancel the OTP request. |
Responde Body | Description |
---|---|
Code | Sub error code for the request. |
Message | Message for describing sub error code. |
requestID | The unique OTP request identifier for the OTP request. |
cancel API will return Error Code and corresponding HTTP Error as mentioned in Common Response Error Code. In addition below are the Error’s that it can return
Error Code | HTTP Status | Error Message | Description | Category |
---|---|---|---|---|
490 | 404 | Invalid OTP Unique Id | Control (Cancel for now, but may be other too in future) is called for UniqueID which is not present in-system | Control |
471 | 409 | OTP is already verified | Cancel is called for UniqueId which is present in-system but already verified successfully | Control |
copy
{
"requestId":"XXXXXX" // the requestID received when initiating OTP request.
"accountSid": "XXXXX"
}
From the bash terminal you can run the command below:
copy
curl -X POST \
https://comms.tatacommunications.com/2fa/cancel \
--user ' \{your_account_SID}:\{your_account_token}' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json' \
-d '{
"requestId" : "OTPabc2128918293123413216549879",
"accountSid": "AC123461724187287abcbas791282cf"
}
If cancel is successful, you should see below response
copy
{"code":200,"message":"canceled","requestID":"OTPabc2128918293123413216549879"}
Session Detail Record API allows to retrieve specific or list of OTP session and its corresponding details like which channel was used to send OTP and underlying error if channel successfully delivered OTP to end user or if there was any error. It also allows to filter based on certain criteria’s.
Other very important functionality exposed by SDR is Usage Report that allows to retrieve the usage of 2FA for specific period. It also allows to pass specific filter criteria’s.
If no Limit is defined by Developer or if no Limit is passed when invoking Send API, by default 1 OTP per min per recipient phone number will be applied as default.
If Developer is calling the Send API with a combination of “limits“ as explained in Request Parameters of Send, the order of limits defined matters.
For example consider below two limits defined.
Developer calls send API passing below parameter with given order.
copy
"limits" : "{ \"limit_on_Session\":\"aabbcd\", \"limit_on_phonenumber\": \"919960639903\" }"
Developer calls send API passing below parameter with given order
copy
"limits" : "{ \"limit_on_phonenumber\": \"919960639903\",\"limit_on_Session\":\"aabbcd\" }"
From T2 to “T0+300 sec“ OTP will be blocked.
The create Limit endpoint API is called to create a new Limit for a given Account.
Environment | URL |
---|---|
Production | https://comms.tatacommunications.com |
Verification Code Resource URI | /2fa/limits |
HTTP POST: Create Limit
Parameter | Description |
---|---|
name | Mandatory. Unique Name for this Limit. Developers will pass this as key when passing Limit to Send API. |
buckets | JSON body of Buckets. For example “buckets”:[ { “name”:”bucket1″, “max”:”1″, “interval”:”10″ }, { “name”:”bucket2″, “max”:”10″, “interval”:”86400″ } ] Note interval is in seconds. |
description | Optional. Description for this Limit |
accountSid | Optional. Sub-Account Sid for which Limit is to be created. If not passed Limit is created for same Account calling the API |
The Response Body will carry Code, corresponding message and data of Limit if it was successfully created. HTTP response will be 200 OK.
The response returned is JSON body as shown in the example below. Each parameters are as explained below
Parameter | Description |
---|---|
code | Sub-error code in case of error |
message | Message describing error if error occured or success message |
description | Optional. Description for this Limit |
data | Limit data as explained in the table below. |
Parameter | Description |
---|---|
Sid | Unique Limit Id |
accountSid | Unique CPaaS Solutions Account wich called API to create the Limit |
accountEmail | Unique CPaaS Solutions Account email corresponding to accountSid |
targetAccountSid | Unique CPaaS Solutions Account for which this particular Limit is created |
targetAccountEmail | Unique CPaaS Solutions Account email corresponding to targetAccountSid |
dateCreated | Timestamp when this Limit was created. |
dateUpdated | Timestamp when this Limit was updated |
Name | Unique Name of this Limit |
Buckets | JSON formatted Buckets as explained below: – name: Any descriptive name that makes sense – max: Maximum OTP allowed for given interval in seconds – interval: Time period in seconds to throttle send OTP requests. |
Description | Description for this Limit |
Uri | Unique URI that you can call to get only this specific Enterprise |
Create Limit API can also return Error Code and corresponding HTTP Error as mentioned in Common Response Error Code. In addition below are the Error that it can return
Error Code | HTTP Status | Error Message | Description | Category |
---|---|---|---|---|
492 | 409 | Limit with that Name already exists | Limit name should be unique in given Account | Create Limit |
copy
{
"name" : "limit_on_phoneNumber",
"description" : "Limit number of OTP sent per recipient Phone Number",
"buckets":[
{
"name":"Min bucket",
"max":"1",
"interval":"10"
},
{
"name":"Max bucket",
"max":"10",
"interval":"86400"
}
]
}
From the bash terminal you can run the command below:
copy
curl -X POST \
https://your_custom_domain/2fa/limits \
--user ' {your_account_SID}:{your_account_token}' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json' \
-d '{
"name": "limit_on_phonenumber",
"buckets": "[{ \"name\":\"bucket1\", \"max\":\"1\", \"interval\":\"30\"},{ \"name\":\"bucket2\", \"max\":\"2\", \"interval\":\"300\"}]",
"description": "limit on Phone Number"
}'
If creation of limit is successful, below is the response returned:
copy
{
"data": {
"sid": "LM29c3cdc8123545a4aa62b7451f1f719d",
"name": "limit_on_phoneNumber",
"buckets": "[{ \"name\":\"bucket1\", \"max\":\"1\", \"interval\":\"30\"},{ \"name\":\"bucket2\", \"max\":\"2\", \"interval\":\"300\"}]",
"description": "Limit number of OTP sent per recipient Phone Number",
"accountSid": "AC55a9977a50647d2fa38fa1f505206aaf",
"accountEmail": "jane@company.com",
"targetAccountSid": "AC55a9977a50647d2fa38fa1f505206aaf",
"targetAccountEmail": "alice@company.com",
"uri": "/2fa/limits/search/LM29c3cdc8123545a4aa62b7451f1f719d",
"dateCreated": "2021-02-04T03:52:09.400+0000",
"dateUpdated": "2021-02-04T03:52:09.400+0000"
},
"code": 200,
"message": "OK"
}
If creation of Limit fails, below response is returned with corresponding HTTP Error Code
copy
{
"code": 492,
"message": "Limit with that Name already exists",
"requestID": null
}
Update Limit API can also return Error Code and corresponding HTTP Error as mentioned in Common Response Error Code. In addition below are the Error that it can return
Error Code | HTTP Status | Error Message | Description | Category |
---|---|---|---|---|
493 | 409 | Invalid Limit Id | Limit sid passed is not present in the System | Update, Search Single, Delete Limit |
copy
{
"description" : "Limit number of OTP sent per recipient Phone Number. Pass with Send API",
"buckets":[
{
"name":"Min bucket",
"max":"2",
"interval":"10"
},
{
"name":"Max bucket",
"max":"20",
"interval":"86400"
}
]
}
From the bash terminal you can run the command below:
copy
curl -X PUT \
https://your_custom_domain/2fa/limits/LMcd3f402bbbf44bda858e3ab8f9bd5d44 \
--user ' {your_account_SID}:{your_account_token}' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json' \
-d '{
"buckets":"[{\"name\":\"bucket1\", \"max\":\"1\", \"interval\":\"30\"},{\"name\":\"bucket2\", \"max\":\"2\", \"interval\":\"300\"}]",
"description": "limit on Phone Number of receiver blabla"
}'
If update of limit is successful, below is the response returned:
copy
{
"data": {
"sid": "LMcd3f402bbbf44bda858e3ab8f9bd5d44",
"name": "limit_on_phoneNumberr",
"buckets": "[{\"name\":\"bucket1\", \"max\":\"1\", \"interval\":\"30\"},{\"name\":\"bucket2\", \"max\":\"2\", \"interval\":\"300\"}]",
"description": "limit on Phone Number of receiver blabla",
"accountSid": "AC55a9977a50647d2fa38fa1f505206aaf",
"accountEmail": "jane@company.com",
"targetAccountSid": "AC55a9977a50647d2fa38fa1f505206aaf",
"targetAccountEmail": "alice@company.com",
"uri": "/2fa/limits/search/LMcd3f402bbbf44bda858e3ab8f9bd5d44",
"dateCreated": "2021-02-04T03:55:02.000+0000",
"dateUpdated": "2021-02-04T03:56:12.122+0000"
},
"code": 200,
"message": "OK"
}
If update of Limit fails, below response is returned with corresponding HTTP Error Code
copy
{
"code": 493,
"message": "Invalid Limit Id",
"requestID": null
}
The delete Limit endpoint API is called to delete existing Limit for a given Account.
Environment | URL |
---|---|
Production | https://comms.tatacommunications.com |
Verification Code Resource URI | /2fa/limits/{limitSid} |
HTTP DELETE: Delete Limit
Parameter | Description |
---|---|
limitSid | Mandatory. Unique SID of limit that was returned when Create Limit was invoked. |
Account can Delete SubAccount Limits
The Response Body will carry Code, corresponding message and data of Limit if it was successfully deleted. HTTP response will be 200 OK.
The response returned is JSON body as shown in the example below. Each parameters are as explained below
Parameter | Description |
---|---|
code | Sub-error code in case of error |
message | Message describing error if error occured or success message |
description | Limit data as explained in the table. |
Delete Limit API can also return Error Code and corresponding HTTP Error as mentioned in Common Response Error Code. In addition below are the Error that it can return
Error Code | HTTP Status | Error Message | Description | Category |
---|---|---|---|---|
493 | 409 | Invalid Limit Id | Limit sid passed is not present in the System | Update, Search Single, Delete Limit, Create Bucket |
From the bash terminal you can run the command below:
copy
curl -X DELETE \ https://your_custom_domain.com/2fa/limits/LMcd3f402bbbf44bda858e3ab8f9bd5d44 \
--user ' {your_account_SID}:{your_account_token}' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json' \
If delete of limit is successful, below is the response returned:
copy
{
"data": {
"sid": "LMcd3f402bbbf44bda858e3ab8f9bd5d44",
"name": "limit_on_phoneNumberr",
"buckets": "[{\"name\":\"bucket1\", \"max\":\"1\", \"interval\":\"30\"},{\"name\":\"bucket2\", \"max\":\"2\", \"interval\":\"300\"}]",
"description": "limit on Phone Number of receiver",
"accountSid": "AC55a9977a50647d2fa38fa1f505206aaf",
"accountEmail": "alice@company.com",
"targetAccountSid": "AC55a9977a50647d2fa38fa1f505206aaf",
"targetAccountEmail": "jane@company.com",
"uri": "/2fa/limits/search/LMcd3f402bbbf44bda858e3ab8f9bd5d44",
"dateCreated": "2021-02-04T03:55:02.000+0000",
"dateUpdated": "2021-02-04T03:56:12.000+0000"
},
"code": 200,
"message": "OK"
}
If delete of Limit fails, below response is returned with corresponding HTTP Error Code
copy
{
"code": 493,
"message": "Invalid Limit Id",
"requestID": null
}
List Limits API allows users to list all the Limits created under that “Account“ or “Sub-Account“
Environment | URL |
---|---|
Production | https://comms.tatacommunications.com |
Get List of Limits Resource URI | /2fa/limits/search |
HTTP GET: List Limits
The following paging parameters are supported
Query Parameter | Description |
---|---|
Page | Which page of Limit records to return, starting from 0. |
pageSize | Number of records returned per page |
If the search API is called without page and pageSize, by default pageSize will be 10 and page
will be 0 to avoid retrieving all data in a single API call.
Following filtering parameters are supported
Query Parameter | Description |
---|---|
name | Optional parameter. Only show Limits that match name text, partially or fully. |
accountSid | Only include Limits list that is initiated by this specific accountSid. The accountSid should be one of the sub accounts of this account. |
subAccounts | If set to true, include Limits that are associated to all the sub accounts within this account. By default false. |
startTime | Optional parameter. Only show limits that were created on this date/time or later, given as an ISO-8601 date/time string, like YYYY-MM-DDTHH:MM:SS (for example 2018-10-05T22:45:32) or, if you want to omit the time, YYYY-MM-DD (for example 2018-10-05). When only a date is provided the time is assumed to be at midnight of the given date. Note that the given date/time is inclusive and is assumed to be in UTC timezone. |
endTime | Optional parameter. Only show Limits that were created on this date/time or earlier, given as an ISO-8601 date/time string, like YYYY-MM-DDTHH:MM:SS (for example 2018-10-06T02:10:03) or, if you want to omit the time, YYYY-MM-DD (for example 2018-10-06). When only a date is provided the time is assumed to be at midnight of the given date. Note that the given date/time is inclusive and is assumed to be in UTC timezone. |
You can use the SortBy GET query parameter to determine which attribute you want to sort by and in which direction; direction can either be ‘asc’ for ascending and ‘desc’ for descending sort ordering. Here is the overall format: SortBy=:. If no direction parameter is provided, then the listing of Limits is sorted by the attribute in ascending order. Below you can find the possible attributes you can sort by:
Parameter | Description |
---|---|
Name | Sort by name |
dateCreated | Sort by date when Limit was created |
Search Limit API will return Error Code and corresponding HTTP Error as mentioned in Common Response Error Code.
The response returned is JSON body as shown in the example below. Each parameters are as explained below
Code | Description |
---|---|
code | Sub-error code for response |
message | Message describing error if error occured or success message |
data | List of Limits data of search as explained in table below |
Data Parameter | Description |
---|---|
result | Limits data as explained in the table 6.1.5.1 Limit Data Parameter. |
pageSize | Number of records returned per page. |
total | Total Number of records |
page | Which page of records to return. |
numPages | Total number of pages |
start | Starting offset of page |
end | Ending offset of page |
firstPageUri | Unique URI that you can call to get records in First page |
nextPageUri | Unique URI that you can call to get records in next page |
uri | Unique URI that you can call to get records |
From the bash terminal you can run the command below:
copy
curl -X GET \
https://your_custom_domain.com/2fa/limits/search?pageSize=2&page=0 \
--user ' {your_account_SID}:{your_account_token}' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json' \
Below is the response returned:
copy
{
"data": {
"result": [
{
"sid": "LMec2561784a7f425e8049c8c27d4250db",
"name": "limit_on_phone",
"buckets": "[{\"name\":\"bucket1\",\"max\":\"1\",\"interval\":\"60\"},{\"name\":\"bucket2\",\"max\":\"2\",\"interval\":\"300\"}]",
"description": "Set limit on destination phone number to have maximum 1 OTP per min and maximum 2 per 5 mins",
"accountSid": "ACdcd5c6fe672b241945f495c4ca1a4966",
"accountEmail": "jane@company.com",
"targetAccountSid": "ACdcd5c6fe672b241945f495c4ca1a4966",
"targetAccountEmail": "alice@company.com",
"uri": "/2fa/limits/search/LMec2561784a7f425e8049c8c27d4250db",
"dateCreated": "2020-04-10T00:33:53.000+0000",
"dateUpdated": "2020-07-30T13:25:22.000+0000"
},
{
"sid": "LMfddc80d59f3549dd9044950e5c0ca7c6",
"name": "test",
"buckets": "[{\"name\":\"bucket1\",\"max\":\"1\",\"interval\":\"20\"}]",
"description": "tesr",
"accountSid": "AC55a9977a50647d2fa38fa1f505206aaf",
"accountEmail": "jane@company.com",
"targetAccountSid": "AC55a9977a50647d2fa38fa1f505206aaf",
"targetAccountEmail": "alice@company.com",
"uri": "/2fa/limits/search/LMfddc80d59f3549dd9044950e5c0ca7c6",
"dateCreated": "2020-12-18T03:29:18.000+0000",
"dateUpdated": "2020-12-18T03:29:18.000+0000"
}
],
"pageSize": 2,
"total": 7,
"page": 0,
"numPages": 4,
"start": 0,
"end": 1,
"firstPageUri": "/2falimits/search/?pageSize=2&page=0",
"nextPageUri": "/2falimits/search/?pageSize=2&page=1",
"uri": "/2falimits/search/?pageSize=2&page=0"
},
"code": 200,
"message": "OK"
}
Single Limits search API allows users to retrieve specific Limits created under that “Account“ or “Sub-Account“
Environment | URL |
---|---|
Production | https://comms.tatacommunications.com |
Get Single Limits Resource URI | /2fa/limits/search/{LimitSid} |
HTTP GET: Specific Limits
Parameter | Description |
---|---|
limitSid | Mandatory. Unique SID of limit that was returned when Create Limit was invoked. |
Search Limits API will return Error Code and corresponding HTTP Error as mentioned in Common Response Error Code.
Error Code | HTTP Status | Error Message | Description | Category |
---|---|---|---|---|
493 | 409 | Invalid Limit Id | Limit sid passed is not present in the System | Update, Search Single, Delete Limit |
From the bash terminal you can run the command below:
copy
curl -X GET \ https://your_custom_domain/2fa/limits/search/LMfddc80d59f3549dd9044950e5c0ca7c6 \
--user ' {your_account_SID}:{your_account_token}' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json' \
Below is the response returned:
copy
{
"data": {
"sid": "LMfddc80d59f3549dd9044950e5c0ca7c6",
"name": "test",
"buckets": "[{\"name\":\"bucket1\",\"max\":\"1\",\"interval\":\"20\"}]",
"description": "tesr",
"accountSid": "AC55a9977a50647d2fa38fa1f505206aaf",
"accountEmail": "jane@company.com",
"targetAccountSid": "AC55a9977a50647d2fa38fa1f505206aaf",
"targetAccountEmail": "alice@company.com",
"uri": "/2fa/limits/search/LMfddc80d59f3549dd9044950e5c0ca7c6",
"dateCreated": "2020-12-18T03:29:18.000+0000",
"dateUpdated": "2020-12-18T03:29:18.000+0000"
},
"code": 200,
"message": "OK"
}
Anonymize, Authenticate, Programmable SMS
Please fill in your details below and we will get in touch with you shortly
One of our team members will be in contact soon.
Please fill in your details below and we will get in touch with you shortly
One of our team members will be in contact soon.
Please fill in your details below
One of our team members will be in contact soon.
You will need auth token to access our APIs. Please fill in your details below and we will get in touch with you.
One of our team members will be in contact soon.
By continuing to browse the site, you are accepting our use of cookies. To find out more about the cookies we use, please read our Cookie Policy.
Accept All CookiesCookie Policy