Getting Started

RESTfull

The Multisender API is RESTfull API.
Resouces are created by submitting an HTTP POST to a resource URI.
Resource can be retrieved by GETting its URL.
Use http PUT method to update the resource.
To delete a resource, make an HTTP DELETE request to the resource URL.

Headers

Two HTTP headers must be passed with every request to the Multisender API: Accept and Content-Type.

  • Accept application/json
    The Accept request-header field can be used to specify certain media types which are acceptable for the response. Application/json is the only supported value.
  • Content-Type application/json
    The Content-Type entity-header field indicates the media type of the entity-body sent to the recipient. Application/json is the only supported value.
  • X-Access-Token 123xyz
    This custom header is used for passing the access token to the API. Authentication is also possible with GET or POST parameters. See Authentication

Authentication

Every request to the Multisender API must contain a valid access token.
There are three ways to pass the access token to the Multisender API.

Using an HTTP header

Pass the token via HTTP header: X-Access-Token.

X-Access-Token: 123xyz

Using GET parameter

Append the access token to the URL your trying to reach.

Parameter: access_token

/vi/accounts?access_token=123xyz

Using POST parameter

Add the access token to the POST request

Parameter: access_token

POST access_token: 123xyz

State Webhook HTTP callback

State Webhook is an HTTP POST request to the URL specified in the RSVP call's stateWebhookUrl parameter.
The State Webhook is triggered after RSVP call's state change. Possible states are waitingToActive, active, halt, complete.

Data in the state webhook body:

Parameter Description
rsvpCallId Id of the RSVP call
state The state of the RSVP Call. Possible values: waitingToActive, active, halt, complete
totalDialedCalls Amount of dialed calls
answeredCalls Amount of answered calls
totalDuration Total duration of answered calls in seconds
acceptsReceived Amount of accepts
timestamp Timestamp of the event.

Example webhook request body

{
  "rsvpCallId": "303",
  "state": "active",
  "dialedCalls": 10,
  "answeredCalls": 8,
  "totalDuration": 3600,
  "acceptsReceived": 5,
  "timestamp": "2017-01-01:00:00:00"
}

Receiver Webhook HTTP callback

Receiver Webhook is an HTTP POST request to the URL specified in the RSVP call's receiverWebhookUrl parameter.
The Receiver Webhook is triggered after a succesfull call is made to the RSVP call's receiver or after max redials to the reciever has been reached.

Data in the webhook body:

Parameter Description
rsvpCallId Id of the RSVP call
phoneNumber The phone number of the receiver that triggered the webhook
accountId The accountId of the receiver that triggered the webhook
rsvpReply Reply the receiver gave to the rsvp or no reply
meta The meta data which was specified in the RSVP Calls meta parameter
timestamp Timestamp of the event.

Example webhook request body

{
  "rsvpCallId": "303",
  "phoneNumber": "xxxx12342",
  "accountId": "808",
  "rsvpReply": "accept, decline or noReply",
  "meta": 
  {
    'somekey': 'some-value',
    'someotherkey': 'value'
  },
  "timestamp": "2017-01-01:00:00:00"
}

Examples

Example API requests can be downloaded in Postman Collection format.
The collection, with multiple example codes, can be viewed with the Postman App.

Endpoints

Accounts

Fetch a collection of accounts by doing a GET request to the endpoint: /accounts.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

[{
  'accountId':'string',
  'firstName':'string',
  'lastName':'string',
  'nickName':'string',
  'phone':'string',
  'email':'string',
  'address':'string',
  'zip':'string',
  'city':'string',
  'companyName':'string',
  'website':'string',
  'note':'string',
  'area':'string',
  'gender':'string',
  'yearOfBirth':'int',
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 },
 {
  'accountId':'string',
  'firstName':'string',
  'lastName':'string',
  'nickName':'string',
  'phone':'string',
  'email':'string',
  'address':'string',
  'zip':'string',
  'city':'string',
  'companyName':'string',
  'website':'string',
  'note':'string',
  'area':'string',
  'gender':'string',
  'yearOfBirth':'int',
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 }
 ]
Fetch a single account by doing a GET request to the endpoint: /accounts/{accountId}.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
accountId id Yes Id of the account.
Used in the URL like: /accounts/1
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

{
  'accountId':'string',
  'firstName':'string',
  'lastName':'string',
  'nickName':'string',
  'phone':'string',
  'email':'string',
  'address':'string',
  'zip':'string',
  'city':'string',
  'companyName':'string',
  'website':'string',
  'note':'string',
  'area':'string',
  'gender':'string',
  'yearOfBirth':'int',
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 }
 
Create a new account by doing a POST request with JSON data to the endpoint: /accounts.
URL to the created resource is returned in the location header.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
firstName string No First name
lastName string No Last name
nickName string No Nick name
phone string No Phone number in the international E.164 format.
email string No Valid email address
address string No Street address
zip string No Zip Code
city string No City
companyName string No Company name
website string No Website URL
note string No Notes
area string No Area
gender string No Gender
yearOfBirth int No Year of birth
Body
{
  'firstName':'string',
  'lastName':'string',
  'nickName':'string',
  'phone':'string',
  'email':'string',
  'address':'string',
  'zip':'string',
  'city':'string',
  'companyName':'string',
  'website':'string',
  'note':'string',
  'area':'string',
  'gender':'string',
  'yearOfBirth':'int'
 }
Headers
Parameters
Response

                                

                            
HTTP 201 Created 
Location: http://url.to/the/created/resource

{
  'accountId':'string',
  'firstName':'string',
  'lastName':'string',
  'nickName':'string',
  'phone':'string',
  'email':'string',
  'address':'string',
  'zip':'string',
  'city':'string',
  'companyName':'string',
  'website':'string',
  'note':'string',
  'area':'string',
  'gender':'string',
  'yearOfBirth':'int',
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 }
Update account details by doing a PUT request with JSON data to the the endpoint: /accounts/{accountId}.
Headers
Name Type Required Description
X-Authentication-Token string Yes Your authentication token
Parameters
Name Type Required Description
accountId id No Id of the the account. Used in the URL like: /accounts/1
firstName string No First name
lastName string No Last name
nickName string No Nick name
phone string No Phone number in the international E.164 format.
email string No Valid email address
address string No Street address
zip string No Zip Code
city string No City
companyName string No Company name
website string No Website URL
note string No Notes
area string No Area
gender string No Gender
yearOfBirth int No Year of birth
Body
{
  'firstName':'string',
  'lastName':'string',
  'nickName':'string',
  'phone':'string',
  'email':'string',
  'address':'string',
  'zip':'string',
  'city':'string',
  'companyName':'string',
  'website':'string',
  'note':'string',
  'area':'string',
  'gender':'string',
  'yearOfBirth':'int'
 }
Headers
Parameters
Response

                                

                            
HTTP 200 OK

{
  'accountId':'string',
  'firstName':'string',
  'lastName':'string',
  'nickName':'string',
  'phone':'string',
  'email':'string',
  'address':'string',
  'zip':'string',
  'city':'string',
  'companyName':'string',
  'website':'string',
  'note':'string',
  'area':'string',
  'gender':'string',
  'yearOfBirth':'int',
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 }
Delete account by doing a DELETE request to the endpoint: /accounts/{accountId}
Headers
Name Type Required Description
X-Authentication-Token string Yes Your authentication token
Parameters
Name Type Required Description
accountId id Yes Id of the account. Used in the URL like: /accounts/1
Body
Headers
Parameters
Response

                                

                            
HTTP 204 No Content

DELETE /accounts

Delete multiple accounts by doing a DELETE request to the endpoint: /accounts
Headers
Name Type Required Description
X-Authentication-Token string Yes Your authentication token
Parameters
Name Type Required Description
all flag No If all is set, delete all accounts. Used in the URL like: /accounts?all
filterId int No Accounts filter id. If filterId is set, delete all accounts matching the filter. Used in the URL like: /accounts?filterId=1
Body
Headers
Parameters
Response

                                

                            
HTTP 204 No Content

Accounts Filters

Create a new account filter by doing a POST request with JSON data to the endpoint: /accounts/filters.
URL to the created resource is returned in the location header. Note that this is not stable. So it might change in the future. Endpoint will return created filter id if all given filters are valid. Filter id can be used to retrieve matching accounts.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
filters array Yes Array of filter objects. Each object must have field, operator and value properties. Field assigns operator to some account object field and matches it with given value. For example
{'field': 'firstName', 'operator': '==', 'value': 'John'}
will match all accounts with John as firstName. Allowed operators are ==, !=, >, <, >=, <=, in and contains. in-operator requires array value and will match any account with given field matching some value on array. contains-operator only operates on string fields and allows to match some substring on that field.
Body
{
  'filters': [
    {
      'field': 'firstName',
      'operator': 'contains',
      'value': 'somestring'
    },
    {
      'field': 'zip',
      'operator': '\u003e=',
      'value': '00001'
    },
    {
      'field': 'zip',
      'operator': '\u003c=',
      'value': '100000'
    },
    {
      'field': 'city',
      'operator': 'in',
      'value': ['city', 'town', 'village']
    }
  ]
 }
Headers
Parameters
Response

                                

                            
HTTP 201 Created 
Location: http://url.to/the/created/resource

{
  'filterId':'int',
  'filters': 'array',
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 }
Fetch a collection of account filters by doing a GET request to the endpoint: /accounts/filters.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Body
Headers
Parameters
Response

                                

                            
HTTP 200 Ok

   [
     {
       'filterId':'int',
       'filters': 'array',
       'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
       'createdAt':'string, YYYY-MM-DD HH:MM:SS'
     },
     {
       'filterId':'int',
       'filters': 'array',
       'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
       'createdAt':'string, YYYY-MM-DD HH:MM:SS'
     }
   ]
 
Fetch a single account filter by doing a GET request to the endpoint: /accounts/filters/{filterId}.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
filterId id Yes Id of the account filter. Used in the URL like: /accounts/filters/1
Body
Headers
Parameters
Response

                                

                            
HTTP 200 Ok

   {
     'filterId':'int',
     'filters': 'array',
     'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
     'createdAt':'string, YYYY-MM-DD HH:MM:SS'
   }
 
