🆕Recognize Speakers in Transcription

🔊 Recognizing Speakers in Your Transcription

You can create Speaker Profiles so that in your future transcriptions you won't have to manually adjust speaker names. Using clear and long audio files will help with the success of assigning Speaker Profiles in transcriptions. You can create speaker profiles either from a local audio file or from one of your transcriptions in Transkriptor.


Create a Speaker Profile From a Local Audio File - Part 1 Generate Upload URL

To create a speaker profile, upload a local audio file. This function will generate the URL that you are supposed to upload your audio file.


import requests
import json

url = f"https://api.tor.app/developer/annotations/profiles/create_url"

# Define the API key as a variable
api_key = "your_api_key"  # Replace with your actual API key
speaker_label_name = "your_speaker_name"

payload = {"speaker_name": speaker_label_name}

# Set up the headers, including the API key
headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {api_key}",  # Use the variable here
    "Accept": "application/json",
}

response = requests.post(url, headers=headers, json=payload)

upload_url = json.loads(response.text)["upload_url"]
print(f"upload url: ", upload_url)

const axios = require('axios');

const apiKey = 'your_api_key'; // Replace with your actual API key
const speakerLabelName = 'your_speaker_name';

const headers = {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${apiKey}`,
    'Accept': 'application/json'
};

const payload = {
    speaker_name: speakerLabelName
};

const url = "https://api.tor.app/developer/annotations/profiles/create_url";

axios.post(url, payload, { headers })
    .then(response => {
        const uploadUrl = response.data.upload_url;
        console.log("Upload URL:", uploadUrl);
    })
    .catch(error => {
        console.error("Error:", error.response ? error.response.data : error.message);
    });


import okhttp3.*;
import org.json.JSONObject;

public class CreateSpeakerProfile {
    private static final String API_KEY = "your_api_key";
    private static final String SPEAKER_LABEL_NAME = "your_speaker_name";

    public static void main(String[] args) throws Exception {
        OkHttpClient client = new OkHttpClient();
        String url = "https://api.tor.app/developer/annotations/profiles/create_url";

        JSONObject payload = new JSONObject();
        payload.put("speaker_name", SPEAKER_LABEL_NAME);

        RequestBody body = RequestBody.create(payload.toString(), MediaType.parse("application/json"));

        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .addHeader("Authorization", "Bearer " + API_KEY)
                .addHeader("Content-Type", "application/json")
                .addHeader("Accept", "application/json")
                .build();

        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful()) {
                JSONObject responseData = new JSONObject(response.body().string());
                String uploadUrl = responseData.getString("upload_url");
                System.out.println("Upload URL: " + uploadUrl);
            } else {
                System.out.println("Request failed: " + response.code());
                System.out.println("Response Body: " + response.body().string());
            }
        }
    }
}


using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

public class Program
{
    private static readonly string apiKey = "your_api_key";
    private static readonly string speakerLabelName = "your_speaker_name";

    public static async Task Main()
    {
        var client = new HttpClient();
        var url = "https://api.tor.app/developer/annotations/profiles/create_url";

        var payload = new { speaker_name = speakerLabelName };

        var jsonPayload = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json");

        client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
        client.DefaultRequestHeaders.Add("Accept", "application/json");

        var response = await client.PostAsync(url, jsonPayload);

        if (response.IsSuccessStatusCode)
        {
            var responseData = await response.Content.ReadAsStringAsync();
            var data = JsonSerializer.Deserialize<JsonDocument>(responseData);
            Console.WriteLine("Upload URL: " + data.RootElement.GetProperty("upload_url").GetString());
        }
        else
        {
            Console.WriteLine("Request failed with status: " + response.StatusCode);
            Console.WriteLine("Response Body: " + await response.Content.ReadAsStringAsync());
        }
    }
}


package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"
)

const apiKey = "your_api_key"
const speakerLabelName = "your_speaker_name"

func main() {
	url := "https://api.tor.app/developer/annotations/profiles/create_url"

	payload := map[string]string{
		"speaker_name": speakerLabelName,
	}

	payloadBytes, _ := json.Marshal(payload)
	req, _ := http.NewRequest("POST", url, bytes.NewBuffer(payloadBytes))
	req.Header.Set("Authorization", "Bearer "+apiKey)
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("Accept", "application/json")

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer resp.Body.Close()

	var response map[string]interface{}
	json.NewDecoder(resp.Body).Decode(&response)
	fmt.Println("Upload URL:", response["upload_url"])
}


require 'net/http'
require 'json'
require 'uri'

api_key = "your_api_key"
speaker_label_name = "your_speaker_name"

url = URI("https://api.tor.app/developer/annotations/profiles/create_url")
body = { "speaker_name" => speaker_label_name }

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

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer #{api_key}"
request["Content-Type"] = "application/json"
request["Accept"] = "application/json"
request.body = body.to_json

response = http.request(request)
upload_url = JSON.parse(response.body)["upload_url"]
puts "Upload URL: #{upload_url}"


<?php
$apiKey = "your_api_key";
$speakerLabelName = "your_speaker_name";

$url = "https://api.tor.app/developer/annotations/profiles/create_url";
$payload = json_encode(["speaker_name" => $speakerLabelName]);

$headers = [
    "Authorization: Bearer $apiKey",
    "Content-Type: application/json",
    "Accept: application/json"
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

$responseData = json_decode($response, true);
$uploadUrl = $responseData['upload_url'];
echo "Upload URL: $uploadUrl\n";
?>


import okhttp3.*
import org.json.JSONObject

fun main() {
    val apiKey = "your_api_key"
    val speakerLabelName = "your_speaker_name"
    val url = "https://api.tor.app/developer/annotations/profiles/create_url"

    val payload = JSONObject().put("speaker_name", speakerLabelName)

    val client = OkHttpClient()
    val body = RequestBody.create(MediaType.parse("application/json"), payload.toString())
    val request = Request.Builder()
        .url(url)
        .post(body)
        .addHeader("Authorization", "Bearer $apiKey")
        .addHeader("Content-Type", "application/json")
        .addHeader("Accept", "application/json")
        .build()

    client.newCall(request).execute().use { response ->
        val responseBody = response.body()?.string()
        val json = JSONObject(responseBody)
        println("Upload URL: ${json.getString("upload_url")}")
    }
}


import Foundation

let apiKey = "your_api_key"
let speakerLabelName = "your_speaker_name"
let url = URL(string: "https://api.tor.app/developer/annotations/profiles/create_url")!

var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")

let payload: [String: Any] = [
    "speaker_name": speakerLabelName
]

request.httpBody = try! JSONSerialization.data(withJSONObject: payload, options: [])

let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data {
        let jsonResponse = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
        if let uploadUrl = jsonResponse?["upload_url"] as? String {
            print("Upload URL: \(uploadUrl)")
        }
    }
}

task.resume()

import 'dart:convert';
import 'dart:io';

void main() async {
  const apiKey = 'your_api_key';
  const speakerLabelName = 'your_speaker_name';

  final url = Uri.parse('https://api.tor.app/developer/annotations/profiles/create_url');

  final payload = jsonEncode({
    "speaker_name": speakerLabelName,
  });

  final request = await HttpClient().postUrl(url)
    ..headers.set('Authorization', 'Bearer $apiKey')
    ..headers.set('Content-Type', 'application/json')
    ..headers.set('Accept', 'application/json')
    ..write(payload);

  final response = await request.close();

  if (response.statusCode == 200) {
    final responseBody = await response.transform(utf8.decoder).join();
    final responseData = jsonDecode(responseBody);
    print("Upload URL: ${responseData['upload_url']}");
  } else {
    print("Request failed with status: ${response.statusCode}");
    final responseBody = await response.transform(utf8.decoder).join();
    print("Response Body: $responseBody");
  }
}


Response


200 OK
{
  "upload_url": "https://sampleurl"
}

403 Forbidden
{
  "message": "Upload limit reached for this speaker"
}

500 Internal Server Error
{
  "error": "Detailed error message"
}


Create a Speaker Profile From a Local Audio File - Part 2 Upload Your Audio File

You can upload your audio file to the specified URL as shown below.



# Assuming 'response' is obtained from your previous request
upload_url = json.loads(response.text)["upload_url"]

# Specify the path to your audio file
file_path = 'example.mp3'

# Open the file in binary mode
with open(file_path, 'rb') as f:
    files = {'file': f}

    # PUT request to upload the file using the presigned URL
    upload_response = requests.put(upload_url, data=f)

    # Check the response status code and print appropriate messages
    if upload_response.status_code == 200:
        result = {"status": "success", "code": 200, "message": "File uploaded successfully", "response": upload_response.text}
    else:
        result = {"status": "error", "code": upload_response.status_code, "message": "Failed to upload file", "response": upload_response.text}

# Print the result
print(result["code"])
print(result["message"])
if "response" in result:
    print(result["response"])
const fs = require('fs');
const axios = require('axios');

const uploadUrl = 'your_presigned_upload_url'; // Replace with actual presigned URL
const filePath = 'example.mp3';

fs.readFile(filePath, (err, data) => {
    if (err) throw err;

    axios.put(uploadUrl, data, { headers: { 'Content-Type': 'application/octet-stream' } })
        .then(response => {
            console.log("Status Code:", response.status);
            console.log("Message: File uploaded successfully");
        })
        .catch(error => {
            console.log("Status Code:", error.response ? error.response.status : "Error");
            console.log("Message: Failed to upload file");
            if (error.response) console.log("Response:", error.response.data);
        });
});


import okhttp3.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class UploadFile {
    public static void main(String[] args) throws IOException {
        String uploadUrl = "your_presigned_upload_url"; // Replace with actual presigned URL
        String filePath = "example.mp3";
        
        OkHttpClient client = new OkHttpClient();
        File file = new File(filePath);
        
        RequestBody requestBody = RequestBody.create(file, MediaType.parse("application/octet-stream"));
        Request request = new Request.Builder().url(uploadUrl).put(requestBody).build();
        
        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful()) {
                System.out.println("Status Code: " + response.code());
                System.out.println("Message: File uploaded successfully");
            } else {
                System.out.println("Status Code: " + response.code());
                System.out.println("Message: Failed to upload file");
                System.out.println("Response: " + response.body().string());
            }
        }
    }
}


using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;

public class Program
{
    private static readonly string uploadUrl = "your_presigned_upload_url"; // Replace with actual presigned URL

    public static async Task Main()
    {
        using var client = new HttpClient();
        using var fileStream = File.OpenRead("example.mp3");
        
        var response = await client.PutAsync(uploadUrl, new StreamContent(fileStream));
        
        if (response.IsSuccessStatusCode)
        {
            Console.WriteLine("Status Code: 200");
            Console.WriteLine("Message: File uploaded successfully");
        }
        else
        {
            Console.WriteLine("Status Code: " + response.StatusCode);
            Console.WriteLine("Message: Failed to upload file");
            Console.WriteLine("Response: " + await response.Content.ReadAsStringAsync());
        }
    }
}


package main

import (
	"fmt"
	"net/http"
	"os"
)

func main() {
	uploadUrl := "your_presigned_upload_url" // Replace with actual presigned URL
	filePath := "example.mp3"
	file, err := os.Open(filePath)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer file.Close()

	req, err := http.NewRequest("PUT", uploadUrl, file)
	req.Header.Set("Content-Type", "application/octet-stream")

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer resp.Body.Close()

	if resp.StatusCode == 200 {
		fmt.Println("Status Code: 200")
		fmt.Println("Message: File uploaded successfully")
	} else {
		fmt.Printf("Status Code: %d\n", resp.StatusCode)
		fmt.Println("Message: Failed to upload file")
	}
}


require 'net/http'
require 'uri'

upload_url = "your_presigned_upload_url" # Replace with actual presigned URL
file_path = "example.mp3"

uri = URI(upload_url)
file = File.open(file_path, "rb")

request = Net::HTTP::Put.new(uri)
request.body = file.read

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = (uri.scheme == "https")

response = http.request(request)

if response.code == "200"
  puts "Status Code: 200"
  puts "Message: File uploaded successfully"
else
  puts "Status Code: #{response.code}"
  puts "Message: Failed to upload file"
  puts "Response: #{response.body}"
end


<?php
$uploadUrl = "your_presigned_upload_url"; // Replace with actual presigned URL
$filePath = "example.mp3";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $uploadUrl);
curl_setopt($ch, CURLOPT_PUT, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$file = fopen($filePath, 'r');
curl_setopt($ch, CURLOPT_INFILE, $file);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($filePath));

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
fclose($file);
curl_close($ch);

if ($httpCode == 200) {
    echo "Status Code: 200\n";
    echo "Message: File uploaded successfully\n";
} else {
    echo "Status Code: $httpCode\n";
    echo "Message: Failed to upload file\n";
    echo "Response: $response\n";
}
?>


import okhttp3.*
import java.io.File

fun main() {
    val uploadUrl = "your_presigned_upload_url" // Replace with actual presigned URL
    val filePath = "example.mp3"

    val client = OkHttpClient()
    val file = File(filePath)

    val request = Request.Builder()
        .url(uploadUrl)
        .put(RequestBody.create(MediaType.parse("application/octet-stream"), file))
        .build()

    client.newCall(request).execute().use { response ->
        if (response.isSuccessful) {
            println("Status Code: ${response.code()}")
            println("Message: File uploaded successfully")
        } else {
            println("Status Code: ${response.code()}")
            println("Message: Failed to upload file")
            println("Response: ${response.body()?.string()}")
        }
    }
}


import Foundation

let uploadUrl = URL(string: "your_presigned_upload_url")! // Replace with actual presigned URL
let filePath = URL(fileURLWithPath: "example.mp3")

var request = URLRequest(url: uploadUrl)
request.httpMethod = "PUT"
request.setValue("application/octet-stream", forHTTPHeaderField: "Content-Type")

let task = URLSession.shared.uploadTask(with: request, fromFile: filePath) { data, response, error in
    if let httpResponse = response as? HTTPURLResponse {
        if httpResponse.statusCode == 200 {
            print("Status Code: 200")
            print("Message: File uploaded successfully")
        } else {
            print("Status Code: \(httpResponse.statusCode)")
            print("Message: Failed to upload file")
            if let data = data, let responseBody = String(data: data, encoding: .utf8) {
                print("Response:", responseBody)
            }
        }
    }
}
task.resume()

import 'dart:io';

void main() async {
  const uploadUrl = 'your_presigned_upload_url'; // Replace with actual presigned URL
  final file = File('example.mp3');

  final request = await HttpClient().putUrl(Uri.parse(uploadUrl))
    ..headers.set('Content-Type', 'application/octet-stream')
    ..add(await file.readAsBytes());

  final response = await request.close();

  if (response.statusCode == 200) {
    print("Status Code: 200");
    print("Message: File uploaded successfully");
  } else {
    print("Status Code: ${response.statusCode}");
    print("Message: Failed to upload file");
    await for (var contents in response.transform(Utf8Decoder())) {
      print("Response:", contents);
    }
  }
}


Response


200 OK
{
  "statusCode": 200,
  "body": "File uploaded successfully"
}


Create a Speaker Profile From a Local Audio File - Part 3 Generate Speaker Profile

After you have successfully uploaded your audio file, make a request to finisher API as shown below. Make sure speaker_label_name matches the name in your request in Part 1


import requests
import json

speaker_label_name = "your_speaker_name"
url = f"https://api.tor.app/developer/annotations/profiles"

# Define the API key as a variable
api_key = "your_api_key"  # Replace with your actual API key

# Set up the headers, including the API key
headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {api_key}",  # Use the variable here
    "Accept": "application/json",
}

payload = {"speaker_name": speaker_label_name}

response = requests.post(url, headers=headers, json=payload)

# Print the result
print(response.text)

const axios = require('axios');

const apiKey = 'your_api_key'; // Replace with your actual API key
const speakerLabelName = 'your_speaker_name';

const headers = {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${apiKey}`,
    'Accept': 'application/json'
};

