Skip to main content

SpeechLytics Speech Analytics API (v1)

Download OpenAPI specification:Download

REST API for submitting recordings, running live transcription sessions and reading transcripts, analytics and agent intelligence.

Authentication. Exchange credentials at POST /api/v1/auth/token and send the JWT as Authorization: Bearer <token>. Accounts with two-factor authentication complete sign-in at POST /api/v1/auth/token/2fa.

Enums. Enum schemas are shown as <value> - <name>. Send and expect the integer value.

Encryption. Every authenticated response carries Encryption-Data: true|false. When it is true the body is an AES-256-GCM envelope and X-Encryption-Key-Id names the key. Errors are never encrypted.

Rate limits. Authentication endpoints allow 10 requests per minute per address; other endpoints share a deployment-wide allowance and a per-address limit. Requests over a limit receive 429 Too Many Requests.

WebSocket endpoints (/ws/transcribe, /ws/live-events, /api/v1/calls/events) are described in the guides, not in this reference.

Analytics

List analytics results

Returns a paginated collection of analytics results, optionally filtered by a date range.

Authorizations:
Bearer
query Parameters
Page
integer <int32>
Rows
integer <int32> [ 0 .. 100 ]
DateFrom
string
DateTo
string

Responses

Request samples

curl -X GET "https://api.example.com/api/v1/analytics?Page=1&Rows=10&DateFrom=2026-09-01&DateTo=2026-09-30" \
  -H "Authorization: Bearer $SPEECHLYTICS_TOKEN"

Auth

Create an access token

Authenticates the supplied credentials and returns a JWT. When the user has two-factor authentication turned on, the response is 401 with error: two_factor_required and a challengeToken; complete sign-in with POST /api/v1/auth/token/2fa. Repeated failures lock the user out for 15 minutes.

Request Body schema:
username
string or null
password
string or null

Responses

Request samples

Content type
{
  • "username": "string",
  • "password": "string"
}

Response samples

Content type
No sample

Complete two-factor sign-in

Exchanges the challenge returned by /api/v1/auth/token and a current authenticator code (or a single-use recovery code) for a JWT.

Request Body schema: application/json
challengeToken
required
string
code
required
string

Six-digit authenticator code, or a recovery code.

useRecoveryCode
boolean
Default: false

Responses

Request samples

Content type
application/json
{
  • "challengeToken": "string",
  • "code": "string",
  • "useRecoveryCode": false
}

Response samples

Content type
application/json
{
  • "token": "string",
  • "expires": "2019-08-24T14:15:22Z",
  • "eventId": "string"
}

Calls

Get call processing status

Returns the current processing status for the call identified by the path ID.

Authorizations:
Bearer
path Parameters
id
required
integer <int32>

Responses

Request samples

curl -X GET "https://api.example.com/api/v1/calls/12345/status" \
  -H "Authorization: Bearer $SPEECHLYTICS_TOKEN"

Response samples

Content type
No sample

List live events for a call

Returns live events for a call, with optional cursor-based filtering and a result limit.

Authorizations:
Bearer
path Parameters
id
required
integer <int64>
query Parameters
afterId
integer <int64>
Default: 0
limit
integer <int32>
Default: 200

Responses

Request samples

curl -X GET "https://api.example.com/api/v1/calls/12345/live-events?afterId=0&limit=200" \
  -H "Authorization: Bearer $SPEECHLYTICS_TOKEN"

Response samples

Content type
No sample

Get the live payload for a call

Returns the live payload for a call, optionally starting at the specified byte offset.

Authorizations:
Bearer
path Parameters
id
required
integer <int32>
query Parameters
fromByte
integer <int32>
Default: 0

Responses

Request samples

curl -X GET "https://api.example.com/api/v1/calls/12345/live-payload?fromByte=0" \
  -H "Authorization: Bearer $SPEECHLYTICS_TOKEN"

Response samples

Content type
No sample

List calls

Returns a paginated collection of calls matching the supplied date, file, topic, sentiment, tag, content, and cluster filters.

Authorizations:
Bearer
query Parameters
Page
integer <int32>
Rows
integer <int32> [ 0 .. 100 ]
DateFrom
string
DateTo
string
FileName
string
Topic
string
Sentiment
string
Tag
string
Content
string

Text to find in the transcript. On deployments with semantic search, matches by meaning and across languages as well as by exact words (quoted phrases supported), limited to the 500 most relevant calls in the date range. Otherwise a substring match. Results are newest first.

Cluster
string

Responses

Request samples

curl -X GET "https://api.example.com/api/v1/calls?Page=1&Rows=10&DateFrom=2026-09-01&DateTo=2026-09-30&Topic=billing" \
  -H "Authorization: Bearer $SPEECHLYTICS_TOKEN"

Response samples

Content type
application/json
[
  • {
    }
]

Favorites