Update a single account filter by doing a PUT request to the endpoint: /accounts/filters/{filterId}.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
filterId id Yes Id of the account filter. Used in the URL like: /accounts/filters/1
Body
Headers
Parameters
Response

                                

                            
HTTP 201 Ok

   {
     'filterId':'int',
     'filters': 'array',
     'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
     'createdAt':'string, YYYY-MM-DD HH:MM:SS'
   }
 

Groups

Fetch a collection of accounts in a group, by doing a GET request to the endpoint: /groups/{groupId}/accounts.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
groupId id Yes Id of the group. Used in the URL like: /groups/1/accounts
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

[{
  'groupId':'string',
  'accountId':'string',
  'firstName':'string',
  'lastName':'string',
  'nickName':'string',
  'phone':'string',
  'email':'string',
  'address':'string',
  'zip':'string',
  'city':'string',
  'companyName':'string',
  'website':'string',
  'note':'string',
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 },
 {
  'groupId':'string',
  'accountId':'string',
  'firstName':'string',
  'lastName':'string',
  'nickName':'string',
  'phone':'string',
  'email':'string',
  'address':'string',
  'zip':'string',
  'city':'string',
  'companyName':'string',
  'website':'string',
  'note':'string',
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 }
 ]
Add accounts to a group by doing a POST request to the endpoint: /groups/{groupId}/accounts
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
groupId id Yes Id of the group. Used in the URL like: /groups/1/accounts
accountIds Array of accountIds Yes List of accounts to be added to the group. Accounts already in the group will be ignored.
Body
[{
  'accountId':'string'
  },
  {
  'accountId':'string'
 }]
Headers
Parameters
Response

                                

                            
HTTP 201 OK

[{
  'groupId':'string',
  'accountId':'string'
 },
 {
  'groupId':'string',
  'accountId':'string'
 }
 ]
Remove account from the group by doing a DELETE request to the endpoint: /groups/{groupId}/accounts/{accountId}.

Remove all accounts from the group with extra parameter all /groups/{groupId}/accounts?all.

Remove accounts matching a filter with extra parameter filterId /groups/{groupId}/accounts?filterId=:filterId
Headers
Name Type Required Description
X-Authentication-Token string Yes Your authentication token
Parameters
Name Type Required Description
groupId id Yes Id of the group. Used in the URL like: /groups/1/{accountId}
accountId id Yes Id of the removed account. Used in the URL like: /groups/{groupId}/2
Body
Headers
Parameters
Response

                                

                            
HTTP 204 No Content
Fetch a collection of groups by doing a GET request to the endpoint: /groups.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

[{
  'groupId':'string',
  'name':'string',
  'description':'string',
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS',
  'numberOfAccounts':'int'
 },
 {
  'groupId':'string',
  'name':'string',
  'description':'string',
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS',
  'numberOfAccounts':'int'
 }
 ]
Fetch a single group by doing a GET request to the endpoint: /groups/{groupId}.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
groupId id Yes Id of the group. Used in the URL like: /groups/1
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

{
  'groupId':'string',
  'name':'string',
  'description':'string',
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS',
  'numberOfAccounts':'int'
 }
 

POST /groups

Create a new group by doing a POST request with JSON data to the endpoint: /groups.
URL to the created resource is returned in the location header.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
name string Yes Group name
description string Yes Description of the group
Body
{
  'name':'string',
  'description':'string'
 }
Headers
Parameters
Response

                                

                            
HTTP 201 Created
Location: http://url.to/the/created/resource

{
  'groupId':'string',
  'name':'string',
  'description':'string',
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS',
  'numberOfAccounts':'int'
 }
Update group details by doing a PUT request with JSON data to the the endpoint: /groups/{groupId}.
Headers
Name Type Required Description
X-Authentication-Token string Yes Your authentication token
Parameters
Name Type Required Description
groupId id Yes Id of the group. Used in the URL like: /groups/1
name string Yes Group name
description string Yes Description of the group
Body
{
  'name':'string',
  'description':'string',
 }
Headers
Parameters
Response

                                

                            
HTTP 200 OK

{
  'groupId':'string',
  'name':'string',
  'description':'string',
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS',
  'numberOfAccounts':'int'
 }
Delete group by doing a DELETE request to the endpoint: /groups/{groupId}
Headers
Name Type Required Description
X-Authentication-Token string Yes Your authentication token
Parameters
Name Type Required Description
groupId id Yes Id of the group. Used in the URL like: /groups/1/accounts
Body
Headers
Parameters
Response

                                

                            
HTTP 204 No Content

Calls

GET /calls

Fetch a collection of calls by doing a GET request to the endpoint: /calls.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

[{
  'callId':'string',
  'operations':'string, JSON',
  'actionTime':'string, YYYY-MM-DD HH:MM:SS',
  'priceEstimateInCents':'float',
  'totalDuration':'int',
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 },
 {
  'callId':'string',
  'operations':'string, JSON',
  'actionTime':'string, YYYY-MM-DD HH:MM:SS',
  'priceEstimateInCents':'float',
  'totalDuration':'int',
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 }
 ]
Fetch a single call by doing a GET request to the endpoint: /calls/{callId}.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
callId id Yes Id of the call. Used in the URL like: /calls/1
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

{
  'callId':'string',
  'operations':'string, JSON',
  'actionTime':'string, YYYY-MM-DD HH:MM:SS',
  'priceEstimateInCents':'float',
  'editable':'string, y or n',
  'receivers':[
    {
      'receiverId': 'string',
      'accountId': 'string',
      'groupId': 'string',
      'name': 'string',
      'firstName': 'string',
      'lastName': 'string',
      'email': 'string',
      'phone': 'string',
      'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
      'createdAt':'string, YYYY-MM-DD HH:MM:SS'
    }
  ],
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 }

POST /calls

Create a new call by doing a POST request with JSON data to the endpoint: /calls.
URL to the created resource is returned in the location header.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
actionTime string, YYYY-MM-DD HH:MM:SS Yes Time when the call should be made in UTC, if null, the call will be made immediately. ActionTime over 1h in the past is not allowed.
operations JSON Yes Operations JSON describes which voiceFiles are played during the call. VoiceFile status must be 'ready'. Only one voiceFileId per call supported atm.
receivers JSON Yes Array of receiver objects. Receiver can have either accountId, groupId or phone number in E.164 format. If phone number is given, the number is used to search for existing account which is used as the receiver. If no account is found, a new account is created with the given phone number.
Body
{
  'operations':'string, JSON',
  'actionTime':'string, YYYY-MM-DD HH:MM:SS',
  'receivers':[{
      'accountId': 'string',
      'groupId': 'string',
      'phone': 'string'
      }
      ]
 }
Headers
Parameters
Response

                                

                            
HTTP 201 Created 
Location: http://url.to/the/created/resource

{
  'callId':'string',
  'operations':'string, JSON',
  'actionTime':'string, YYYY-MM-DD HH:MM:SS',
  'priceEstimateInCents':'float',
  'editable':'string, y or n',
  'receivers':[{
      'receiverId': 'string',
      'accountId': 'string',
      'groupId': 'string',
      'name': 'string',
      'firstName': 'string',
      'lastName': 'string',
      'email': 'string',
      'phone': 'string',
      'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
      'createdAt':'string, YYYY-MM-DD HH:MM:SS'
      }
      ],
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 }
Update call details by doing a PUT request with JSON data to the the endpoint: /calls/{callId}.
Headers
Name Type Required Description
X-Authentication-Token string Yes Your authentication token
Parameters
Name Type Required Description
callId id Yes Id of the call. Used in the URL like: /calls/1
actionTime string, YYYY-MM-DD HH:MM:SS Yes Time when the call should be made in UTC, if null, the call will be made immediately. ActionTime over 1h in the past is not allowed.
operations JSON Yes Operations JSON describes which voiceFiles are played during the call. Only one voiceFileId per call supported atm.
receivers JSON Yes Array of receiver objects. Receiver can have either accountId, groupId or phone number in E.164 format. If phone number is given, the number is used to search for existing account which is used as the receiver. If no account is found, a new account is created with the given phone number.
Body
{
  'operations':'string, JSON',
  'actionTime':'string, YYYY-MM-DD HH:MM:SS',
  'receivers':[{
      'accountId': 'string',
      'groupId': 'string',
      'phone': 'string'
      }
      ]
 }
Headers
Parameters
Response

                                

                            
HTTP 200 OK

{
  'callId':'string',
  'operations':'string, JSON',
  'actionTime':'string, YYYY-MM-DD HH:MM:SS',
  'priceEstimateInCents':'float',
  'editable':'string, y or n',
  'receivers':[{
      'receiverId': 'string',
      'accountId': 'string',
      'groupId': 'string',
      'name': 'string',
      'firstName': 'string',
      'lastName': 'string',
      'email': 'string',
      'phone': 'string',
      'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
      'createdAt':'string, YYYY-MM-DD HH:MM:SS'
      }
      ],
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 }
Delete call by doing a DELETE request to the endpoint: /calls/{callId}
Headers
Name Type Required Description
X-Authentication-Token string Yes Your authentication token
Parameters
Name Type Required Description
callId id Yes Id of the call. Used in the URL like: /calls/1
Body
Headers
Parameters
Response

                                

                            
HTTP 204 No Content
Fetch call's receivers by doing a GET request to the endpoint: /calls/{callId}/receivers.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
callId id Yes Id of the call. Used in the URL like: /calls/1/receivers
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

[{
  'accountId':'string or null',
  'groupId':'string or null',
  'firstName':'string, if receiver is account',
  'lastName':'string, if receiver is account',
  'phone':'string, if receiver is account',
  'email':'string, if receiver is account',
  'name':'string, if receiver is group',
  'numberOfAccounts':'int, if receiver is group. null otherwise.',
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 },
 {
  'accountId':'string or null',
  'groupId':'string or null',
  'firstName':'string, if receiver is account',
  'lastName':'string, if receiver is account',
  'phone':'string, if receiver is account',
  'email':'string, if receiver is account',
  'name':'string, if receiver is group',
  'numberOfAccounts':'int, if receiver is group. null otherwise.',
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 }
 ]

