API SMS PRO Documentation
Versions
Num | Modifications | Date of application |
---|---|---|
1.0.0 | Initial version | |
1.1.0 |
|
16/12/2021 |
1.1.1 |
|
11/07/2022 |
1. Introduction
The HTTP API is the easiest way to use TextingHouse’s SMS communication portal.
This interface can be used in the form of HTTP POST as well as GET URL.
We recommend using POST if the data volume is large, as the GET is limited in size.
TextingHouse’s responses to these queries are plain text (content-type: text/plain; charset=utf-8).
For example the ID of the SMS created, the SMS status code, the credit value, an error code… They are inserted directly into the HTTP body of the response, without any particular tag.
Communication with our API is done over HTTPS on port 443.
Note: It is important that the entire document is read before contacting support.
All of the examples shown in this document use HTTP GET.
2. Prerequisites
In order to use the SMS sending API you first need an active customer account with positive credit on the TextingHouse systems.
The identifiers will be replaced by ‘XXXX‘ in the code examples that follow.
To register, it’s here: Register – API TextingHouse.
3. Examples
Below are basic implementation examples for sending an SMS via the TextingHouse API.
The parameters are case sensitive.
GET basic command example
https://api.textinghouse.com/http/v1/do?user=XXXX&pass=XXXX&cmd=sendsms&to=999&txt=XXXXX&iscom=N
Return example:
ID:5d726149a129c829e8c23f7b
Javascript example - jQuery
$.post('https://api.textinghouse.com/http/v1/do',
{
user: 'XXXX',
pass: 'XXXX',
cmd: 'sendsms',
to: '999',
txt: 'My test SMS'
iscom: 'N'
}, function(data) {
alert(data);
});
Javascript example - axios
const axios = require('axios');
axios({
method: 'post',
url: 'https://api.textinghouse.com/http/v1/do',
data: {
user: 'XXXX',
pass: 'XXXX',
cmd: 'sendsms',
to: '999',
txt: 'My test SMS',
iscom: 'N'
},
responseType: 'text'
})
.then((res) => {
console.log(res.data)
})
.catch((error) => {
console.error(error)
});
PHP example - cURL
$data = array(
'user' => 'XXXX',
'pass' => 'XXXX',
'cmd' => 'sendsms',
'to' => '999',
'txt' => 'My test SMS',
'iscom' => 'N'
);
$url = 'https://api.textinghouse.com/http/v1/do';
$ch = curl_init($url);
$postString = http_build_query($data, '', '&');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postString);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
4. How the API works
4.1 Authentication
Once your account is created on TextingHouse API, your login details are available on the “Options” page:
- user : the username provided to you for the http TextingHouse API
- pass : the password associated with the username
An IP lock can also be added via the “Options” > “IP lock” page in order to allow sending only from a specific IP address: this is recommended.
4.2 Commands
The commands are specified via the « cmd » parameter. The possible values are:
cmd value | Additional parameters | Description |
---|---|---|
sendsms | yes | Command used for sending SMS. See Send SMS |
getstatus | yes | Get the status of a message via its ID. See Get SMS status |
getcredit | no | Get customer account actual credit. See Consult your credit balance |
4.3 Send SMS
Sending a message is done using the command « sendsms »:
&cmd=sendsms
The parameters of the « sendsms » command are as follows:
Parameter | Mandatory | Description |
---|---|---|
to | yes | Recipient’s phone number prefixed by the international country code Ex: 33 for France |
txt | yes |
Message text. |
climsgid | no | Message client ID Defined by customer to get follow-up. Up to 32 characters. |
from | no | Allows you to customize the sender ID of the SMS. Sender ID personalization is restricted to a set of names authorized for your account. Requests are made via the “Options” page of the API interface. Limited to 11 unaccented characters (a-zA-Z0-9). The personalization of the sender ID is not possible for certain destinations (technical restriction of certain operators). TextingHouse reserves the right to replace the sender chosen by the customer at the time of sending. |
iscom | yes | Indicates whether it is a commercial message or not. Possible value:
Commercial messages must be sent on working days and during the day. The authorized slots (according to the local time of the recipient) are therefore as follows:
Commercial messages on Sundays and public holidays are not permitted. Text messages of a commercial nature sent outside the authorized time slots will be retained and sent at the next working hour without the customer being able to issue a complaint or cancellation of sending. Each commercial message must also:
See detail below: Commercial / marketing SMS |
Example of sending an SMS containing the message « SMS accentué de test via TextingHouse » to the French number with the client ID « FRS78913246 »:
https://api.textinghouse.com/http/v1/do?user=XXXX&pass=XXXXXX&cmd=sendsms&to=33628000000&txt=SMS%20accentu%C3%A9%20de%20test%20via%20TextingHouse&climsgid=FRS78913246&from=test&iscom=N
Return:
ID:<api_id> (TextingHouse ID)
Example:
ID:5d726149a129c829e8c23f7b
Following a sending, the API provides the message ID, which confirms that the message has been properly handled. This ID will be necessary for you to correlate the feedback of statuses and the messages sent.
Or, in case of error:
ERR: <error_code> | error description
Example:
ERR: 101 | Authentication failed
In the event of an error, the following codes must be taken into consideration:
Error code | Description |
---|---|
100 | Missing parameter |
101 | Authentication failure: invalid username, password or IP address |
104 | Insufficient credit |
350 | Stop flooding. Only one message (same content, same telephone number) per recipient is authorized per 10 seconds. Beyond this limit, the API returns this error. |
400 | STOP mention missing The message is commercial but the mention `STOP sms-s.top` is missing. |
Commercial / marketing SMS
The parameter « iscom » (mandatory) of the « sendsms » command indicates if your SMS is commercial (or marketing), or if it is a service message.
Reminder of the CNIL rules concerning commercial SMS:
SMS advertising is possible in France provided that people have explicitly given their consent to be canvassed when collecting their mobile phone number.
Each commercial message must:
- specify the identity of the advertiser,
- provide a simple way to object to receiving new solicitations (STOP SMS).
- be sent only on working days and during the day.
STOP SMS
All commercial SMS (iscom = Y) must include the mention ‘STOP sms-s.top’ at the end of the text of your message.
TextingHouse will then automatically collect STOP SMS from your recipients to allow them to unsubscribe from your communications.
If a commercial SMS does not contain the mention ‘STOP sms-s.top’, it will be refused (error 400).
Time restrictions:
The rules for prospecting by SMS define that messages of a commercial nature must be sent on working days and during the day. The slots allowed by TextingHouse are therefore as follows:
- Saturday between 10 a.m. and 3 p.m.
Commercial messages are not permitted on Sundays or public holidays.
Text messages of a commercial nature sent outside the authorized time slots will be retained and sent at the next working hour without the customer being able to issue a complaint or cancellation.
SMS cost
Each SMS sent to the API (except test SMS sent to 999), is billed at the rate in effect at the time of sending. If the SMS exceeds 160 characters, each additional SMS will be counted according to the cutting of the SMS (see FAQ What size of message can I send by SMS ?).
4.4 Get SMS status
We recommend the use of automatic status reporting via the callback URL: see Status callback.
However, it is possible to request the status of a message by specifying its TextingHouse ID or its customer ID with the command « getstatus » :
&cmd=getstatus
The parameters are as follows:
Parameter | Description |
---|---|
api_id | TextingHouse ID returned by the API when sending |
climsgid | Customer ID provided when sending |
If both parameters are entered, only the api_id will be taken into account.
Example:
https://api.textinghouse.com/http/v1/do?user=XXXX&pass=XXXXXX&cmd=getstatus&api_id=1c97394eea5806c0741be3601d8fca0b
Or
https://api.textinghouse.com/http/v1/do?user=XXXX&pass=XXXXXX&cmd=getstatus&climsgid=FRS78913246
Return:
<status_code>
Example:
3
Status codes: see Status dode
Error code:
Error code | Description |
---|---|
100 | Missing parameter |
101 | Authentication failure: invalid username, password or IP address |
201 | api_id unknown |
202 | climsgid unknown |
4.5 Status callback
The TextingHouse API will send the statuses with HTTP POST containing the status in JSON format on a URL provided by the client (callback URL). This URL configuration is done on the API interface page “Options” > “DLR and MO callbacks”.
For example if the entered callback URL is https://www.mysite.com/myscript.do, the request made by TextingHouse will be:
POST https://www.mondomaine.com/monscript.do HTTP/1.1
Content-Type: application/json
{
"apimsgid": "5d726149a129c829e8c23f7b",
"climsgid": "FR-6468446",
"status": "3"
}
With the following parameters:
- apimsgid: TextingHouse ID returned by the API when sending (string)
- climsgid: Optional customer ID provided when sending (string)
- status: SMS status (string) – code list: see Status codes
The client-side script should respond with a 2XX HTML status code. The response body is not processed by TextingHouse.
4.6 SMS replies callback (SMS MO)
The TextingHouse API will send the SMS replies* with HTTP POST containing the SMS reply in JSON format on a URL provided by the client (SMSMO callback URL). This URL configuration is done on the API interface page “Options” > “DLR and MO callbacks”.
* Depending on the operators and the sending countries. Warning, when a sender ID name is used (parameter ‘from’ in ‘sendsms’ command), the recipients cannot reply to SMS.
For example if the entered callback URL is https://www.mysite.com/myscript.do, The request made by TextingHouse will be:
POST https://www.mondomaine.com/monscript.do HTTP/1.1
Content-Type: application/json
{
"apimsgid": "5d726149a129c829e8c23f7b",
"climsgid": "FR-6468446",
"from": "33600000000",
"txt": "Texte du message",
"date": "2019-04-01T13:09:16Z"
}
With the following parameters:
- apimsgid: TextingHouse ID returned by the API when sending (string)
- climsgid: Optional customer ID provided when sending (string)
- from: phone number of the message sender (string)
- txt: the message (string)
- date: message UTC date, format YYYY-MM-DD HH:mm:ss (string)
The client-side script should respond with a 2XX HTML status code. The response body is not processed by TextingHouse.
4.7 Consult your credit balance
Get your credit balance with command getcredit :
&cmd=getcredit
Example :
https://api.textinghouse.com/http/v1/do?user=XXXX&pass=XXXXXX&cmd=getcredit
Return:
<credit>
Example :
1423
4.8 Test SMS to 999
Sending an SMS to the number 999 is a simple way to test the API for both development and service monitoring.
Sending an SMS to this number is subject to authentication as for sending a standard SMS to a “classic” recipient. Note that SMS sent to 999 are not charged.
The API will support these tests in the same way as standard SMS (see Send SMS, Get SMS status et Status callback), this implies in particular:
- The return of a message id.
- Support for your internal id (optional).
- The transmission of an acknowledgment of receipt in “delivered” status. Note that this virtual acknowledgment of receipt is generated at the end of the test (the SMS is not delivered to an operator) but nevertheless reflects the proper functioning of our sending chain and in particular the communication between the API front-ends and our platforms of consignments.
- The response to the status query on this message ID.
The content of the test SMS is free and not taken into account.
5. Appendices
5.1 Status codes
Status code | Status type | Description |
---|---|---|
0 | temporary | Processing in progress |
1 | temporary | In progress: SMS sent, awaiting final status. |
3 | final | SMS received |
4 | final | Expired or out of reach |
5 | final | Not subscribed |
6 | final | SMS not received” |
7 | final | Prohibited sending |
20 | final | Insufficient credit |
5.2 Error codes
Error code | Description |
---|---|
100 | Missing parameters |
101 | Authentication failure: invalid username, password or IP address |
104 | Insufficient credit |
201 | Unknown api_id |
202 | Unknown climsgid |
300 | Error processing request |
350 | Flood detected. Only one message (same content, same telephone number) per recipient is authorized per 10 seconds. Beyond this limit, the API returns this error. |
400 |
STOP mention missing The message is commercial but the mention `STOP sms-s.top` is missing. |
5.3 Allowed characters in SMS
JavaScript pattern representing the allowed characters:
/[ 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZÄäàÅåÆæßÇèéÉìÖöòØøÑñÜüù#¤%&()*+,\-./:;<>=§$!?£¿·@¡\'"\n\[\]{}~^|]/
See GSM 03.38