LINK Mobility SMS REST API

MT and Delivery Reports

Version 2.4; Last updated June 23, 2025

For help, see the following link: https://linkmobility.com/support/

The most up-to-date version of this document is available at: https://www.linkmobility.com/developer/

Contents

Before you begin

Please make sure that Link Mobility Support has provided you with the following information:

If you will be receiving Delivery Reports for your messages, please provide Link Mobility Support with an URL and they will also give you a gateId to use. For more information on Delivery Reports, see the “Delivery Reports" chapter.

To use Delivery Reports, make sure you have made an opening in any firewalls so that Common can connect to you to transfer Delivery Reports. The addresses to open for are listed below.

Scope of this document

This document will describe the Application Programming Interface (API) to send text messages through the Link Mobility “Common” platform. It will also describe the mechanism for delivering, to your platform, Delivery Reports for each message sent. A separate document describes the API for receiving text messages.

Common is a REST API. This means it uses HTTP verbs to receive commands. A basic familiarity with REST APIs is assumed, as well as a familiarity with JSON.

Capabilities of "Common" platform

Common is a high-capacity, high-availability SMS Gateway designed to let you send and receive SMS Text messages, as well as receive a notification when the text message is received by the end-user.

A message can be free for the end-user to receive, or it can cost money. (Certain countries only). In certain markets, you can charge the end-users without actually sending them a message, so-called "Silent billing".

A message can be of any length up to the maximum defined by the GSM standard (254 segments).

It can contain any character in the UTF-8 2-byte character set. (Unicode 4-byte characters are not supported).

When sending free messages, the sender of the message can be set to any string of 2-11 characters, a-Z,0-9 (Must begin with a non-numeric character).

Common tracks the status of each message every step of the way until it is delivered to the end-user's handset, and will provide you with this status through a Delivery Report. Delivery Reports can be sent in JSON, HTTP GET or POST formats.

Terms and glossary

Size limits

An SMS Text message can be a maximum of 140 bytes. With the most common character encoding, GSM-7, this translates to 160 characters. If your message is longer than 140 bytes, it must be split into multiple messages, and preceded by a header signifying that it is a multipart message. Common can handle this splitting, concatenation, and the overhead unless you want to do it yourself.

MT

Mobile Terminated. Refers to any SMS message which is sent to a mobile phone. (The message is terminated, or “ends”, at the phone.)

MO