Click to Calls

Fetch a collection of click to calls by doing a GET request to the endpoint: /click_to_calls
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
clickToCallId string Yes Id of the click to call. Used in the URL like: /click_to_calls/1
expiresAt string No After this time, if the requester hasn't answered, calling is stopped. Default value is one week from now.
Format: YYYY-MM-DD HH:MM:SS
activeFrom string Yes Time of day when the calling should start. Used with activeTo attribute to limit the calls time range in a day.
Format: HH:MM:SS
activeTo string Yes Time of day when the calling should stop. Used with activeFrom attribute to limit the calls time range in a day.
Format: HH:MM:SS
activeWeekdays JSON Yes Array of weekday-state pairs, defining on which day of the week calls can be made. In the example data calls are only made on working days.
voiceFileId JSON Yes Id of the voice file which is played during the call to the receiver
actionButtons JSON Yes Array of action-button pairs, defining which key press on the phone is interpreted as accept or decline for the call back.
Valid buttons: 0-9. Valid actions: accept and decline
receivers JSON Yes Array of receivers, who are called after the click to call request is made. The receivers are called in the given order until one accepts the click to call.
maxRedials int No Number of redials to try if receiver haven't answered. Default is 3
receiverWebhookUrl string No URL to send data about each invidual call.
meta JSON No Client meta data, which is passed, as is, in the webhook body
stats JSON No Click to Call's stats.
  • dialedCalls, total number of dialled calls
  • answeredCalls, total number of answered calls
  • totalDuration, total duration of all answered calls in seconds
  • acceptsReceived, total number of accepts received
updatedAt string No Time in UTC when the resource was last updated.
Format: YYYY-MM-DD HH:MM:SS
createdAt string No Time in UTC when the resource was created.
Format: YYYY-MM-DD HH:MM:SS
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

[{
  'clickToCallId': 'string',
  'expiresAt': 'YYYY-MM-DD HH:MM:SS',
  'activeFrom': 'HH:MM:SS',
  'activeTo': 'HH:MM:SS',
  'activeWeekdays': [
      {
          'weekday': 'monday',
          'active': '1'
      },
      {
          'weekday': 'tuesday',
          'active': '1'
      },
      {
          'weekday': 'wednesday',
          'active': '1'
      },
      {
          'weekday': 'thursday',
          'active': '1'
      },
      {
          'weekday': 'friday',
          'active': '1'
      },
      {
          'weekday': 'saturday',
          'active': '0'
      },
      {
          'weekday': 'sunday',
          'active': '0'
      }
  ],
  'voiceFileId': 'int',
  'actionButtons': [
      {
          'button': '5',
          'action': 'accept'
      },
      {
          'button': '9',
          'action': 'decline'
      }
  ],
  'receivers': [
      {
          'accountId': 'string or null',
          'groupId': 'string or null',
          'phone': 'string E.164 number',
          'firsName': 'string',
          'lastName': 'string',
          'answered': 'int, 1 or 0',
          'reply': 'string, accept, decline or noAnswer',
          'callDuration': 'int',
          'dialledCalls': 'int',
          'latestCallAt': 'string, yyyy-mm-dd hh:mm:ss'
      }
  ],
  'maxRedials': 'int',
  'receiverWebhookUrl': 'http://example.com/webhook/',
  'meta': {
       'someparam': 'string',
       'otherparam': 'string'
  },
  'stats': {
       'totalDialedCalls': 'int',
       'answeredCalls': 'int',
       'totalDuration': 'int, seconds',
       'acceptsReceived': 'int',
       'acceptsDeclined': 'int',
       'notAnsweredCalls': 'int'
  },
  'updatedAt':'YYYY-MM-DD HH:MM:SS',
  'createdAt':'YYYY-MM-DD HH:MM:SS'
 }]
Fetch a single click to call by doing a GET request to the endpoint: /click_to_calls/{clickToCallId}.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
clickToCallId string Yes Id of the click to call. Used in the URL like: /click_to_calls/1
expiresAt string No After this time, if the requester hasn't answered, calling is stopped. Default value is one week from now.
Format: YYYY-MM-DD HH:MM:SS
activeFrom string Yes Time of day when the click to calls should start. Used with activeTo attribute to limit the calls time range in a day.
Format: HH:MM:SS
activeTo string Yes Time of day when the click to calls should stop. Used with activeFrom attribute to limit the calls time range in a day.
Format: HH:MM:SS
activeWeekdays JSON Yes Array of weekday-state pairs, defining on which day of the week calls can be made. In the example data calls are only made on working days.
voiceFileId JSON Yes Id of the voice file which is played during the call to the receiver
actionButtons JSON Yes Array of action-button pairs, defining which key press on the phone is interpreted as accept or decline.
Valid buttons: 0-9. Valid actions: accept and decline
receivers JSON Yes Array of receivers, who are called after the click to call request is made. The receivers are called in the given order until one accepts the click to call.
maxRedials int No Number of redials to try if receiver haven't answered. Default is 3
receiverWebhookUrl string No URL to send data about each invidual call.
meta JSON No Client meta data, which is passed, as is, in the webhook body
stats JSON No Click to Call's stats.
  • dialedCalls, total number of dialled calls
  • answeredCalls, total number of answered calls
  • totalDuration, total duration of all answered calls in seconds
  • acceptsReceived, total number of accepts received
updatedAt string No Time in UTC when the resource was last updated.
Format: YYYY-MM-DD HH:MM:SS
createdAt string No Time in UTC when the resource was created.
Format: YYYY-MM-DD HH:MM:SS
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

{
  'clickToCallId': 'string',
  'expiresAt': 'YYYY-MM-DD HH:MM:SS',
  'activeFrom': 'HH:MM:SS',
  'activeTo': 'HH:MM:SS',
  'activeWeekdays': [
      {
          'weekday': 'monday',
          'active': '1'
      },
      {
          'weekday': 'tuesday',
          'active': '1'
      },
      {
          'weekday': 'wednesday',
          'active': '1'
      },
      {
          'weekday': 'thursday',
          'active': '1'
      },
      {
          'weekday': 'friday',
          'active': '1'
      },
      {
          'weekday': 'saturday',
          'active': '0'
      },
      {
          'weekday': 'sunday',
          'active': '0'
      }
  ],
  'voiceFileId': 'int',
  'actionButtons': [
      {
          'button': '5',
          'action': 'accept'
      },
      {
          'button': '9',
          'action': 'decline'
      }
  ],
  'receivers': [
      {
          'accountId': 'string or null',
          'groupId': 'string or null',
          'phone': 'string E.164 number',
          'firsName': 'string',
          'lastName': 'string',
          'answered': 'int, 1 or 0',
          'reply': 'string, accept, decline or noAnswer',
          'callDuration': 'int',
          'dialledCalls': 'int',
          'latestCallAt': 'string, yyyy-mm-dd hh:mm:ss'
      }
  ],
  'maxRedials': 'int',
  'receiverWebhookUrl': 'http://example.com/webhook/',
  'meta': {
       'someparam': 'string',
       'otherparam': 'string'
  },
  'stats': {
       'totalDialedCalls': 'int',
       'answeredCalls': 'int',
       'totalDuration': 'int, seconds',
       'acceptsReceived': 'int',
       'acceptsDeclined': 'int',
       'notAnsweredCalls': 'int'
  },
  'updatedAt':'YYYY-MM-DD HH:MM:SS',
  'createdAt':'YYYY-MM-DD HH:MM:SS'
 }
Create a new click to call by doing a POST request with JSON data to the endpoint: /click_to_calls.
URL to the created resource is returned in the location header.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
expiresAt string No After this time, if the requester hasn't answered, calling is stopped. Default value is one week from now.
Format: YYYY-MM-DD HH:MM:SS
activeFrom string Yes Time of day when the calls should start. Used with activeTo attribute to limit the calls time range in a day.
Format: HH:MM:SS
activeTo string Yes Time of day when the calls should stop. Used with activeFrom attribute to limit the calls time range in a day.
Format: HH:MM:SS
activeWeekdays JSON Yes Array of weekday-state pairs, defining on which day of the week calls can be made. In the example data calls are only made on working days.
voiceFileId JSON Yes Id of the voice file which is played during the call to the receiver
actionButtons JSON Yes Array of action-button pairs, defining which key press on the phone is interpreted as accept or decline.
Valid buttons: 0-9. Valid actions: accept and decline
receivers JSON Yes Array of receiver objects. Receiver can have either accountId, groupId or phone number in E.164 format. If phone number is given, the number is used to search for existing account which is used as the receiver. If no account is found, a new account is created with the given phone number. The receivers are called in the given order until one accepts the click to call.
maxRedials int No Number of redials to try if receiver haven't answered. Default is 3
receiverWebhookUrl string No URL to send data about each invidual call.
More info in the Receiver Webhook section
meta JSON No Client meta data, which is passed, as is, in the webhook body
Body
{
  'expiresAt': 'YYYY-MM-DD HH:MM:SS',
  'activeFrom': 'HH:MM:SS',
  'activeTo': 'HH:MM:SS',
  'activeWeekdays': [
      {
          'weekday': 'monday',
          'active': '1'
      },
      {
          'weekday': 'tuesday',
          'active': '1'
      },
      {
          'weekday': 'wednesday',
          'active': '1'
      },
      {
          'weekday': 'thursday',
          'active': '1'
      },
      {
          'weekday': 'friday',
          'active': '1'
      },
      {
          'weekday': 'saturday',
          'active': '0'
      },
      {
          'weekday': 'sunday',
          'active': '0'
      }
  ],
  'voiceFileId': 'int',
  'actionButtons': [
      {
          'button': '5',
          'action': 'accept'
      },
      {
          'button': '9',
          'action': 'decline'
      }
  ],
  'receivers': [
      {
          'accountId': 'accountId or null',
          'groupId': 'groupId or null',
          'phone': 'E.164 number or null'
      }
  ],
  'maxRedials': 'int',
  'receiverWebhookUrl': 'http://example.com/webhook/',
  'meta': {
       'someparam': 'string',
       'otherparam': 'string'
  }
 }
