# Sending SMS

## Sending SMS

<mark style="color:green;">`POST`</mark> `https://direct.revicom.ltd/api/v1/message`

The method allows for sending an array of single messages **(1 to 1,000)**

#### Headers

| Name                                            | Type   | Description        |
| ----------------------------------------------- | ------ | ------------------ |
| Authorization<mark style="color:red;">\*</mark> | string | `Basic {TOKEN_1}`  |
| Content-Type<mark style="color:red;">\*</mark>  | string | `application/json` |

#### Request Body

| Name                                          | Type    | Description                                                                                                                                                                                                                                                                                        |
| --------------------------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| channelType<mark style="color:red;">\*</mark> | string  | Sending channel (`SMS`)                                                                                                                                                                                                                                                                            |
| senderName<mark style="color:red;">\*</mark>  | string  | Sender ID. SMS-names with the status “Approved” are allowed, with the start date not later than the request time                                                                                                                                                                                   |
| destination<mark style="color:red;">\*</mark> | string  | Subscriber number                                                                                                                                                                                                                                                                                  |
| content<mark style="color:red;">\*</mark>     | string  | Message text; UTF-8 encoded string without Byte Order Mark                                                                                                                                                                                                                                         |
| tags                                          | array   | Message tags (array of strings). Each tag must match the expression `^\w+$` (any case letters, numbers and underscore "\_" are allowed)                                                                                                                                                            |
| useLocalTime                                  | boolean | <p>Flag responsible for the time zone in which the message will be sent:<br><strong><code>true</code></strong> – sending in the subscriber time zone<br><strong><code>false</code></strong> – sending by Moscow time<br><em>By default, true</em></p>                                              |
| localSendTime                                 | string  | <p>Low bound for the allowed time to send a message (subject to <code>useLocalTime</code>)<br>Date in the format '<code>YYYY-MM-DD hh:mm:ss</code>' in the range from (current UTC time – 12 hours) to (current UTC time + 7 days)<br><em>By default the message will be sent immediately</em></p> |
| localCompletionTime                           | string  | Upper bound for the allowed time to send a message (subject to `useLocalTime`) in the range from `localSendTime` to (current UTC time + 70 days)                                                                                                                                                   |
| ttl                                           | integer | <p>Message lifetime in seconds. After the ttl expires, the final status is set to the message<br><code>60 ≤ ttl ≤ 86400</code></p>                                                                                                                                                                 |
| hours                                         | array   | Valid sending hours (array of numbers). Integers from 0 to 23 can be transmitted in the array, each corresponding to the hour interval allowed for sending, subject to `useLocalTime;` the values must be unique.                                                                                  |
| days                                          | array   | Valid sending days (array of numbers). Integers from 1 (Mon) to 7 (Sun) can be transmitted in the array, each corresponding to the week day allowed for sending; the values must be unique.                                                                                                        |
| shortUrl                                      | boolean | <p>Flag responsible for shortening links in the message:<br><code>true</code>- links in the text of the message will be shortened<br>By default, <code>false</code></p>                                                                                                                            |
| callbackUrl                                   | string  | Address to send callback                                                                                                                                                                                                                                                                           |
| callbackEvents                                | array   | Events to send callback (an array of strings). If there is `callbackUrl` and no `callbackEvents` in the request, a callback will be sent on the event `delivered`                                                                                                                                  |

{% tabs %}
{% tab title="200" %}
If the request is successful, a response is returned that lists the message IDs and result codes. With errors = false, all submitted messages are guaranteed to have been successfully generated.

```
{
  "errors": false,
  "items": [
    {
      "messageUuid": "063474ec-a34f-4558-90c5-984395000004",
      "code": 201
    },
    {
      "messageUuid": "063564ec-a34f-4558-90c5-984395000005",
      "code": 201
    }
  ]
}
```

{% endtab %}

{% tab title="401" %}
Invalid token used/authorization header missing.

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

```
{
    "error": {
        "code": 4012,
        "msg": "Bad credentials"
    }
}
```

{% endtab %}

{% tab title="4010" %}

```
{
    "error": {
        "code": 4010,
        "msg": "Not Authenticated"
    }
}
```

{% endtab %}
{% endtabs %}
{% endtab %}