const payload = {
    speaker_name: speakerLabelName
};

const url = "https://api.tor.app/developer/annotations/profiles";

axios.post(url, payload, { headers })
    .then(response => {
        console.log(response.data);
    })
    .catch(error => {
        console.error("Error:", error.response ? error.response.data : error.message);
    });


import okhttp3.*;
import org.json.JSONObject;

public class CreateSpeakerProfile {
    private static final String API_KEY = "your_api_key";
    private static final String SPEAKER_LABEL_NAME = "your_speaker_name";

    public static void main(String[] args) throws Exception {
        OkHttpClient client = new OkHttpClient();
        String url = "https://api.tor.app/developer/annotations/profiles";

        JSONObject payload = new JSONObject();
        payload.put("speaker_name", SPEAKER_LABEL_NAME);

        RequestBody body = RequestBody.create(payload.toString(), MediaType.parse("application/json"));

        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .addHeader("Authorization", "Bearer " + API_KEY)
                .addHeader("Content-Type", "application/json")
                .addHeader("Accept", "application/json")
                .build();

        try (Response response = client.newCall(request).execute()) {
            System.out.println(response.body().string());
        }
    }
}


using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

public class Program
{
    private static readonly string apiKey = "your_api_key";
    private static readonly string speakerLabelName = "your_speaker_name";

