SMS API

API change history

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

Create Campaign Webhook

This method creates new campaign webhook record for specified campaign. Request body is to contain information required to create new webhook instance - url and 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": "CampaignMessageStatusUpdate", "Events": [ { "Number": "27728374958", "Status": "Enroute" }, { "Number": "27722738495", "Status": "Delivered" }, { "Number": "27720293845", "Status": "Delivered" } ] }

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. For CampaignReply webhook type, there's also a 'Message' field in each event instance, containing received reply text. Type field designates webhook type - in this case 'CampaignMessageStatusUpdate'.

Try it

Request

Request URL

Request parameters

  • int

    ID value of SMS campaign, new webhook is to be created for

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: 'CampaignReply' and 'CampaignMessageStatusUpdate'

{
  "Url": "https://mywebhook.com/drkfgjhcfkjghikedurhgid",
  "WebhookType": "CampaignMessageStatusUpdate"
}
{
  "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 campaign 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": "CampaignMessageStatusUpdate",
  "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"
    }
  }
}

404 Not Found

SMS campaign with specified ID value does not exist

Representations

{
  "Code": 132,
  "Message": "Campaign with provided ID value does not exist"
}
{
  "type": "object",
  "properties": {
    "Code": {
      "type": "integer",
      "description": "Error code"
    },
    "Message": {
      "type": "string",
      "description": "Error details in user-friendly form"
    }
  }
}

409 Conflict

Creating new webhook record has failed due to database constraint. Please check out response body for more details

Representations

{
  "Code": 133,
  "Message": "Campaign with provided ID value already has a webhook instance with specified type"
}
{
  "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/campaigns/{campaignId}/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/campaigns/{campaignId}/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/campaigns/{campaignId}/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/campaigns/{campaignId}/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/campaigns/{campaignId}/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/campaigns/{campaignId}/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/campaigns/{campaignId}/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/campaigns/{campaignId}/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/campaigns/{campaignId}/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