Headers
Parameters
Response

                                

                            
HTTP 201 Created 
Location: http://url.to/the/created/resource

{
  'clickToCallId': 'string',
  'expiresAt': 'YYYY-MM-DD HH:MM:SS',
  'activeFrom': 'HH:MM:SS',
  'activeTo': 'HH:MM:SS',
  'activeWeekdays': [
      {
          'weekday': 'monday',
          'active': '1'
      },
      {
          'weekday': 'tuesday',
          'active': '1'
      },
      {
          'weekday': 'wednesday',
          'active': '1'
      },
      {
          'weekday': 'thursday',
          'active': '1'
      },
      {
          'weekday': 'friday',
          'active': '1'
      },
      {
          'weekday': 'saturday',
          'active': '0'
      },
      {
          'weekday': 'sunday',
          'active': '0'
      }
  ],
  'voiceFileId': 'int',
  'actionButtons': [
      {
          'button': '5',
          'action': 'accept'
      },
      {
          'button': '9',
          'action': 'decline'
      }
  ],
  'receivers': [
      {
          'accountId': 'string or null',
          'groupId': 'string or null',
          'phone': 'string E.164 number',
          'firsName': 'string',
          'lastName': 'string',
          'answered': 'int, 1 or 0',
          'reply': 'string, accept, decline or noAnswer',
          'callDuration': 'int',
          'dialledCalls': 'int',
          'latestCallAt': 'string, yyyy-mm-dd hh:mm:ss'
      }
  ],
  'maxRedials': 'int',
  'receiverWebhookUrl': 'http://example.com/webhook/',
  'meta': {
       'someparam': 'string',
       'otherparam': 'string'
  },
  'stats': {
       'totalDialedCalls': 'int',
       'answeredCalls': 'int',
       'totalDuration': 'int, seconds',
       'acceptsReceived': 'int',
       'acceptsDeclined': 'int',
       'notAnsweredCalls': 'int'
  },
  'updatedAt':'YYYY-MM-DD HH:MM:SS',
  'createdAt':'YYYY-MM-DD HH:MM:SS'
 }
Delete click to call by doing a DELETE request to the endpoint: /click_to_calls/{clickToCallId}
Headers
Name Type Required Description
X-Authentication-Token string Yes Your authentication token
Parameters
Name Type Required Description
clickToCallId id Yes Id of the call. Used in the URL like: /click_to_calls/1
Body
Headers
Parameters
Response

                                

                            
HTTP 204 No Content

Emails

Fetch a collection of emails by doing a GET request to the endpoint: /emails.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

[{
  'emailId':'string',
  'messageHtml':'string',
  'messageText':'string',
  'subject':'string',
  'fromEmail':'string',
  'fromName':'string',
  'actionTime':'string, YYYY-MM-DD HH:MM:SS',
  'priceEstimateInCents':'float',
  'editable':'string, y or n',
  'receivers':[{
      'receiverId': 'string',
      'accountId': 'string',
      'groupId': 'string',
      'name': 'string',
      'firstName': 'string',
      'lastName': 'string',
      'email': 'string',
      'phone': 'string',
      'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
      'createdAt':'string, YYYY-MM-DD HH:MM:SS'
      }
      ],
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 },
 {
  'emailId':'string',
  'messageHtml':'string',
  'messageText':'string',
  'subject':'string',
  'fromEmail':'string',
  'fromName':'string',
  'actionTime':'string, YYYY-MM-DD HH:MM:SS',
  'priceEstimateInCents':'float',
  'editable':'string, y or n',
  'receivers':[{
      'receiverId': 'string',
      'accountId': 'string',
      'groupId': 'string',
      'name': 'string',
      'firstName': 'string',
      'lastName': 'string',
      'email': 'string',
      'phone': 'string',
      'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
      'createdAt':'string, YYYY-MM-DD HH:MM:SS'
      }
      ],
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 }
 ]
Fetch a single email by doing a GET request to the endpoint: /emails/{emailId}.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
emailId id Yes Id of the email. Used in the URL like: /emails/1
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

{
  'emailId':'string',
  'messageHtml':'string',
  'messageText':'string',
  'subject':'string',
  'fromEmail':'string',
  'fromName':'string',
  'actionTime':'string, YYYY-MM-DD HH:MM:SS',
  'priceEstimateInCents':'float',
  'editable':'string, y or n',
  'receivers':[{
      'receiverId': 'string',
      'accountId': 'string',
      'groupId': 'string',
      'name': 'string',
      'firstName': 'string',
      'lastName': 'string',
      'email': 'string',
      'phone': 'string',
      'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
      'createdAt':'string, YYYY-MM-DD HH:MM:SS'
      }
      ],
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 }

POST /emails

Create a new email by doing a POST request with JSON data to the endpoint: /emails.
URL to the created resource is returned in the location header.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
subject string Yes The subject of the email.
messageHtml string Yes The HTML body to be sent.
messageText string Yes The plain text body to be sent.
fromName string Yes Sender's name
fromEmail string Yes Sender's email
actionTime string, YYYY-MM-DD HH:MM:SS Yes Time when the email should be sent in UTC, if null, the email will be sent immediately. ActionTime over 1h in the past is not allowed.
receivers JSON Yes Array of receiver objects. Receiver can have either accountId, groupId or email address. If email is given, the email is used to search for existing account which is used as the receiver. If no account is found, a new account is created with the given email.
Body
{
  'messageHtml':'string',
  'messageText':'string',
  'subject':'string',
  'fromEmail':'string',
  'fromName':'string',
  'actionTime':'string, YYYY-MM-DD HH:MM:SS',
  'receivers':[{
      'accountId': 'string',
      'groupId': 'string',
      'email': 'string'
      }
      ]
 }
Headers
Parameters
Response

                                

                            
HTTP 201 Created 
Location: http://url.to/the/created/resource

{
  'emailId':'string',
  'messageHtml':'string',
  'messageText':'string',
  'subject':'string',
  'fromEmail':'string',
  'fromName':'string',
  'actionTime':'string, YYYY-MM-DD HH:MM:SS',
  'priceEstimateInCents':'float',
  'editable':'string, y or n',
  'receivers':[{
      'receiverId': 'string',
      'accountId': 'string',
      'groupId': 'string',
      'name': 'string',
      'firstName': 'string',
      'lastName': 'string',
      'email': 'string',
      'phone': 'string',
      'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
      'createdAt':'string, YYYY-MM-DD HH:MM:SS'
      }
      ],
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 }
Update email details by doing a PUT request with JSON data to the the endpoint: /emails/{emailId}.
Headers
Name Type Required Description
X-Authentication-Token string Yes Your authentication token
Parameters
Name Type Required Description
emailId id Yes Id of the email. Used in the URL like: /emails/1
subject string Yes The subject of the email.
messageHtml string Yes The HTML body to be sent.
messageText string Yes The plain text body to be sent.
fromName string Yes Sender's name
fromEmail string Yes Sender's email
actionTime string, YYYY-MM-DD HH:MM:SS Yes Time when the email should be sent in UTC, if null, the email will be sent immediately. ActionTime over 1h in the past is not allowed.
receivers JSON Yes Array of receiver objects. Receiver can have either accountId, groupId or email address. If email is given, the email is used to search for existing account which is used as the receiver. If no account is found, a new account is created with the given email.
Body
{
  'messageHtml':'string',
  'messageText':'string',
  'subject':'string',
  'fromEmail':'string',
  'fromName':'string',
  'actionTime':'string, YYYY-MM-DD HH:MM:SS',
  'receivers':[{
      'accountId': 'string',
      'groupId': 'string',
      'email': 'string'
      }
      ]
 }
Headers
Parameters
Response

                                

                            
HTTP 200 OK

{
  'emailId':'string',
  'messageHtml':'string',
  'messageText':'string',
  'subject':'string',
  'fromEmail':'string',
  'fromName':'string',
  'actionTime':'string, YYYY-MM-DD HH:MM:SS',
  'priceEstimateInCents':'float',
  'editable':'string, y or n',
  'receivers':[{
      'receiverId': 'string',
      'accountId': 'string',
      'groupId': 'string',
      'name': 'string',
      'firstName': 'string',
      'lastName': 'string',
      'email': 'string',
      'phone': 'string',
      'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
      'createdAt':'string, YYYY-MM-DD HH:MM:SS'
      }
      ],
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 }
Delete email by doing a DELETE request to the endpoint: /emails/{emailId}
Headers
Name Type Required Description
X-Authentication-Token string Yes Your authentication token
Parameters
Name Type Required Description
emailId id Yes Id of the email. Used in the URL like: /emails/1
Body
Headers
Parameters
Response

                                

                            
HTTP 204 No Content

Login

POST /login

Create a new login by doing a POST request with JSON data to the endpoint: /login
Headers
Parameters
Name Type Required Description
email string Yes Registered email address
password string Yes password
Body
{
  'email':'string',
  'password':'string'
 }
Headers
Parameters
Response

                                

                            
HTTP 201 Created

{
  'authToken':'string'
 }

RSVP Calls

Fetch a collection of RSVP calls by doing a GET request to the endpoint: /rsvp_calls
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
rsvpCallId string Yes Id of the RSVP call. Used in the URL like: /rsvp_calls/1
state string No Possible values: active, halt or complete
startTime string No Time to start calling the RSVP calls in UTC, if null, the call will be made immediately. startTime over 1h in the past is not allowed.
Format: YYYY-MM-DD HH:MM:SS
endTime string Yes Time to end calling the RSVP calls in UTC. After this time no more RSVP calls are made.
Format: YYYY-MM-DD HH:MM:SS
activeFrom string Yes Time of day when the RSVP calls should start. Used with activeTo attribute to limit the calls time range in a day.
Format: HH:MM:SS
activeTo string Yes Time of day when the RSVP calls should stop. Used with activeFrom attribute to limit the calls time range in a day.
Format: HH:MM:SS
activeWeekdays JSON Yes Array of weekday-state pairs, defining on which day of the week calls can be made. In the example data calls are only made on working days.
voiceFiles JSON Yes Array of type-voiceFileId pairs, defining which audio file is played in what state of the call.
Different voice file types in playing order:
  1. start is played when the call is answered
  2. data is the RSVP question
  3. actionButtons is telling which button to press to accept/decline the RSVP
  4. accept is played if the accept button is pressed
  5. end is played at the end of the call