Mobile Originated. Refers to any SMS message which is sent from a mobile phone. (The message's origin, or beginning, is at the phone.)

Charged, Premium

An MT message can cost money for the end-user to receive. This is usually referred to as a charged message or premium message. If you are going to send charged messages to end-users, please review the rules and regulations for your country. Charged messages are only available in some countries and shortcodes. In certain markets, you can charge the end-users without actually sending them a message, so-called "Silent billing". Support will be happy to advise you if you are in doubt.

Bulk

A message which does not cost money for the end-user to receive. Bulk messages can set their Source (the “From”-field) of the message to any text, 2-11 characters a-Z. Using this feature to impersonate other parties will lead to a termination of your account.

Delivery Report

For each MT message we send, we can send you an acknowledgement when the message is confirmed received by the end-user's handset. If the message fails for any reason, we will inform you about this. Delivery reports are mandatory for charged messages, optional for bulk.

TON

Type of Number. This identifies how systems shall interpret your Source (your “From”-field). It can be a Shortcode, an alphanumeric string, or a phone number (MSISDN). Same applies for the Destination, or recipient, of the message, though destination will almost always be an MSISDN.

KeyValue

Map with string key and string value where you may specify unique parameters.

Character Encoding

All communication to and from Common will be using UTF-8 encoding.

Sending MT messages

Base URL:s

You will get one of these URL:s assigned to you when your account is created:

URL IP
https://eu.linkmobility.io/sms 213.242.87.34, 62.67.62.97
https://n-eu.linkmobility.io/sms Automatic failover between datacenters
https://c-eu.linkmobility.io/sms 62.67.62.97
https://s-eu.linkmobility.io/sms 217.163.95.194
https://no.linkmobility.io/sms 213.242.87.66 (will be decommissioned after 2024-08-31)
https://deb.linkmobility.io/sms Decommissioned 2023-09-22
https://wsx.sp247.net/sms 194.71.165.27, 195.84.162.140 Legacy

Authentication

There are two ways of doing authentication: OAuth 2.0 or Basic Authentication.

OAuth 2.0

The preferred way of authentication is using OAuth 2.0. It requires the client to obtain a token to be used in other requests.

The only grant type currently supported is “client_credentials” where the “client_id” is the username and “client_secret” is the password provided by Support.

This would be posted to the access token URL as:

POST /auth/token
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials&client_id=user&client_secret=secret

Successful result with HTTP status 200:

{"access_token":"tokenxxx","token_type":"Bearer","expires_in":3599}

The access_token value should be used as a header in requests to be used for authorization:

Authorization: Bearer tokenxxx

The max age for a token is specified in the expires_in field in seconds.

Unsuccessful results will return a different HTTP status than 200 and the body will contain an error parameter in a JSON object with any of the following results: invalid_request, unsupported_grant_type, invalid_client or internal_error.

Basic Authentication

Authenticate in the HTTP request using Basic Authentication with the username and password provided by Support.

HTTP Methods, statuses, and actions

HTTP Method Message sent Message sent, no response No access Invalid request Invalid login
POST 200 OK Returns SendResponse 204 No Content Returns ErrorResponse 403 Forbidden Returns ErrorResponse 400 Bad Request Returns ErrorResponse 401 Unauthorized Returns ErrorResponse

Methods

POST/sms/send

Submits a message object for delivery to a mobile phone. Set Content-Type: application/json in your request header and POST a JSON object with the following properties:

Parameter Data type Description
source String Required. This is the source number from where the message should be sent. The format is depending on the specified sourceTON.
sourceTON ΤΟΝ This is the source type of number. See allowed TON values below. Default ALPHANUMERIC.
destination String Required. This is the destination number. The format is depending on the specified destinationTON. Remember that MSISDNS include the country code and a leading plus sign. (+)
destinationTON ΤΟΝ This is the destination type of number. See allowed TON values below. Default MSISDN.
dcs DCS Advanced. This is the Data Coding Scheme that should be used when sending the SMS. See allowed DCS values in a separate table. Default TEXT.
userDataHeader String Advanced. This value may be specified when sending concatenated SMS, WAP-push, etc. The format is hex encoded 8-bit bytes. More information about valid UDH for long SMS may be given by Support upon request. Common will handle the splitting and concatenation of messages if you do not have a specific reason to do it yourself.
userData String This is the message content itself. The DCS specifies the format (encoding) on this value. Note that messages that messages of more than 140 bytes must be split into multiple messages. Common will do that automatically by default.
useDeliveryReport Boolean True indicates that a delivery report should be sent back when the message has come to a final state. (Delivered or failed) TRUE is mandatory for premium messages. Defaults to TRUE, and it is recommended to use delivery reports.
deliveryReportGates List <String> One or more gates that should be used for sending delivery reports. If you do not specify any Gates to deliver Delivery Reports to, make sure to set useDeliveryReport to FALSE. See the chapter on delivery reports for more information. Required for premium messages.
relativeValidityTime Long This specifies how long the message is supposed to live. If the message takes longer to deliver to the handset than the validity Time, the message will be discarded. The value is specified in milliseconds. Default is 48 hours (172800000).
absoluteValidityTime Date The absolute time when a message should expire. Minimum 15 minutes and maximum 48h in the future. Formatted according to RFC3339, e.g. 2010-03-30T12:59:40+02:00. Overrides relativeValidityTime if both are set.
tariff Integer Price, in local currency, in 1/100 of currency. For example, to send a message costing 5 NOK, this should be set to 500. If you are splitting a long message into multiple segments yourself, set price only on the first segment. Default 0.
currency Currency The currency should be set if the default country currency not to be used. Supported currencies are NOK, SEK, DKK, EUR, LTL. Ignored for non-premium messages.
vat Integer Deprecated - implementations should not use this field any more. The VAT that used for the premium transaction, default differ per market. 2500 equals 25%. Absence or value = -1 means not set. Ignored for non-premium messages.
age Integer Allowed age for (adult) content. Optional. Not supported by all operators.
priority Priority See the Priority value table, Optional.
platformId String Your platformId. Provided to you by Support.
platformPartnerId String Your platformPartnerId. Provided to you by Support.
refId String Your own internal transaction ID. Not used for anything except as a reference. Optional.
productDescription String When sending premium messages, a description of the service. This will be printed on the end-user's phone bill. Ignored for non-premium messages.
productCategory Integer When sending premium messages, specify which category the service is. This lets the operator know which rates to apply to the message. Support or your sales contact will help you determine the correct productCategory to set. Ignored for non-premium messages.
moReferenceld String A reference to the ID of the MO message which triggered the MT message. Required for some operators.
customParameters KeyValue Advanced. Additional parameters may be specified if needed. Support will advise you if you need to use custom parameters.
ignoreResponse Boolean Indicates whether you want a response in the body when you submit the message. This is not a delivery report, only a confirmation of message submission. Default is false.

DCS

Data Coding Scheme sets the encoding used for the message. Default and recommended is TEXT.

DCS value Description
GSM GSM-7 default alphabet encoding.
BINARY 8-bit binary data.
UCS2 UCS-2 encoding
TEXT Server-side handling of encoding and segmenting. Recommended.

ΤΟΝ

TON stands for Type of Number and designates how a number is to be interpreted.

ΤΟΝ value Description
SHORTNUMBER Shortnumber; 1-14 digits depending on country.
ALPHANUMERIC Up to 11 valid GSM characters. Some operators and some handsets don't accept all characters. Safe characters are a-z, A-Z, 0-9.
MSISDN A mobile number, international format, starting with +.

Priority

It gives the sending a certain priority.

Priority value Description
HIGH For high priority of sending
NORMAL For normal priority of sending
LOW For low priority of sending.

Error Result Codes

Code Description
101100 Invalid authentication. Please check your username and password.
101101 Access denied. Please check your username and password.
106000 Unknown Error. Please contact Support and include your whole transaction.
106001 Parse Error. The object to send in the request is badly formatted.
106102 Unable to access SMSC credentials
106200 Invalid or missing platformId. Please check your platformId.
106201 Invalid or missing platformPartnerId. Please check your platformPartnerId.
106202 Invalid or missing currency for premium message. Please check your price and currency.
106300 No gates available. Please contact Support and include your whole transaction.
106301 Specified gate unavailable. Please check your gateId.
106 quota exceeded in process message, messageParts: {}

Example

In this example, the platformId and platformPartnerId and deliveryReportGates are set to invalid values. The values that are correct for you will be provided by Support.

A minimal example, including only required fields. This would send the message "Hello world" to the Norwegian phone number +4799999999, and not use a delivery report. The sender is set to "LINK".

This JSON would be POSTed to https://[your assigned URL]/sms/send

{
  "source": "LINK",
  "destination": "+4799999999",
  "userData": "Hello world",
  "platformId": "0",
  "platformPartnerId": "0",
  "useDeliveryReport": false
}

Success Result

On a successful request, Common will reply with HTTP 200 OK, or HTTP 204 No Content if "ignoreResponse” is set to TRUE. In the body you will find the messageId of the message:

{
  "messageId":"Dcshuhod0PMAAAFQ+/PbnR3x",
  "resultCode":1005,
  "description":"Queued"
}

If the customParameter "replySmsCount" with the case insensitive String value "true" is found in the sending request, then the reply will have an extra parameter called “smsCount" that has an integer value, it shows the amount of message parts or SMS sent per Send RequestMessage.

{
  "messageId":"DcshuhodØPMAAAFQ+/PbnR3x",
  "resultCode":1005,
  "message": "Queued",
  "smsCount":1
}

If there's an invalid value or the case insensitive String value "false", then the "smsCount" parameter wouldn't be shown. The returned smsCount is a preliminary value, an estimation, of message parts and the final smsCount will be found in the delivery report. Please note that this is not a delivery report. Save the messageId; when the delivery report arrives, it will include the same messageId.

Batch sending MT messages

If you want to send many messages at one time, you can use the Batch Sender to send multiple messages at once, reducing connection overhead. You will receive an array of responses when you submit, with the messageId and refId of each message posted.

Sending a batch MT message is similar to sending a single MT message, except that certain parameters are moved into a sendRequestMessages parameter, which you then post an array of.

The names and types and functions of all parameters except sendRequestMessages are the same as if you were sending a single MT message. Delivery reports are handled normally.

The URL for submitting batch messages is https://[your assigned URL]/sms/sendbatch

batchSendRequest

Parameter Data type Description
useDeliveryReport Boolean True indicates that a delivery report should be sent back when the message has come to a final state. (Delivered or failed) TRUE is mandatory for premium messages. Defaults to TRUE, and it is recommended to use delivery reports.
deliveryReportGates List <String> One or more gates that should be used for sending delivery reports. If you do not specify any Gates to deliver Delivery Reports to, make sure to set useDeliveryReport to FALSE. See the chapter on delivery reports for more information. Required for premium messages.
relativeValidityTime Long This specifies how long the message is supposed to live. If the message takes longer to deliver to the handset than the validity Time, the message will be discarded. The value is specified in milliseconds. Default is 48 hours (172800000).
absoluteValidityTime Date The absolute time when a message should expire. Minimum 15 minutes and maximum 48h in the future. Formatted according to RFC3339, e.g. 2010-03-30T12:59:40+02:00. Overrides relativeValidityTime if both are set.
priority Priority See the Priority value table, optional.
platformId String Your platformId. Provided to you by Support.
platformPartnerId String Your platformPartnerId. Provided to you by Support.
customParameters KeyValue Advanced. Additional parameters may be specified if needed. Support will advise you if you need to use custom parameters. These additional parameters are overridden by those that are in the batchSendRequest.
ignoreResponse Boolean Indicates whether you want a response in the body when you submit the message. This is not a delivery report, only a confirmation of message submission. Default is true.
sendRequestMessages List <sendRequestMessage> An array of messages. The maximum number of messages allowed within the array is 1000. See the following table for its content.

sendRequestMessage

Parameter Data type Description
source String Required. This is the source number from where the message should be sent. The format is depending on the specified sourceTON.
sourceTON ΤΟΝ This is the source type of number. See allowed TON values below. Default ALPHANUMERIC.
destination String Required. This is the destination number. The format is depending on the specified destinationTON. Remember that MSISDNS include the country code and a leading plus sign. (+)
destinationTON ΤΟΝ This is the destination type of number. See allowed TON values below. Default MSISDN.
dcs DCS Advanced. This is the Data Coding Scheme that should be used when sending the SMS. See allowed DCS values in a separate table. Default TEXT.
userDataHeader String This value may be specified when sending concatenated SMS, WAP-push, etc. The format is hex encoded 8-bit bytes. More information about valid UDH for long SMS may be given by Support upon request. Common will handle the splitting and concatenation of messages if you do not have a specific reason to do it yourself.
userData String This is the message content itself. The DCS specifies the format (encoding) on this value. Note that messages that messages of more than 140 bytes must be split into multiple messages. Common will do that automatically by default.
tariff integer Price, in local currency, in 1/100 of currency. For example, to send a message costing 5 NOK, this should be set to 500. If you are splitting a long message into multiple segments yourself, set price only on the first segment. Default 0.
currency Currency The currency should be set if the default country currency not to be used. Supported currencies are NOK, SEK, DKK, EUR. Ignored for non-premium messages.
vat Integer Deprecated - implementations should not use this field anymore. The VAT that used for the premium transaction, default differ per market. 2500 equals 25%. Absence or value = -1 means not set. Ignored for non-premium messages.
age Integer Allowed age for (adult) content. Optional. Not supported by all operators.
refId String Your own internal transaction ID. Not used for anything except as a reference. Optional.
productDescription String When sending premium messages, a description of the service. This will be printed on the end-user's phone bill. Ignored for non-premium messages.
productCategory Integer When sending premium messages, specify which category the service is. This lets the operator know which rates to apply to the message. Support or your sales contact will help you determine the correct productCategory to set. Ignored for non-premium messages. The acceptable productCategory values are specified under productCategory values.
moReferenceld String A reference to the ID of the MO message which triggered the MT message. Required for some operators.
customParameters KeyValue Advanced. Additional parameters may be specified if needed. Support will advise you if you need to use custom parameters. These additional parameters are overridden by those that are in the batchSendRequest.

productCategory values

Product categories defined by Link Mobility:

Value Description Strex service code Strex business model
1 CPA_REGULAR_RINGTONES 03001 MOBILECONTENTSERVICES
2 CPA_REGULAR_RINGBACK_TONES 03002 MOBILECONTENTSERVICES
3 CPA_REGULAR_MUSIC_FULL_TRACK 03002 MOBILECONTENTSERVICES
4 CPA_REGULAR_WALLP_ANIM 03004 MOBILECONTENTSERVICES
5 CPA_REGULAR_VIDEOS 03007 MOBILECONTENTSERVICES
6 CPA_REGULAR_NEWS 02001 MOBILECONTENTSERVICES
7 Not in use N/A N/A
8 CPA_REGULAR_LOTTERY 03012 MOBILECONTENTSERVICES
9 Not in use N/A N/A
10 CPA_REGULAR_VOTING 04002 VOTING
11 CPA_REGULAR_MOBILE_MARKETING 02001 MOBILECONTENTSERVICES
12 Not in use N/A N/A
13 Not in use N/A N/A
14 CPA_REGULAR_COMMUNITY 03011 MOBILECONTENTSERVICES
15 CPA_REGULAR_INFO_SERVICE 04001 MOBILECONTENTSERVICES
16 CPA_REGULAR_MIXED_CONTENT 03011 MOBILECONTENTSERVICES
17 GAS_CHARITY 14002 DONATION
18 GAS_CONCERT_TICKETS 05010 STREX-PAYMENT
19 GAS_MEMBERSHIP_FEE 14001 STREX-PAYMENT
20 GAS_PHYSICAL_GOODS_NON_FOOD 15001 STREX-PAYMENT
21 MEDIA_CPA_INTERNET_TV 16001 STREX-PAYMENT
22 MEDIA_CPA_INTERNET_FILM 16002 STREX-PAYMENT
23 MEDIA_CPA_E_BOOK 16003 STREX-PAYMENT
24 MEDIA_CPA_E_MAGAZINE 16004 STREX-PAYMENT
25 MEDIA_CPA_E_NEWSPAPER 16005 STREX-PAYMENT
26 Not in use N/A N/A
27 CPA_REGULAR_OTHER 02001 INFORMATIONSERVICES
28 GAS_CINEMA_TICKETS 05010 STREX-PAYMENT
29 GAS_BOOK 15001 STREX-PAYMENT
30 GAS_MUSIC_CD 15001 STREX-PAYMENT
31 GAS_MAGAZINE 15001 STREX-PAYMENT
32 GAS_ACCESS_FEE_SPORTS 13003 STREX-PAYMENT
33 GAS_ZERORATED_SMS 89001 STREX-PAYMENT
34 GAS_CLASSIFIED_ADS 08001 STREX-PAYMENT
35 GAS_CLASSIFIED_ADS_ABOVE_PRICE_200 08001 STREX-PAYMENT
36 Note: -- NOT TO BE USED -- NA STREX-PAYMENT
37 MANUAL_SERVICES 02001 STREX-PAYMENT
38 PHYSICAL_GOODS_FOOD_DRINK 10001 STREX-PAYMENT
39 TRANSPORT_BUS 06002 TRANSPORT
40 TRANSPORT_TRAIN 06001 TRANSPORT
41 HEALTH_SERVICES 07001 STREX-PAYMENT
42 PARKING 06005 TRANSPORT
43 AUTOMATIC NUMBER DIRECTORY SERVICES 16008 AUTOMATICNUMBERDIRECTORYSERVICE
44 ALERT SERVICES 02001 ALERTSERVICES
45 INFORMATION SERVICES 02001 INFORMATIONSERVICES
46 MEDIA 16005 MEDIA
47 MEMBERSHIP_COMMERCIAL 14004 STREX-PAYMENT
48 FISHING_LICENSE 13001 STREX-PAYMENT
49 GIFT_CERTIFICATE 09001 STREX-PAYMENT
50 MANUAL_SERVICE_REGISTERED 13006 STREX-PAYMENT
51 CINEMA_TICKET
52 ROADTAX 06007 TRANSPORT
53 NON_HUMANITARIAN_DONATIONS

Strex productCategory values

The list of valid Strex business models: Strex Payment, Transport, Donation, Media, Information Services, Automatic Number Directory Service, Mobile Content Services, Mobile Content Services 18+, Alert Services, Voting.

Note: Link CommonLayer product categories do not use these Strex business models: Media, Information Services, Automatic Number Directory Service, Alert Services.

Batch sending example

The following JSON would send a message to two recipients at the same time.

{
  "platformId": "0",
  "platformPartnerId": "0",
  "useDeliveryReport": true,
  "deliveryReportGates": [
    "BVldZyQt"
  ],
  "sendRequestMessages":[
    {
      "source": "2333",
      "sourceTON": "SHORTNUMBER",
      "destination": "+4746910822",
      "userData": "Hello world, first message",
      "refId": "wir7kkw"
    },
    {
      "source": "2333",
      "sourceTON": "SHORTNUMBER",
      "destination": "+4741560067",
      "userData": "Hello world, second message",
      "refId": "qts883r"
    }
  ]
}

Success Result

On a successful request, Common will reply with HTTP 200 OK, or HTTP 204 No Content if "ignoreResponse" is set to TRUE. In the body you will find an array of Json objects, every object is the result of every message sent, and the messageId of every message too:

[
  {
    "messageId": "QC5BGwiuYk0AAAFiQ08nTFOS",
    "refId": "myRefId",
    "resultCode": 1005,
    "message": "Queued"
  },
  {
    "messageId": "QC5BHHuqylsAAAFiQ08nX2ph",
    "refId": "myRefId",
    "resultCode": 1005,
    "message": "Queued"
  }
]

If the customParameter “replySmsCount” with the case insensitive String value “true” is found in the sending request, then the reply will have an extra parameter called “smsCount" that has an integer value, it shows the amount of message parts or SMS sent per Send RequestMessage in all the messages sent.

[
  {
    "messageId": "QC5BGwiuYk0AAAFiQ08nTFOS",
    "refId": "myRefId",
    "resultCode": 1005,
    "message": "Queued",
    "smsCount": 1
  },
  {
    "messageId": "QC5BHHuqylsAAAFiQ08nX2ph",
    "refId": "myRefId",
    "resultCode": 1005,
    "message": "Queued",
    "smsCount": 1
  }
]

If there's an invalid value or the case insensitive String value "false", then the "smsCount" parameter wouldn't be shown. Please note that this is not a delivery report. Save the messageId; when the delivery report arrives, it will include the same messageId.

Quota

Quota Overview

A quota defines the maximum number of SMS messages that can be sent within a specified time interval (such as per day, week, month, or indefinitely). Each quota is uniquely identified by a quotald (UUID) and is reset according to the customer's time zone. Quotas can be assigned at the country, region, or default level through a QuotaProfile. Quota can also be dynamically assigned using QuotaMapping. This maps a parentQuotald (UUID) and a unique quotaKey (e.g., sender or user) to a specific quotald.

A quota is set in accordance with your local support, your assigned account manager or by default if nothing is specified.

Status 106 – Quota Exceeded

An SMS message may be blocked with status code 106 ("quota exceeded") when:

In these cases, the system prevents further message processing to enforce customer or destination-based limits and avoid misuse.

Sending flash sms

This is possible by just adding the customParameter “flash.sms" with the case insensitive String values “true” or “false” within the request object. The default value for this customParameter is "false".

Example within the object to POST in /sms/send/

{
  "source": "LINK",
  "destination": "+4799999999",
  "userData": "Hello world",
  "platformId": "0",
  "platformPartnerId": "0",
  "useDeliveryReport": false,
  "customParameters":{
    "flash.sms":"true"
  }
}

In the case of batch sendings, this value can be added within the batchSendRequest or within the SendRequestMessage. But if this customParameter is added within the batchSendRequest, then it will override its value for all the messages within this single batchSend Request.

Example 1

Here, all the messages will be sent as flash sms, even if the flash.sms customParameter is found with the value "false" within a sendRequestMessage:

{
  "platformId": "0",
  "platformPartnerId": "0",
  "useDeliveryReport": true,
  "deliveryReportGates": [
    "BVldZyQt"
  ],
  "customParameters":{
    "flash.sms":"true"
  },
  "sendRequestMessages":[
    {
      "source": "2333",
      "sourceTON": "SHORTNUMBER",
      "destination": "+4746910822",
      "userData": "Hello world, first message",
      "refId": "wir7kkw"
    },
    {
      "source": "2333",
      "sourceTON": "SHORTNUMBER",
      "destination": "+4741560067",
      "userData": "Hello world, second message",
      "refId": "qts883r"
    }
  ]
}

Example 2

Here, the first message will be sent as a flash SMS, meanwhile the second one and the third one will be sent as normal SMS. This will work if the customParameter "flash.sms" is absent in the batchSendRequest.

{
  "platformId": "0",
  "platformPartnerId": "0",
  "useDeliveryReport": true,
  "deliveryReportGates": [
    "BV1dZyQt"
  ],
  "sendRequestMessages": [
    {
      "source": "2333",
      "sourceTON": "SHORTNUMBER",
      "destination": "+4746910822",
      "userData": "Hello world, first message",
      "refId": "wir7kkw",
      "customParameters":{
        "flash.sms":"true"
      }
    },
    {
      "source": "2333",
      "sourceTON": "SHORTNUMBER",
      "destination": "+4741560067",
      "userData": "Hello world, second message",
      "refId": "qts883r",
      "customParameters":{
        "flash.sms":"false"
      }
    },
    {
      "source": "2333",
      "sourceTON": "SHORTNUMBER",
      "destination": "+4741560096",
      "userData": "Hello world, third message",
      "refId": "qts847r"
    }
  ]
}

Scheduled delivery of MT messages

Messages may be scheduled for a later delivery but at most 3 months in the future.

Add the custom parameter “scheduledTime” with the value as the date that the message should be sent. The date should be formatted according to RFC3339.

Example

{
  "source": "LINK",
  "destination": "+4799999999",
  "userData": "Hello world",
  "platformId": "0",
  "platformPartnerId": "0",
  "useDeliveryReport": false,
  "customParameters": {
    "scheduledTime":"2017-06-07T15:30:00Z"
  }
}

Obfuscation

To use obfuscation, you need to add one of these customParameters on the request object, depending on the need:

Parameter Value
obfuscate.userData true, this indicates that the userData should be obfuscated and the content itself will be replaced with the text OBFUSCATED.
obfuscate true, this indicates that the userData should be obfuscated and the content itself will be replaced with the text OBFUSCATED. This will also replace the destination with the countryCode and the first three digits (e.g. +4512345678 will be replaced to +45123)

Please be aware that when you use the obfuscate function, you are not able to search in message logs for destination number or message content.

Obfuscation Example

Example for "obfuscate.userData"

"customParameters" : {
  "obfuscate.userData" : "true"
}

Example for "obfuscate"

"customParameters" : {
  "obfuscate" : "true"
}

Delivery Reports

When an MT message is delivered to a handset, or fails for any reason, you will receive a callback with a delivery report. This is required for charged messages, optional (but recommended) for free messages. If the message is multi-part message, then it will get a delivery report for each part. It can be sent in JSON, XML, or HTTP GET/POST key/value pairs. If you want to change your format or your URL, please contact Support.

Common requires that your receiver responds with a HTTP status of 200 OK to acknowledge receipt of the delivery report. For added reliance, Common can also require that your receiver responds with a certain string in the body as well; this is optional. If you want this, please contact Support and they will enable it on your Gate.

Delivery reports will be POSTed to your service from the following IPs, please make sure there is an opening in your firewall for the hosts listed in the Appendix 1 in this document.

Delivery reports contain the following fields:

Field Data type Description
refId String If you used a refld when submitting the message, this will be mirrored here. If not, this will be null.
id String This is Common's internal message ID for this message. It mirrors the ID which was given to you when submitting the message. If the message is a multipart message, the id will have the following pattern {id}${n}* where n is the ordinal number that identifies the part.
operator String *Example: abc123$0 is the first part of the message with id abc123 The telecom operator the message was sent to (The end-users's operator)
sentTimestamp DateTime The timestamp when Common sent the message to the telecom operator. UTC time formatted according to RFC3339.
timestamp DateTime The timestamp from the telecom operator for this status message. UTC time formatted according to RFC3339.
resultCode Integer The status of the message. For what the different codes mean, see Status codes table below.
operatorResultCode String The unmapped status of the message from the operator. Each telecom operator has different statuses and this is only provided for debugging or reference, resultCode is the real status.
segments Integer The number of segments (of 140 bytes) the message was split into for delivery.
gateCustom Parameters <List>KeyValue If there are any custom parameters set on your gate, they will be provided here. Usually blank.
custom Parameters <List>KeyValue If there are any extra fields in the delivery report Common receives from the operator, they will be listed here. Note: The parameters source and destination (as defined in the request) added by default to the customParameters.

Result Codes

*BILLED, NOT BILLED & UNKNOWN BILLING Transaction state indicates the state when sending premium SMS.

The most common result code is 1001 Delivered. This code indicates a successful delivery (and payment, if charged) of the message. Most statuses are final, indicating that the message either has been successfully delivered, or failed in a non-recoverable way.

resultCode Description Transaction State
0 Unknown error FINAL: NOT DELIVERED, NOT BILLED*
1 Temporary routing error FINAL: NOT DELIVERED, NOT BILLED*
2 Permanent routing error FINAL: NOT DELIVERED, NOT BILLED*
3 Maximum throttling exceeded FINAL: NOT DELIVERED, NOT BILLED*
4 Timeout FINAL: UNKNOWN DELIVERY, UNKNOWN BILLING*
5 Operator unknown error FINAL: UNKNOWN DELIVERY, UNKNOWN BILLING*
6 Operator error FINAL: NOT DELIVERED, NOT BILLED*
104 Configuration error FINAL: NOT DELIVERED, NOT BILLED*
105 Internal error (internal Link Mobility error) FINAL: NOT DELIVERED, NOT BILLED*
106 Quota Exceeded FINAL: NOT DELIVERED, NOT BILLED*
1000 Sent (to operator) TEMP: NOT DELIVERED, NOT BILLED*
1001 Billed and delivered FINAL: DELIVERED, BILLED* (if applicable)
1002 Expired FINAL: NOT DELIVERED, NOT BILLED*
1003 Deleted FINAL: NOT DELIVERED, NOT BILLED*
1004 Mobile full FINAL: NOT DELIVERED, NOT BILLED*
1005 Queued TEMP: NOT DELIVERED, NOT BILLED*
1006 Not delivered FINAL: NOT DELIVERED, NOT BILLED*
1007 Delivered, Billed delayed TEMP: DELIVERED, NOT BILLED*
1008 Billed OK (charged OK before sending message) TEMP: NOT DELIVERED, BILLED*
1009 Billed OK and NOT Delivered FINAL: NOT DELIVERED, BILLED*
1010 Expired, generated by LINK FINAL: UNKOWN DELIVERY, UNKNOWN BILLING*
1011 Billed OK and sent (to operator) TEMP: NOT DELIVERED, BILLED*
1012 Delayed (temporary billing error, system will try to resend) TEMP: NOT DELIVERED, NOT BILLED* (resending)
1013 Message sent to operator, Bill delayed TEMP: NOT DELIVERED, NOT BILLED*
2000 Invalid source, the specified source number or Alpha is invalid FINAL: NOT DELIVERED, NOT BILLED*
2001 Source shortnumber not supported, the source TON may not be set to shortnumber FINAL: NOT DELIVERED, NOT BILLED*
2002 Source alpha not supported, the source TON may not be set to alpha FINAL: NOT DELIVERED, NOT BILLED*
2003 Source MSISDN not supported, the source TON may not be set to MSISD FINAL: NOT DELIVERED, NOT BILLED*
2100 Destination shortnumber not supported, the destination TON may not be set to shortnumber FINAL: NOT DELIVERED, NOT BILLED*
2101 Destination alpha not supported, the destination TON may not be set to alpha FINAL: NOT DELIVERED, NOT BILLED*
2102 Destination MSIDN not supported, the destination TON may not be set to MSISDN FINAL: NOT DELIVERED, NOT BILLED*
2103 Operation blocked, requested operation is not supported for the specified destination NOT DELIVERED, NOT BILLED*
2104 Unknown subscriber FINAL: NOT DELIVERED, NOT BILLED*
2105 Destination blocked (subscriber permanently barred) FINAL: NOT DELIVERED, NOT BILLED*
2106 Number error FINAL: NOT DELIVERED, NOT BILLED*
2107 Destination temporarily blocked (subscriber temporarily barred) FINAL: NOT DELIVERED, NOT BILLED*
2108 Invalid destination FINAL: NOT DELIVERED, NOT BILLED*
2200 Charging error FINAL: NOT DELIVERED, NOT BILLED*
2201 Subscriber has low balance FINAL: NOT DELIVERED, NOT BILLED*
2202 Subscriber barred for overcharged (premium) messages FINAL: NOT DELIVERED, NOT BILLED*
2203 Subscriber too young (for this particular content) FINAL: NOT DELIVERED, NOT BILLED*
2204 Prepaid subscriber not allowed FINAL: NOT DELIVERED, NOT BILLED*
2205 Service rejected by subscriber FINAL: NOT DELIVERED, NOT BILLED*
2206 Subscriber not registered in payment system FINAL: NOT DELIVERED, NOT BILLED*
2207 Subscriber has reached max balance FINAL: NOT DELIVERED, NOT BILLED*
3000 GSM encoding is not supported FINAL: NOT DELIVERED, NOT BILLED*
3001 UCS2 encoding is not supported FINAL: NOT DELIVERED, NOT BILLED*
3002 Binary encoding is not supported FINAL: NOT DELIVERED, NOT BILLED*
4000 Delivery report is not supported FINAL: NOT DELIVERED, NOT BILLED*
4001 Invalid message content FINAL: NOT DELIVERED, NOT BILLED*
4002 Invalid tariff FINAL: NOT DELIVERED, NOT BILLED*
4003 Invalid user data FINAL: NOT DELIVERED, NOT BILLED*
4004 Invalid user data header FINAL: NOT DELIVERED, NOT BILLED*
4005 Invalid data coding FINAL: NOT DELIVERED, NOT BILLED*
4006 Invalid VAT FINAL: NOT DELIVERED, NOT BILLED*
4007 Unsupported content for destination FINAL: NOT DELIVERED, NOT BILLED*

Delivery Report Example

The following example is an example of a successfully delivered message. refld and id have been set to invalid values in this example.

{
  "refId": "0",
  "id": "0",
  "operator": "no.telenor",
  "sentTimestamp": "2015-11-19T09:37:35Z",
  "timestamp": "2015-11-19T09:37:00Z",
  "resultCode": 1001,
  "operatorResultCode": "2",
  "segments": 1,
  "gateCustomParameters":{},
  "customParameters": {
    "received": "2015-11-19 10:37:36",
    "source": "2333",
    "destination": "+4746910822"
  }
}

The following example is an example of a message which was attempted sent to a phone number which does not exist. refld and id have again been set to invalid values in this example.

{
  "refId": "0",
  "id": "0",
  "operator": null,
  "sentTimestamp": "2015-11-19T10:17:37Z",
  "timestamp": "2015-11-19T10:17:37Z",
  "resultCode": 2106,
  "operatorResultCode": null,
  "segments": 1,
  "gateCustomParameters":{},
  "customParameters": {
    "received": "2015-11-19 11:17:37",
    "source": "2333",
    "destination": "+4746910823"
  }
}

Appendix 1

The following hosts are currently used for outgoing messaging.

Hostname(s) IP address(es)
socks1.sp247.net 195.84.162.34
socks2.sp247.net 194.71.165.71
socks3.sp247.net 195.84.162.16
socks4.sp247.net 194.71.165.98
socks5.sp247.net 195.84.162.3
socks6.sp247.net 194.71.165.122
s1.n-eu.linkmobility.io 213.242.87.36
s2.n-eu.linkmobility.io 213.242.87.37
s3.n-eu.linkmobility.io 213.242.87.38
s4.n-eu.linkmobility.io 213.242.87.39
s5.n-eu.linkmobility.io 213.242.87.40
s6.n-eu.linkmobility.io 213.242.87.41
s1.c-eu.linkmobility.io 62.67.62.101
s2.c-eu.linkmobility.io 62.67.62.102
s3.c-eu.linkmobility.io 62.67.62.103
s4.c-eu.linkmobility.io 62.67.62.104
s5.c-eu.linkmobility.io 62.67.62.105
s6.c-eu.linkmobility.io 62.67.62.106
s1.s-eu.linkmobility.io 217.163.95.196
s2.s-eu.linkmobility.io 217.163.95.197
s3.s-eu.linkmobility.io 217.163.95.198
s4.s-eu.linkmobility.io 217.163.95.199
s5.s-eu.linkmobility.io 217.163.95.200
s6.s-eu.linkmobility.io 217.163.95.201
s1.no.linkmobility.io 213.242.87.68 (will be decommissioned after 2024-08-31)
s2.no.linkmobility.io 213.242.87.69 (will be decommissioned after 2024-08-31)
s3.no.linkmobility.io 213.242.87.70 (will be decommissioned after 2024-08-31)
s4.no.linkmobility.io 213.242.87.71 (will be decommissioned after 2024-08-31)
s5.no.linkmobility.io 213.242.87.72 (will be decommissioned after 2024-08-31)
s6.no.linkmobility.io 213.242.87.73 (will be decommissioned after 2024-08-31)
s1.deb.linkmobility.io 62.67.62.68 (decommissioned 2023-08-31)
s2.deb.linkmobility.io 62.67.62.69 (decommissioned 2023-08-31)
s3.deb.linkmobility.io 62.67.62.70 (decommissioned 2023-08-31)
s4.deb.linkmobility.io 62.67.62.71 (decommissioned 2023-08-31)
s5.deb.linkmobility.io 62.67.62.72 (decommissioned 2023-08-31)
s6.deb.linkmobility.io 62.67.62.73 (decommissioned 2023-08-31)

Appendix 2

Silent Billing

To perform a Silent Billing (billing the end-user without them receiving a text message on their phone) set the customParameter "chargeOnly" to "true" (the string "true", not the Boolean true). Silent billing is only available in certain markets and is bound by additional agreements and restrictions. Your sales associate or Support will advise you if you are in doubt.

Examples

The following example shows how to send a premium (charged) message. The following message would cost 1 NOK for the end-user to receive. It is sent from Norwegian shortcode 2333 to Norwegian phonenumber 41560067 (country code +47). The delivery report is delivered to a predetermined gateld. (Delivery reports are required for charged messages. Only ΤΟΝ "SHORTNUMBER” is accepted for charged messages.)

{
  "source": "2333",
  "sourceTON": "SHORTNUMBER",
  "destination": "+4741560067",
  "userData": "This message costs 1 NOK to receive.",
  "tariff": 100,
  "currency": "NOK",
  "platformId": "0",
  "platformPartnerId": "0",
  "refId": "9ui5kKL",
  "productDescription": "Informational message from 2333",
  "productCategory": 15,
  "useDeliveryReport": true,
  "deliveryReportGates": [
    "0"
  ]
}

Norway (Strex) only

You must also set the customParameter "authorize" to "true", and "strex.username" to your company's Strex MerchantID. On the FIRST time you bill an end-user silently, you must also set the customParameter "strex.securityLevel" to 2. On the second and subsequent requests, this parameter should not be present.

Appendix 3

Supported TLS versions

From 2020-11-15 will TLS 1.2 or higher be required for all HTTPS connections.

Support for TLS 1.0 and 1.1 will be discontinued. Versions 1.0 and 1.1 of TLS are older protocols that have been deprecated and are considered as security risks in the Internet community.

LINK strongly recommend using HTTPS if HTTP is being used today. HTTP is deprecated as of 2020-09-01 by LINK and will be removed in the future. Date for HTTP removal is not yet decided.

Changelog of this document

Date Version Author Changes
2015-11-23 1.0 BMS Initial version
2016-02-08 1.1 BMS Added batch sending information
Fixed some minor typos and formatting errors.
2016-04-12 1.1.1 BMS Added silent billing custom property
2017-06-07 1.2 KCN Renamed document to SMS REST API
Added Scheduled delivery
Minor changes
2017-09-21 1.3 EPT Changed maximum of SendRequestMessages from 500 to 1000
2018-03-20 1.4 EPT The request accepts the custom Parameter "replySmsCount" with the case insensitive String values "true" or "false" that adds a new parameter in the reply called "smsCount" that contains the number of message parts or SMS sended within a single SendRequestMessage.
2019-05-06 1.5 EPT Support for flash sms by adding the customParameter "flash.sms" with the case insensitive String values "true" or "false".
2019-07-03 1.6 EPT Minor changes and added Appendix 1 and 2 and new URL:s
2019-08-30 1.7 KCN Deprecated use of the vat field for both send and send batch requests.
2019-09-05 1.8 EPT productCategory values added. Some missing result codes added as well.
2019-09-25 1.9 KCN Clarifications in Appendix 1
2019-12-27 1.10 EPT Priority added in the documentation and further explanation about the delivery reports when the message is a multi-part message.
2020-06-15 1.11 RTN Added new product categories
2020-07-01 1.12 RTN Added result code 1013
2020-08-28 1.13 EPT Appendix 3 added
2020-10-26 1.14 KCN Added result code 1003
2020-12-03 1.15 EPT Added the result codes 2000, 2001, 2002, 2003, 2100, 2101, 2102 and corrected 2103.
2020-12-08 1.16 EPT Further explanation for the id in a delivery report for a Multi-part message.
2021-02-19 1.17 TL The URL for Developers, from HTTP to HTTPS
2021-04-29 1.18 TL Changed to new homepage URL
2021-06-10 1.19 JS Added comment about preliminary and final smsCount
2021-06-22 1.20 EP Corrected the splitting conditions of the message. It is splitted regardless the DCS specified.
2021-08-02 1.21 HA Added Error result code: Unable to access SMSC credentials
2021-08-17 1.22 EM Added Obfuscation section.
2021-08-31 1.23 FS Updated Strex product categories
2022-02-02 1.24 EPT Specifying that the transaction states BILLED, NOT BILLED and UNKNOWN BILLING are only when the SMS is premium. Updated also the error codes on invalid authentication and access denied.
2023-01-31 1.25 FS Some typos have been fixed in the documentation as well.
2023-06-23 1.26 FS Updated some IPs and URLs
2023-10-12 2.0 KCN Added OAuth 2.0 authentication.
Added IP addresses.
Updated result code 1010
Added eu.linkmobility.io as new endpoint.
2024-03-14 2.1 FS Updated Ips and URLs
2024-11-05 2.2 FS Added result code 106
2025-03-06 2.3 GM Added result code 2108
2025-06-23 2.4 AK Added quota

PDF preview unavailable. Download the PDF instead.

sms rest api mt dlr-2-4 Microsoft: Print To PDF

Related Documents

Preview SMSC SMPP User Guide - LINK Mobility
User guide for the LINK Mobility SMSC SMPP interface, detailing supported commands, parameters, error codes, and TLS versions for SMS messaging.