SMS API

API change history

SMS API contains methods used to send notifications via Short Message Service, directly to your client's phone

Create Message Webhook

This method creates new webhook record for receiving notifications about individual message status updates or for being notified about received replies. Request body is to contain information required to create new webhook instance - url and a webhook type. If successfully created, when sent message status is updated, message is to be sent to specified url: { "Timestamp": "2021-12-08T15:09:24.9724224Z", "Type": "MessageStatusUpdate", "Events": [ { "Number": "27728374958", "Status": "Enroute" }, { "Number": "27722738495", "Status": "Delivered" }, { "Number": "27720293845", "Status": "Delivered", "Id": "slkedfjo938urxcvx9ejos" } ] }

Events are dispatched usually a few seconds after being received. Also, they're aggregated - a single notification contains array of up to 500 events. Each event contains phone number and current message status. Also, if external message ID was provided, it will be appended to "Number" field. Type field designates webhook type - in this case MessageStatusUpdate or MessageReply.

Try it

Request

Request URL

Request headers

  • string

    The authorization token. The token will be in the format "Bearer API_KEY". For example: "Authorization: Bearer 123456789". Please include the space between "Bearer" and "API_KEY".

Request body

New campaign webhook request should contain a JSON object with webhook type and url properties set. Allowed webhook types are: 'MessageStatusUpdate' and 'MessageReply'

{
  "Url": "https://mywebhook.com/drkfgjhcfkjghikedurhgid",
  "WebhookType": "MessageStatusUpdate"
}
{
  "type": "object",
  "properties": {
    "Url": {
      "type": "string",
      "description": "Webhook url - an internet address to which event notifications are to be set to"
    },
    "WebhookType": {
      "type": "string",
      "description": "Webhook type"
    }
  }
}

Responses

201 Created

New SMS message status webhook has been created. Response body contains new record, and Location header contains its url

Response headers

  • (optional)
    string

    Url of just created subscriber record

Representations

{
  "Id": 31,
  "IsActive": true,
  "Url": "https://mywebhook.com/2938ruweiury2983r92",
  "WebhookType": "MessageStatusUpdate",
  "DateCreated": "2021-10-25T11:29:17Z"
}
{
  "type": "object",
  "properties": {
    "Id": {
      "type": "integer",
      "description": "Webhook ID value"
    },
    "IsActive": {
      "type": "boolean",
      "description": "Webhook active status indicator"
    },
    "Url": {
      "type": "string",
      "description": "Webhook url - address to which event notifications are to be sent"
    },
    "WebhookType": {
      "type": "string",
      "description": "Webhook type"
    },
    "DateCreated": {
      "type": "string",
      "description": "Webhook creation date"
    }
  }
}

400 Bad Request

An error occurred while making campaign webhook create request. Please check response body to find additional details about error.

Representations

{
  "Code": 146,
  "Message": "Webhook URL is too long. It must not be longer then 512 characters"
}
{
  "type": "object",
  "properties": {
    "Code": {
      "type": "integer",
      "description": "Error code"
    },
    "Message": {
      "type": "string",
      "description": "Error details in user-friendly form"
    }
  }
}

401 Unauthorized

Provided API credentials is not valid. Please check out response body for more details.

Representations

{
  "Code": 100,
  "Message": "Provided API key is invalid"
}
{
  "type": "object",
  "properties": {
    "Code": {
      "type": "integer",
      "description": "Error code"
    },
    "Message": {
      "type": "string",
      "description": "Error details in user-friendly form"
    }
  }
}

Code samples

@ECHO OFF

curl -v -X POST "https://api.touchbasepro.com/sms/message/webhooks"
-H "Authorization: Bearer "
-H "Content-Type: application/json"

--data-ascii "{body}" 
using System;
using System.Net.Http.Headers;
using System.Text;
using System.Net.Http;
using System.Web;

namespace CSHttpClientSample
{
    static class Program
    {
        static void Main()
        {
            MakeRequest();
            Console.WriteLine("Hit ENTER to exit...");
            Console.ReadLine();
        }
        
        static async void MakeRequest()
        {
            var client = new HttpClient();
            var queryString = HttpUtility.ParseQueryString(string.Empty);

            // Request headers
            client.DefaultRequestHeaders.Add("Authorization", "Bearer ");

            var uri = "https://api.touchbasepro.com/sms/message/webhooks?" + queryString;

            HttpResponseMessage response;

            // Request body
            byte[] byteData = Encoding.UTF8.GetBytes("{body}");

            using (var content = new ByteArrayContent(byteData))
            {
               content.Headers.ContentType = new MediaTypeHeaderValue("< your content type, i.e. application/json >");
               response = await client.PostAsync(uri, content);
            }

        }
    }
}	
// // This sample uses the Apache HTTP client from HTTP Components (http://hc.apache.org/httpcomponents-client-ga/)
import java.net.URI;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class JavaSample 
{
    public static void main(String[] args) 
    {
        HttpClient httpclient = HttpClients.createDefault();

        try
        {
            URIBuilder builder = new URIBuilder("https://api.touchbasepro.com/sms/message/webhooks");


            URI uri = builder.build();
            HttpPost request = new HttpPost(uri);
            request.setHeader("Authorization", "Bearer ");
            request.setHeader("Content-Type", "application/json");


            // Request body
            StringEntity reqEntity = new StringEntity("{body}");
            request.setEntity(reqEntity);

            HttpResponse response = httpclient.execute(request);
            HttpEntity entity = response.getEntity();

            if (entity != null) 
            {
                System.out.println(EntityUtils.toString(entity));
            }
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
        }
    }
}