actionButtons JSON Yes Array of action-button pairs, defining which key press on the phone is interpreted as accept or decline for the rsvp.
Valid buttons: 0-9. Valid actions: accept and decline
receivers JSON Yes Array of receivers
acceptsWanted int Yes Target number of receivers who pressed accept button. Calling stops when amount of acceptsWanted is reached
maxRedials int No Number of redials to try if recipient haven't answered. Default is 3
receiverWebhookUrl string No URL to send data about each invidual call.
stateWebhookUrl string No URL to send data when state of the RSVP Call change.
meta JSON No Client meta data, which is passed, as is, in the webhook body
stats JSON No RSVP Call's stats.
  • dialedCalls, total number of dialled calls
  • answeredCalls, total number of answered calls
  • totalDuration, total duration of all answered calls in seconds
  • acceptsReceived, total number of accepts received
updatedAt string No Time in UTC when the resource was last updated.
Format: YYYY-MM-DD HH:MM:SS
createdAt string No Time in UTC when the resource was created.
Format: YYYY-MM-DD HH:MM:SS
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

[{
  'rsvpCallId': 'string',
  'state': 'waitingToActive, active, halt or complete',
  'startTime': 'YYYY-MM-DD HH:MM:SS',
  'endTime': 'YYYY-MM-DD HH:MM:SS',
  'activeFrom': 'HH:MM:SS',
  'activeTo': 'HH:MM:SS',
  'activeWeekdays': [
      {
          'weekday': 'monday',
          'active': '1'
      },
      {
          'weekday': 'tuesday',
          'active': '1'
      },
      {
          'weekday': 'wednesday',
          'active': '1'
      },
      {
          'weekday': 'thursday',
          'active': '1'
      },
      {
          'weekday': 'friday',
          'active': '1'
      },
      {
          'weekday': 'saturday',
          'active': '0'
      },
      {
          'weekday': 'sunday',
          'active': '0'
      }
  ],
  'voiceFiles': [
      {
          'type': 'start',
          'voiceFileId': 'string'
      },
      {
          'type': 'data',
          'voiceFileId': 'string'
      },
      {
          'type': 'actionButtons',
          'voiceFileId': 'string'
      },
      {
          'type': 'accept',
          'voiceFileId': 'string'
      },
      {
          'type': 'end',
          'voiceFileId': 'string'
      }
  ],
  'actionButtons': [
      {
          'button': '5',
          'action': 'accept'
      },
      {
          'button': '9',
          'action': 'decline'
      }
  ],
  'receivers': [
      {
          'accountId': 'string or null',
          'groupId': 'string or null',
          'phone': 'string E.164 number',
          'firsName': 'string',
          'lastName': 'string',
          'answered': 'int, 1 or 0',
          'rsvpReply': 'string, accept, decline or noAnswer',
          'callDuration': 'int',
          'dialledCalls': 'int',
          'latestCallAt': 'string, yyyy-mm-dd hh:mm:ss'
      }
  ],
  'acceptsWanted': 'int',
  'maxRedials': 'int',
  'receiverWebhookUrl': 'http://example.com/webhook/',
  'stateWebhookUrl': 'http://example.com/webhook/',
  'meta': {
       'someparam': 'string',
       'otherparam': 'string'
  },
  'stats': {
       'totalDialedCalls': 'int',
       'answeredCalls': 'int',
       'totalDuration': 'int, seconds',
       'acceptsReceived': 'int',
       'declinesAndNoRepliesReceived': 'int',
       'notAnsweredCalls': 'int'
  },
  'updatedAt':'YYYY-MM-DD HH:MM:SS',
  'createdAt':'YYYY-MM-DD HH:MM:SS'
 }]
Fetch a single RSVP call by doing a GET request to the endpoint: /rsvp_calls/{rsvpCallId}.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
rsvpCallId string Yes Id of the RSVP call. Used in the URL like: /rsvp_calls/1
state string No Possible values: active, halt or complete
startTime string No Time to start calling the RSVP calls in UTC, if null, the call will be made immediately. startTime over 1h in the past is not allowed.
Format: YYYY-MM-DD HH:MM:SS
endTime string Yes Time to end calling the RSVP calls in UTC. After this time no more RSVP calls are made.
Format: YYYY-MM-DD HH:MM:SS
activeFrom string Yes Time of day when the RSVP calls should start. Used with activeTo attribute to limit the calls time range in a day.
Format: HH:MM:SS
activeTo string Yes Time of day when the RSVP calls should stop. Used with activeFrom attribute to limit the calls time range in a day.
Format: HH:MM:SS
activeWeekdays JSON Yes Array of weekday-state pairs, defining on which day of the week calls can be made. In the example data calls are only made on working days.
voiceFiles JSON Yes Array of type-voiceFileId pairs, defining which audio file is played in what state of the call.
Different voice file types in playing order:
  1. start is played when the call is answered
  2. data is the RSVP question
  3. actionButtons is telling which button to press to accept/decline the RSVP
  4. accept is played if the accept button is pressed
  5. end is played at the end of the call
actionButtons JSON Yes Array of action-button pairs, defining which key press on the phone is interpreted as accept or decline for the rsvp.
Valid buttons: 0-9. Valid actions: accept and decline
receivers JSON Yes Array of receivers
acceptsWanted int Yes Target number of receivers who pressed accept button. Calling stops when amount of acceptsWanted is reached
maxRedials int No Number of redials to try if recipient haven't answered. Default is 3
receiverWebhookUrl string No URL to send data about each invidual call.
stateWebhookUrl string No URL to send data when state of the RSVP Call change.
meta JSON No Client meta data, which is passed, as is, in the webhook body
stats JSON No RSVP Call's stats.
  • dialedCalls, total number of dialled calls
  • answeredCalls, total number of answered calls
  • totalDuration, total duration of all answered calls in seconds
  • acceptsReceived, total number of accepts received
updatedAt string No Time in UTC when the resource was last updated.
Format: YYYY-MM-DD HH:MM:SS
createdAt string No Time in UTC when the resource was created.
Format: YYYY-MM-DD HH:MM:SS
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

{
  'rsvpCallId': 'string',
  'state': 'waitingToActive, active, halt or complete',
  'startTime': 'YYYY-MM-DD HH:MM:SS',
  'endTime': 'YYYY-MM-DD HH:MM:SS',
  'activeFrom': 'HH:MM:SS',
  'activeTo': 'HH:MM:SS',
  'activeWeekdays': [
      {
          'weekday': 'monday',
          'active': '1'
      },
      {
          'weekday': 'tuesday',
          'active': '1'
      },
      {
          'weekday': 'wednesday',
          'active': '1'
      },
      {
          'weekday': 'thursday',
          'active': '1'
      },
      {
          'weekday': 'friday',
          'active': '1'
      },
      {
          'weekday': 'saturday',
          'active': '0'
      },
      {
          'weekday': 'sunday',
          'active': '0'
      }
  ],
  'voiceFiles': [
      {
          'type': 'start',
          'voiceFileId': 'string'
      },
      {
          'type': 'data',
          'voiceFileId': 'string'
      },
      {
          'type': 'actionButtons',
          'voiceFileId': 'string'
      },
      {
          'type': 'accept',
          'voiceFileId': 'string'
      },
      {
          'type': 'end',
          'voiceFileId': 'string'
      }
  ],
  'actionButtons': [
      {
          'button': '5',
          'action': 'accept'
      },
      {
          'button': '9',
          'action': 'decline'
      }
  ],
  'receivers': [
      {
          'accountId': 'string or null',
          'groupId': 'string or null',
          'phone': 'string E.164 number',
          'firsName': 'string',
          'lastName': 'string',
          'answered': 'int, 1 or 0',
          'rsvpReply': 'string, accept, decline or noAnswer',
          'callDuration': 'int',
          'dialledCalls': 'int',
          'latestCallAt': 'string, yyyy-mm-dd hh:mm:ss'
      }
  ],
  'acceptsWanted': 'int',
  'maxRedials': 'int',
  'receiverWebhookUrl': 'http://example.com/webhook/',
  'stateWebhookUrl': 'http://example.com/webhook/',
  'meta': {
       'someparam': 'string',
       'otherparam': 'string'
  },
  'stats': {
       'totalDialedCalls': 'int',
       'answeredCalls': 'int',
       'totalDuration': 'int, seconds',
       'acceptsReceived': 'int',
       'declinesAndNoRepliesReceived': 'int',
       'notAnsweredCalls': 'int'
  },
  'updatedAt':'YYYY-MM-DD HH:MM:SS',
  'createdAt':'YYYY-MM-DD HH:MM:SS'
 }
Create a new call by doing a POST request with JSON data to the endpoint: /rsvp_calls.
URL to the created resource is returned in the location header.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
state string No State parameter can be used to halt or resume the RSVP Calls.
Possible values: active, halt
startTime string No Time to start calling the RSVP calls in UTC, if null, the call will be made immediately. startTime over 1h in the past is not allowed.
Format: YYYY-MM-DD HH:MM:SS
endTime string Yes Time to end calling the RSVP calls in UTC. After this time no more RSVP calls are made.
Format: YYYY-MM-DD HH:MM:SS
activeFrom string Yes Time of day when the RSVP calls should start. Used with activeTo attribute to limit the calls time range in a day.
Format: HH:MM:SS
activeTo string Yes Time of day when the RSVP calls should stop. Used with activeFrom attribute to limit the calls time range in a day.
Format: HH:MM:SS
activeWeekdays JSON Yes Array of weekday-state pairs, defining on which day of the week calls can be made. In the example data calls are only made on working days.
voiceFiles JSON Yes Array of type-voiceFileId pairs, defining which audio file is played in what state of the call.
Different voice file types in playing order:
  1. start is played when the call is answered
  2. data is the RSVP question
  3. actionButtons is telling which button to press to accept/decline the RSVP
  4. accept is played if the accept button is pressed
  5. end is played at the end of the call