{% tab title="403" %}
Token of wrong type used.

```
{
    "error": {
        "code": 4030,
        "msg": "Access Denied"
    }
}
```

{% endtab %}

{% tab title="422" %}
The request body contains invalid parameters or the maximum number of objects is exceeded.

```
{
    "error": {
        "code": 4220,
        "msg": "Max count of messages is 1000"
    }
}
-----------------------------------------------------------------------------
{
    "error": {
        "code": 4220,
        "msg": "Local send time is less than minimal {minLocalSendTime}"
    }
}
-----------------------------------------------------------------------------
{
    "error": {
        "code": 4220,
        "msg": "Local send time is greater than minimal {maxLocalSendTime}"
    }
}
-----------------------------------------------------------------------------
{
    "error": {
        "code": 4220,
        "msg": "Local completion time is less than minimal {minLocalCompletionTime}"
    }
}
-----------------------------------------------------------------------------
{
    "error": {
        "code": 4220,
        "msg": "Local completion time is greater than maximal {maxLocalCompletionTime}"
    }
}
-----------------------------------------------------------------------------
{
    "error": {
        "code": 4220,
        "msg": "No active sender name: ({channelType}, {senderName})"
    }
}
-----------------------------------------------------------------------------
{
    "error": {
        "code": 4220,
        "msg": "Invalid msisdn"
    }
}
-----------------------------------------------------------------------------
{
    "error": {
        "code": 4220,
        "msg": "Blank content"
    }
}
-----------------------------------------------------------------------------
{
    "error": {
        "code": 4220,
        "msg": "Invalid tags: {tags}"
    }
}
-----------------------------------------------------------------------------
{
    "error": {
        "code": 4220,
        "msg": "Invalid TTL {ttl}"
    }
}
-----------------------------------------------------------------------------
{
    "error": {
        "code": 4222,
        "msg": "Invalid hours: {hours}"
    }
}
-----------------------------------------------------------------------------
{
    "error": {
        "code": 4223,
        "msg": "Invalid days: {days}"
    }
}
```

{% endtab %}

{% tab title="503 " %}

```
{
    "error": {
        "code": 5030,
        "msg": "Url shortener is unavailable"
    }
}
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
Recommended minimum timeout: 70 seconds
{% endhint %}

{% hint style="warning" %}
It is allowed to use as a sender name when sending SMS messages the names in the “Approved” status with a validity start date no later than the current one.

For creating sender ID, please contact your manager.
{% endhint %}

{% hint style="warning" %}
To set up custom domain for the link shortening functionality, please contact customer support
{% endhint %}

Enumerations:

| Parameter      | Allowed values                                          |
| -------------- | ------------------------------------------------------- |
| callbackEvents | [Callback Events](/extra/references.md#callback-events) |

## **Request example** <a href="#example" id="example"></a>

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

```
POST https://direct.revicom.ltd/api/v1/message
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Content-Type: application/json
[
  {
    "channelType": "SMS",
    "senderName": "SENDER",
    "destination": "14085553911",
    "content": "Message Text",
    "localSendTime": "2020-01-01 18:00:00",
    "localCompletionTime": "2020-01-02 18:00:00",
    "useLocalTime": true,
    "ttl": 43200,
    "hours": [
      12,
      13,
      14
    ],
    "days": [
      1,
      2
    ],
    "shortUrl": true,
    "callbackUrl": "https://company.com/callback",
    "callbackEvents": [
      "sent",
      "delivered",
      "click"
    ],
    "tags": [
      "tag1",
      "tag2"
    ]
  }
]
```

{% endtab %}

{% tab title="cURL" %}

```
curl -X POST 'https://direct.revicom.ltd/api/v1/message' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==' \
-d '[{"channelType":"SMS","senderName":"SENDER","destination":"14085553911","content":"Message Text https://domain.com","localSendTime":"2020-01-01 18:00:00","localCompletionTime":"2020-01-02 18:00:00","useLocalTime":true,"ttl":43200,"hours":[12,13,14],"days":[1,2],"callbackUrl":"https://company.com/callback","callbackEvents":["sent","delivered"],"tags":["tag1","tag2"]}]'
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://api.direct.revicom.ltd/messages/sms-sending.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
