Code copied successfuly

SMS API

Version: v1.0

Specification Release Notes Other versions

The SMS API enables you to send messages to your customers or to receive messages from your customers to phone numbers registered with tyntec.

Base URLs

SMS Messaging

tyntec’s SMS service is governed by two operations that allow you:

  • to send an SMS and
  • to query the status of a previously sent SMS

Important

tyntec stores status details for up to 3 months after the final delivery state is known.

Send SMS (POST)

Code samples

# You can also use wget
curl -X POST https://api.tyntec.com/messaging/v1/sms \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'apikey: API_KEY'

POST https://api.tyntec.com/messaging/v1/sms HTTP/1.1
Host: api.tyntec.com
Content-Type: application/json
Accept: application/json

const inputBody = '{
  "to": "+123456789",
  "from": "tyntec",
  "message": "Hello world!"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'apikey':'API_KEY'

};

fetch('https://api.tyntec.com/messaging/v1/sms',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'apikey' => 'API_KEY'
}

result = RestClient.post 'https://api.tyntec.com/messaging/v1/sms',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'apikey': 'API_KEY'
}

r = requests.post('https://api.tyntec.com/messaging/v1/sms', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

$headers = array(
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
    'apikey' => 'API_KEY',

    );

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
    $response = $client->request('POST','https://api.tyntec.com/messaging/v1/sms', array(
        'headers' => $headers,
        'json' => $request_body,
       )
    );
    print_r($response->getBody()->getContents());
 }
 catch (\GuzzleHttp\Exception\BadResponseException $e) {
    // handle exception or api errors.
    print_r($e->getMessage());
 }

 // ...

URL obj = new URL("https://api.tyntec.com/messaging/v1/sms");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "apikey": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.tyntec.com/messaging/v1/sms", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

POST /messaging/v1/sms

Sends an SMS via the POST HTTP method with parameters defined in the request body.

Body parameter

{
  "to": "+123456789",
  "from": "tyntec",
  "message": "Hello world!"
}

Parameters

Name In Type Required Description
body body SmsMessage true Message you would like to send

Example responses

200 Response

{
  "doneDate": "string",
  "errorCode": "string",
  "errorReason": "string",
  "from": "+49123456789",
  "href": "string",
  "mccmnc": "string",
  "parts": [
    {
      "currency": "EUR",
      "deliveryState": "string",
      "doneDate": "string",
      "errorCode": "string",
      "partId": "string",
      "price": "0.005",
      "priceEffective": "2018-06-01T00:00:00+0200",
      "sentDate": "2019-07-02T16:47:39+0200",
      "statusText": "string"
    }
  ],
  "overallPrice": "0.01",
  "priceEffective": "2019-08-24T14:15:22Z",
  "reference": "string",
  "requestId": "e74db8d4-77ad-4671-8feb-9bc76b0df188",
  "sentDate": "2019-07-02T16:47:39+0200",
  "size": 1,
  "status": "DELIVERED",
  "submitDate": "2019-08-24T14:15:22Z",
  "to": "+1987654321",
  "ttid": 77292
}

Responses

Status Meaning Description Schema
200 OK The messageIds of your request RestMessageResponse
201 Created Created None
400 Bad Request Invalid request Problem
401 Unauthorized Unauthorized Problem
403 Forbidden Forbidden Problem
404 Not Found Not Found Problem
500 Internal Server Error Something went wrong. :-( Problem

Send SMS (GET)

Code samples

# You can also use wget
curl -X GET https://api.tyntec.com/messaging/v1/sms?to=string&from=string&message=string \
  -H 'Accept: application/json' \
  -H 'apikey: API_KEY'

GET https://api.tyntec.com/messaging/v1/sms?to=string&from=string&message=string HTTP/1.1
Host: api.tyntec.com
Accept: application/json


const headers = {
  'Accept':'application/json',
  'apikey':'API_KEY'

};

fetch('https://api.tyntec.com/messaging/v1/sms?to=string&from=string&message=string',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'apikey' => 'API_KEY'
}

result = RestClient.get 'https://api.tyntec.com/messaging/v1/sms',
  params: {
  'to' => 'string',
'from' => 'string',
'message' => 'string'
}, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'apikey': 'API_KEY'
}

r = requests.get('https://api.tyntec.com/messaging/v1/sms', params={
  'to': 'string',  'from': 'string',  'message': 'string'
}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

$headers = array(
    'Accept' => 'application/json',
    'apikey' => 'API_KEY',

    );

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
    $response = $client->request('GET','https://api.tyntec.com/messaging/v1/sms', array(
        'headers' => $headers,
        'json' => $request_body,
       )
    );
    print_r($response->getBody()->getContents());
 }
 catch (\GuzzleHttp\Exception\BadResponseException $e) {
    // handle exception or api errors.
    print_r($e->getMessage());
 }

 // ...