actionButtons JSON Yes Array of action-button pairs, defining which key press on the phone is interpreted as accept or decline for the rsvp.
Valid buttons: 0-9. Valid actions: accept and decline
receivers JSON Yes Array of receiver objects. Receiver can have either accountId, groupId or phone number in E.164 format. If phone number is given, the number is used to search for existing account which is used as the receiver. If no account is found, a new account is created with the given phone number.
acceptsWanted int Yes Target number of receivers who pressed accept button. Calling stops when amount of acceptsWanted is reached
maxRedials int No Number of redials to try if recipient haven't answered. Default is 3
receiverWebhookUrl string No URL to send data about each invidual call.
More info in the Receiver Webhook section
stateWebhookUrl string No URL to send data when the RSVP calls state change.
More info in the State Webhook section
meta JSON No Client meta data, which is passed, as is, in the webhook body
Body
{
  'state': 'active or halt',
  'startTime': 'YYYY-MM-DD HH:MM:SS',
  'endTime': 'YYYY-MM-DD HH:MM:SS',
  'activeFrom': 'HH:MM:SS',
  'activeTo': 'HH:MM:SS',
  'activeWeekdays': [
      {
          'weekday': 'monday',
          'active': '1'
      },
      {
          'weekday': 'tuesday',
          'active': '1'
      },
      {
          'weekday': 'wednesday',
          'active': '1'
      },
      {
          'weekday': 'thursday',
          'active': '1'
      },
      {
          'weekday': 'friday',
          'active': '1'
      },
      {
          'weekday': 'saturday',
          'active': '0'
      },
      {
          'weekday': 'sunday',
          'active': '0'
      }
  ],
  'voiceFiles': [
      {
          'type': 'start',
          'voiceFileId': 'string'
      },
      {
          'type': 'data',
          'voiceFileId': 'string'
      },
      {
          'type': 'actionButtons',
          'voiceFileId': 'string'
      },
      {
          'type': 'accept',
          'voiceFileId': 'string'
      },
      {
          'type': 'end',
          'voiceFileId': 'string'
      }
  ],
  'actionButtons': [
      {
          'button': '5',
          'action': 'accept'
      },
      {
          'button': '9',
          'action': 'decline'
      }
  ],
  'receivers': [
      {
          'accountId': 'accountId or null',
          'groupId': 'groupId or null',
          'phone': 'E.164 number or null'
      }
  ],
  'acceptsWanted': 'int',
  'maxRedials': 'int',
  'receiverWebhookUrl': 'http://example.com/webhook/',
  'stateWebhookUrl': 'http://example.com/webhook/',
  'meta': {
       'someparam': 'string',
       'otherparam': 'string'
  }
 }
Headers
Parameters
Response

                                

                            
HTTP 201 Created 
Location: http://url.to/the/created/resource

{
  'rsvpCallId': 'string',
  'state': 'waitingToActive, active, halt or complete',
  'startTime': 'YYYY-MM-DD HH:MM:SS',
  'endTime': 'YYYY-MM-DD HH:MM:SS',
  'activeFrom': 'HH:MM:SS',
  'activeTo': 'HH:MM:SS',
  'activeWeekdays': [
      {
          'weekday': 'monday',
          'active': '1'
      },
      {
          'weekday': 'tuesday',
          'active': '1'
      },
      {
          'weekday': 'wednesday',
          'active': '1'
      },
      {
          'weekday': 'thursday',
          'active': '1'
      },
      {
          'weekday': 'friday',
          'active': '1'
      },
      {
          'weekday': 'saturday',
          'active': '0'
      },
      {
          'weekday': 'sunday',
          'active': '0'
      }
  ],
  'voiceFiles': [
      {
          'type': 'start',
          'voiceFileId': 'string'
      },
      {
          'type': 'data',
          'voiceFileId': 'string'
      },
      {
          'type': 'actionButtons',
          'voiceFileId': 'string'
      },
      {
          'type': 'accept',
          'voiceFileId': 'string'
      },
      {
          'type': 'end',
          'voiceFileId': 'string'
      }
  ],
  'actionButtons': [
      {
          'button': '5',
          'action': 'accept'
      },
      {
          'button': '9',
          'action': 'decline'
      }
  ],
  'receivers': [
      {
          'accountId': 'string or null',
          'groupId': 'string or null',
          'phone': 'string E.164 number',
          'firsName': 'string',
          'lastName': 'string',
          'answered': 'int, 1 or 0',
          'rsvpReply': 'string, accept, decline or noAnswer',
          'callDuration': 'int',
          'dialledCalls': 'int',
          'latestCallAt': 'string, yyyy-mm-dd hh:mm:ss'
      }
  ],
  'acceptsWanted': 'int',
  'maxRedials': 'int',
  'receiverWebhookUrl': 'http://example.com/webhook/',
  'stateWebhookUrl': 'http://example.com/webhook/',
  'meta': {
       'someparam': 'string',
       'otherparam': 'string'
  },
  'stats': {
       'totalDialedCalls': 'int',
       'answeredCalls': 'int',
       'totalDuration': 'int, seconds',
       'acceptsReceived': 'int',
       'declinesAndNoRepliesReceived': 'int',
       'notAnsweredCalls': 'int'
  },
  'updatedAt':'YYYY-MM-DD HH:MM:SS',
  'createdAt':'YYYY-MM-DD HH:MM:SS'
 }
Update call details by doing a PUT request with JSON data to the the endpoint: /rsvp_calls/{rsvpCallId}.
RSVP Call's receivers cannot be updated. The /rsvp_calls/{rsvpCallId}/receivers endpoint can be used to add more receivers to an existing RSVP Call.
If RSVP Call's state is complete, update is not possible.
Headers
Name Type Required Description
X-Authentication-Token string Yes Your authentication token
Parameters
Name Type Required Description
rsvpCallId string Yes Id of the RSVP call. Used in the URL like: /rsvp_calls/1
state string No State parameter can be used to halt or resume the RSVP Calls.
Updatable values: active, halt
startTime string No Time to start calling the RSVP calls in UTC, if null, the call will be made immediately. startTime over 1h in the past is not allowed.
Format: YYYY-MM-DD HH:MM:SS
endTime string Yes Time to end calling the RSVP calls in UTC. After this time no more RSVP calls are made.
Format: YYYY-MM-DD HH:MM:SS
activeFrom string Yes Time of day when the RSVP calls should start. Used with activeTo attribute to limit the calls time range in a day.
Format: HH:MM:SS
activeTo string Yes Time of day when the RSVP calls should stop. Used with activeFrom attribute to limit the calls time range in a day.
Format: HH:MM:SS
activeWeekdays JSON Yes Array of weekday-state pairs, defining on which day of the week calls can be made. In the example data calls are only made on working days.
voiceFiles JSON Yes Array of type-voiceFileId pairs, defining which audio file is played in what state of the call.
Different voice file types in playing order:
  1. start is played when the call is answered
  2. data is the RSVP question
  3. actionButtons is telling which button to press to accept/decline the RSVP
  4. accept is played if the accept button is pressed
  5. end is played at the end of the call
actionButtons JSON Yes Array of action-button pairs, defining which key press on the phone is interpreted as accept or decline for the rsvp.
Valid buttons: 0-9. Valid actions: accept and decline
acceptsWanted int Yes Target number of receivers who pressed accept button. Calling stops when amount of acceptsWanted is reached
maxRedials int No Number of redials to try if recipient haven't answered. Default is 3
receiverWebhookUrl string No URL to send data about each invidual call.
More info in the Receiver Webhook section
stateWebhookUrl string No URL to send data when the RSVP calls state change.
More info in the State Webhook section
meta JSON No Client meta data, which is passed, as is, in the webhook body
Body
{
  'state': 'active or halt',
  'startTime': 'YYYY-MM-DD HH:MM:SS',
  'endTime': 'YYYY-MM-DD HH:MM:SS',
  'activeFrom': 'HH:MM:SS',
  'activeTo': 'HH:MM:SS',
  'activeWeekdays': [
      {
          'weekday': 'monday',
          'active': '1'
      },
      {
          'weekday': 'tuesday',
          'active': '1'
      },
      {
          'weekday': 'wednesday',
          'active': '1'
      },
      {
          'weekday': 'thursday',
          'active': '1'
      },
      {
          'weekday': 'friday',
          'active': '1'
      },
      {
          'weekday': 'saturday',
          'active': '0'
      },
      {
          'weekday': 'sunday',
          'active': '0'
      }
  ],
  'voiceFiles': [
      {
          'type': 'start',
          'voiceFileId': 'string'
      },
      {
          'type': 'data',
          'voiceFileId': 'string'
      },
      {
          'type': 'actionButtons',
          'voiceFileId': 'string'
      },
      {
          'type': 'accept',
          'voiceFileId': 'string'
      },
      {
          'type': 'end',
          'voiceFileId': 'string'
      }
  ],
  'actionbuttons': [
      {
          'button': '5',
          'action': 'accept'
      },
      {
          'button': '9',
          'action': 'decline'
      }
  ],
  'acceptsWanted': 'int',
  'maxRedials': 'int',
  'receiverWebhookUrl': 'http://example.com/webhook/',
  'stateWebhookUrl': 'http://example.com/webhook/',
  'meta': {
       'someparam': 'string',
       'otherparam': 'string'
  }
 }
Headers
Parameters
Response

                                

                            
HTTP 200 OK