    public static async Task Main()
    {
        var client = new HttpClient();
        var url = "https://api.tor.app/developer/annotations/profiles";

        var payload = new { speaker_name = speakerLabelName };

        var jsonPayload = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json");

        client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
        client.DefaultRequestHeaders.Add("Accept", "application/json");

        var response = await client.PostAsync(url, jsonPayload);

        Console.WriteLine(await response.Content.ReadAsStringAsync());
    }
}


package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"
)

const (
	apiKey          = "your_api_key"
	speakerLabelName = "your_speaker_name"
)

func main() {
	url := "https://api.tor.app/developer/annotations/profiles"

	payload := map[string]string{"speaker_name": speakerLabelName}
	payloadBytes, _ := json.Marshal(payload)

	req, _ := http.NewRequest("POST", url, bytes.NewBuffer(payloadBytes))
	req.Header.Set("Authorization", "Bearer "+apiKey)
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("Accept", "application/json")

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer resp.Body.Close()

	var response map[string]interface{}
	json.NewDecoder(resp.Body).Decode(&response)
	fmt.Println(response)
}


require 'net/http'
require 'json'
require 'uri'

api_key = "your_api_key"
speaker_label_name = "your_speaker_name"

url = URI("https://api.tor.app/developer/annotations/profiles")
body = { "speaker_name" => speaker_label_name }

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

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer #{api_key}"
request["Content-Type"] = "application/json"
request["Accept"] = "application/json"
request.body = body.to_json