<!DOCTYPE html>
<html>
<head>
    <title>JSSample</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
</head>
<body>

<script type="text/javascript">
    $(function() {
        var params = {
            // Request parameters
        };
      
        $.ajax({
            url: "https://api.touchbasepro.com/sms/message/webhooks?" + $.param(params),
            beforeSend: function(xhrObj){
                // Request headers
                xhrObj.setRequestHeader("Authorization","Bearer ");
                xhrObj.setRequestHeader("Content-Type","application/json");
            },
            type: "POST",
            // Request body
            data: "{body}",
        })
        .done(function(data) {
            alert("success");
        })
        .fail(function() {
            alert("error");
        });
    });
</script>
</body>
</html>
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    
    NSString* path = @"https://api.touchbasepro.com/sms/message/webhooks";
    NSArray* array = @[
                         // Request parameters
                         @"entities=true",
                      ];
    
    NSString* string = [array componentsJoinedByString:@"&"];
    path = [path stringByAppendingFormat:@"?%@", string];

    NSLog(@"%@", path);

    NSMutableURLRequest* _request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:path]];
    [_request setHTTPMethod:@"POST"];
    // Request headers
    [_request setValue:@"Bearer " forHTTPHeaderField:@"Authorization"];
    [_request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    // Request body
    [_request setHTTPBody:[@"{body}" dataUsingEncoding:NSUTF8StringEncoding]];
    
    NSURLResponse *response = nil;
    NSError *error = nil;
    NSData* _connectionData = [NSURLConnection sendSynchronousRequest:_request returningResponse:&response error:&error];

    if (nil != error)
    {
        NSLog(@"Error: %@", error);
    }
    else
    {
        NSError* error = nil;
        NSMutableDictionary* json = nil;
        NSString* dataString = [[NSString alloc] initWithData:_connectionData encoding:NSUTF8StringEncoding];
        NSLog(@"%@", dataString);
        
        if (nil != _connectionData)
        {
            json = [NSJSONSerialization JSONObjectWithData:_connectionData options:NSJSONReadingMutableContainers error:&error];
        }
        
        if (error || !json)
        {
            NSLog(@"Could not parse loaded json with error:%@", error);
        }
        
        NSLog(@"%@", json);
        _connectionData = nil;
    }
    
    [pool drain];

    return 0;
}
<?php
// This sample uses the Apache HTTP client from HTTP Components (http://hc.apache.org/httpcomponents-client-ga/)
require_once 'HTTP/Request2.php';

$request = new Http_Request2('https://api.touchbasepro.com/sms/message/webhooks');
$url = $request->getUrl();

$headers = array(
    // Request headers
    'Authorization' => 'Bearer ',
    'Content-Type' => 'application/json',
);

$request->setHeader($headers);

$parameters = array(
    // Request parameters
);

$url->setQueryVariables($parameters);

$request->setMethod(HTTP_Request2::METHOD_POST);

// Request body
$request->setBody("{body}");

try
{
    $response = $request->send();
    echo $response->getBody();
}
catch (HttpException $ex)
{
    echo $ex;
}

?>
########### Python 2.7 #############
import httplib, urllib, base64

headers = {
    # Request headers
    'Authorization': 'Bearer ',
    'Content-Type': 'application/json',
}

params = urllib.urlencode({
})

try:
    conn = httplib.HTTPSConnection('api.touchbasepro.com')
    conn.request("POST", "/sms/message/webhooks?%s" % params, "{body}", headers)
    response = conn.getresponse()
    data = response.read()
    print(data)
    conn.close()
except Exception as e:
    print("[Errno {0}] {1}".format(e.errno, e.strerror))

####################################

########### Python 3.2 #############
import http.client, urllib.request, urllib.parse, urllib.error, base64

headers = {
    # Request headers
    'Authorization': 'Bearer ',
    'Content-Type': 'application/json',
}

params = urllib.parse.urlencode({
})

try:
    conn = http.client.HTTPSConnection('api.touchbasepro.com')
    conn.request("POST", "/sms/message/webhooks?%s" % params, "{body}", headers)
    response = conn.getresponse()
    data = response.read()
    print(data)
    conn.close()
except Exception as e:
    print("[Errno {0}] {1}".format(e.errno, e.strerror))

####################################
require 'net/http'

uri = URI('https://api.touchbasepro.com/sms/message/webhooks')


request = Net::HTTP::Post.new(uri.request_uri)
# Request headers
request['Authorization'] = 'Bearer '
# Request headers
request['Content-Type'] = 'application/json'
# Request body
request.body = "{body}"

response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
    http.request(request)
end

puts response.body