{
  'rsvpCallId': 'string',
  'state': 'waitingToActive, active, halt or complete',
  'startTime': 'YYYY-MM-DD HH:MM:SS',
  'endTime': 'YYYY-MM-DD HH:MM:SS',
  'activeFrom': 'HH:MM:SS',
  'activeTo': 'HH:MM:SS',
  'activeWeekdays': [
      {
          'weekday': 'monday',
          'active': '1'
      },
      {
          'weekday': 'tuesday',
          'active': '1'
      },
      {
          'weekday': 'wednesday',
          'active': '1'
      },
      {
          'weekday': 'thursday',
          'active': '1'
      },
      {
          'weekday': 'friday',
          'active': '1'
      },
      {
          'weekday': 'saturday',
          'active': '0'
      },
      {
          'weekday': 'sunday',
          'active': '0'
      }
  ],
  'voiceFiles': [
      {
          'type': 'start',
          'voiceFileId': 'string'
      },
      {
          'type': 'data',
          'voiceFileId': 'string'
      },
      {
          'type': 'actionButtons',
          'voiceFileId': 'string'
      },
      {
          'type': 'accept',
          'voiceFileId': 'string'
      },
      {
          'type': 'end',
          'voiceFileId': 'string'
      }
  ],
  'actionButtons': [
      {
          'button': '5',
          'action': 'accept'
      },
      {
          'button': '9',
          'action': 'decline'
      }
  ],
  'receivers': [
      {
          'accountId': 'string or null',
          'groupId': 'string or null',
          'phone': 'string E.164 number',
          'firsName': 'string',
          'lastName': 'string',
          'answered': 'int, 1 or 0',
          'rsvpReply': 'string, accept, decline or noAnswer',
          'callDuration': 'int',
          'dialledCalls': 'int',
          'latestCallAt': 'string, yyyy-mm-dd hh:mm:ss'
      }
  ],
  'acceptsWanted': 'int',
  'maxRedials': 'int',
  'receiverWebhookUrl': 'http://example.com/webhook/',
  'stateWebhookUrl': 'http://example.com/webhook/',
  'meta': {
       'someparam': 'string',
       'otherparam': 'string'
  },
  'stats': {
       'totalDialedCalls': 'int',
       'answeredCalls': 'int',
       'totalDuration': 'int, seconds',
       'acceptsReceived': 'int',
       'declinesAndNoRepliesReceived': 'int',
       'notAnsweredCalls': 'int'
  },
  'updatedAt':'YYYY-MM-DD HH:MM:SS',
  'createdAt':'YYYY-MM-DD HH:MM:SS'
 }
Delete RSVP call by doing a DELETE request to the endpoint: /rsvp_calls/{rsvpCallId}
Headers
Name Type Required Description
X-Authentication-Token string Yes Your authentication token
Parameters
Name Type Required Description
rsvpCallId id Yes Id of the call. Used in the URL like: /rsvp_calls/1
Body
Headers
Parameters
Response

                                

                            
HTTP 204 No Content
Add receivers to an existing RSVP Call. Endpoint: /rsvp_calls/{rsvpCallId}/receivers.
URL to the created resource is returned in the location header.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
receivers JSON Yes Array of receiver objects. Receiver can have either accountId, groupId or phone number in E.164 format. If phone number is given, the number is used to search for existing account which is used as the receiver. If no account is found, a new account is created with the given phone number.
Body
  [
      {
          'accountId': 'accountId or null',
          'groupId': 'groupId or null',
          'phone': 'E.164 number or null'
      }
  ]
  
Headers
Parameters
Response

                                

                            
HTTP 201 Created 
Location: http://url.to/the/created/resource

  [
      {
          'accountId': 'string or null',
          'groupId': 'string or null',
          'phone': 'string E.164 number',
          'firsName': 'string',
          'lastName': 'string',
          'answered': 'int, 1 or 0',
          'rsvpReply': 'string, accept, decline or noAnswer',
          'callDuration': 'int',
          'totalDialledCalls': 'int',
          'latestCallAt': 'string, yyyy-mm-dd hh:mm:ss'
      }
  ],
  'updatedAt':'YYYY-MM-DD HH:MM:SS',
  'createdAt':'YYYY-MM-DD HH:MM:SS'
 }
Fetch stats of RSVP call by doing a GET request to the endpoint: /rsvp_calls/{rsvpCallId}/stats.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
dialedCalls int No Number of dialed calls
answeredCalls int No Number of answered calls
totalDuration int No Total duration of answered calls in seconds
acceptsReceived int No Number of accepts received
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

{
  'totalDialedCalls': 'int',
  'answeredCalls': 'int',
  'totalDuration': 'int, seconds',
  'acceptsReceived': 'int'
 }
Fetch stats of invidual calls by doing a GET request to the endpoint: /rsvp_calls/{rsvpCallId}/stats/receivers.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
accountId int No AcountId of the receiver
phoneNumber int No Phone number of the receiver in E.164 format
answered int No Was the call answered after maxRedials were reached.
Possible values: 1 or 0
rsvpReply int No Reply the receiver gave to the rsvp.
Possible values: accept, decline or noReply
callDuration int No Duration of the call in seconds
dialedCalls int No Number of calls made to contact the person.
latestCallAt int No Time when the latest call was made
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

[
 {
  'accountId': 'string',
  'answered': 'int, 1 or 0',
  'rsvpReply': 'string, accept, decline, noReply',
  'callDuration': 'int',
  'latestCallAt':'YYYY-MM-DD HH:MM:SS'
 },
 {
  'accountId': 'string',
  'answered': 'int, 1 or 0',
  'rsvpReply': 'string, accept, decline, noReply',
  'callDuration': 'int',
  'latestCallAt':'YYYY-MM-DD HH:MM:SS'
 }
 ]

Smses

Fetch sms's receivers by doing a GET request to the endpoint: /smses/{smsId}/receivers.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
smsId id Yes Id of the sms. Used in the URL like: /smses/1/receivers
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

[{
  'accountId':'string or null',
  'groupId':'string or null',
  'firstName':'string, if receiver is account',
  'lastName':'string, if receiver is account',
  'phone':'string, if receiver is account',
  'email':'string, if receiver is account',
  'name':'string, if receiver is group',
  'numberOfAccounts':'int, if receiver is group. null otherwise.',
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 },
 {
  'accountId':'string or null',
  'groupId':'string or null',
  'firstName':'string, if receiver is account',
  'lastName':'string, if receiver is account',
  'phone':'string, if receiver is account',
  'email':'string, if receiver is account',
  'name':'string, if receiver is group',
  'numberOfAccounts':'int, if receiver is group. null otherwise.',
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 }
 ]

GET /smses

Fetch a collection of smses by doing a GET request to the endpoint: /smses.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

[{
  'smsId':'int',
  'message':'string',
  'sender':'string',
  'actionTime':'string, YYYY-MM-DD HH:MM:SS',
  'priceEstimateInCents':'float',
  'editable':'string, y or n',
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 },
 {
  'smsId':'int',
  'message':'string',
  'sender':'string',
  'actionTime':'string, YYYY-MM-DD HH:MM:SS',
  'priceEstimateInCents':'float',
  'editable':'string, y or n',
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 }
 ]
Fetch a single sms by doing a GET request to the endpoint: /smses/{smsId}.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
smsId id Yes Id of the sms. Used in the URL like: /smses/1
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

{
  'smsId':'string',
  'message':'string',
  'sender':'string',
  'actionTime':'string, YYYY-MM-DD HH:MM:SS',
  'priceEstimateInCents':'float',
  'editable':'string, y or n',
  'receivers':[{
      'receiverId': 'string',
      'accountId': 'string',
      'groupId': 'string',
      'name': 'string',
      'firstName': 'string',
      'lastName': 'string',
      'email': 'string',
      'phone': 'string',
      'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
      'createdAt':'string, YYYY-MM-DD HH:MM:SS'
      }
      ],
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 }

POST /smses

Create a new sms by doing a POST request with JSON data to the endpoint: /smses.
URL to the created resource is returned in the location header.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
message string Yes Message to be sent.
sender string Yes Sender of the message. Sender must be verified phone number.
actionTime string, YYYY-MM-DD HH:MM:SS Yes Time when the sms should be sent in UTC, if null, the SMS will be sent immediately. ActionTime over 1h in the past is not allowed.
receivers JSON Yes Array of receiver objects. Receiver can have either accountId, groupId or phone number in E.164 format. If phone number is given, the number is used to search for existing account which is used as the receiver. If no account is found, a new account is created with the given phone number.
Body
{
  'message':'string',
  'sender':'string',
  'actionTime':'string, YYYY-MM-DD HH:MM:SS',
  'receivers':[{
      'accountId': 'string',
      'groupId': 'string',
      'phone': 'string'
      }
      ]
 }
Headers
Parameters
Response

                                

                            
HTTP 201 Created 
Location: http://url.to/the/created/resource

{
  'smsId':'string',
  'message':'string',
  'sender':'string',
  'actionTime':'string, YYYY-MM-DD HH:MM:SS',
  'priceEstimateInCents':'float',
  'editable':'string, y or n',
  'receivers':[{
      'receiverId': 'string',
      'accountId': 'string',
      'groupId': 'string',
      'name': 'string',
      'firstName': 'string',
      'lastName': 'string',
      'email': 'string',
      'phone': 'string',
      'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
      'createdAt':'string, YYYY-MM-DD HH:MM:SS'
      }
      ],
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 }
Update sms details by doing a PUT request with JSON data to the the endpoint: /smses/{smsId}.
Headers
Name Type Required Description
X-Authentication-Token string Yes Your authentication token
Parameters
Name Type Required Description
smsId id Yes Id of the sms. Used in the URL like: /smses/1
message string Yes Message to be sent.
sender string Yes Sender of the message. Sender must be verified phone number.
actionTime string, YYYY-MM-DD HH:MM:SS Yes Time when the sms should be sent in UTC, if null, the SMS will be sent immediately. ActionTime over 1h in the past is not allowed.
receivers JSON Yes Array of receiver objects. Receiver can have either accountId, groupId or phone number in E.164 format. If phone number is given, the number is used to search for existing account which is used as the receiver. If no account is found, a new account is created with the given phone number.
Body
{
  'message':'string',
  'sender':'string',
  'actionTime':'string, YYYY-MM-DD HH:MM:SS',
  'receivers':[{
      'accountId': 'string',
      'groupId': 'string',
      'phone': 'string'
      }
      ]
 }
Headers
Parameters
Response

                                

                            
HTTP 200 OK