response = http.request(request)
puts response.body


<?php
$apiKey = "your_api_key";
$speakerLabelName = "your_speaker_name";

$url = "https://api.tor.app/developer/annotations/profiles";
$payload = json_encode(["speaker_name" => $speakerLabelName]);

$headers = [
    "Authorization: Bearer $apiKey",
    "Content-Type: application/json",
    "Accept: application/json"
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

echo $response;
?>


import okhttp3.*
import org.json.JSONObject

fun main() {
    val apiKey = "your_api_key"
    val speakerLabelName = "your_speaker_name"
    val url = "https://api.tor.app/developer/annotations/profiles"

    val payload = JSONObject().put("speaker_name", speakerLabelName)

    val client = OkHttpClient()
    val body = RequestBody.create(MediaType.parse("application/json"), payload.toString())
    val request = Request.Builder()
        .url(url)
        .post(body)
        .addHeader("Authorization", "Bearer $apiKey")
        .addHeader("Content-Type", "application/json")
        .addHeader("Accept", "application/json")
        .build()

    client.newCall(request).execute().use { response ->
        println(response.body()?.string())
    }
}


import Foundation

let apiKey = "your_api_key"
let speakerLabelName = "your_speaker_name"
let url = URL(string: "https://api.tor.app/developer/annotations/profiles")!

var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")

let payload: [String: Any] = [
    "speaker_name": speakerLabelName
]

request.httpBody = try! JSONSerialization.data(withJSONObject: payload, options: [])

let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let responseBody = String(data: data, encoding: .utf8) {
        print(responseBody)
    }
}

task.resume()

import 'dart:convert';
import 'dart:io';

void main() async {
  const apiKey = 'your_api_key';
  const speakerLabelName = 'your_speaker_name';

  final url = Uri.parse('https://api.tor.app/developer/annotations/profiles');

  final payload = jsonEncode({
    "speaker_name": speakerLabelName,
  });

  final request = await HttpClient().postUrl(url)
    ..headers.set('Authorization', 'Bearer $apiKey')
    ..headers.set('Content-Type', 'application/json')
    ..headers.set('Accept', 'application/json')
    ..write(payload);

  final response = await request.close();

  if (response.statusCode == 200) {
    final responseBody = await response.transform(utf8.decoder).join();
    print(responseBody);
  } else {
    print("Request failed with status: ${response.statusCode}");
    await response.transform(utf8.decoder).forEach(print);
  }
}



Response


200 OK
{
  "statusCode": 200,
  "body": "Audio processed and uploaded successfully!"
}

403 Forbidden
{
  "statusCode": 403,
  "body": {
    "message": "Upload limit reached for this speaker"
  }
}

500 Internal Server Error
{
  "statusCode": 500,
  "body": "Error processing audio file: Detailed error message"
}


Create a Speaker Profile From Previous Transcriptions

As well as uploading a new audio file to create a speaker profile, you can create a speaker profile from your previous transcriptions.


import requests
import json

url = f"https://api.tor.app/developer/annotations/profiles/create_from_transcription"

order_id = "your_order_id"
old_speaker_name = "SPK_1"
new_speaker_name = "new_speaker_name"
start_time = 0  # in ms
end_time = 13000  # in ms
api_key = "your_api_key"  # Replace with your actual API key

config = {
    "start_time": start_time,
    "end_time": end_time,
    "order_id": order_id,
    "old_speaker_name": old_speaker_name,
    "new_speaker_name": new_speaker_name,
}


# Set up the headers, including the API key
headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {api_key}",  # Use the variable here
    "Accept": "application/json",
}


response = requests.request("POST", url, headers=headers, json=config)

print(response.text)

const axios = require('axios');

const url = "https://api.tor.app/developer/annotations/profiles/create_from_transcription";
const apiKey = "your_api_key"; // Replace with your actual API key

const config = {
    start_time: 0,
    end_time: 13000,
    order_id: "your_order_id",
    old_speaker_name: "SPK_1",
    new_speaker_name: "new_speaker_name"
};