URL obj = new URL("https://api.tyntec.com/messaging/v1/sms?to=string&from=string&message=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "apikey": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.tyntec.com/messaging/v1/sms", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /messaging/v1/sms

Sends an SMS via the GET HTTP method with parameters defined in the query string.

Parameters

Name In Type Required Description
to query string true This parameter represents the receiving party’s phone number in the international phone format.
from query string true This parameter gives the identification of the sending party, which can either be a phone number in the international format or an alphanumeric identifier with up to 11 characters.
message query string true The message will be sent with characters encoded either in the GSM standard alphabet (GSM-7) or GSM Unicode alphabet (UCS-2).
encoding query string false Encoding selection between GSM7, UNICODE, or the default AUTO selection
gateway query string false Which gateway to use for the message delivery
conversion query boolean false Whether the message is a subject to conversion ratio
sendDateTime query string false Any future date in the format “yyyy-MM-ddT-HH:mm:ss+HH:mm” ISO 8601. If not set, the message will be sent immediately. The default time zone is UTC.
validity query string false Validity in minutes for this message
reference query string false A custom reference that will mark the Delivery Report
callbackUrl query string false Your URL for delivering the Delivery Reports; leave empty for no Delivery Report.
callbackMethod query string false Your prefered HTTP method for the Delivery Report callback; possible values POST/GET
partLimit query integer(int32) false Up to how many parts you allow this message to be concatenated
trate query number(double) false Up to how much you allow the transcoder to replace original characters to make it GSM-7 compatible; possible values: decimals from 0 to 1
mrate query number(double) false Up to how much you allow the transcoder to skip original characters to make it GSM-7 compatible; possible values: decimals from 0 to 1
upperCased query boolean false Whether you allow the transcoder to try an upper case version of the content in the case this improves the produced parts of the message
keepEmojis query boolean false Instructs the transcoder to keep emojis or to replace them with text. By default the transcoder will keep emojis; thus text will result to UNICODE.
flash query boolean false Whether this SMS will be delivered as flash. Some networks do not support this.
Detailed description

from: This parameter gives the identification of the sending party, which can either be a phone number in the international format or an alphanumeric identifier with up to 11 characters.

Some destination networks impose restrictions on the sender ID format. Please check the coverage list and contact us for more information.

message: The message will be sent with characters encoded either in the GSM standard alphabet (GSM-7) or GSM Unicode alphabet (UCS-2).

  • GSM standard alphabet GSM-7. Maximum length is 160 characters per single message and 152 characters per concatenated message.
  • GSM Unicode alphabet UCS-2. Maximum length is 70 characters per single message and 66 characters per concatenated message.

tyntec automatically splits the sent message into concatenated messages if the message exceeds the given limits. These concatenated messages are unified by the handset once again and they are displayed as one message (if supported by the handset).

tyntec will charge for each part of the concatenated message as for an individual message.

Enumerated values
Parameter Value
encoding AUTO
encoding GSM7
encoding UNICODE

Example responses

200 Response

{
  "doneDate": "string",
  "errorCode": "string",
  "errorReason": "string",
  "from": "+49123456789",
  "href": "string",
  "mccmnc": "string",
  "parts": [
    {
      "currency": "EUR",
      "deliveryState": "string",
      "doneDate": "string",
      "errorCode": "string",
      "partId": "string",
      "price": "0.005",
      "priceEffective": "2018-06-01T00:00:00+0200",
      "sentDate": "2019-07-02T16:47:39+0200",
      "statusText": "string"
    }
  ],
  "overallPrice": "0.01",
  "priceEffective": "2019-08-24T14:15:22Z",
  "reference": "string",
  "requestId": "e74db8d4-77ad-4671-8feb-9bc76b0df188",
  "sentDate": "2019-07-02T16:47:39+0200",
  "size": 1,
  "status": "DELIVERED",
  "submitDate": "2019-08-24T14:15:22Z",
  "to": "+1987654321",
  "ttid": 77292
}

Responses

Status Meaning Description Schema
200 OK The messageIds of your request RestMessageResponse
201 Created Created None
400 Bad Request Invalid request Problem
401 Unauthorized Unauthorized Problem
403 Forbidden Forbidden Problem
404 Not Found Not Found Problem
500 Internal Server Error Something went wrong. :-( Problem

Read SMS status

Code samples

# You can also use wget
curl -X GET https://api.tyntec.com/messaging/v1/messages/{requestId} \
  -H 'Accept: application/json' \
  -H 'apikey: API_KEY'

GET https://api.tyntec.com/messaging/v1/messages/{requestId} HTTP/1.1
Host: api.tyntec.com
Accept: application/json


const headers = {
  'Accept':'application/json',
  'apikey':'API_KEY'

};

fetch('https://api.tyntec.com/messaging/v1/messages/{requestId}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'apikey' => 'API_KEY'
}

result = RestClient.get 'https://api.tyntec.com/messaging/v1/messages/{requestId}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'apikey': 'API_KEY'
}

r = requests.get('https://api.tyntec.com/messaging/v1/messages/{requestId}', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

$headers = array(
    'Accept' => 'application/json',
    'apikey' => 'API_KEY',

    );

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
    $response = $client->request('GET','https://api.tyntec.com/messaging/v1/messages/{requestId}', array(
        'headers' => $headers,
        'json' => $request_body,
       )
    );
    print_r($response->getBody()->getContents());
 }
 catch (\GuzzleHttp\Exception\BadResponseException $e) {
    // handle exception or api errors.
    print_r($e->getMessage());
 }

 // ...

URL obj = new URL("https://api.tyntec.com/messaging/v1/messages/{requestId}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "apikey": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.tyntec.com/messaging/v1/messages/{requestId}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /messaging/v1/messages/{requestId}

Returns the status of a sent SMS message.

You have the possibility to query the status of a message you sent through our systems. In the case the callback URL is configured, we will POST the status to the defined URL.

Important

The SMS Message Status is available for 3 months after a final delivery state is reached.

Parameters

Name In Type Required Description
requestId path string true The unique identifier provided for each request.

Example responses

200 Response

{
  "doneDate": "string",
  "errorCode": "string",
  "errorReason": "string",
  "from": "+49123456789",
  "href": "string",
  "mccmnc": "string",
  "parts": [
    {
      "currency": "EUR",
      "deliveryState": "string",
      "doneDate": "string",
      "errorCode": "string",
      "partId": "string",
      "price": "0.005",
      "priceEffective": "2018-06-01T00:00:00+0200",
      "sentDate": "2019-07-02T16:47:39+0200",
      "statusText": "string"
    }
  ],
  "overallPrice": "0.01",
  "priceEffective": "2019-08-24T14:15:22Z",
  "reference": "string",
  "requestId": "e74db8d4-77ad-4671-8feb-9bc76b0df188",
  "sentDate": "2019-07-02T16:47:39+0200",
  "size": 1,
  "status": "DELIVERED",
  "submitDate": "2019-08-24T14:15:22Z",
  "to": "+1987654321",
  "ttid": 77292
}

Responses

Status Meaning Description Schema
200 OK OK RestMessageResponse
401 Unauthorized Unauthorized Problem
403 Forbidden Forbidden Problem
404 Not Found Not Found Problem
500 Internal Server Error Something went wrong. :-( Problem

Receive SMS

Code samples

# You can also use wget
curl -X POST https://api.tyntec.com/incoming \
  -H 'Content-Type: application/json'

POST https://api.tyntec.com/incoming HTTP/1.1
Host: api.tyntec.com
Content-Type: application/json

const inputBody = '{
  "from": "+49123456789",
  "to": "+1987654321",
  "message": "This is an example, the data is garbage.",
  "originMCC": 260,
  "originMNC": 9,
  "originTtId": 77292,
  "totalPrice": -0.005,
  "requestId": "e74db8d4-77ad-4671-8feb-9bc76b0df188",
  "size": 1,
  "missingParts": false,
  "contentList": [
    {
      "msgId": "48799399408:0:cad578e86b324c0a80f8fe866bfdb2b6",
      "sentDate": "2019-07-02T16:47:39+0200",
      "sequenceNumber": 1,
      "price": -0.005,
      "currency": "EUR",
      "priceEffective": "2018-06-01T00:00:00+0200"
    }
  ]
}';
const headers = {
  'Content-Type':'application/json'

};

fetch('https://api.tyntec.com/incoming',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json'
}

result = RestClient.post 'https://api.tyntec.com/incoming',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json'
}

r = requests.post('https://api.tyntec.com/incoming', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

$headers = array(
    'Content-Type' => 'application/json',

    );

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
    $response = $client->request('POST','https://api.tyntec.com/incoming', array(
        'headers' => $headers,
        'json' => $request_body,
       )
    );
    print_r($response->getBody()->getContents());
 }
 catch (\GuzzleHttp\Exception\BadResponseException $e) {
    // handle exception or api errors.
    print_r($e->getMessage());
 }

 // ...

URL obj = new URL("https://api.tyntec.com/incoming");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.tyntec.com/incoming", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

POST /incoming

Receive an SMS as a POST request from us to your server.

Note: The aforementioned path is only an example. You can choose the callback URL freely.

The SMS API allows you to automatically receive messages from your customers sent to your phone numbers that you have registered with tyntec.

For this service, you will need to provide tyntec with an URL (callbackUrl) at your webserver, e.g. https://rest.customer.com/inboundmessages/.

tyntec's application will do either the POST or GET call to your server; this can be configured by tyntec.

Retries

tyntec's application will retry delivery every 10 seconds in the case your application does not accept the inbound message. Retries are paused for 10 minutes after every 100 consecutive unsuccessful delivery attempts. tyntec's application will keep trying for a maximum of 48 hours.

Body parameter

{
  "from": "+49123456789",
  "to": "+1987654321",
  "message": "This is an example, the data is garbage.",
  "originMCC": 260,
  "originMNC": 9,
  "originTtId": 77292,
  "totalPrice": -0.005,
  "requestId": "e74db8d4-77ad-4671-8feb-9bc76b0df188",
  "size": 1,
  "missingParts": false,
  "contentList": [
    {
      "msgId": "48799399408:0:cad578e86b324c0a80f8fe866bfdb2b6",
      "sentDate": "2019-07-02T16:47:39+0200",
      "sequenceNumber": 1,
      "price": -0.005,
      "currency": "EUR",
      "priceEffective": "2018-06-01T00:00:00+0200"
    }
  ]
}

Parameters

Name In Type Required Description
body body InboundMessage true The message that tyntec delivers to your system

Responses

Status Meaning Description Schema
2XX Unknown Message was accepted by your system. None
default Default Message was not accepted by your system.

The tyntec's inbound system will retry the delivery.|None|

BYON Contact Service

Bring Your Own Number (BYON) Contacts Service gives the users the possibility to manage their contacts.

List all contacts

Code samples

# You can also use wget
curl -X GET https://api.tyntec.com/byon/contacts/v1 \
  -H 'Accept: application/json'

GET https://api.tyntec.com/byon/contacts/v1 HTTP/1.1
Host: api.tyntec.com
Accept: application/json


const headers = {
  'Accept':'application/json'

};

fetch('https://api.tyntec.com/byon/contacts/v1',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json'
}

result = RestClient.get 'https://api.tyntec.com/byon/contacts/v1',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json'
}

