> For the complete documentation index, see [llms.txt](https://en-api.decisiontele.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://en-api.decisiontele.com/viber-+-sms-api.md).

# VIBER + SMS API

DecisionTelecom Viber + SMS API allows you to send and receive Viber business messages to and from any country in the world via API, and if Viber message is not delivered to a client, it will be resend and delivered as regular SMS message. Each message is identified by a unique random ID, so users can always check the status of a message using given endpoint.

The Viber + SMS API uses HTTPS with access key that is used as the API authorization. Request and response payloads are formatted as JSON using UTF-8 encoding.

**API Authorization** - Base64 access key.

Please contact your account manager to get an API key.

## **Auth**

## Basic Auth

#### **Example**:

```
$userHashKey = 'User Hash Key provided by your account manager';
$ch = curl_init('https://web.it-decision.com/v1/api/send-viber');
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "$userHashKey");
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($requestParams)); // 
$requestParams - raquest array with correct data 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
$result = curl_exec($ch); 
curl_close($ch);
```

## **Send Viber message**

{% tabs %}
{% tab title="POST" %}

```
https://web.it-decision.com/v1/api/send-viber
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Request POST" %}

```json
{
    "source_addr": "Custom Company", 						
    "destination_addr": 8882222200,							
    "message_type":225, 									
    "text":"Message content", 								
    "text_sms":"SMS message content", // add this parameter: if, in the event of non-delivery via Viber, it is necessary to resend transactional message via SMS  
    "image":"https://yourdomain.com/images/image.jpg", 		
    "button_caption":"Join Us", 							
    "button_action":"https://yourdomain.com/join-us",   	
    "source_type":1, 										
    "callback_url":"https://yourdomain.com/viber-callback",
    "validity_period":60
}
```

{% endtab %}
{% endtabs %}

## **Parameters**

**source\_addr:**

<= 20 chars - from whom the message

**destination\_addr:**

<= 20 chars - to whom the message

**message\_type (Type of message sent):**

225 only text (promotional messages)

108 text+image+button (promotional messages)

**text:**

<= 1000 chars - text of Viber message

**text\_sms:**

<= 70 chars for UCS-2 (16-bit) and <= 160 chars for Latin - alternative SMS text if Viber message is not delivered (only for transactional messages)

**image (Correct URL with image for promotional message with button caption and button action):**

jpg or jpeg (mime type is image/jpeg), maximum resolution 400x400 pixels

png (mime type is image/png), maximum resolution 400x400 pixels

**button\_caption:**

<= 30 chars - button caption

**button\_action:**

Correct URL for transition when you press the button

**source\_type (Message sending procedure):**

promotion message (the message can contain only text or text, an image, and a button) - 1

**callback\_url:**

Correct URL for message status callback

**validity\_period:**

TTL (Time to live) allows the sender to limit the life time of a message. In case the message did not get the status "delivered" before the time ended, the message will not be charged and will not be delivered to the user. In case no TTL was provided (no "ttl" parameter) Viber will try to deliver the message for up to 1 day.

promotional message - min TTL 40 seconds max TTL 21600 seconds (6 hours)

#### **Response:**

{% tabs %}
{% tab title=" JSON (POST)" %}

```json
{
    "message_id":4291233	
}
```

{% endtab %}
{% endtabs %}

#### **Values**:

**message\_id:**

Sent message ID

## **Receive Viber message**

{% tabs %}
{% tab title="POST" %}

```
https://web.it-decision.com/v1/api/receive-viber
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Request POST:" %}

```json
{
    "message_id":429	
}
```

{% endtab %}
{% endtabs %}

## **Parameters**

**message\_id:**

The ID of the message whose status you want to get (for the last 5 days)

{% tabs %}
{% tab title="Response JSON" %}

```json
{
	"message_id":429, 			
	"status":1, 				
	"sms_message_id":36478	
}
```

{% endtab %}
{% endtabs %}

## **Values**

**message\_id:**

The ID of the message whose status you want to get (for the last 5 days)

**status:**

Current Viber message status

**sms\_message\_id:**

SMS message ID (if available, the status of an SMS message can be obtained using the [SMS API](/sms-api.md))

## **Viber messages statuses**

| sent        | 0  |
| ----------- | -- |
| delivered   | 1  |
| error       | 2  |
| rejected    | 3  |
| undelivered | 4  |
| pending     | 5  |
| unknown     | 20 |

## **Errors**

| Name    | Too Many Requests   |
| ------- | ------------------- |
| messege | Rate limit exceeded |
| code    | 0                   |
| status  | 429                 |

| Name    | Invalid Parameter: \[param\_name]             |
| ------- | --------------------------------------------- |
| messege | Empty parameter or parameter validation error |
| code    | 1                                             |
| status  | 400                                           |

| Name    | Internal server error                                                                         |
| ------- | --------------------------------------------------------------------------------------------- |
| messege | The server encountered an unexpected condition which prevented it from fulfilling the request |
| code    | 2                                                                                             |
| status  | 500                                                                                           |

| Name    | Topup balance is required |
| ------- | ------------------------- |
| messege | User balance is empty     |
| code    | 3                         |
| status  | 402                       |

## Viber + SMS example

{% tabs %}
{% tab title="cUrl" %}

```
curl --location --request POST 'https://web.it-decision.com/v1/api/receive-viber' \
--header 'Authorization: Basic api key' \
--header 'Content-Type: application/json' \
--data-raw '{"source_addr": "Custom Company","destination_addr": 380636111112,"message_type":106,"text":"Message content","text_sms":"SMS message content","image":"https://yourdomain.com/images/image.jpg","button_caption":"Join Us", "button_action":"https://yourdomain.com/join-us","source_type":2,"callback_url":"https://yourdomain.com/viber-callback","validity_period":3600
}'

```

{% endtab %}

{% tab title="C#" %}

```
var client = new RestClient("https://web.it-decision.com/v1/api/receive-viber");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Basic api key");
request.AddHeader("Content-Type", "application/json");
var body = @"{""source_addr"": ""Custom Company"",""destination_addr"": 380636111112,""message_type"":106,""text"":""Message content"",""text_sms"":""SMS message content"",""image"":""https://yourdomain.com/images/image.jpg"",""button_caption"":""Join Us"", ""button_action"":""https://yourdomain.com/join-us"",""source_type"":2,""callback_url"":""https://yourdomain.com/viber-callback"",""validity_period"":3600
" + "\n" +
@"}";
request.AddParameter("application/json", body,  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);

```

{% endtab %}

{% tab title=" Java" %}

```
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"source_addr\": \"Custom Company\",\"destination_addr\": 380636111112,\"message_type\":106,\"text\":\"Message content\",\"text_sms\":\"SMS message content\",\"image\":\"https://yourdomain.com/images/image.jpg\",\"button_caption\":\"Join Us\", \"button_action\":\"https://yourdomain.com/join-us\",\"source_type\":2,\"callback_url\":\"https://yourdomain.com/viber-callback\",\"validity_period\":3600\r\n}");
Request request = new Request.Builder()
  .url("https://web.it-decision.com/v1/api/receive-viber")
  .method("POST", body)
  .addHeader("Authorization", "Basic api key")
  .addHeader("Content-Type", "application/json")
  .build();
Response response = client.newCall(request).execute();

```

{% endtab %}

{% tab title="JavaScript" %}

```
var myHeaders = new Headers();
myHeaders.append("Authorization", "Basic api key");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify({
  "source_addr": "Custom Company",
  "destination_addr": 380636111112,
  "message_type": 106,
  "text": "Message content",
  "text_sms": "SMS message content",
  "image": "https://yourdomain.com/images/image.jpg",
  "button_caption": "Join Us",
  "button_action": "https://yourdomain.com/join-us",
  "source_type": 2,
  "callback_url": "https://yourdomain.com/viber-callback",
  "validity_period": 3600
});

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https://web.it-decision.com/v1/api/receive-viber", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

```

{% endtab %}

{% tab title="C – libCurl" %}

```
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
  curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
  curl_easy_setopt(curl, CURLOPT_URL, "https://web.it-decision.com/v1/api/receive-viber");
  curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
  curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
  struct curl_slist *headers = NULL;
  headers = curl_slist_append(headers, "Authorization: Basic api key");
  headers = curl_slist_append(headers, "Content-Type: application/json");
  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
  const char *data = "{\"source_addr\": \"Custom Company\",\"destination_addr\": 380636111112,\"message_type\":106,\"text\":\"Message content\",\"text_sms\":\"SMS message content\",\"image\":\"https://yourdomain.com/images/image.jpg\",\"button_caption\":\"Join Us\", \"button_action\":\"https://yourdomain.com/join-us\",\"source_type\":2,\"callback_url\":\"https://yourdomain.com/viber-callback\",\"validity_period\":3600\r\n}";
  curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
  res = curl_easy_perform(curl);
}
curl_easy_cleanup(curl);

```

{% endtab %}

{% tab title="NodeJs" %}

```
var https = require('follow-redirects').https;
var fs = require('fs');

var options = {
  'method': 'POST',
  'hostname': 'web.it-decision.com',
  'path': '/v1/api/receive-viber',
  'headers': {
    'Authorization': 'Basic api key',
    'Content-Type': 'application/json'
  },
  'maxRedirects': 20
};

var req = https.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function (chunk) {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });

  res.on("error", function (error) {
    console.error(error);
  });
});

var postData = JSON.stringify({
  "source_addr": "Custom Company",
  "destination_addr": 380636111112,
  "message_type": 106,
  "text": "Message content",
  "text_sms": "SMS message content",
  "image": "https://yourdomain.com/images/image.jpg",
  "button_caption": "Join Us",
  "button_action": "https://yourdomain.com/join-us",
  "source_type": 2,
  "callback_url": "https://yourdomain.com/viber-callback",
  "validity_period": 3600
});

req.write(postData);

req.end();



```

{% endtab %}

{% tab title="PHP" %}

```
$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://web.it-decision.com/v1/api/receive-viber',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{"source_addr": "Custom Company","destination_addr": 380636111112,"message_type":106,"text":"Message content","text_sms":"SMS message content","image":"https://yourdomain.com/images/image.jpg","button_caption":"Join Us", "button_action":"https://yourdomain.com/join-us","source_type":2,"callback_url":"https://yourdomain.com/viber-callback","validity_period":3600
}',
  CURLOPT_HTTPHEADER => array(
    'Authorization: Basic api key',
    'Content-Type: application/json'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

{% endtab %}

{% tab title=" Python" %}

```
import http.client
import json

conn = http.client.HTTPSConnection("web.it-decision.com")
payload = json.dumps({
  "source_addr": "Custom Company",
  "destination_addr": 380636111112,
  "message_type": 106,
  "text": "Message content",
  "text_sms": "SMS message content",
  "image": "https://yourdomain.com/images/image.jpg",
  "button_caption": "Join Us",
  "button_action": "https://yourdomain.com/join-us",
  "source_type": 2,
  "callback_url": "https://yourdomain.com/viber-callback",
  "validity_period": 3600
})
headers = {
  'Authorization': 'Basic api key',
  'Content-Type': 'application/json'
}
conn.request("POST", "/v1/api/receive-viber", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))

```

{% endtab %}

{% tab title=" Ruby" %}

```
require "uri"
require "json"
require "net/http"

url = URI("https://web.it-decision.com/v1/api/receive-viber")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Basic api key"
request["Content-Type"] = "application/json"
request.body = JSON.dump({
  "source_addr": "Custom Company",
  "destination_addr": 380636111112,
  "message_type": 106,
  "text": "Message content",
  "text_sms": "SMS message content",
  "image": "https://yourdomain.com/images/image.jpg",
  "button_caption": "Join Us",
  "button_action": "https://yourdomain.com/join-us",
  "source_type": 2,
  "callback_url": "https://yourdomain.com/viber-callback",
  "validity_period": 3600
})

response = https.request(request)
puts response.read_body


```

{% endtab %}
{% endtabs %}