const headers = {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${apiKey}`,
    'Accept': 'application/json'
};

axios.post(url, config, { headers })
    .then(response => {
        console.log(response.data);
    })
    .catch(error => {
        console.error("Error:", error.response ? error.response.data : error.message);
    });


import okhttp3.*;
import org.json.JSONObject;

public class CreateProfileFromTranscription {
    private static final String API_KEY = "your_api_key";

    public static void main(String[] args) throws Exception {
        OkHttpClient client = new OkHttpClient();
        String url = "https://api.tor.app/developer/annotations/profiles/create_from_transcription";

        JSONObject config = new JSONObject();
        config.put("start_time", 0);
        config.put("end_time", 13000);
        config.put("order_id", "your_order_id");
        config.put("old_speaker_name", "SPK_1");
        config.put("new_speaker_name", "new_speaker_name");

        RequestBody body = RequestBody.create(config.toString(), MediaType.parse("application/json"));

        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .addHeader("Authorization", "Bearer " + API_KEY)
                .addHeader("Content-Type", "application/json")
                .addHeader("Accept", "application/json")
                .build();

        try (Response response = client.newCall(request).execute()) {
            System.out.println(response.body().string());
        }
    }
}


using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

public class Program
{
    private static readonly string apiKey = "your_api_key";

    public static async Task Main()
    {
        var client = new HttpClient();
        var url = "https://api.tor.app/developer/annotations/profiles/create_from_transcription";

        var config = new
        {
            start_time = 0,
            end_time = 13000,
            order_id = "your_order_id",
            old_speaker_name = "SPK_1",
            new_speaker_name = "new_speaker_name"
        };

        var jsonPayload = new StringContent(JsonSerializer.Serialize(config), Encoding.UTF8, "application/json");

        client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
        client.DefaultRequestHeaders.Add("Accept", "application/json");

        var response = await client.PostAsync(url, jsonPayload);

        Console.WriteLine(await response.Content.ReadAsStringAsync());
    }
}


package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"
)

const apiKey = "your_api_key"

func main() {
	url := "https://api.tor.app/developer/annotations/profiles/create_from_transcription"

	config := map[string]interface{}{
		"start_time":       0,
		"end_time":         13000,
		"order_id":         "your_order_id",
		"old_speaker_name": "SPK_1",
		"new_speaker_name": "new_speaker_name",
	}

	payloadBytes, _ := json.Marshal(config)
	req, _ := http.NewRequest("POST", url, bytes.NewBuffer(payloadBytes))
	req.Header.Set("Authorization", "Bearer "+apiKey)
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("Accept", "application/json")

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer resp.Body.Close()

	var response map[string]interface{}
	json.NewDecoder(resp.Body).Decode(&response)
	fmt.Println(response)
}


require 'net/http'
require 'json'
require 'uri'

api_key = "your_api_key"
url = URI("https://api.tor.app/developer/annotations/profiles/create_from_transcription")

config = {
    "start_time" => 0,
    "end_time" => 13000,
    "order_id" => "your_order_id",
    "old_speaker_name" => "SPK_1",
    "new_speaker_name" => "new_speaker_name"
}

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

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer #{api_key}"
request["Content-Type"] = "application/json"
request["Accept"] = "application/json"
request.body = config.to_json

response = http.request(request)
puts response.body


<?php
$apiKey = "your_api_key";

$url = "https://api.tor.app/developer/annotations/profiles/create_from_transcription";
$config = json_encode([
    "start_time" => 0,
    "end_time" => 13000,
    "order_id" => "your_order_id",
    "old_speaker_name" => "SPK_1",
    "new_speaker_name" => "new_speaker_name"
]);

$headers = [
    "Authorization: Bearer $apiKey",
    "Content-Type: application/json",
    "Accept: application/json"
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $config);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

echo $response;
?>


import okhttp3.*
import org.json.JSONObject

fun main() {
    val apiKey = "your_api_key"
    val url = "https://api.tor.app/developer/annotations/profiles/create_from_transcription"

    val config = JSONObject().apply {
        put("start_time", 0)
        put("end_time", 13000)
        put("order_id", "your_order_id")
        put("old_speaker_name", "SPK_1")
        put("new_speaker_name", "new_speaker_name")
    }

    val client = OkHttpClient()
    val body = RequestBody.create(MediaType.parse("application/json"), config.toString())
    val request = Request.Builder()
        .url(url)
        .post(body)
        .addHeader("Authorization", "Bearer $apiKey")
        .addHeader("Content-Type", "application/json")
        .addHeader("Accept", "application/json")
        .build()

    client.newCall(request).execute().use { response ->
        println(response.body()?.string())
    }
}


import Foundation

let apiKey = "your_api_key"
let url = URL(string: "https://api.tor.app/developer/annotations/profiles/create_from_transcription")!

var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")

let config: [String: Any] = [
    "start_time": 0,
    "end_time": 13000,
    "order_id": "your_order_id",
    "old_speaker_name": "SPK_1",
    "new_speaker_name": "new_speaker_name"
]

request.httpBody = try! JSONSerialization.data(withJSONObject: config, options: [])

let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let responseBody = String(data: data, encoding: .utf8) {
        print(responseBody)
    }
}

task.resume()

import 'dart:convert';
import 'dart:io';

void main() async {
  const apiKey = 'your_api_key';

  final url = Uri.parse('https://api.tor.app/developer/annotations/profiles/create_from_transcription');

  final config = jsonEncode({
    "start_time": 0,
    "end_time": 13000,
    "order_id": "your_order_id",
    "old_speaker_name": "SPK_1",
    "new_speaker_name": "new_speaker_name",
  });

  final request = await HttpClient().postUrl(url)
    ..headers.set('Authorization', 'Bearer $apiKey')
    ..headers.set('Content-Type', 'application/json')
    ..headers.set('Accept', 'application/json')
    ..write(config);

  final response = await request.close();

  if (response.statusCode == 200) {
    final responseBody = await response.transform(utf8.decoder).join();
    print(responseBody);
  } else {
    print("Request failed with status: ${response.statusCode}");
    await response.transform(utf8.decoder).forEach(print);
  }
}



Response


200 OK
"Audio processed and uploaded successfully!"

400 Bad Request
{
  "error": "The request is invalid or malformed."
}

500 Internal Server Error
{
  "error": "An error occurred on the server."
}


Get a List of Your Speaker Profiles

You can view the list of speaker profiles you created.


import requests
import json

api_key = "user_api_key"
url = f"https://api.tor.app/developer/annotations/profiles"

# Define the API key as a variable
api_key = "your_api_key"  # Replace with your actual API key

# Set up the headers, including the API key
headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {api_key}",  # Use the variable here
    "Accept": "application/json",
}
response = requests.get(url, headers=headers, params={})

speaker_labels = json.loads(response.text)
print(f"Speaker profiles: ", speaker_labels)

const axios = require('axios');

const apiKey = 'your_api_key'; // Replace with your actual API key

const headers = {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${apiKey}`,
    'Accept': 'application/json'
};