r = requests.get('https://api.tyntec.com/byon/contacts/v1', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

$headers = array(
    'Accept' => 'application/json',

    );

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
    $response = $client->request('GET','https://api.tyntec.com/byon/contacts/v1', array(
        'headers' => $headers,
        'json' => $request_body,
       )
    );
    print_r($response->getBody()->getContents());
 }
 catch (\GuzzleHttp\Exception\BadResponseException $e) {
    // handle exception or api errors.
    print_r($e->getMessage());
 }

 // ...

URL obj = new URL("https://api.tyntec.com/byon/contacts/v1");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.tyntec.com/byon/contacts/v1", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /byon/contacts/v1

Returns all contacts created with your API key; you can get the contact ID from the list for editing or deleting the contact. You can specify friendlyName to filter the results.

Parameters

Name In Type Required Description
friendlyName query string false List filter based on the friendlyName field

Example responses

200 Response

[
  {
    "contacts": [
      {
        "companyAddress": "string",
        "companyName": "string",
        "contactEmail": "string",
        "contactName": "string",
        "contactPhone": "string",
        "contactTitle": "string",
        "friendlyName": "string"
      }
    ],
    "size": 0
  }
]

Responses

Status Meaning Description Schema
200 OK Returned the list of contacts Inline
204 No Content Empty list; no contacts were found for this friendly name. Inline
401 Unauthorized Unauthorized None
403 Forbidden Forbidden None
404 Not Found Not Found None
500 Internal Server Error Something went wrong. :-( ErrorResponse
Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [ContactArrayResponse] false none [Contract Array Response schema]
» contacts [ContactEntity] false none [Contract Entity schema]
»» companyAddress string false none Company's postal address
»» companyName string false none Company's name
»» contactEmail string false none E-mail address
»» contactName string false none Requestor's name
»» contactPhone string false none Requestor's phone number
»» contactTitle string false none Requestor's title
»» friendlyName string false none List filter based on the friendlyName field
» size integer(int32) false none none

Status Code 204

Name Type Required Restrictions Description
anonymous [ContactArrayResponse] false none [Contract Array Response schema]
» contacts [ContactEntity] false none [Contract Entity schema]
»» companyAddress string false none Company's postal address
»» companyName string false none Company's name
»» contactEmail string false none E-mail address
»» contactName string false none Requestor's name
»» contactPhone string false none Requestor's phone number
»» contactTitle string false none Requestor's title
»» friendlyName string false none List filter based on the friendlyName field
» size integer(int32) false none none

Create a contact

Code samples

# You can also use wget
curl -X POST https://api.tyntec.com/byon/contacts/v1 \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json'

POST https://api.tyntec.com/byon/contacts/v1 HTTP/1.1
Host: api.tyntec.com
Content-Type: application/json
Accept: application/json

const inputBody = '{
  "companyAddress": "string",
  "companyName": "string",
  "contactEmail": "string",
  "contactName": "string",
  "contactPhone": "string",
  "contactTitle": "string",
  "friendlyName": "string"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json'

};

fetch('https://api.tyntec.com/byon/contacts/v1',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json'
}

result = RestClient.post 'https://api.tyntec.com/byon/contacts/v1',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

r = requests.post('https://api.tyntec.com/byon/contacts/v1', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

$headers = array(
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',

    );

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
    $response = $client->request('POST','https://api.tyntec.com/byon/contacts/v1', array(
        'headers' => $headers,
        'json' => $request_body,
       )
    );
    print_r($response->getBody()->getContents());
 }
 catch (\GuzzleHttp\Exception\BadResponseException $e) {
    // handle exception or api errors.
    print_r($e->getMessage());
 }

 // ...