List favorite calls

Returns a paginated collection of the calls the authenticated account has marked as favorite, using the same filters and response shape as the calls endpoint.

Authorizations:
Bearer
query Parameters
Page
integer <int32>
Rows
integer <int32> [ 0 .. 100 ]
DateFrom
string
DateTo
string
FileName
string
Topic
string
Sentiment
string
Tag
string
Content
string

Text to find in the transcript. On deployments with semantic search, matches by meaning and across languages as well as by exact words (quoted phrases supported), limited to the 500 most relevant calls in the date range. Otherwise a substring match. Results are newest first.

Cluster
string

Responses

Request samples

curl -X GET "https://api.example.com/api/v1/favorites?Page=1&Rows=10&DateFrom=2026-09-01&DateTo=2026-09-30" \
  -H "Authorization: Bearer $SPEECHLYTICS_TOKEN"

Response samples

Content type
application/json
[
  • {
    }
]

Mark a call as favorite

Adds the call to the authenticated account's favorites. Idempotent: repeating the request leaves the call favorited. Returns 404 when the call is not visible to the caller.

Authorizations:
Bearer
path Parameters
callId
required
integer <int64>

Responses

Request samples

curl -X POST "https://api.example.com/api/v1/favorites/12345" \
  -H "Authorization: Bearer $SPEECHLYTICS_TOKEN"

Response samples

Content type
application/json
{
  • "favorite": true
}

Remove a call from favorites

Removes the call from the authenticated account's favorites. Idempotent: removing a call that is not favorited succeeds. Returns 404 when the call is not visible to the caller.

Authorizations:
Bearer
path Parameters
callId
required
integer <int64>

Responses

Request samples

curl -X DELETE "https://api.example.com/api/v1/favorites/12345" \
  -H "Authorization: Bearer $SPEECHLYTICS_TOKEN"

Response samples

Content type
application/json
{
  • "favorite": true
}

Health

Get service health

Returns the current health status of the API service.

Responses

Request samples

curl -X GET "https://api.example.com/api/v1/health"

Response samples

Content type
No sample

Get SFTP drop-folder monitors

For each SFTP drop folder monitored by the deployment, the number of files and the number waiting longer than expected.

Responses

Request samples

curl -X GET "https://api.example.com/api/v1/health/sftp-monitors"

Response samples

Content type
application/json
[
  • {
    }
]

Intelligence

List intelligence records

Returns a paginated collection of intelligence records matching the supplied date and identity filters.

Authorizations:
Bearer
query Parameters
Page
integer <int32>
Rows
integer <int32>
DateFrom
string
DateTo
string
Name
string
Username
string
Phone
string

Responses

Request samples

curl -X GET "https://api.example.com/api/v1/intelligence?Page=1&Rows=10&DateFrom=2026-09-01&DateTo=2026-09-30" \
  -H "Authorization: Bearer $SPEECHLYTICS_TOKEN"

Get intelligence by ID

Returns intelligence data for the supplied ID, optionally constrained to a date range.

Authorizations:
Bearer
query Parameters
id
integer <int64>
from
string
to
string

Responses

Request samples

curl -X GET "https://api.example.com/api/v1/intelligence/id?id=42&from=2026-09-01&to=2026-09-30" \
  -H "Authorization: Bearer $SPEECHLYTICS_TOKEN"

Live Speech

Start live transcription

Creates a live session and returns its id, the WebSocket URL to stream audio to, and a viewer PIN. multilingualDetection and autoTranslationDirection are honoured only when the account has Live Language Detection.