const url = "https://api.tor.app/developer/annotations/profiles";

axios.get(url, { headers })
    .then(response => {
        console.log("Speaker profiles:", response.data);
    })
    .catch(error => {
        console.error("Error:", error.response ? error.response.data : error.message);
    });


import okhttp3.*;

public class RetrieveSpeakerProfiles {
    private static final String API_KEY = "your_api_key";

    public static void main(String[] args) throws Exception {
        OkHttpClient client = new OkHttpClient();
        String url = "https://api.tor.app/developer/annotations/profiles";

        Request request = new Request.Builder()
                .url(url)
                .get()
                .addHeader("Authorization", "Bearer " + API_KEY)
                .addHeader("Content-Type", "application/json")
                .addHeader("Accept", "application/json")
                .build();

        try (Response response = client.newCall(request).execute()) {
            System.out.println("Speaker profiles: " + response.body().string());
        }
    }
}


using System;
using System.Net.Http;
using System.Threading.Tasks;

public class Program
{
    private static readonly string apiKey = "your_api_key";

    public static async Task Main()
    {
        var client = new HttpClient();
        var url = "https://api.tor.app/developer/annotations/profiles";

        client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
        client.DefaultRequestHeaders.Add("Accept", "application/json");

        var response = await client.GetAsync(url);
        var responseBody = await response.Content.ReadAsStringAsync();

        Console.WriteLine("Speaker profiles: " + responseBody);
    }
}


package main

import (
	"encoding/json"
	"fmt"
	"net/http"
)

const apiKey = "your_api_key"

func main() {
	url := "https://api.tor.app/developer/annotations/profiles"

	req, _ := http.NewRequest("GET", url, nil)
	req.Header.Set("Authorization", "Bearer "+apiKey)
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("Accept", "application/json")

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer resp.Body.Close()

	var speakerLabels map[string]interface{}
	json.NewDecoder(resp.Body).Decode(&speakerLabels)
	fmt.Println("Speaker profiles:", speakerLabels)
}


require 'net/http'
require 'json'
require 'uri'

api_key = "your_api_key"
url = URI("https://api.tor.app/developer/annotations/profiles")

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

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer #{api_key}"
request["Content-Type"] = "application/json"
request["Accept"] = "application/json"

response = http.request(request)
speaker_labels = JSON.parse(response.body)
puts "Speaker profiles: #{speaker_labels}"


<?php
$apiKey = "your_api_key";

$url = "https://api.tor.app/developer/annotations/profiles";

$headers = [
    "Authorization: Bearer $apiKey",
    "Content-Type: application/json",
    "Accept: application/json"
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

$speakerLabels = json_decode($response, true);
echo "Speaker profiles: ";
print_r($speakerLabels);
?>


import okhttp3.*

fun main() {
    val apiKey = "your_api_key"
    val url = "https://api.tor.app/developer/annotations/profiles"

    val client = OkHttpClient()
    val request = Request.Builder()
        .url(url)
        .get()
        .addHeader("Authorization", "Bearer $apiKey")
        .addHeader("Content-Type", "application/json")
        .addHeader("Accept", "application/json")
        .build()

    client.newCall(request).execute().use { response ->
        println("Speaker profiles: ${response.body()?.string()}")
    }
}


import Foundation

let apiKey = "your_api_key"
let url = URL(string: "https://api.tor.app/developer/annotations/profiles")!

var request = URLRequest(url: url)
request.httpMethod = "GET"
request.addValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")

let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let responseBody = String(data: data, encoding: .utf8) {
        print("Speaker profiles: \(responseBody)")
    }
}

task.resume()

import 'dart:convert';
import 'dart:io';

void main() async {
  const apiKey = 'your_api_key';

  final url = Uri.parse('https://api.tor.app/developer/annotations/profiles');

  final request = await HttpClient().getUrl(url)
    ..headers.set('Authorization', 'Bearer $apiKey')
    ..headers.set('Content-Type', 'application/json')
    ..headers.set('Accept', 'application/json');

  final response = await request.close();

  if (response.statusCode == 200) {
    final responseBody = await response.transform(utf8.decoder).join();
    print("Speaker profiles: $responseBody");
  } else {
    print("Request failed with status: ${response.statusCode}");
    await response.transform(utf8.decoder).forEach(print);
  }
}



Response


200 OK
{
  "statusCode": 200,
  "body": [
    {
      "speaker_name": "speaker1",
      "download_url": "https://download_url_1"
    },
    {
      "speaker_name": "speaker2",
      "download_url": "https://download_url_2"
    }
  ]
}

500 Error Fetching User Settings
{
  "statusCode": 500,
  "body": {
    "error": "Failed to fetch user settings"
  }
}

500 Internal Server Error
{
  "statusCode": 500,
  "body": {
    "error": "Detailed error message"
  }
}


Learn Your Speaker Profiles Count and See If You Have Reached Limit For Creating Speaker Profile

For efficiency of transcribing process speaker profile count is limited to 20, if you think you need to increase that limit please contact us.


import requests
import json