URL obj = new URL("https://api.tyntec.com/byon/contacts/v1");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.tyntec.com/byon/contacts/v1", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

POST /byon/contacts/v1

Creates a new contact.

Body parameter

{
  "companyAddress": "string",
  "companyName": "string",
  "contactEmail": "string",
  "contactName": "string",
  "contactPhone": "string",
  "contactTitle": "string",
  "friendlyName": "string"
}

Parameters

Name In Type Required Description
body body ContactEntity true Comma-separated list of contact details:
Detailed description

body: Comma-separated list of contact details:

  • companyAddress (optional)
  • companyName
  • contactEmail
  • contactName
  • contactPhone
  • contactTitle (optional)
  • friendlyName (optional)

Example responses

200 Response

{
  "companyAddress": "string",
  "companyName": "string",
  "contactEmail": "string",
  "contactName": "string",
  "contactPhone": "string",
  "contactTitle": "string",
  "friendlyName": "string"
}

Responses

Status Meaning Description Schema
200 OK OK ContactEntity
201 Created Created None
202 Accepted The contact was created. ContactEntity
400 Bad Request The provided contact is not valid. None
401 Unauthorized Unauthorized None
403 Forbidden Forbidden None
404 Not Found Contact was not found. None
500 Internal Server Error Something went wrong. :-( ErrorResponse

Read a contact

Code samples

# You can also use wget
curl -X GET https://api.tyntec.com/byon/contacts/v1/{contactId} \
  -H 'Accept: application/json'

GET https://api.tyntec.com/byon/contacts/v1/{contactId} HTTP/1.1
Host: api.tyntec.com
Accept: application/json


const headers = {
  'Accept':'application/json'

};

fetch('https://api.tyntec.com/byon/contacts/v1/{contactId}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json'
}

result = RestClient.get 'https://api.tyntec.com/byon/contacts/v1/{contactId}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json'
}

r = requests.get('https://api.tyntec.com/byon/contacts/v1/{contactId}', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

$headers = array(
    'Accept' => 'application/json',

    );

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
    $response = $client->request('GET','https://api.tyntec.com/byon/contacts/v1/{contactId}', array(
        'headers' => $headers,
        'json' => $request_body,
       )
    );
    print_r($response->getBody()->getContents());
 }
 catch (\GuzzleHttp\Exception\BadResponseException $e) {
    // handle exception or api errors.
    print_r($e->getMessage());
 }

 // ...