Authorizations:
Bearer
Request Body schema:
name
string or null
numberOfChannels
integer <int32>
language
integer <int32> (Language)
Enum: "0 - Auto" "1 - ENGLISH" "2 - CHINESE" "3 - GERMAN" "4 - SPANISH" "5 - RUSSIAN" "6 - KOREAN" "7 - FRENCH" "8 - JAPANESE" "9 - PORTUGUESE" "10 - TURKISH" "11 - POLISH" "12 - DUTCH" "13 - ARABIC" "14 - SWEDISH" "15 - ITALIAN" "16 - INDONESIAN" "17 - HINDI" "18 - FINNISH" "19 - VIETNAMESE" "20 - HEBREW" "21 - UKRAINIAN" "22 - GREEK" "23 - CZECH" "24 - ROMANIAN" "25 - DANISH" "26 - HUNGARIAN" "27 - NORWEGIAN" "28 - CROATIAN" "29 - BULGARIAN" "30 - LITHUANIAN" "31 - LATIN" "32 - SLOVAK" "33 - LATVIAN" "34 - SERBIAN" "35 - SLOVENIAN" "36 - KANNADA" "37 - ESTONIAN" "38 - MACEDONIAN" "39 - ICELANDIC" "40 - ARMENIAN" "41 - BOSNIAN" "42 - ALBANIAN" "43 - BELARUSIAN" "44 - LUXEMBOURGISH" "45 - TAMIL" "46 - CATALAN" "47 - MALAY" "48 - THAI" "49 - URDU" "50 - MAORI" "51 - MALAYALAM" "52 - WELSH" "53 - TELUGU" "54 - PERSIAN" "55 - BENGALI" "56 - AZERBAIJANI" "57 - BRETON" "58 - BASQUE" "59 - NEPALI" "60 - MONGOLIAN" "61 - KAZAKH" "62 - SWAHILI" "63 - GALICIAN" "64 - MARATHI" "65 - PUNJABI" "66 - SINHALA" "67 - KHMER" "68 - SHONA" "69 - YORUBA" "70 - SOMALI" "71 - AFRIKAANS" "72 - OCCITAN" "73 - GEORGIAN" "74 - TAJIK" "75 - SINDHI" "76 - GUJARATI" "77 - AMHARIC" "78 - YIDDISH" "79 - LAO" "80 - UZBEK" "81 - FAROESE" "82 - HAITIANCREOLE" "83 - PASHTO" "84 - TURKMEN" "85 - NYNORSK" "86 - MALTESE" "87 - SANSKRIT" "88 - MYANMAR" "89 - TIBETAN" "90 - TAGALOG" "91 - MALAGASY" "92 - ASSAMESE" "93 - TATAR" "94 - HAWAIIAN" "95 - LINGALA" "96 - HAUSA" "97 - BASHKIR" "98 - JAVANESE" "99 - SUNDANESE" "100 - CANTONESE"
translationLanguage
integer <int32> (Language)
Enum: "0 - Auto" "1 - ENGLISH" "2 - CHINESE" "3 - GERMAN" "4 - SPANISH" "5 - RUSSIAN" "6 - KOREAN" "7 - FRENCH" "8 - JAPANESE" "9 - PORTUGUESE" "10 - TURKISH" "11 - POLISH" "12 - DUTCH" "13 - ARABIC" "14 - SWEDISH" "15 - ITALIAN" "16 - INDONESIAN" "17 - HINDI" "18 - FINNISH" "19 - VIETNAMESE" "20 - HEBREW" "21 - UKRAINIAN" "22 - GREEK" "23 - CZECH" "24 - ROMANIAN" "25 - DANISH" "26 - HUNGARIAN" "27 - NORWEGIAN" "28 - CROATIAN" "29 - BULGARIAN" "30 - LITHUANIAN" "31 - LATIN" "32 - SLOVAK" "33 - LATVIAN" "34 - SERBIAN" "35 - SLOVENIAN" "36 - KANNADA" "37 - ESTONIAN" "38 - MACEDONIAN" "39 - ICELANDIC" "40 - ARMENIAN" "41 - BOSNIAN" "42 - ALBANIAN" "43 - BELARUSIAN" "44 - LUXEMBOURGISH" "45 - TAMIL" "46 - CATALAN" "47 - MALAY" "48 - THAI" "49 - URDU" "50 - MAORI" "51 - MALAYALAM" "52 - WELSH" "53 - TELUGU" "54 - PERSIAN" "55 - BENGALI" "56 - AZERBAIJANI" "57 - BRETON" "58 - BASQUE" "59 - NEPALI" "60 - MONGOLIAN" "61 - KAZAKH" "62 - SWAHILI" "63 - GALICIAN" "64 - MARATHI" "65 - PUNJABI" "66 - SINHALA" "67 - KHMER" "68 - SHONA" "69 - YORUBA" "70 - SOMALI" "71 - AFRIKAANS" "72 - OCCITAN" "73 - GEORGIAN" "74 - TAJIK" "75 - SINDHI" "76 - GUJARATI" "77 - AMHARIC" "78 - YIDDISH" "79 - LAO" "80 - UZBEK" "81 - FAROESE" "82 - HAITIANCREOLE" "83 - PASHTO" "84 - TURKMEN" "85 - NYNORSK" "86 - MALTESE" "87 - SANSKRIT" "88 - MYANMAR" "89 - TIBETAN" "90 - TAGALOG" "91 - MALAGASY" "92 - ASSAMESE" "93 - TATAR" "94 - HAWAIIAN" "95 - LINGALA" "96 - HAUSA" "97 - BASHKIR" "98 - JAVANESE" "99 - SUNDANESE" "100 - CANTONESE"
username
string or null
local
string or null
remote
string or null
sampleRate
integer <int32>
multilingualDetection
boolean
autoTranslationDirection
boolean

Responses

Request samples

Content type
{
  • "name": "string",
  • "numberOfChannels": 0,
  • "language": "0 - Auto",
  • "translationLanguage": "0 - Auto",
  • "username": "string",
  • "local": "string",
  • "remote": "string",
  • "sampleRate": 0,
  • "multilingualDetection": true,
  • "autoTranslationDirection": true
}