url = f"https://api.tor.app/developer/annotations/profiles/count"
# Define the API key as a variable
api_key = "your_api_key"  # Replace with your actual API key

payload = {}

# Set up the headers, including the API key
headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {api_key}",  # Use the variable here
    "Accept": "application/json",
}

response = requests.get(url, headers=headers, data=payload)

speaker_label_count = json.loads(response.text)
print(f"Speaker profile count: ", speaker_label_count)

const axios = require('axios');

const apiKey = 'your_api_key'; // Replace with your actual API key

const headers = {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${apiKey}`,
    'Accept': 'application/json'
};

const url = "https://api.tor.app/developer/annotations/profiles/count";

axios.get(url, { headers })
    .then(response => {
        console.log("Speaker profile count:", response.data);
    })
    .catch(error => {
        console.error("Error:", error.response ? error.response.data : error.message);
    });


import okhttp3.*;

public class RetrieveSpeakerProfileCount {
    private static final String API_KEY = "your_api_key";

    public static void main(String[] args) throws Exception {
        OkHttpClient client = new OkHttpClient();
        String url = "https://api.tor.app/developer/annotations/profiles/count";

        Request request = new Request.Builder()
                .url(url)
                .get()
                .addHeader("Authorization", "Bearer " + API_KEY)
                .addHeader("Content-Type", "application/json")
                .addHeader("Accept", "application/json")
                .build();

        try (Response response = client.newCall(request).execute()) {
            System.out.println("Speaker profile count: " + response.body().string());
        }
    }
}


using System;
using System.Net.Http;
using System.Threading.Tasks;

public class Program
{
    private static readonly string apiKey = "your_api_key";

    public static async Task Main()
    {
        var client = new HttpClient();
        var url = "https://api.tor.app/developer/annotations/profiles/count";

        client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
        client.DefaultRequestHeaders.Add("Accept", "application/json");

        var response = await client.GetAsync(url);
        var responseBody = await response.Content.ReadAsStringAsync();

        Console.WriteLine("Speaker profile count: " + responseBody);
    }
}


package main

import (
	"encoding/json"
	"fmt"
	"net/http"
)

const apiKey = "your_api_key"

func main() {
	url := "https://api.tor.app/developer/annotations/profiles/count"

	req, _ := http.NewRequest("GET", url, nil)
	req.Header.Set("Authorization", "Bearer "+apiKey)
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("Accept", "application/json")

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer resp.Body.Close()

	var speakerLabelCount map[string]interface{}
	json.NewDecoder(resp.Body).Decode(&speakerLabelCount)
	fmt.Println("Speaker profile count:", speakerLabelCount)
}


require 'net/http'
require 'json'
require 'uri'

api_key = "your_api_key"
url = URI("https://api.tor.app/developer/annotations/profiles/count")

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

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer #{api_key}"
request["Content-Type"] = "application/json"
request["Accept"] = "application/json"

response = http.request(request)
speaker_label_count = JSON.parse(response.body)
puts "Speaker profile count: #{speaker_label_count}"


<?php
$apiKey = "your_api_key";

$url = "https://api.tor.app/developer/annotations/profiles/count";

$headers = [
    "Authorization: Bearer $apiKey",
    "Content-Type: application/json",
    "Accept: application/json"
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

$speakerLabelCount = json_decode($response, true);
echo "Speaker profile count: ";
print_r($speakerLabelCount);
?>


import okhttp3.*

fun main() {
    val apiKey = "your_api_key"
    val url = "https://api.tor.app/developer/annotations/profiles/count"

    val client = OkHttpClient()
    val request = Request.Builder()
        .url(url)
        .get()
        .addHeader("Authorization", "Bearer $apiKey")
        .addHeader("Content-Type", "application/json")
        .addHeader("Accept", "application/json")
        .build()

    client.newCall(request).execute().use { response ->
        println("Speaker profile count: ${response.body()?.string()}")
    }
}


import Foundation

let apiKey = "your_api_key"
let url = URL(string: "https://api.tor.app/developer/annotations/profiles/count")!

var request = URLRequest(url: url)
request.httpMethod = "GET"
request.addValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")

let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let responseBody = String(data: data, encoding: .utf8) {
        print("Speaker profile count: \(responseBody)")
    }
}

task.resume()

import 'dart:convert';
import 'dart:io';

void main() async {
  const apiKey = 'your_api_key';

  final url = Uri.parse('https://api.tor.app/developer/annotations/profiles/count');

  final request = await HttpClient().getUrl(url)
    ..headers.set('Authorization', 'Bearer $apiKey')
    ..headers.set('Content-Type', 'application/json')
    ..headers.set('Accept', 'application/json');

  final response = await request.close();

  if (response.statusCode == 200) {
    final responseBody = await response.transform(utf8.decoder).join();
    print("Speaker profile count: $responseBody");
  } else {
    print("Request failed with status: ${response.statusCode}");
    await response.transform(utf8.decoder).forEach(print);
  }
}



Response


200 OK
{
  "statusCode": 200,
  "body": {
    "speaker_label_count": 7,
    "limit_reached": false
  }
}

200 OK (Limit Reached)
{
  "statusCode": 200,
  "body": {
    "speaker_label_count": 10,
    "limit_reached": true
  }
}

500 Internal Server Error
{
  "statusCode": 500,
  "body": {
    "error": "Failed to fetch user settings"
  }
}

Delete a Speaker Profile

You can delete a speaker profile that you created.


import requests
import json

url = f"https://api.tor.app/developer/annotations/profiles"
api_key = "your_api_key"  # Replace with your actual API key
speaker_label_name = "your_speaker_name"

payload = {"speaker_name": speaker_label_name}

# Set up the headers, including the API key
headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {api_key}",  # Use the variable here
    "Accept": "application/json",
}

response = requests.delete(url, headers=headers, json=payload)

print(response.text)

const axios = require('axios');

const apiKey = 'your_api_key'; // Replace with your actual API key
const speakerLabelName = 'your_speaker_name';

const headers = {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${apiKey}`,
    'Accept': 'application/json'
};