URL obj = new URL("https://api.tyntec.com/byon/contacts/v1/{contactId}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.tyntec.com/byon/contacts/v1/{contactId}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /byon/contacts/v1/{contactId}

Returns the contact for the provided contactId.

Parameters

Name In Type Required Description
contactId path string true List filter based on the contactId field

Example responses

200 Response

{
  "companyAddress": "string",
  "companyName": "string",
  "contactEmail": "string",
  "contactName": "string",
  "contactPhone": "string",
  "contactTitle": "string",
  "friendlyName": "string"
}

Responses

Status Meaning Description Schema
200 OK The contact ContactEntity
401 Unauthorized Unauthorized None
403 Forbidden Forbidden None
404 Not Found Contact was not found. None
500 Internal Server Error Something went wrong. :-( ErrorResponse

Edit a contact

Code samples

# You can also use wget
curl -X POST https://api.tyntec.com/byon/contacts/v1/{contactId} \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json'

POST https://api.tyntec.com/byon/contacts/v1/{contactId} HTTP/1.1
Host: api.tyntec.com
Content-Type: application/json
Accept: application/json

const inputBody = '{
  "companyAddress": "string",
  "companyName": "string",
  "contactEmail": "string",
  "contactName": "string",
  "contactPhone": "string",
  "contactTitle": "string",
  "friendlyName": "string"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json'

};

fetch('https://api.tyntec.com/byon/contacts/v1/{contactId}',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json'
}

result = RestClient.post 'https://api.tyntec.com/byon/contacts/v1/{contactId}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

r = requests.post('https://api.tyntec.com/byon/contacts/v1/{contactId}', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

$headers = array(
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',

    );

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
    $response = $client->request('POST','https://api.tyntec.com/byon/contacts/v1/{contactId}', array(
        'headers' => $headers,
        'json' => $request_body,
       )
    );
    print_r($response->getBody()->getContents());
 }
 catch (\GuzzleHttp\Exception\BadResponseException $e) {
    // handle exception or api errors.
    print_r($e->getMessage());
 }

 // ...

URL obj = new URL("https://api.tyntec.com/byon/contacts/v1/{contactId}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.tyntec.com/byon/contacts/v1/{contactId}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

POST /byon/contacts/v1/{contactId}

Edits the contact for the provided contactId.

Body parameter

{
  "companyAddress": "string",
  "companyName": "string",
  "contactEmail": "string",
  "contactName": "string",
  "contactPhone": "string",
  "contactTitle": "string",
  "friendlyName": "string"
}

Parameters

Name In Type Required Description
contactId path string true ID of the contact that is to be edited
body body ContactEntity true Comma-separated list of contact details:
Detailed description

body: Comma-separated list of contact details:

  • companyAddress (optional)
  • companyName
  • contactEmail
  • contactName
  • contactPhone
  • contactTitle (optional)
  • friendlyName (optional)

Example responses

200 Response

{
  "companyAddress": "string",
  "companyName": "string",
  "contactEmail": "string",
  "contactName": "string",
  "contactPhone": "string",
  "contactTitle": "string",
  "friendlyName": "string"
}

Responses

Status Meaning Description Schema
200 OK The edited contact ContactEntity
201 Created Created None
400 Bad Request Contact can not be edited. None
401 Unauthorized Unauthorized None
403 Forbidden Forbidden None
404 Not Found Contact was not found. None
500 Internal Server Error Something went wrong. :-( ErrorResponse

Delete a contact

Code samples

# You can also use wget
curl -X DELETE https://api.tyntec.com/byon/contacts/v1/{contactId} \
  -H 'Accept: application/json'

DELETE https://api.tyntec.com/byon/contacts/v1/{contactId} HTTP/1.1
Host: api.tyntec.com
Accept: application/json


const headers = {
  'Accept':'application/json'

};

fetch('https://api.tyntec.com/byon/contacts/v1/{contactId}',
{
  method: 'DELETE',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json'
}

result = RestClient.delete 'https://api.tyntec.com/byon/contacts/v1/{contactId}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json'
}

r = requests.delete('https://api.tyntec.com/byon/contacts/v1/{contactId}', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

$headers = array(
    'Accept' => 'application/json',

    );

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
    $response = $client->request('DELETE','https://api.tyntec.com/byon/contacts/v1/{contactId}', array(
        'headers' => $headers,
        'json' => $request_body,
       )
    );
    print_r($response->getBody()->getContents());
 }
 catch (\GuzzleHttp\Exception\BadResponseException $e) {
    // handle exception or api errors.
    print_r($e->getMessage());
 }

 // ...

URL obj = new URL("https://api.tyntec.com/byon/contacts/v1/{contactId}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("DELETE");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("DELETE", "https://api.tyntec.com/byon/contacts/v1/{contactId}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

DELETE /byon/contacts/v1/{contactId}

Deletes the contact for the provided contactId.

Parameters

Name In Type Required Description
contactId path string true Unique identifier of the contact that is to be deleted.

Example responses

200 Response

{
  "companyAddress": "string",
  "companyName": "string",
  "contactEmail": "string",
  "contactName": "string",
  "contactPhone": "string",
  "contactTitle": "string",
  "friendlyName": "string"
}

Responses

Status Meaning Description Schema
200 OK The deleted contact ContactEntity
204 No Content No Content None
400 Bad Request Contact can not be deleted. None
401 Unauthorized Unauthorized None
403 Forbidden Forbidden None
404 Not Found Contact was not found. None
500 Internal Server Error Something went wrong. :-( ErrorResponse

BYON Phone Book Service

Bring Your Own Number (BYON) Phone Book Service gives the users the possibility to view their Phone book entries.

List all phone numbers

Code samples

# You can also use wget
curl -X GET https://api.tyntec.com/byon/phonebook/v1/numbers \
  -H 'Accept: application/json'

GET https://api.tyntec.com/byon/phonebook/v1/numbers HTTP/1.1
Host: api.tyntec.com
Accept: application/json


const headers = {
  'Accept':'application/json'

};

fetch('https://api.tyntec.com/byon/phonebook/v1/numbers',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json'
}

result = RestClient.get 'https://api.tyntec.com/byon/phonebook/v1/numbers',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json'
}

r = requests.get('https://api.tyntec.com/byon/phonebook/v1/numbers', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

$headers = array(
    'Accept' => 'application/json',

    );

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
    $response = $client->request('GET','https://api.tyntec.com/byon/phonebook/v1/numbers', array(
        'headers' => $headers,
        'json' => $request_body,
       )
    );
    print_r($response->getBody()->getContents());
 }
 catch (\GuzzleHttp\Exception\BadResponseException $e) {
    // handle exception or api errors.
    print_r($e->getMessage());
 }

 // ...

URL obj = new URL("https://api.tyntec.com/byon/phonebook/v1/numbers");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.tyntec.com/byon/phonebook/v1/numbers", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /byon/phonebook/v1/numbers

Returns all phone numbers created with your API key; you can specify attributes to filter the results. The size limit is 3000.

Parameters

Name In Type Required Description
requestId query string false List filter based on the requestId field
contactId query string false List filter based on the contactId field
page query integer(int32) false List filter based on the page field
size query integer(int32) false List filter based on the size field

Example responses

200 Response

[
  {
    "provisioningRequests": [
      {
        "accountId": "string",
        "contactId": "string",
        "friendlyName": "string",
        "requestId": "string",
        "status": "string"
      }
    ],
    "size": 0
  }
]

Responses

Status Meaning Description Schema
200 OK List of phones requests Inline
401 Unauthorized Unauthorized None
403 Forbidden Forbidden None
404 Not Found Not Found None
500 Internal Server Error Something went wrong. :-( ErrorResponse
Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [PhoneProvisioningArrayResponse] false none [Phone provisioning array response schema]
» provisioningRequests [PhoneProvisioningEntity] false none [Phone provisioning schema]
»» accountId string false none The account that created this entry
»» contactId string false none Contact ID of this entry
»» friendlyName string false none Friendly name of this entry
»» requestId string false none Request ID of this entry
»» status string false none Status of this entry
» size integer(int32) false none none

Read a phone number

Code samples

# You can also use wget
curl -X GET https://api.tyntec.com/byon/phonebook/v1/numbers/{phoneNumber} \
  -H 'Accept: application/json'

GET https://api.tyntec.com/byon/phonebook/v1/numbers/{phoneNumber} HTTP/1.1
Host: api.tyntec.com
Accept: application/json


const headers = {
  'Accept':'application/json'

};

fetch('https://api.tyntec.com/byon/phonebook/v1/numbers/{phoneNumber}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json'
}

result = RestClient.get 'https://api.tyntec.com/byon/phonebook/v1/numbers/{phoneNumber}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json'
}

r = requests.get('https://api.tyntec.com/byon/phonebook/v1/numbers/{phoneNumber}', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

$headers = array(
    'Accept' => 'application/json',

    );

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
    $response = $client->request('GET','https://api.tyntec.com/byon/phonebook/v1/numbers/{phoneNumber}', array(
        'headers' => $headers,
        'json' => $request_body,
       )
    );
    print_r($response->getBody()->getContents());
 }
 catch (\GuzzleHttp\Exception\BadResponseException $e) {
    // handle exception or api errors.
    print_r($e->getMessage());
 }

 // ...

URL obj = new URL("https://api.tyntec.com/byon/phonebook/v1/numbers/{phoneNumber}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.tyntec.com/byon/phonebook/v1/numbers/{phoneNumber}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /byon/phonebook/v1/numbers/{phoneNumber}

Returns details of the specific phone number entity created with your API key.

Parameters

Name In Type Required Description
phoneNumber path string true Phone number to get information for

Example responses

200 Response

[
  {
    "provisioningRequests": [
      {
        "accountId": "string",
        "contactId": "string",
        "friendlyName": "string",
        "requestId": "string",
        "status": "string"
      }
    ],
    "size": 0
  }
]

Responses

Status Meaning Description Schema
200 OK Phone Number entity Inline
401 Unauthorized Unauthorized None
403 Forbidden Forbidden None
404 Not Found Not Found None
500 Internal Server Error Something went wrong. :-( ErrorResponse
Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [PhoneProvisioningArrayResponse] false none [Phone provisioning array response schema]
» provisioningRequests [PhoneProvisioningEntity] false none [Phone provisioning schema]
»» accountId string false none The account that created this entry
»» contactId string false none Contact ID of this entry
»» friendlyName string false none Friendly name of this entry
»» requestId string false none Request ID of this entry
»» status string false none Status of this entry
» size integer(int32) false none none

BYON Number Service

Bring Your Own Number (BYON) Numbers Service gives the users the possibility to register new numbers.

List all phones

Code samples

# You can also use wget
curl -X GET https://api.tyntec.com/byon/provisioning/v1 \
  -H 'Accept: application/json'

GET https://api.tyntec.com/byon/provisioning/v1 HTTP/1.1
Host: api.tyntec.com
Accept: application/json


const headers = {
  'Accept':'application/json'

};

fetch('https://api.tyntec.com/byon/provisioning/v1',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json'
}

result = RestClient.get 'https://api.tyntec.com/byon/provisioning/v1',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json'
}

r = requests.get('https://api.tyntec.com/byon/provisioning/v1', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

$headers = array(
    'Accept' => 'application/json',

    );

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
    $response = $client->request('GET','https://api.tyntec.com/byon/provisioning/v1', array(
        'headers' => $headers,
        'json' => $request_body,
       )
    );
    print_r($response->getBody()->getContents());
 }
 catch (\GuzzleHttp\Exception\BadResponseException $e) {
    // handle exception or api errors.
    print_r($e->getMessage());
 }

 // ...

URL obj = new URL("https://api.tyntec.com/byon/provisioning/v1");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.tyntec.com/byon/provisioning/v1", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /byon/provisioning/v1

Returns all phone numbers for which provisioning requests were created. You can specify friendlyName or contactId for filtering the results.

Parameters

Name In Type Required Description
friendlyName query string false List filter based on the friendlyName field
contactId query string false List filter based on the contactId field

Example responses

200 Response

[
  {
    "provisioningRequests": [
      {
        "accountId": "string",
        "contactId": "string",
        "friendlyName": "string",
        "requestId": "string",
        "status": "string"
      }
    ],
    "size": 0
  }
]

Responses

Status Meaning Description Schema
200 OK List of phone provisioning requests Inline
204 No Content Empty list; no phone provisioning requests were found. Inline
401 Unauthorized Unauthorized None
403 Forbidden Forbidden None
404 Not Found Not Found None
500 Internal Server Error Something went wrong. :-( ErrorResponse
Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [PhoneProvisioningArrayResponse] false none [Phone provisioning array response schema]
» provisioningRequests [PhoneProvisioningEntity] false none [Phone provisioning schema]
»» accountId string false none The account that created this entry
»» contactId string false none Contact ID of this entry
»» friendlyName string false none Friendly name of this entry
»» requestId string false none Request ID of this entry
»» status string false none Status of this entry
» size integer(int32) false none none

Status Code 204

Name Type Required Restrictions Description
anonymous [PhoneProvisioningArrayResponse] false none [Phone provisioning array response schema]
» provisioningRequests [PhoneProvisioningEntity] false none [Phone provisioning schema]
»» accountId string false none The account that created this entry
»» contactId string false none Contact ID of this entry
»» friendlyName string false none Friendly name of this entry
»» requestId string false none Request ID of this entry
»» status string false none Status of this entry
» size integer(int32) false none none

Register phones

Code samples

# You can also use wget
curl -X POST https://api.tyntec.com/byon/provisioning/v1?contactId=string \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json'

POST https://api.tyntec.com/byon/provisioning/v1?contactId=string HTTP/1.1
Host: api.tyntec.com
Content-Type: application/json
Accept: application/json

const inputBody = '[
  {
    "phoneNumber": "string",
    "country": "string"
  }
]';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json'

};

fetch('https://api.tyntec.com/byon/provisioning/v1?contactId=string',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json'
}

result = RestClient.post 'https://api.tyntec.com/byon/provisioning/v1',
  params: {
  'contactId' => 'string'
}, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

r = requests.post('https://api.tyntec.com/byon/provisioning/v1', params={
  'contactId': 'string'
}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

$headers = array(
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',

    );

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
    $response = $client->request('POST','https://api.tyntec.com/byon/provisioning/v1', array(
        'headers' => $headers,
        'json' => $request_body,
       )
    );
    print_r($response->getBody()->getContents());
 }
 catch (\GuzzleHttp\Exception\BadResponseException $e) {
    // handle exception or api errors.
    print_r($e->getMessage());
 }

 // ...

URL obj = new URL("https://api.tyntec.com/byon/provisioning/v1?contactId=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.tyntec.com/byon/provisioning/v1", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

POST /byon/provisioning/v1

New phone batch registration service for registering multiple numbers

Body parameter

[
  {
    "phoneNumber": "string",
    "country": "string"
  }
]

Parameters

Name In Type Required Description
friendlyName query string false List filter based on the friendlyName field
contactId query string true List filter based on the contactId field
body body PhoneNumberEntity true Comma-separated list of phone number details:
Detailed description

body: Comma-separated list of phone number details:

  • phoneNumber
  • country (only optional if the phone number already has included the country code)

Example responses

200 Response

{
  "accountId": "string",
  "contactId": "string",
  "friendlyName": "string",
  "requestId": "string",
  "status": "string"
}

Responses

Status Meaning Description Schema
200 OK List of applications PhoneProvisioningEntity
201 Created Created None
204 No Content Empty list; no applications were found for your account. PhoneProvisioningEntity
400 Bad Request Your request was not valid. None
401 Unauthorized Unauthorized None
403 Forbidden Forbidden None
404 Not Found The contact was not found. None
500 Internal Server Error Something went wrong. :-( ErrorResponse

Read phone status

Code samples

# You can also use wget
curl -X GET https://api.tyntec.com/byon/provisioning/v1/{requestId} \
  -H 'Accept: application/json'

GET https://api.tyntec.com/byon/provisioning/v1/{requestId} HTTP/1.1
Host: api.tyntec.com
Accept: application/json


const headers = {
  'Accept':'application/json'

};

fetch('https://api.tyntec.com/byon/provisioning/v1/{requestId}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json'
}

result = RestClient.get 'https://api.tyntec.com/byon/provisioning/v1/{requestId}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json'
}

r = requests.get('https://api.tyntec.com/byon/provisioning/v1/{requestId}', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

$headers = array(
    'Accept' => 'application/json',

    );

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
    $response = $client->request('GET','https://api.tyntec.com/byon/provisioning/v1/{requestId}', array(
        'headers' => $headers,
        'json' => $request_body,
       )
    );
    print_r($response->getBody()->getContents());
 }
 catch (\GuzzleHttp\Exception\BadResponseException $e) {
    // handle exception or api errors.
    print_r($e->getMessage());
 }

 // ...

URL obj = new URL("https://api.tyntec.com/byon/provisioning/v1/{requestId}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.tyntec.com/byon/provisioning/v1/{requestId}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /byon/provisioning/v1/{requestId}

Returns the details of the provisioning request for the provided requestId.

Parameters

Name In Type Required Description
requestId path string true Unique identifier based on the requestId field

Example responses

200 Response

{
  "accountId": "string",
  "contactId": "string",
  "friendlyName": "string",
  "requestId": "string",
  "status": "string"
}

Responses

Status Meaning Description Schema
200 OK Provisioning request PhoneProvisioningEntity
400 Bad Request Your request was not valid. None
401 Unauthorized Unauthorized None
403 Forbidden Forbidden None
404 Not Found The provisioning request was not found. None
500 Internal Server Error Something went wrong. :-( ErrorResponse

Schemas

ContactArrayResponse

{
  "contacts": [
    {
      "companyAddress": "string",
      "companyName": "string",
      "contactEmail": "string",
      "contactName": "string",
      "contactPhone": "string",
      "contactTitle": "string",
      "friendlyName": "string"
    }
  ],
  "size": 0
}

Contract Array Response schema

Properties

Name Type Required Restrictions Description
contacts [ContactEntity] false none [Contract Entity schema]
size integer(int32) false none none

ContactEntity

{
  "companyAddress": "string",
  "companyName": "string",
  "contactEmail": "string",
  "contactName": "string",
  "contactPhone": "string",
  "contactTitle": "string",
  "friendlyName": "string"
}

Contract Entity schema

Properties

Name Type Required Restrictions Description
companyAddress string false none Company's postal address
companyName string false none Company's name
contactEmail string false none E-mail address
contactName string false none Requestor's name
contactPhone string false none Requestor's phone number
contactTitle string false none Requestor's title
friendlyName string false none List filter based on the friendlyName field

ErrorResponse

{
  "code": "string",
  "message": "string",
  "timestamp": 0
}

Error Response schema

Properties

Name Type Required Restrictions Description
code string false none error code
message string false none A short, human-readable summary of the problem type
timestamp integer(int64) false none Point in time when the event happened

InboundMessage

{
  "from": "+49123456789",
  "to": "+1987654321",
  "message": "This is an example, the data is garbage.",
  "originMCC": 260,
  "originMNC": 9,
  "originTtId": 77292,
  "totalPrice": -0.005,
  "requestId": "e74db8d4-77ad-4671-8feb-9bc76b0df188",
  "size": 1,
  "missingParts": false,
  "contentList": [
    {
      "msgId": "48799399408:0:cad578e86b324c0a80f8fe866bfdb2b6",
      "sentDate": "2019-07-02T16:47:39+0200",
      "sequenceNumber": 1,
      "price": -0.005,
      "currency": "EUR",
      "priceEffective": "2018-06-01T00:00:00+0200"
    }
  ]
}

InboundMessage

Properties

Name Type Required Restrictions Description
from string true none Phone number of the sending party in the international format if available
to string true none Your number provided by tyntec that has received the respective message in the international format.
message string true none The received message as a UTF-8 encoded string. Note: Missing parts of a concat message will be marked with <...> in the message.
originMCC string false none Representative MCC (Mobile Country Code) of the originating network
originMNC string false none Representative MNC (Mobile Network Code) of the originating network
originTtId string false none Operator's tyntec ID
totalPrice number false none Sum of prices for each message part listed in “contentList”
requestId string true none Unique identifier provided for each request
size integer(int32) false none Amount of respective concatenated SMS parts
missingParts boolean true none This flag marks whether tyntec received all parts of a concat message within a time limit of 10 minutes.
contentList [InboundContent] true none tyntec merges overlength (concatenated) SMS into one string before sending it to your webserver. Note: tyntec will charge for each part of the concatenated message as for an individual message!

InboundContent

{
  "msgId": "48799399408:0:cad578e86b324c0a80f8fe866bfdb2b6",
  "sentDate": "2019-07-02T16:47:39+0200",
  "sequenceNumber": 1,
  "price": -0.005,
  "currency": "EUR",
  "priceEffective": "2018-06-01T00:00:00+0200"
}

InboundContent

Properties

Name Type Required Restrictions Description
msgId string true none Unique identifier provided for each message part
sentDate string true none The time when the SMS was sent by the sending MSC (if available) or the time when the respective message was received by tyntec.
sequenceNumber integer(int32) true none The sequenceNumber orders the respective message parts of an overlength message.
price number false none The price per message from the respective network; negative prices represent payouts in favor of a tyntec’s customer.
currency string false none The currency in which the pricing is given; corresponding to the currency of the invoice
priceEffective string false none The date when the “price” became effective

PhoneNumberEntity

{
  "phoneNumber": "string",
  "country": "string"
}

Phone number schema

Properties

Name Type Required Restrictions Description
phoneNumber string false none Phone number of the contact
country string false none The country that the phone number is registered in

PhoneProvisioningArrayResponse

{
  "provisioningRequests": [
    {
      "accountId": "string",
      "contactId": "string",
      "friendlyName": "string",
      "requestId": "string",
      "status": "string"
    }
  ],
  "size": 0
}

Phone provisioning array response schema

Properties

Name Type Required Restrictions Description
provisioningRequests [PhoneProvisioningEntity] false none [Phone provisioning schema]
size integer(int32) false none none

PhoneProvisioningEntity

{
  "accountId": "string",
  "contactId": "string",
  "friendlyName": "string",
  "requestId": "string",
  "status": "string"
}

Phone provisioning schema

Properties

Name Type Required Restrictions Description
accountId string false none The account that created this entry
contactId string false none Contact ID of this entry
friendlyName string false none Friendly name of this entry
requestId string false none Request ID of this entry
status string false none Status of this entry

Problem

{
  "type": "https://docs.tyntec.com/problems/DataNotParseable",
  "title": "The given data were not parsable.",
  "status": 400,
  "detail": "Unexpected end-of-input: expected close marker for Object (start marker at [Source: UNKNOWN; line: -1, column: -1) at [Source: UNKNOWN; line: 1, column: 97]\n"
}

The problem object follows RFC-7807.

Properties

Name Type Required Restrictions Description
type string true none The URI reference [RFC3986] that identifies the problem type
title string true none Short, human-readable summary of the problem type
status string true none The HTTP status code (RFC7231, Section 6) generated by the origin server for this occurrence of the problem
detail string true none Human-readable explanation specific to this problem occurrence

SmsMessage

{
  "to": "+123456789",
  "from": "tyntec",
  "message": "Hello world!"
}

Properties

Name Type Required Restrictions Description
to string true none Destination phone number in the international phone format E.164
from string true none This parameter provides identification of the sending party, which can either be a phone number in the international format or an alphanumeric identifier with up to 11 characters.

Some destination networks impose restrictions on the sender ID format. Please check the coverage list
and contact us for more information.
message string true none The message will be sent with characters encoded either in the GSM standard alphabet (GSM-7) or GSM Unicode alphabet (UCS-2).

- GSM standard alphabet GSM-7. Maximum length is 160 characters per a single message and 152 characters
per a concatenated message.
- GSM Unicode alphabet UCS-2. Maximum length is 70 characters per a single message and 66 characters
per a concatenated message.

tyntec automatically splits a sent message into concatenated messages if the message
exceeds the given limits. These concatenated messages are unified by the handset once again and
they are displayed as one message (if supported by the handset).

tyntec will charge for each part of the concatenated message as for an individual message.
encoding string false none Encoding selection between GSM7, UNICODE, or the default AUTO selection
gateway string false none Which gateway to use for the message delivery
conversion boolean false none Whether this message is subject to conversion ratio
sendDateTime string false none Any future date in the format of “yyyy-MM-ddT-HH:mm:ss+HH:mm” ISO 8601; if not set, the message will be sent immediately. The default time zone is UTC.
validity string false none Message validity in minutes
reference string false none Customer reference attached to the Delivery Reports
callbackUrl string false none Your URL for delivering the Delivery Reports; leave empty for no Delivery Report.
callbackMethod string false none Your prefered HTTP method for the Delivery Report callback; possible values are POST/GET.
partLimit integer(int32) false none Up to how many parts you allow this message can concatenated
trate number(double) false none Controls the transcoding rate of the original message to GSM-7 compatible characters; this can be used to compress the message.
mrate number(double) false none Controls the replacement rate of characters incompatible with GSM-7; they are replaced with '.'.
upperCased boolean false none Whether you allow the transcoder to try an upper case version of the content in the case this improves the produced parts of the message
keepEmojis boolean false none Whether you allow the transcoder to keep emojis
flash boolean false none Whether this SMS will be delivered as flash; some networks do not support it.
Enumerated values
Property Value
encoding AUTO
encoding GDM7
encoding UNICODE
callbackMethod POST
callbackMethod GET

ResponseEntity

{
  "body": {},
  "statusCode": "100",
  "statusCodeValue": 0
}

Response schema

Properties

Name Type Required Restrictions Description
body object false none Short, human-readable summary of the response
statusCode string false none Response ID
statusCodeValue integer(int32) false none Response code value
Enumerated values
Property Value
statusCode 100
statusCode 101
statusCode 102
statusCode 103
statusCode 200
statusCode 201
statusCode 202
statusCode 203
statusCode 204
statusCode 205
statusCode 206
statusCode 207
statusCode 208
statusCode 226
statusCode 300
statusCode 301
statusCode 302
statusCode 303
statusCode 304
statusCode 305
statusCode 307
statusCode 308
statusCode 400
statusCode 401
statusCode 402
statusCode 403
statusCode 404
statusCode 405
statusCode 406
statusCode 407
statusCode 408
statusCode 409
statusCode 410
statusCode 411
statusCode 412
statusCode 413
statusCode 414
statusCode 415
statusCode 416
statusCode 417
statusCode 418
statusCode 419
statusCode 420
statusCode 421
statusCode 422
statusCode 423
statusCode 424
statusCode 426
statusCode 428
statusCode 429
statusCode 431
statusCode 451
statusCode 500
statusCode 501
statusCode 502
statusCode 503
statusCode 504
statusCode 505
statusCode 506
statusCode 507
statusCode 508
statusCode 509
statusCode 510
statusCode 511

RestMessagePart

{
  "currency": "EUR",
  "deliveryState": "string",
  "doneDate": "string",
  "errorCode": "string",
  "partId": "string",
  "price": "0.005",
  "priceEffective": "2018-06-01T00:00:00+0200",
  "sentDate": "2019-07-02T16:47:39+0200",
  "statusText": "string"
}

The part of the message request that the message is split to

Properties

Name Type Required Restrictions Description
currency string false none The currency in which the pricing is given; it corresponds to the currency of the invoice.
deliveryState string false none The delivery status of this specific part; possible values are given in the following table.
doneDate string false none The time stamp when the message was successfully delivered
errorCode string false none The reason for an unsuccessful delivery attempt
partId string false none The identification number of the specific message part
price string false none The price per message from the respective network; negative prices represent payouts in favor of a tyntec’s customer.
priceEffective string(date-time) false none The date when the “price” became effective
sentDate string false none The time stamp when the message was sent out by tyntec for delivery.
statusText string false none The first 20 characters of the sent message

RestMessageResponse

{
  "doneDate": "string",
  "errorCode": "string",
  "errorReason": "string",
  "from": "+49123456789",
  "href": "string",
  "mccmnc": "string",
  "parts": [
    {
      "currency": "EUR",
      "deliveryState": "string",
      "doneDate": "string",
      "errorCode": "string",
      "partId": "string",
      "price": "0.005",
      "priceEffective": "2018-06-01T00:00:00+0200",
      "sentDate": "2019-07-02T16:47:39+0200",
      "statusText": "string"
    }
  ],
  "overallPrice": "0.01",
  "priceEffective": "2019-08-24T14:15:22Z",
  "reference": "string",
  "requestId": "e74db8d4-77ad-4671-8feb-9bc76b0df188",
  "sentDate": "2019-07-02T16:47:39+0200",
  "size": 1,
  "status": "DELIVERED",
  "submitDate": "2019-08-24T14:15:22Z",
  "to": "+1987654321",
  "ttid": 77292
}

Properties

Name Type Required Restrictions Description
doneDate string false none The time stamp when the message was successfully delivered
errorCode string false none The error code
errorReason string false none The reason for an unsuccessful attempt
from string false none The phone number of the sending party in the international format if available
href string false none The URL of the accepted message
mccmnc string false none Representative IMSI prefix of the target network; the respective mapping can be found on http://mcc-mnc.com/.
parts [RestMessagePart] false none [The part of the message request that the message is split to]
overallPrice string(string) false none The overall sum of prices for all parts of this message
priceEffective string(date-time) false none The date when the “price” became active
reference string false none Custom reference that will mark the Delivery Report
requestId string false none The unique identifier provided for each messaging request
sentDate string false none The time stamp when the message was sent out by tyntec for delivery
size integer(int32) false none The amount of respective concatenated SMS parts
status string false none The message status; the values can be DELIVERED/UNDELIVERED/EXPIRED/UNDELIVERABLE/REJECTED.
submitDate string(date-time) false none The date when the message was sent out by tyntec for delivery
to string false none Your number provided by tyntec that has received the respective message in international format
ttid string false none The tyntec operator's ID