Response samples

Content type
No sample

Stop live transcription

Stops the live speech transcription session identified by the supplied request data.

Authorizations:
Bearer
Request Body schema:
id
integer <int64>

Responses

Request samples

Content type
{
  • "id": 0
}

Response samples

Content type
No sample

Sentiments

List sentiments

Returns the available sentiment values used to classify or filter speech analytics data.

Authorizations:
Bearer

Responses

Request samples

curl -X GET "https://api.example.com/api/v1/sentiments" \
  -H "Authorization: Bearer $SPEECHLYTICS_TOKEN"

Speech

Process speech audio

Submits a recording for transcription and analysis, either as dataBase64 or as a url the service downloads (direct media links and YouTube links are supported). language: 0 (Auto) uses the account's default language, or automatic detection. metadata is a JSON object serialized as a string with the keys username, local, remote, externalId, type, agent and customer. The response status is 0 (Queued), 3 (Failed: unsupported or too short) or 4 (QuotaLimit).

Authorizations:
Bearer
Request Body schema:
dataBase64
string or null
filename
string or null
language
integer <int32> (Language)
Enum: "0 - Auto" "1 - ENGLISH" "2 - CHINESE" "3 - GERMAN" "4 - SPANISH" "5 - RUSSIAN" "6 - KOREAN" "7 - FRENCH" "8 - JAPANESE" "9 - PORTUGUESE" "10 - TURKISH" "11 - POLISH" "12 - DUTCH" "13 - ARABIC" "14 - SWEDISH" "15 - ITALIAN" "16 - INDONESIAN" "17 - HINDI" "18 - FINNISH" "19 - VIETNAMESE" "20 - HEBREW" "21 - UKRAINIAN" "22 - GREEK" "23 - CZECH" "24 - ROMANIAN" "25 - DANISH" "26 - HUNGARIAN" "27 - NORWEGIAN" "28 - CROATIAN" "29 - BULGARIAN" "30 - LITHUANIAN" "31 - LATIN" "32 - SLOVAK" "33 - LATVIAN" "34 - SERBIAN" "35 - SLOVENIAN" "36 - KANNADA" "37 - ESTONIAN" "38 - MACEDONIAN" "39 - ICELANDIC" "40 - ARMENIAN" "41 - BOSNIAN" "42 - ALBANIAN" "43 - BELARUSIAN" "44 - LUXEMBOURGISH" "45 - TAMIL" "46 - CATALAN" "47 - MALAY" "48 - THAI" "49 - URDU" "50 - MAORI" "51 - MALAYALAM" "52 - WELSH" "53 - TELUGU" "54 - PERSIAN" "55 - BENGALI" "56 - AZERBAIJANI" "57 - BRETON" "58 - BASQUE" "59 - NEPALI" "60 - MONGOLIAN" "61 - KAZAKH" "62 - SWAHILI" "63 - GALICIAN" "64 - MARATHI" "65 - PUNJABI" "66 - SINHALA" "67 - KHMER" "68 - SHONA" "69 - YORUBA" "70 - SOMALI" "71 - AFRIKAANS" "72 - OCCITAN" "73 - GEORGIAN" "74 - TAJIK" "75 - SINDHI" "76 - GUJARATI" "77 - AMHARIC" "78 - YIDDISH" "79 - LAO" "80 - UZBEK" "81 - FAROESE" "82 - HAITIANCREOLE" "83 - PASHTO" "84 - TURKMEN" "85 - NYNORSK" "86 - MALTESE" "87 - SANSKRIT" "88 - MYANMAR" "89 - TIBETAN" "90 - TAGALOG" "91 - MALAGASY" "92 - ASSAMESE" "93 - TATAR" "94 - HAWAIIAN" "95 - LINGALA" "96 - HAUSA" "97 - BASHKIR" "98 - JAVANESE" "99 - SUNDANESE" "100 - CANTONESE"
metadata
string or null
hasPriority
boolean
url
string or null
checkFilenameExistence
boolean

Responses

Request samples

Content type
{
  • "dataBase64": "string",
  • "filename": "string",
  • "language": "0 - Auto",
  • "metadata": "string",
  • "hasPriority": true,
  • "url": "string",
  • "checkFilenameExistence": true
}

Response samples

Content type
No sample

Speechlytics.API

Get API version

Returns version information for the running API service.

Responses

Request samples

curl -X GET "https://api.example.com/version"

Response samples

Content type
application/json
{
  • "version": "string"
}

Topics

List topics

Returns the available topics used to classify or filter speech analytics data.

Authorizations:
Bearer

Responses

Request samples

curl -X GET "https://api.example.com/api/v1/topics" \
  -H "Authorization: Bearer $SPEECHLYTICS_TOKEN"