curl --request POST \
--url https://api.eesi.ai/v1/speech/transcriptions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form file=@example-file \
--form 'model=<string>' \
--form stream=true \
--form intelligence=true \
--form 'project=<string>' \
--form 'project_name=<string>' \
--form 'external_id=<string>' \
--form 'metadata=<string>'import requests
url = "https://api.eesi.ai/v1/speech/transcriptions"
files = { "file": ("example-file", open("example-file", "rb")) }
payload = {
"model": "<string>",
"stream": "true",
"intelligence": "true",
"project": "<string>",
"project_name": "<string>",
"external_id": "<string>",
"metadata": "<string>"
}
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('file', '<string>');
form.append('model', '<string>');
form.append('stream', 'true');
form.append('intelligence', 'true');
form.append('project', '<string>');
form.append('project_name', '<string>');
form.append('external_id', '<string>');
form.append('metadata', '<string>');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://api.eesi.ai/v1/speech/transcriptions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.eesi.ai/v1/speech/transcriptions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"intelligence\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project_name\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"external_id\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"metadata\"\r\n\r\n<string>\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.eesi.ai/v1/speech/transcriptions"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"intelligence\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project_name\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"external_id\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"metadata\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.eesi.ai/v1/speech/transcriptions")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"intelligence\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project_name\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"external_id\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"metadata\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.eesi.ai/v1/speech/transcriptions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"intelligence\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project_name\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"external_id\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"metadata\"\r\n\r\n<string>\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"session_id": "5c9c8dbc-8824-49bf-bb8c-0756c1569df3",
"task": "transcribe",
"language": "en",
"language_probability": 1,
"duration": 90,
"text": "currency on good assets. And thus, the banks that reopen will be able to meet every legitimate …",
"segments": [
{
"id": 0,
"start": 0.12,
"end": 1.52,
"text": "currency on good assets.",
"speaker": "S01",
"pace_wpm": 171,
"energy_db": -15,
"level_db": -21.6,
"snr_db": 12.6,
"audibility": "off_mic",
"confidence": 0.872,
"sound": {
"music": 0.669
}
},
{
"id": 1,
"start": 2.14,
"end": 6.31,
"text": "And thus, the banks that reopen will be able to meet every legitimate call.",
"speaker": "S01",
"pace_wpm": 201,
"energy_db": -13.9,
"level_db": -21.8,
"snr_db": 12.4,
"audibility": "off_mic",
"confidence": 0.992,
"sound": {
"music": 0.666
}
}
],
"words": [
{
"word": "currency",
"start": 0.12,
"end": 0.38,
"confidence": 0.74,
"segment_id": 0,
"speaker": "S01",
"level_db": -23.8,
"snr_db": 10.4,
"audibility": "faint"
},
{
"word": "on",
"start": 0.52,
"end": 0.62,
"confidence": 0.988,
"segment_id": 0,
"speaker": "S01",
"level_db": -19.4,
"snr_db": 14.8,
"audibility": "off_mic"
}
],
"gaps": [
{
"start": 1.52,
"end": 2.14,
"duration": 0.62
}
],
"speech_seconds": 72.47,
"silence_seconds": 17.53,
"noise_floor_db": -34.2,
"disfluencies": {
"filler": 0,
"repetition": 0,
"false_start": 0
},
"scene": [
{
"start": 0,
"end": 90,
"label": "music",
"raw_label": "Music",
"score": 0.703,
"role": "bed",
"vocals": false
},
{
"start": 0,
"end": 90,
"label": "speech",
"raw_label": "Speech",
"score": 0.753
}
],
"scene_summary": {
"music": 1,
"speech": 1,
"ambience": 0.822,
"sfx": 0.111,
"dominant": "speech"
},
"vocal_events": [],
"intelligence": {
"status": "queued"
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Transcribe and analyze a recording
Upload a recording to transcribe it by speaker, save it with its audio, and analyze how it was spoken.
The transcript comes back in this response: streamed as Server-Sent Events while
it is transcribed (stream=true, the default), or as one JSON body when it is
done (stream=false). The analysis of each line’s delivery, the audience’s
reactions and the sound under the voice runs next, in the background. Poll
GET /v1/speech/transcriptions/{session_id}/intelligence
until its status is complete.
Pass project to file the recording in a project: the same person keeps one
speaker identity across every recording in it. A key that does not exist yet
creates the project.
Streaming events: session.created (carries session_id), one
transcript.segment per finished line, then transcript.text.done with the full
result, or error.
curl --request POST \
--url https://api.eesi.ai/v1/speech/transcriptions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form file=@example-file \
--form 'model=<string>' \
--form stream=true \
--form intelligence=true \
--form 'project=<string>' \
--form 'project_name=<string>' \
--form 'external_id=<string>' \
--form 'metadata=<string>'import requests
url = "https://api.eesi.ai/v1/speech/transcriptions"
files = { "file": ("example-file", open("example-file", "rb")) }
payload = {
"model": "<string>",
"stream": "true",
"intelligence": "true",
"project": "<string>",
"project_name": "<string>",
"external_id": "<string>",
"metadata": "<string>"
}
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('file', '<string>');
form.append('model', '<string>');
form.append('stream', 'true');
form.append('intelligence', 'true');
form.append('project', '<string>');
form.append('project_name', '<string>');
form.append('external_id', '<string>');
form.append('metadata', '<string>');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://api.eesi.ai/v1/speech/transcriptions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.eesi.ai/v1/speech/transcriptions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"intelligence\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project_name\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"external_id\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"metadata\"\r\n\r\n<string>\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.eesi.ai/v1/speech/transcriptions"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"intelligence\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project_name\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"external_id\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"metadata\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.eesi.ai/v1/speech/transcriptions")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"intelligence\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project_name\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"external_id\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"metadata\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.eesi.ai/v1/speech/transcriptions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"intelligence\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project_name\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"external_id\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"metadata\"\r\n\r\n<string>\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"session_id": "5c9c8dbc-8824-49bf-bb8c-0756c1569df3",
"task": "transcribe",
"language": "en",
"language_probability": 1,
"duration": 90,
"text": "currency on good assets. And thus, the banks that reopen will be able to meet every legitimate …",
"segments": [
{
"id": 0,
"start": 0.12,
"end": 1.52,
"text": "currency on good assets.",
"speaker": "S01",
"pace_wpm": 171,
"energy_db": -15,
"level_db": -21.6,
"snr_db": 12.6,
"audibility": "off_mic",
"confidence": 0.872,
"sound": {
"music": 0.669
}
},
{
"id": 1,
"start": 2.14,
"end": 6.31,
"text": "And thus, the banks that reopen will be able to meet every legitimate call.",
"speaker": "S01",
"pace_wpm": 201,
"energy_db": -13.9,
"level_db": -21.8,
"snr_db": 12.4,
"audibility": "off_mic",
"confidence": 0.992,
"sound": {
"music": 0.666
}
}
],
"words": [
{
"word": "currency",
"start": 0.12,
"end": 0.38,
"confidence": 0.74,
"segment_id": 0,
"speaker": "S01",
"level_db": -23.8,
"snr_db": 10.4,
"audibility": "faint"
},
{
"word": "on",
"start": 0.52,
"end": 0.62,
"confidence": 0.988,
"segment_id": 0,
"speaker": "S01",
"level_db": -19.4,
"snr_db": 14.8,
"audibility": "off_mic"
}
],
"gaps": [
{
"start": 1.52,
"end": 2.14,
"duration": 0.62
}
],
"speech_seconds": 72.47,
"silence_seconds": 17.53,
"noise_floor_db": -34.2,
"disfluencies": {
"filler": 0,
"repetition": 0,
"false_start": 0
},
"scene": [
{
"start": 0,
"end": 90,
"label": "music",
"raw_label": "Music",
"score": 0.703,
"role": "bed",
"vocals": false
},
{
"start": 0,
"end": 90,
"label": "speech",
"raw_label": "Speech",
"score": 0.753
}
],
"scene_summary": {
"music": 1,
"speech": 1,
"ambience": 0.822,
"sfx": 0.111,
"dominant": "speech"
},
"vocal_events": [],
"intelligence": {
"status": "queued"
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Your EESI API key, sk-eesi-....
Headers
Retry safely: a repeat with the same key returns the recording the first request made instead of transcribing and billing again. Needs stream=false. Keys hold for 24 hours.
255Body
The recording: MP3, WAV, M4A, FLAC, OGG, WebM, or a video's audio (MP4, MOV), up to 1 GB and about 90 minutes.
nur-v1.
true streams Server-Sent Events as lines are transcribed; false returns one JSON body.
Analyze how it was spoken once it is transcribed.
A project id or key to file it in. A new key creates the project.
128A display name for a project this upload creates.
255Your own id for this asset, such as a clip id in your asset manager. Returned with the recording, and GET /v1/speech/transcriptions?external_id= finds it. Not unique.
255A JSON object of your own to keep with the recording, such as {"show": "Archive", "reel": "A012"}.
4096Response
The transcript, with stream=false. The analysis follows in the background.