NAV Navbar
cURL Node.js Python PHP Java Ruby

Voice API v2020-08-15T00:09:00Z

Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.

The Voice API is used for text-to-speech, speech-to-text and inbound/outbound voice routing. API keys for including as the x-api-key header in requests can be obtained at https://melroselabs.com. The Voice API is part of the Voice Gateway from Melrose Labs.

Numbering

The Inbound Voice service allows voice calls from landlines and mobiles to be received by a telephone number and routed to a VoIP SIP endpoint of your choice. You can allocate to your account, and receive calls on, telephone numbers from supported countries.

Speech-to-Text

The Speech-to-Text service allows an application to have a speech-to-text (STT) conversion performed on a long or short voice stream and for the speech to be transcribed as text.

Text-to-Speech

The Text-to-Speech service allows an application to have a text-to-speech (TTS) conversion performed on a long or short text and for the resulting voice stream to be delivered via a number of different channels.

Base URLs:

Email: Melrose Labs - Technical Support

Authentication

Numbering

List allocated numbers

Code samples

# You can also use wget
curl -X GET https://api.melroselabs.com/voice/numbering \
  -H 'Accept: application/json' \
  -H 'x-api-key: API_KEY'

const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',
  'x-api-key':'API_KEY'

};

fetch('https://api.melroselabs.com/voice/numbering',
{
  method: 'GET',

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

import requests
headers = {
  'Accept': 'application/json',
  'x-api-key': 'API_KEY'
}

r = requests.get('https://api.melroselabs.com/voice/numbering', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

$headers = array(
    'Accept' => 'application/json',
    'x-api-key' => 'API_KEY',

    );

$client = new \GuzzleHttp\Client();

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

try {
    $response = $client->request('GET','https://api.melroselabs.com/voice/numbering', 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.melroselabs.com/voice/numbering");
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());

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'x-api-key' => 'API_KEY'
}

result = RestClient.get 'https://api.melroselabs.com/voice/numbering',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /numbering

Get list of allocated numbers

Example responses

200 Response

{}

Responses

Status Meaning Description Schema
200 OK List of allocated numbers Empty

Allocate number

Code samples

# You can also use wget
curl -X POST https://api.melroselabs.com/voice/numbering \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'x-api-key: API_KEY'

const fetch = require('node-fetch');
const inputBody = '{
  "telNo": "string",
  "sipEndpoint": "string"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'x-api-key':'API_KEY'

};

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

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

r = requests.post('https://api.melroselabs.com/voice/numbering', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

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

    );

$client = new \GuzzleHttp\Client();

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

try {
    $response = $client->request('POST','https://api.melroselabs.com/voice/numbering', 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.melroselabs.com/voice/numbering");
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());

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'x-api-key' => 'API_KEY'
}

result = RestClient.post 'https://api.melroselabs.com/voice/numbering',
  params: {
  }, headers: headers

p JSON.parse(result)

POST /numbering

Allocate a telephone number to your account and optionally set SIP endpoint.

Body parameter

{
  "telNo": "string",
  "sipEndpoint": "string"
}

Parameters

Name In Type Required Description
body body NumberingAllocationRequest true Request for a number and optionally set endpoint
» telNo body string true Telephone number to be allocated. Normally in full international format, beginning with '+'. For example, '+441310001111'.
» sipEndpoint body string false The SIP endpoint URI to where incoming calls to the telephone number (telNo) should be routed.

Example responses

200 Response

{}

Responses

Status Meaning Description Schema
200 OK Successfully converted speech-to-text. Empty
400 Bad Request Failed to perform TTS request Error

List available numbers for a country

Code samples

# You can also use wget
curl -X GET https://api.melroselabs.com/voice/numbering/available/{country} \
  -H 'Accept: application/json' \
  -H 'x-api-key: API_KEY'

const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',
  'x-api-key':'API_KEY'

};

fetch('https://api.melroselabs.com/voice/numbering/available/{country}',
{
  method: 'GET',

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

import requests
headers = {
  'Accept': 'application/json',
  'x-api-key': 'API_KEY'
}

r = requests.get('https://api.melroselabs.com/voice/numbering/available/{country}', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

$headers = array(
    'Accept' => 'application/json',
    'x-api-key' => 'API_KEY',

    );

$client = new \GuzzleHttp\Client();

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

try {
    $response = $client->request('GET','https://api.melroselabs.com/voice/numbering/available/{country}', 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.melroselabs.com/voice/numbering/available/{country}");
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());

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'x-api-key' => 'API_KEY'
}

result = RestClient.get 'https://api.melroselabs.com/voice/numbering/available/{country}',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /numbering/available/{country}

Get list of available telephone numbers for a country

Parameters

Name In Type Required Description
country path string true Country for which querying for available numbers

Example responses

200 Response

{}

Responses

Status Meaning Description Schema
200 OK List of available numbers for country Empty

List available numbers for a country/prefix

Code samples

# You can also use wget
curl -X GET https://api.melroselabs.com/voice/numbering/available/{country}/{prefix} \
  -H 'Accept: application/json' \
  -H 'x-api-key: API_KEY'

const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',
  'x-api-key':'API_KEY'

};

fetch('https://api.melroselabs.com/voice/numbering/available/{country}/{prefix}',
{
  method: 'GET',

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

import requests
headers = {
  'Accept': 'application/json',
  'x-api-key': 'API_KEY'
}

r = requests.get('https://api.melroselabs.com/voice/numbering/available/{country}/{prefix}', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

$headers = array(
    'Accept' => 'application/json',
    'x-api-key' => 'API_KEY',

    );

$client = new \GuzzleHttp\Client();

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

try {
    $response = $client->request('GET','https://api.melroselabs.com/voice/numbering/available/{country}/{prefix}', 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.melroselabs.com/voice/numbering/available/{country}/{prefix}");
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());

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'x-api-key' => 'API_KEY'
}

result = RestClient.get 'https://api.melroselabs.com/voice/numbering/available/{country}/{prefix}',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /numbering/available/{country}/{prefix}

Get list of available telephone numbers for a country and given prefix

Parameters

Name In Type Required Description
country path string true Country for which querying for available numbers
prefix path string true Prefix within country for which query for available numbers

Example responses

200 Response

{}

Responses

Status Meaning Description Schema
200 OK List of available numbers for country and prefix Empty

Get endpoint

Code samples

# You can also use wget
curl -X GET https://api.melroselabs.com/voice/numbering/{telno} \
  -H 'Accept: application/json' \
  -H 'x-api-key: API_KEY'

const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',
  'x-api-key':'API_KEY'

};

fetch('https://api.melroselabs.com/voice/numbering/{telno}',
{
  method: 'GET',

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

import requests
headers = {
  'Accept': 'application/json',
  'x-api-key': 'API_KEY'
}

r = requests.get('https://api.melroselabs.com/voice/numbering/{telno}', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

$headers = array(
    'Accept' => 'application/json',
    'x-api-key' => 'API_KEY',

    );

$client = new \GuzzleHttp\Client();

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

try {
    $response = $client->request('GET','https://api.melroselabs.com/voice/numbering/{telno}', 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.melroselabs.com/voice/numbering/{telno}");
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());

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'x-api-key' => 'API_KEY'
}

result = RestClient.get 'https://api.melroselabs.com/voice/numbering/{telno}',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /numbering/{telno}

Get endpoint for a number

Parameters

Name In Type Required Description
telno path string true Get current endpoint for telephone number

Example responses

200 Response

{}

Responses

Status Meaning Description Schema
200 OK Endpoint for number Empty

Update number

Code samples

# You can also use wget
curl -X PUT https://api.melroselabs.com/voice/numbering/{telno} \
  -H 'Accept: application/json' \
  -H 'x-api-key: API_KEY'

const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',
  'x-api-key':'API_KEY'

};

fetch('https://api.melroselabs.com/voice/numbering/{telno}',
{
  method: 'PUT',

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

import requests
headers = {
  'Accept': 'application/json',
  'x-api-key': 'API_KEY'
}

r = requests.put('https://api.melroselabs.com/voice/numbering/{telno}', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

$headers = array(
    'Accept' => 'application/json',
    'x-api-key' => 'API_KEY',

    );

$client = new \GuzzleHttp\Client();

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

try {
    $response = $client->request('PUT','https://api.melroselabs.com/voice/numbering/{telno}', 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.melroselabs.com/voice/numbering/{telno}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PUT");
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());

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'x-api-key' => 'API_KEY'
}

result = RestClient.put 'https://api.melroselabs.com/voice/numbering/{telno}',
  params: {
  }, headers: headers

p JSON.parse(result)

PUT /numbering/{telno}

Update endpoint for a number

Parameters

Name In Type Required Description
telno path string true Update current endpoint for a number

Example responses

200 Response

{}

Responses

Status Meaning Description Schema
200 OK Endpoint updated for number Empty

Release telephone number

Code samples

# You can also use wget
curl -X DELETE https://api.melroselabs.com/voice/numbering/{telno} \
  -H 'Accept: application/json' \
  -H 'x-api-key: API_KEY'

const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',
  'x-api-key':'API_KEY'

};

fetch('https://api.melroselabs.com/voice/numbering/{telno}',
{
  method: 'DELETE',

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

import requests
headers = {
  'Accept': 'application/json',
  'x-api-key': 'API_KEY'
}

r = requests.delete('https://api.melroselabs.com/voice/numbering/{telno}', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

$headers = array(
    'Accept' => 'application/json',
    'x-api-key' => 'API_KEY',

    );

$client = new \GuzzleHttp\Client();

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

try {
    $response = $client->request('DELETE','https://api.melroselabs.com/voice/numbering/{telno}', 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.melroselabs.com/voice/numbering/{telno}");
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());

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'x-api-key' => 'API_KEY'
}

result = RestClient.delete 'https://api.melroselabs.com/voice/numbering/{telno}',
  params: {
  }, headers: headers

p JSON.parse(result)

DELETE /numbering/{telno}

Release a telephone number from your account.

Parameters

Name In Type Required Description
telno path string true Telephone number to delete

Example responses

200 Response

{}

Responses

Status Meaning Description Schema
200 OK Telephone number released Empty

Speech-to-Text

Convert speech-to-text

Code samples

# You can also use wget
curl -X POST https://api.melroselabs.com/voice/speechtotext \
  -H 'Content-Type: audio/mp3' \
  -H 'Accept: application/json' \
  -H 'x-api-key: API_KEY'

const fetch = require('node-fetch');
const inputBody = '{}';
const headers = {
  'Content-Type':'audio/mp3',
  'Accept':'application/json',
  'x-api-key':'API_KEY'

};

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

import requests
headers = {
  'Content-Type': 'audio/mp3',
  'Accept': 'application/json',
  'x-api-key': 'API_KEY'
}

r = requests.post('https://api.melroselabs.com/voice/speechtotext', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

$headers = array(
    'Content-Type' => 'audio/mp3',
    'Accept' => 'application/json',
    'x-api-key' => 'API_KEY',

    );

$client = new \GuzzleHttp\Client();

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

try {
    $response = $client->request('POST','https://api.melroselabs.com/voice/speechtotext', 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.melroselabs.com/voice/speechtotext");
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());

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'audio/mp3',
  'Accept' => 'application/json',
  'x-api-key' => 'API_KEY'
}

result = RestClient.post 'https://api.melroselabs.com/voice/speechtotext',
  params: {
  }, headers: headers

p JSON.parse(result)

POST /speechtotext

Submit speech to be converted to text. Store as text file.

Body parameter

Parameters

Name In Type Required Description
body body Empty true Speech audio file to be transcribed to text. File in MP3 format with sample rate of 22050 Hz.

Example responses

200 Response

{
  "transactionID": "string"
}

Responses

Status Meaning Description Schema
200 OK Speech-to-text request successfully submitted SuccessSubmit
400 Bad Request Failed to submit speech-to-text request Empty

Convert speech-to-text (pt-BR)

Code samples

# You can also use wget
curl -X POST https://api.melroselabs.com/voice/speechtotext/pt-br \
  -H 'Content-Type: audio/mp3' \
  -H 'Accept: application/json' \
  -H 'x-api-key: API_KEY'

const fetch = require('node-fetch');
const inputBody = '{}';
const headers = {
  'Content-Type':'audio/mp3',
  'Accept':'application/json',
  'x-api-key':'API_KEY'

};

fetch('https://api.melroselabs.com/voice/speechtotext/pt-br',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Content-Type': 'audio/mp3',
  'Accept': 'application/json',
  'x-api-key': 'API_KEY'
}

r = requests.post('https://api.melroselabs.com/voice/speechtotext/pt-br', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

$headers = array(
    'Content-Type' => 'audio/mp3',
    'Accept' => 'application/json',
    'x-api-key' => 'API_KEY',

    );

$client = new \GuzzleHttp\Client();

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

try {
    $response = $client->request('POST','https://api.melroselabs.com/voice/speechtotext/pt-br', 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.melroselabs.com/voice/speechtotext/pt-br");
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());

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'audio/mp3',
  'Accept' => 'application/json',
  'x-api-key' => 'API_KEY'
}

result = RestClient.post 'https://api.melroselabs.com/voice/speechtotext/pt-br',
  params: {
  }, headers: headers

p JSON.parse(result)

POST /speechtotext/pt-br

Submit speech in pt-BR language to be converted to text. Store as text file.

Body parameter

Parameters

Name In Type Required Description
body body Empty true Speech audio file in pt-BR language to be transcribed to text. File in MP3 format with sample rate of 22050 Hz.

Example responses

200 Response

{
  "transactionID": "string"
}

Responses

Status Meaning Description Schema
200 OK Speech-to-text request successfully submitted SuccessSubmit
400 Bad Request Failed to submit speech-to-text request Empty

Retrieve text

Code samples

# You can also use wget
curl -X GET https://api.melroselabs.com/voice/speechtotext/{transactionid} \
  -H 'Accept: application/json' \
  -H 'x-api-key: API_KEY'

const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',
  'x-api-key':'API_KEY'

};

fetch('https://api.melroselabs.com/voice/speechtotext/{transactionid}',
{
  method: 'GET',

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

import requests
headers = {
  'Accept': 'application/json',
  'x-api-key': 'API_KEY'
}

r = requests.get('https://api.melroselabs.com/voice/speechtotext/{transactionid}', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

$headers = array(
    'Accept' => 'application/json',
    'x-api-key' => 'API_KEY',

    );

$client = new \GuzzleHttp\Client();

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

try {
    $response = $client->request('GET','https://api.melroselabs.com/voice/speechtotext/{transactionid}', 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.melroselabs.com/voice/speechtotext/{transactionid}");
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());

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'x-api-key' => 'API_KEY'
}

result = RestClient.get 'https://api.melroselabs.com/voice/speechtotext/{transactionid}',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /speechtotext/{transactionid}

Retrieve text from previously converted speech-to-text.

Parameters

Name In Type Required Description
transactionid path string true ID of speech-to-text transaction

Example responses

200 Response

{
  "text": "string"
}

Responses

Status Meaning Description Schema
200 OK Successfully retrieved text STTRetrieval
400 Bad Request Unsuccessful retrieving text Error
404 Not Found Text transcribing not complete Error

Text-to-Speech

Convert TTS asyncronously

Code samples

# You can also use wget
curl -X POST https://api.melroselabs.com/voice/texttospeech \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'x-api-key: API_KEY'

const fetch = require('node-fetch');
const inputBody = '{
  "voiceText": "string",
  "voice": "Zeina",
  "email": "string",
  "engine": "standard"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'x-api-key':'API_KEY'

};

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

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

r = requests.post('https://api.melroselabs.com/voice/texttospeech', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

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

    );

$client = new \GuzzleHttp\Client();

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

try {
    $response = $client->request('POST','https://api.melroselabs.com/voice/texttospeech', 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.melroselabs.com/voice/texttospeech");
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());

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'x-api-key' => 'API_KEY'
}

result = RestClient.post 'https://api.melroselabs.com/voice/texttospeech',
  params: {
  }, headers: headers

p JSON.parse(result)

POST /texttospeech

Submit text to be converted to speech. Store as MP3 audio file.

Body parameter

{
  "voiceText": "string",
  "voice": "Zeina",
  "email": "string",
  "engine": "standard"
}

Parameters

Name In Type Required Description
body body SubmitTTSRequest true Text to be converted to speech
» voiceText body string true Text (ASCII) to be converted to speech MP3 audio file
» voice body string false Voice to be used for text-to-speech. Default is Salli (f) and is an English (en-US) language voice. Other choices include: Zeina (f), Arabic (arb); Celine (f), French (fr-FR). See https://melroselabs.com/services/voice-gateway/ for a full list of voices.
» email body string false Email address to where speech MP3 audio file to be sent (optional)
» engine body string false Engine to be used for voice (optional)

Enumerated Values

Parameter Value
» voice Zeina
» voice Zhiyu
» voice Mads
» voice Naja
» voice Lotte
» voice Ruben
» voice Russell
» voice Nicole
» voice Emma
» voice Amy
» voice Brian
» voice Aditi
» voice Raveena
» voice Salli
» voice Ivy
» voice Joanna
» voice Kendra
» voice Kimberly
» voice Joey
» voice Justin
» voice Matthew
» voice Geraint
» voice Celine
» voice Lea
» voice Mathieu
» voice Chantal
» voice Vicki
» voice Marlene
» voice Hans
» voice Karl
» voice Dora
» voice Bianca
» voice Carla
» voice Giogio
» voice Mizuki
» voice Takumi
» voice Seoyeon
» voice Liv
» voice Jan
» voice Ewa
» voice Maja
» voice Jacek
» voice Vitoria
» voice Ricardo
» voice Cristiano
» voice Ines
» voice Carmen
» voice Tatyana
» voice Maxim
» voice Enrique
» voice Lucia
» voice Conchita
» voice Mia
» voice Penelope
» voice Miguel
» voice Astrid
» voice Filiz
» voice Gwyneth
» engine standard
» engine neural

Example responses

200 Response

{
  "transactionID": "string"
}

Responses

Status Meaning Description Schema
200 OK Successfully converted speech-to-text. SuccessTTSSubmit
400 Bad Request Failed to perform TTS request Error

Retrieve audio file

Code samples

# You can also use wget
curl -X GET https://api.melroselabs.com/voice/texttospeech/{transactionid} \
  -H 'Accept: application/json' \
  -H 'x-api-key: API_KEY'

const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',
  'x-api-key':'API_KEY'

};

fetch('https://api.melroselabs.com/voice/texttospeech/{transactionid}',
{
  method: 'GET',

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

import requests
headers = {
  'Accept': 'application/json',
  'x-api-key': 'API_KEY'
}

r = requests.get('https://api.melroselabs.com/voice/texttospeech/{transactionid}', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

$headers = array(
    'Accept' => 'application/json',
    'x-api-key' => 'API_KEY',

    );

$client = new \GuzzleHttp\Client();

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

try {
    $response = $client->request('GET','https://api.melroselabs.com/voice/texttospeech/{transactionid}', 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.melroselabs.com/voice/texttospeech/{transactionid}");
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());

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'x-api-key' => 'API_KEY'
}

result = RestClient.get 'https://api.melroselabs.com/voice/texttospeech/{transactionid}',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /texttospeech/{transactionid}

Retrieve audio file from previously converted text-to-speech. File is in MP3 format.

Parameters

Name In Type Required Description
transactionid path string true Transaction ID for previously submitted text-to-speech conversion.

Example responses

200 Response

{}

Responses

Status Meaning Description Schema
200 OK Successfully retrieved audio file Empty
400 Bad Request Retrieve request failed Error
404 Not Found Audio file not found or not yet ready. Conversion should be available shortly. Error

Convert TTS synchronously

Code samples

# You can also use wget
curl -X POST https://api.melroselabs.com/voice/tts \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'x-api-key: API_KEY'

const fetch = require('node-fetch');
const inputBody = '{
  "voiceText": "string",
  "voice": "Zeina",
  "email": "string",
  "engine": "standard"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'x-api-key':'API_KEY'

};

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

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

r = requests.post('https://api.melroselabs.com/voice/tts', params={

}, headers = headers)

print r.json()

<?php

require 'vendor/autoload.php';

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

    );

$client = new \GuzzleHttp\Client();

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

try {
    $response = $client->request('POST','https://api.melroselabs.com/voice/tts', 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.melroselabs.com/voice/tts");
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());

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'x-api-key' => 'API_KEY'
}

result = RestClient.post 'https://api.melroselabs.com/voice/tts',
  params: {
  }, headers: headers

p JSON.parse(result)

POST /tts

Submit text to be converted to speech and return MP3 audio file.

Body parameter

{
  "voiceText": "string",
  "voice": "Zeina",
  "email": "string",
  "engine": "standard"
}

Parameters

Name In Type Required Description
body body SubmitTTSRequest true Text to be converted to speech
» voiceText body string true Text (ASCII) to be converted to speech MP3 audio file
» voice body string false Voice to be used for text-to-speech. Default is Salli (f) and is an English (en-US) language voice. Other choices include: Zeina (f), Arabic (arb); Celine (f), French (fr-FR). See https://melroselabs.com/services/voice-gateway/ for a full list of voices.
» email body string false Email address to where speech MP3 audio file to be sent (optional)
» engine body string false Engine to be used for voice (optional)

Enumerated Values

Parameter Value
» voice Zeina
» voice Zhiyu
» voice Mads
» voice Naja
» voice Lotte
» voice Ruben
» voice Russell
» voice Nicole
» voice Emma
» voice Amy
» voice Brian
» voice Aditi
» voice Raveena
» voice Salli
» voice Ivy
» voice Joanna
» voice Kendra
» voice Kimberly
» voice Joey
» voice Justin
» voice Matthew
» voice Geraint
» voice Celine
» voice Lea
» voice Mathieu
» voice Chantal
» voice Vicki
» voice Marlene
» voice Hans
» voice Karl
» voice Dora
» voice Bianca
» voice Carla
» voice Giogio
» voice Mizuki
» voice Takumi
» voice Seoyeon
» voice Liv
» voice Jan
» voice Ewa
» voice Maja
» voice Jacek
» voice Vitoria
» voice Ricardo
» voice Cristiano
» voice Ines
» voice Carmen
» voice Tatyana
» voice Maxim
» voice Enrique
» voice Lucia
» voice Conchita
» voice Mia
» voice Penelope
» voice Miguel
» voice Astrid
» voice Filiz
» voice Gwyneth
» engine standard
» engine neural

Example responses

200 Response

{}

Responses

Status Meaning Description Schema
200 OK Successfully converted speech-to-text. Empty
400 Bad Request Failed to perform TTS request Error

Schemas

STTRetrieval

{
  "text": "string"
}

STTRetrieval Schema

Properties

Name Type Required Restrictions Description
text string true none Text transcription of the speech-to-text conversion

Empty

{}

Empty Schema

Properties

None

SubmitTTSRequest

{
  "voiceText": "string",
  "voice": "Zeina",
  "email": "string",
  "engine": "standard"
}

SubmitTTSRequest Schema

Properties

Name Type Required Restrictions Description
voiceText string true none Text (ASCII) to be converted to speech MP3 audio file
voice string false none Voice to be used for text-to-speech. Default is Salli (f) and is an English (en-US) language voice. Other choices include: Zeina (f), Arabic (arb); Celine (f), French (fr-FR). See https://melroselabs.com/services/voice-gateway/ for a full list of voices.
email string false none Email address to where speech MP3 audio file to be sent (optional)
engine string false none Engine to be used for voice (optional)

Enumerated Values

Property Value
voice Zeina
voice Zhiyu
voice Mads
voice Naja
voice Lotte
voice Ruben
voice Russell
voice Nicole
voice Emma
voice Amy
voice Brian
voice Aditi
voice Raveena
voice Salli
voice Ivy
voice Joanna
voice Kendra
voice Kimberly
voice Joey
voice Justin
voice Matthew
voice Geraint
voice Celine
voice Lea
voice Mathieu
voice Chantal
voice Vicki
voice Marlene
voice Hans
voice Karl
voice Dora
voice Bianca
voice Carla
voice Giogio
voice Mizuki
voice Takumi
voice Seoyeon
voice Liv
voice Jan
voice Ewa
voice Maja
voice Jacek
voice Vitoria
voice Ricardo
voice Cristiano
voice Ines
voice Carmen
voice Tatyana
voice Maxim
voice Enrique
voice Lucia
voice Conchita
voice Mia
voice Penelope
voice Miguel
voice Astrid
voice Filiz
voice Gwyneth
engine standard
engine neural

SuccessSubmit

{
  "transactionID": "string"
}

SuccessSubmit Schema

Properties

Name Type Required Restrictions Description
transactionID string true none Transaction ID for text-to-speech conversion

NumberingAllocationRequest

{
  "telNo": "string",
  "sipEndpoint": "string"
}

NumberingAllocationRequest Schema

Properties

Name Type Required Restrictions Description
telNo string true none Telephone number to be allocated. Normally in full international format, beginning with '+'. For example, '+441310001111'.
sipEndpoint string false none The SIP endpoint URI to where incoming calls to the telephone number (telNo) should be routed.

SuccessTTSSubmit

{
  "transactionID": "string"
}

SuccessTTSSubmit Schema

Properties

Name Type Required Restrictions Description
transactionID string true none Transaction ID for text-to-speech conversion

Error

{
  "message": "string"
}

Error Schema

Properties

Name Type Required Restrictions Description
message string true none Will indicate error associate with failed request