SMS API
API change historySMS 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 itRequest
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