const payload = {
    speaker_name: speakerLabelName
};

const url = "https://api.tor.app/developer/annotations/profiles";

axios.delete(url, { headers, data: payload })
    .then(response => {
        console.log(response.data);
    })
    .catch(error => {
        console.error("Error:", error.response ? error.response.data : error.message);
    });


import okhttp3.*;

public class DeleteSpeakerProfile {
    private static final String API_KEY = "your_api_key";
    private static final String SPEAKER_LABEL_NAME = "your_speaker_name";

    public static void main(String[] args) throws Exception {
        OkHttpClient client = new OkHttpClient();
        String url = "https://api.tor.app/developer/annotations/profiles";

        String jsonPayload = "{\"speaker_name\":\"" + SPEAKER_LABEL_NAME + "\"}";

        RequestBody body = RequestBody.create(jsonPayload, MediaType.parse("application/json"));

        Request request = new Request.Builder()
                .url(url)
                .delete(body)
                .addHeader("Authorization", "Bearer " + API_KEY)
                .addHeader("Content-Type", "application/json")
                .addHeader("Accept", "application/json")
                .build();

        try (Response response = client.newCall(request).execute()) {
            System.out.println(response.body().string());
        }
    }
}


using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

public class Program
{
    private static readonly string apiKey = "your_api_key";
    private static readonly string speakerLabelName = "your_speaker_name";

    public static async Task Main()
    {
        var client = new HttpClient();
        var url = "https://api.tor.app/developer/annotations/profiles";

        var payload = new { speaker_name = speakerLabelName };
        var jsonPayload = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json");

        client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
        client.DefaultRequestHeaders.Add("Accept", "application/json");

        var request = new HttpRequestMessage(HttpMethod.Delete, url) { Content = jsonPayload };

        var response = await client.SendAsync(request);
        Console.WriteLine(await response.Content.ReadAsStringAsync());
    }
}


package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"
)

const apiKey = "your_api_key"
const speakerLabelName = "your_speaker_name"

func main() {
	url := "https://api.tor.app/developer/annotations/profiles"

	payload := map[string]string{"speaker_name": speakerLabelName}
	payloadBytes, _ := json.Marshal(payload)

	req, _ := http.NewRequest("DELETE", url, bytes.NewBuffer(payloadBytes))
	req.Header.Set("Authorization", "Bearer "+apiKey)
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("Accept", "application/json")

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer resp.Body.Close()

	var response map[string]interface{}
	json.NewDecoder(resp.Body).Decode(&response)
	fmt.Println(response)
}


require 'net/http'
require 'json'
require 'uri'

api_key = "your_api_key"
speaker_label_name = "your_speaker_name"

url = URI("https://api.tor.app/developer/annotations/profiles")
body = { "speaker_name" => speaker_label_name }

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

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer #{api_key}"
request["Content-Type"] = "application/json"
request["Accept"] = "application/json"
request.body = body.to_json

response = http.request(request)
puts response.body


<?php
$apiKey = "your_api_key";
$speakerLabelName = "your_speaker_name";

$url = "https://api.tor.app/developer/annotations/profiles";
$payload = json_encode(["speaker_name" => $speakerLabelName]);

$headers = [
    "Authorization: Bearer $apiKey",
    "Content-Type: application/json",
    "Accept: application/json"
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

echo $response;
?>


import okhttp3.*
import org.json.JSONObject

fun main() {
    val apiKey = "your_api_key"
    val speakerLabelName = "your_speaker_name"
    val url = "https://api.tor.app/developer/annotations/profiles"

    val payload = JSONObject().put("speaker_name", speakerLabelName)

    val client = OkHttpClient()
    val body = RequestBody.create(MediaType.parse("application/json"), payload.toString())
    val request = Request.Builder()
        .url(url)
        .delete(body)
        .addHeader("Authorization", "Bearer $apiKey")
        .addHeader("Content-Type", "application/json")
        .addHeader("Accept", "application/json")
        .build()

    client.newCall(request).execute().use { response ->
        println(response.body()?.string())
    }
}


import Foundation

let apiKey = "your_api_key"
let speakerLabelName = "your_speaker_name"
let url = URL(string: "https://api.tor.app/developer/annotations/profiles")!

var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.addValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")

let payload: [String: Any] = [
    "speaker_name": speakerLabelName
]

request.httpBody = try! JSONSerialization.data(withJSONObject: payload, options: [])

let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let responseBody = String(data: data, encoding: .utf8) {
        print(responseBody)
    }
}

task.resume()

import 'dart:convert';
import 'dart:io';

void main() async {
  const apiKey = 'your_api_key';
  const speakerLabelName = 'your_speaker_name';

  final url = Uri.parse('https://api.tor.app/developer/annotations/profiles');

  final payload = jsonEncode({
    "speaker_name": speakerLabelName,
  });

  final request = await HttpClient().deleteUrl(url)
    ..headers.set('Authorization', 'Bearer $apiKey')
    ..headers.set('Content-Type', 'application/json')
    ..headers.set('Accept', 'application/json')
    ..write(payload);

  final response = await request.close();

  if (response.statusCode == 200) {
    final responseBody = await response.transform(utf8.decoder).join();
    print(responseBody);
  } else {
    print("Request failed with status: ${response.statusCode}");
    await response.transform(utf8.decoder).forEach(print);
  }
}



Response


200 OK
{
  "statusCode": 200,
  "body": "Speaker deleted successfully"
}

404 Not Found
{
  "statusCode": 404,
  "body": "Speaker not found"
}

500 Internal Server Error
{
  "statusCode": 500,
  "body": "Failed to fetch user settings"
}

500 Internal Server Error
{
  "statusCode": 500,
  "body": "Failed to update user settings"
}