{
  'smsId':'string',
  'message':'string',
  'sender':'string',
  'actionTime':'string, YYYY-MM-DD HH:MM:SS',
  'priceEstimateInCents':'float',
  'editable':'string, y or n',
  'receivers':[{
      'receiverId': 'string',
      'accountId': 'string',
      'groupId': 'string',
      'name': 'string',
      'firstName': 'string',
      'lastName': 'string',
      'email': 'string',
      'phone': 'string',
      'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
      'createdAt':'string, YYYY-MM-DD HH:MM:SS'
      }
      ],
  'updatedAt':'string, YYYY-MM-DD HH:MM:SS',
  'createdAt':'string, YYYY-MM-DD HH:MM:SS'
 }
Delete sms by doing a DELETE request to the endpoint: /smses/{smsId}
Headers
Name Type Required Description
X-Authentication-Token string Yes Your authentication token
Parameters
Name Type Required Description
smsId id Yes Id of the sms. Used in the URL like: /smses/1
Body
Headers
Parameters
Response

                                

                            
HTTP 204 No Content

Subusers

Fetch a collection of subusers by doing a GET request to the endpoint: /subusers.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

[{
  'subuserId':'int',
  'username':'string',
  'email':'string',
  'firstName':'string',
  'lastName':'string',
  'company':'string',
  'authToken':'string',
  'phone':'string',
  'updatedAt':'YYYY-MM-DD HH:MM:SS',
  'createdAt':'YYYY-MM-DD HH:MM:SS'
 },
 {
  'subuserId':'int',
  'username':'string',
  'email':'string',
  'firstName':'string',
  'lastName':'string',
  'company':'string',
  'authToken':'string',
  'phone':'string',
  'updatedAt':'YYYY-MM-DD HH:MM:SS',
  'createdAt':'YYYY-MM-DD HH:MM:SS'
 }
 ]
Fetch a single subuser by doing a GET request to the endpoint: /subusers/{subuserId}.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
subuserId id Yes Id of the subuser. Used in the URL like: /subusers/1
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

{
  'subuserId':'int',
  'username':'string',
  'email':'string',
  'firstName':'string',
  'lastName':'string',
  'company':'string',
  'authToken':'string',
  'phone':'string',
  'updatedAt':'YYYY-MM-DD HH:MM:SS',
  'createdAt':'YYYY-MM-DD HH:MM:SS'
 }
Create a new subuser by doing a POST request with JSON data to the endpoint: /subusers
URL to the created resource is returned in the location header.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
username string No Username
email string Yes Email address (Required
firstName string No First name
lastName string No Last name
company string No Company name
phone string No Phone number in the international E.164 format.
Body
Headers
Parameters
Response

                                

                            
HTTP 201 Created 
Location: http://url.to/the/created/resource

{
  'subuserId':'int',
  'username':'string',
  'email':'string',
  'firstName':'string',
  'lastName':'string',
  'company':'string',
  'authToken':'string',
  'phone':'string',
  'updatedAt':'YYYY-MM-DD HH:MM:SS',
  'createdAt':'YYYY-MM-DD HH:MM:SS'
 }
Update subuser details by doing a PUT request with JSON data to the the endpoint: /subusers/{subuserId}.
Headers
Name Type Required Description
X-Authentication-Token string Yes Your authentication token
Parameters
Name Type Required Description
subuserId id Yes Id of the subuser. Used in the URL like: /subusers/1
username string No Username
email string Yes Email address (Required
firstName string No First name
lastName string No Last name
company string No Company name
phone string No Phone number in the international E.164 format.
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

{
  'subuserId':'int',
  'username':'string',
  'email':'string',
  'firstName':'string',
  'lastName':'string',
  'company':'string',
  'authToken':'string',
  'phone':'string',
  'updatedAt':'YYYY-MM-DD HH:MM:SS',
  'createdAt':'YYYY-MM-DD HH:MM:SS'
 }
Delete subuser by doing a DELETE request to the endpoint: /subusers/{subuserId}
Headers
Name Type Required Description
X-Authentication-Token string Yes Your authentication token
Parameters
Name Type Required Description
subuserId id Yes Id of the subuser. Used in the URL like: /subusers/1/accounts
Body
Headers
Parameters
Response

                                

                            
HTTP 204 No Content

Voice Files

Fetch a collection of voice files by doing a GET request to the endpoint: /voice_files.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
voiceFileId string No Id of the voice file.
name string No Name of the voice file
description string No Description of the voice file
url string Yes URL to the orignal file
mp3Url string Yes URL to the mp3 version of the file
wavUrl string Yes URL to the wav version of the file
duration string Yes Duration of the voice file in seconds
status string Yes Status of the voice file. Only voice files with status ready can be used
text string Yes Text which is used to convert the text to speech
voiceCode string Yes Voice which was used to create the voice file
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

[{
  'voiceFileId':'string',
  'name':'string',
  'description':'string',
  'url':'string',
  'mp3Url':'string',
  'wavUrl':'string',
  'duration':'int, seconds',
  'status':'string, pending|ready|failed',
  'text':'string',
  'voiceCode':'string',
  'updatedAt':'YYYY-MM-DD HH:MM:SS',
  'createdAt':'YYYY-MM-DD HH:MM:SS'
 },
 {
  'voiceFileId':'string',
  'name':'string',
  'description':'string',
  'url':'string',
  'mp3Url':'string',
  'wavUrl':'string',
  'duration':'int, seconds',
  'status':'string, pending|ready|failed',
  'text':'string',
  'voiceCode':'string',
  'updatedAt':'YYYY-MM-DD HH:MM:SS',
  'createdAt':'YYYY-MM-DD HH:MM:SS'
 }
 ]
Fetch a single voice file by doing a GET request to the endpoint: /voice_files/{voiceFileId}.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
voiceFileId id Yes Id of the voice file. Used in the URL like: /voice_files/1
name string No Name of the voice file
description string No Description of the voice file
url string Yes URL to the orignal file
mp3Url string Yes URL to the mp3 version of the file
wavUrl string Yes URL to the wav version of the file
duration string Yes Duration of the voice file in seconds
status string Yes Status of the voice file. Only voice files with status ready can be used
text string Yes Text which is used to convert the text to speech
voiceCode string Yes Voice which was used to create the voice file
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

{
  'voiceFileId':'string',
  'name':'string',
  'description':'string',
  'url':'string',
  'mp3Url':'string',
  'wavUrl':'string',
  'duration':'int, seconds',
  'status':'string, pending|ready|failed',
  'text':'string',
  'voiceCode':'string, en|fi',
  'updatedAt':'YYYY-MM-DD HH:MM:SS',
  'createdAt':'YYYY-MM-DD HH:MM:SS'
 }
Fetch a collection of voice codes by doing a GET request to the endpoint: /voice_files/text_to_speech/voice_codes.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
voiceCode string No The voice code
description string No Description of the voice code
Body
Headers
Parameters
Response

                                

                            
HTTP 200 OK

[{
  'voiceCode':'string',
  'description':'string',
  'updatedAt':'YYYY-MM-DD HH:MM:SS',
  'createdAt':'YYYY-MM-DD HH:MM:SS'
 },
 {
  'voiceCode':'string',
  'description':'string',
  'updatedAt':'YYYY-MM-DD HH:MM:SS',
  'createdAt':'YYYY-MM-DD HH:MM:SS'
 }
 ]
*** NOTICE *** This endpoint is under development.
Create voice files from text by doing a POST request with JSON data to the endpoint: /voice_files/text_to_speech
URL to the created resource is returned in the location header.
Headers
Parameters
Name Type Required Description
name string Yes Name of the voice file
text string Yes Text which is used to convert the text to speech. Maximum length is 80 words
voiceCode string Yes Voice Code defines the language and gender of the voice.
Available voice codes can be fetched from the /voice_files/text_to_speech/voice_codes endpoint
Body
{
  'name':'string',
  'text':'string',
  'voiceCode':'string'
 }
Headers
Parameters
Response

                                

                            
HTTP 201 Created 
Location: http://url.to/the/created/resource

{
  'voiceFileId':'string',
  'name':'string',
  'description':'string',
  'url':'string',
  'mp3Url':'string',
  'wavUrl':'string',
  'duration':'int, seconds',
  'status':'string, pending|ready|failed',
  'text':'string',
  'voiceCode':'string',
  'updatedAt':'YYYY-MM-DD HH:MM:SS',
  'createdAt':'YYYY-MM-DD HH:MM:SS'
 }
Upload a wav file using HTTP multipart POST data
Headers
Name Type Required Description
Content-Type: multipart/form-data Yes
Parameters
Body
{
  'files':'path-to-file'
 }
Headers
Parameters
Response

                                

                            
HTTP 201 Created 
Location: http://url.to/the/created/resource

{'files': [
  {
  'voiceFileId':'string',
  'name':'string',
  'description':'string',
  'duration':'int, seconds',
  'fileName':'string',
  'url':'string',
  'mp3Url':'string',
  'wavUrl':'string',
  'size':'string',
  'status':'string, pending|ready|failed',
  'updatedAt':'YYYY-MM-DD HH:MM:SS',
  'createdAt':'YYYY-MM-DD HH:MM:SS'
  }
 ]}
Update voice file details by doing a PUT request with JSON data to the the endpoint: /voice_files/{voiceFileId}.
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
voiceFileId id Yes Id of the voice file. Used in the URL like: /voice_files/1
name JSON Yes Name of the voice file
description JSON Yes Description of the voice file
Body
{
  'name':'string',
  'description':'string'
 }
Headers
Parameters
Response

                                

                            
HTTP 200 OK

{
  'voiceFileId':'string',
  'name':'string',
  'description':'string',
  'url':'string',
  'mp3Url':'string',
  'wavUrl':'string',
  'duration':'int, seconds',
  'status':'string, pending|ready|failed',
  'text':'string',
  'voiceCode':'string',
  'updatedAt':'YYYY-MM-DD HH:MM:SS',
  'createdAt':'YYYY-MM-DD HH:MM:SS'
 }
Delete voice file by doing a DELETE request to the endpoint: /voice_files/{voiceFileId}
Headers
Name Type Required Description
X-Access-Token string Yes Your authentication token
Parameters
Name Type Required Description
voiceFileId id Yes Id of the voice file. Used in the URL like: /voice_files/1
Body
Headers
Parameters
Response

                                

                            
HTTP 204 No Content