> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# 创建转录文本

POST https://api.elevenlabs.io/v1/speech-to-text
Content-Type: multipart/form-data

转录音频或视频文件。若 webhook 设为 true，请求将异步处理，结果会发送到已配置的 webhook。若 use_multi_channel 为 true 且提供的音频包含多个声道，将返回一个 'transcripts' 对象，其中包含每个声道的独立转录；设置 multichannel_output_style='combined' 则会返回按时间合并排序的单份转录。否则返回单份转录。可选参数 webhook_metadata 可附加自定义数据，这些数据将包含在 webhook 响应中，用于请求关联和跟踪。

Reference: https://elevenlabs.io/docs/api-reference/speech-to-text/convert

## Servers

- `https://api.elevenlabs.io` (Production, default)
- `https://api.us.elevenlabs.io` (Production US)
- `https://api.eu.residency.elevenlabs.io` (Production EU)
- `https://api.in.residency.elevenlabs.io` (Production India)
- `https://api.sg.residency.elevenlabs.io` (Production Singapore)

## Request

### Query parameters

- `token` (string, optional, nullable) — 通过 POST /v1/single-use-token/batch_scribe 创建的一次性身份验证令牌。该令牌只能使用一次，并会在 15 分钟后过期。可作为前端客户端 API 密钥或 bearer 令牌身份验证的替代方案。
- `enable_logging` (boolean, optional, default: true) — 当 enable_logging 设为 false 时，此请求将使用零留存模式。这意味着该请求无法使用日志和转写存储功能。零留存模式仅限企业版客户使用。

### Body (multipart/form-data)

This endpoint expects a multipart form containing an optional file.

- `model_id` (string, required) — 用于转录的模型 ID。
- `file` (file, optional) — 要转录的文件（音频最短 100ms）。支持所有主流音频和视频格式。必须且只能提供 file 或 cloud_storage_url 参数之一。文件大小必须小于 5.0GB。
- `language_code` (string, optional) — 与音频文件语言对应的 ISO-639-1 或 ISO-639-3 language_code。如能预先确定，有时可提升转录性能。默认值为 null，此时会自动预测语言。
- `transcript_edit` (string, optional) — 应用于最终转录文本的自然语言指令（最多 2000 个字符）。编辑后的文本会在 'edited_transcript' 中与原始转录文本一并返回。不能与 entity_detection、entity_redaction 或 use_multi_channel 结合使用。使用此参数将产生基础转录费用额外 30% 的附加费，按至少 10 秒音频计费。
- `tag_audio_events` (boolean, optional) — 是否在转录中标记（笑声）、（脚步声）等音频事件。
- `num_speakers` (integer, optional) — 上传文件中同时说话的最大说话人数。可帮助预测各人说话的时间。最多可预测 32 位说话人。默认值为 null，此时说话人数将设为模型支持的最大值。
- `timestamps_granularity` (enum, optional) — 转录中时间戳的粒度。'word' 提供单词级时间戳，'character' 为每个单词提供字符级时间戳。
- `diarize` (boolean, optional) — 是否标注上传文件中当前正在说话的说话人。
- `diarization_threshold` (double, optional) — 说话人分离时应用的阈值。较高的值会降低将同一说话人分为两个不同说话人的概率，但会提高将两个不同说话人分为同一说话人的概率（预测的说话人总数更少）。较低的值会提高将同一说话人分为两个不同说话人的概率，但会降低将两个不同说话人分为同一说话人的概率（预测的说话人总数更多）。仅当 diarize=True 且 num_speakers=None 时可设置。默认为 None，此时将根据 model_id 选择阈值（通常为 0.22）。
- `additional_formats` (list of ExportOptions, optional) — 要导出转录文本的其他格式列表。
- `file_format` (enum, optional) — 输入音频的格式。可选值为 'pcm_s16le_16' 或 'other'。对于 `pcm_s16le_16`，输入音频必须是采样率为 16kHz、单声道、采用小端字节序的 16 位 PCM。延迟将低于传入编码波形。
- `cloud_storage_url` (string, optional) — [Deprecated] 此参数已弃用，未来将移除。请改用 'source_url'。要转录文件的 HTTPS URL。必须且只能提供 file 或 cloud_storage_url 参数之一。文件必须可通过 HTTPS 访问，且大小小于 2GB。接受任何有效的 HTTPS URL，包括云存储提供商（AWS S3、Google Cloud Storage、Cloudflare R2 等）、CDN 或其他 HTTPS 来源的 URL。URL 可以是预签名 URL，也可以在查询参数中包含身份验证令牌。
- `source_url` (string, optional) — 要转录的音频或视频文件 URL。支持托管的视频或音频文件、YouTube 视频 URL、TikTok 视频 URL 及其他视频托管服务。
- `webhook` (boolean, optional) — 是否将转录结果发送到已配置的语音转文本 webhook。设置后，请求会提前返回且不包含转录结果，结果将稍后通过 webhook 发送。
- `webhook_id` (string, optional) — 用于接收转录结果的可选指定 webhook ID。仅当 webhook 设为 true 时有效。未提供时，转录结果将发送到所有已配置的语音转文本 webhook。
- `temperature` (double, optional) — 控制转录输出的随机性。可接受 0.0 至 2.0 之间的值，值越高，结果越多样且确定性越低。省略时，将根据所选模型使用温度值，通常为 0。
- `seed` (integer, optional) — 指定后，系统会尽力进行确定性采样，使使用相同种子和参数的重复请求返回相同结果。但不保证完全确定。必须是介于 0 和 2147483647 之间的整数。
- `use_multi_channel` (boolean, optional) — 音频文件是否包含多个声道，且每个声道只有一位说话人。启用后，将独立转录每个声道。默认每个声道返回一份单独的转录文本；设置 multichannel_output_style='combined' 则会返回一份合并所有声道并按时间排序的转录文本。响应中的每个词都包含 'channel_index' 字段，用于标识其所在声道。最多支持 5 个声道。每个声道均按完整音频时长独立计费，因此费用会随声道数量线性增长。
- `multichannel_output_style` (enum, optional) — 启用 use_multi_channel 时，控制响应结构。'separate'（默认）会在 'transcripts' 下为每个声道返回一份转录。'combined' 会将所有声道合并为一份转录，其中的词语按开始时间排序，每个词都带有 'channel_index'，与单声道响应结构一致。'combined' 需要时间戳（timestamps_granularity 不得为 'none'），且不支持实体检测或脱敏。
- `webhook_metadata` (V1SpeechToTextPostRequestBodyContentMultipartFormDataSchemaWebhookMetadata, optional) — 要包含在 webhook 响应中的可选元数据。应为表示对象的 JSON 字符串，最大深度为 2 层、最大大小为 16KB。可用于追踪内部 ID、任务引用或其他上下文信息。
- `entity_detection` (V1SpeechToTextPostRequestBodyContentMultipartFormDataSchemaEntityDetection, optional) — 检测转录文本中的实体。可设为 'all' 以检测所有实体，也可设为单个实体类型或类别字符串，或实体类型／类别列表。类别包括 'pii'、'phi'、'pci'、'other'、'offensive_language'。启用后，检测到的实体会在 'entities' 字段中返回其文本、类型和字符位置。
- `no_verbatim` (boolean, optional) — 如果为 true，转录文本不会包含填充词、起句错误和非语音声音。仅支持 scribe_v2 模型。
- `use_speaker_library` (boolean, optional) — 是否在说话人分离期间使用说话人库识别已知说话人。启用且 diarize 为 true 时，检测到的说话人将与工作区说话人库中已注册的说话人进行匹配。
- `detect_speaker_roles` (boolean, optional) — 是否检测说话者角色（智能体或客户）。需要 diarize=true。不能与 use_multi_channel=true 同时使用。启用后，speaker_id 的值将为 'agent' 和 'customer'，而非 'speaker_0'、'speaker_1' 等。使用此功能将额外收取基础转录费用的 10%。
- `entity_redaction` (V1SpeechToTextPostRequestBodyContentMultipartFormDataSchemaEntityRedaction, optional) — 从转录文本中脱敏实体。接受与 entity_detection 相同的格式：'all'、类别（'pii'、'phi'）或特定实体类型。必须是 entity_detection 的子集。启用脱敏后，不会返回 entities 字段。
- `entity_redaction_mode` (string, optional) — 如何格式化已脱敏实体。'redacted' 替换为 \{REDACTED}，'entity\_type' 替换为 \{ENTITY\_TYPE}，'enumerated\_entity\_type' 替换为 \{ENTITY\_TYPE\_N}，其中 N 为每次出现编号。仅在设置 entity\_redaction 时使用。
- `keyterms` (list of string, optional) — A list of keyterms to bias the transcription towards. The keyterms are words or phrases you want the model to recognise more accurately. The number of keyterms cannot exceed 1000. The length of each keyterm must be less than 50 characters. Keyterms can contain at most 5 words (after normalisation). For example \["hello", "world", "technical term"]. The following characters are not supported: `<`, `>`, `{`, `}`, `[`, `]`, `\`. Usage of this parameter will incur an additional 20% surcharge on the base transcription cost. When more than 100 keyterms are provided, a minimum billable duration of 20 seconds applies per request.

## Response

### 200

同步转录结果

- `speech_to_text_convert_Response_200`
  - SpeechToTextChunkResponseModel: SpeechToTextChunkResponseModel
  - MultichannelSpeechToTextResponseModel: MultichannelSpeechToTextResponseModel
  - SpeechToTextWebhookResponseModel: SpeechToTextWebhookResponseModel

### 202

Asynchronous request accepted

## Errors

### 422 Unprocessable Entity Error

验证错误。

- `detail` (list of ValidationError, optional)

## Types

### SpeechToTextChunkResponseModel

Chunk-level detail of the transcription with timing information.

- `language_code` (string, required) — 检测到的语言代码（例如英语为 'eng'）。
- `language_probability` (double, required) — 语言检测的置信度评分（0 到 1）。
- `text` (string, required) — 转录的原始文本。
- `words` (list of SpeechToTextWordResponseModel, required) — 词语及其时间信息列表。
- `channel_index` (integer, optional, nullable) — 该转录文本所属的通道索引（适用于多通道音频）。
- `additional_formats` (list of AdditionalFormatResponseModel, optional, nullable) — 请求的转录文本附加格式。
- `transcription_id` (string, optional, nullable) — 响应的转录 ID。
- `entities` (list of DetectedEntity, optional, nullable) — 检测到的实体列表，包含其文本、类型和在转录文本中的字符位置。
- `audio_duration_secs` (double, optional, nullable) — 已转录音频的时长，单位为秒。
- `edited_transcript` (SpeechToTextChunkResponseModelEditedTranscript, optional, nullable) — 可选转录编辑的结果：编辑后的文本，或无法生成时的错误信息。未请求编辑时不返回此字段。成功时，`text` 和 `edited_text` 均包含编辑后的转录文本；可将它们与顶层 `text` 对比，查看变更内容。

### MultichannelSpeechToTextResponseModel

多声道语音转文本转录的响应模型。

- `transcripts` (list of SpeechToTextChunkResponseModel, required) — 转录文本列表，每个音频通道对应一个。每份转录文本均包含相应通道的文本和词级详细信息。
- `transcription_id` (string, optional, nullable) — 响应的转录 ID。
- `audio_duration_secs` (double, optional, nullable) — 所有声道转录音频的总时长，单位为秒。

### SpeechToTextWebhookResponseModel

- `message` (string, required) — webhook 响应消息。
- `request_id` (string, required) — webhook 响应的请求 ID。
- `transcription_id` (string, optional, nullable) — webhook 响应的转录 ID。

### ValidationError

- `loc` (list of ValidationErrorLocItems, required)
- `msg` (string, required)
- `type` (string, required)

### SpeechToTextWordResponseModel

带时间信息的单词级转录详情。

- `text` (string, required) — 已转录的词语或声音。
- `type` (enum, required) — 词语或声音的类型。“audio_event”用于笑声、脚步声等非词语声音。
  - Allowed values: `word`, `spacing`, `audio_event`
- `logprob` (double, required) — 预测此词概率的对数。Logprobs 范围为 [-infinity, 0]，值越高表示模型对预测结果的置信度越高。
- `start` (double, optional, nullable) — 单词或声音的起始时间，单位为秒。
- `end` (double, optional, nullable) — 单词或声音结束时间，单位为秒。
- `speaker_id` (string, optional, nullable) — 此词说话人的唯一标识符。
- `characters` (list of SpeechToTextCharacterResponseModel, optional, nullable) — 构成该词的字符及其时间信息。
- `channel_index` (integer, optional, nullable) — 该词所在的语音通道（适用于多通道音频）。单通道转录为 Null。

### AdditionalFormatResponseModel

- `requested_format` (string, required) — 请求的格式。
- `file_extension` (string, required) — 附加格式的文件扩展名。
- `content_type` (string, required) — 附加格式的内容类型。
- `is_base64_encoded` (boolean, required) — 内容是否采用 base64 编码。
- `content` (string, required) — 附加格式的内容。

### DetectedEntity

An entity detected within transcribed text.

- `text` (string, required) — The text that was identified as an entity.
- `entity_type` (string, required) — The type of entity detected (e.g., 'credit_card', 'email_address', 'person_name').
- `start_char` (integer, required) — Start character position in the transcript text.
- `end_char` (integer, required) — End character position in the transcript text.

### SpeechToTextChunkResponseModelEditedTranscript

可选转录编辑的结果：编辑后的文本，或无法生成时的错误信息。未请求编辑时不返回此字段。成功时，`text` 和 `edited_text` 均包含编辑后的转录文本；可将它们与顶层 `text` 对比，查看变更内容。

- `kind`: `error` (TranscriptEditError)
  - `error_type` ("edit_failed", required) — edit_failed：无法生成编辑结果。
  - `message` (string, required) — 面向用户的简短失败说明。
- `kind`: `transcript` (EditedTranscript)
  - `edited_text` (string, required) — The edited transcript text. If no edits were made it will be identical to the `text` field.
  - `text` (string, required) — The committed transcript text the edit instruction was applied to.
  - `message_type` (string, optional, default: edited_transcript)

### ValidationErrorLocItems

- string
- integer

### SpeechToTextCharacterResponseModel

- `text` (string, required) — 已转录的字符。
- `start` (double, optional, nullable) — 字符的起始时间，单位为秒。
- `end` (double, optional, nullable) — 字符结束时间，单位为秒。

## Examples

### Example_0

**Request**

```json
{
  "file": "<file: <file1>>",
  "model_id": "scribe_v2"
}
```

**Response**

```json
{
  "language_code": "en",
  "language_probability": 0.98,
  "text": "Hello world!",
  "words": [
    {
      "end": 0.5,
      "logprob": -0.124,
      "speaker_id": "speaker_1",
      "start": 0,
      "text": "Hello",
      "type": "word"
    }
  ]
}
```

**SDK Code**

```python Example_0
import requests

url = "https://api.elevenlabs.io/v1/speech-to-text"

querystring = {"enable_logging":"true","token":"token"}

files = { "file": "open('<file1>', 'rb')" }
payload = {
    "additional_formats": ,
    "cloud_storage_url": ,
    "detect_speaker_roles": ,
    "diarization_threshold": ,
    "diarize": ,
    "entity_detection": ,
    "entity_redaction": ,
    "entity_redaction_mode": ,
    "file_format": ,
    "keyterms": ,
    "language_code": ,
    "model_id": "scribe_v2",
    "multichannel_output_style": ,
    "no_verbatim": ,
    "num_speakers": ,
    "seed": ,
    "source_url": ,
    "tag_audio_events": ,
    "temperature": ,
    "timestamps_granularity": ,
    "transcript_edit": ,
    "use_multi_channel": ,
    "use_speaker_library": ,
    "webhook": ,
    "webhook_id": ,
    "webhook_metadata": 
}
headers = {"xi-api-key": "xi-api-key"}

response = requests.post(url, data=payload, files=files, headers=headers, params=querystring)

print(response.json())
```

```javascript Example_0
const url = 'https://api.elevenlabs.io/v1/speech-to-text?enable_logging=true&token=token';
const form = new FormData();
form.append('additional_formats', '');
form.append('cloud_storage_url', '');
form.append('detect_speaker_roles', '');
form.append('diarization_threshold', '');
form.append('diarize', '');
form.append('entity_detection', '');
form.append('entity_redaction', '');
form.append('entity_redaction_mode', '');
form.append('file', '<file1>');
form.append('file_format', '');
form.append('keyterms', '');
form.append('language_code', '');
form.append('model_id', 'scribe_v2');
form.append('multichannel_output_style', '');
form.append('no_verbatim', '');
form.append('num_speakers', '');
form.append('seed', '');
form.append('source_url', '');
form.append('tag_audio_events', '');
form.append('temperature', '');
form.append('timestamps_granularity', '');
form.append('transcript_edit', '');
form.append('use_multi_channel', '');
form.append('use_speaker_library', '');
form.append('webhook', '');
form.append('webhook_id', '');
form.append('webhook_metadata', '');

const options = {method: 'POST', headers: {'xi-api-key': 'xi-api-key'}};

options.body = form;

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Example_0
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.elevenlabs.io/v1/speech-to-text?enable_logging=true&token=token"

	payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"additional_formats\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cloud_storage_url\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"detect_speaker_roles\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"diarization_threshold\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"diarize\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entity_detection\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entity_redaction\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entity_redaction_mode\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"<file1>\"\r\nContent-Type: application/octet-stream\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_format\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"keyterms\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language_code\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model_id\"\r\n\r\nscribe_v2\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"multichannel_output_style\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"no_verbatim\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"num_speakers\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"seed\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"source_url\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tag_audio_events\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"temperature\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamps_granularity\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transcript_edit\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"use_multi_channel\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"use_speaker_library\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_id\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_metadata\"\r\n\r\n\r\n-----011000010111000001101001--\r\n")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("xi-api-key", "xi-api-key")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Example_0
require 'uri'
require 'net/http'

url = URI("https://api.elevenlabs.io/v1/speech-to-text?enable_logging=true&token=token")

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

request = Net::HTTP::Post.new(url)
request["xi-api-key"] = 'xi-api-key'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"additional_formats\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cloud_storage_url\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"detect_speaker_roles\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"diarization_threshold\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"diarize\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entity_detection\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entity_redaction\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entity_redaction_mode\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"<file1>\"\r\nContent-Type: application/octet-stream\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_format\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"keyterms\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language_code\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model_id\"\r\n\r\nscribe_v2\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"multichannel_output_style\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"no_verbatim\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"num_speakers\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"seed\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"source_url\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tag_audio_events\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"temperature\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamps_granularity\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transcript_edit\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"use_multi_channel\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"use_speaker_library\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_id\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_metadata\"\r\n\r\n\r\n-----011000010111000001101001--\r\n"

response = http.request(request)
puts response.read_body
```

```java Example_0
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.elevenlabs.io/v1/speech-to-text?enable_logging=true&token=token")
  .header("xi-api-key", "xi-api-key")
  .body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"additional_formats\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cloud_storage_url\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"detect_speaker_roles\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"diarization_threshold\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"diarize\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entity_detection\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entity_redaction\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entity_redaction_mode\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"<file1>\"\r\nContent-Type: application/octet-stream\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_format\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"keyterms\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language_code\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model_id\"\r\n\r\nscribe_v2\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"multichannel_output_style\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"no_verbatim\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"num_speakers\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"seed\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"source_url\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tag_audio_events\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"temperature\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamps_granularity\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transcript_edit\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"use_multi_channel\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"use_speaker_library\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_id\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_metadata\"\r\n\r\n\r\n-----011000010111000001101001--\r\n")
  .asString();
```

```php Example_0
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.elevenlabs.io/v1/speech-to-text?enable_logging=true&token=token', [
  'multipart' => [
    [
        'name' => 'file',
        'filename' => '<file1>',
        'contents' => null
    ],
    [
        'name' => 'model_id',
        'contents' => 'scribe_v2'
    ]
  ]
  'headers' => [
    'xi-api-key' => 'xi-api-key',
  ],
]);

echo $response->getBody();
```

```csharp Example_0
using RestSharp;

var client = new RestClient("https://api.elevenlabs.io/v1/speech-to-text?enable_logging=true&token=token");
var request = new RestRequest(Method.POST);
request.AddHeader("xi-api-key", "xi-api-key");
request.AddParameter("undefined", "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"additional_formats\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cloud_storage_url\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"detect_speaker_roles\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"diarization_threshold\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"diarize\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entity_detection\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entity_redaction\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entity_redaction_mode\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"<file1>\"\r\nContent-Type: application/octet-stream\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_format\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"keyterms\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language_code\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model_id\"\r\n\r\nscribe_v2\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"multichannel_output_style\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"no_verbatim\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"num_speakers\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"seed\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"source_url\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tag_audio_events\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"temperature\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamps_granularity\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transcript_edit\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"use_multi_channel\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"use_speaker_library\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_id\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_metadata\"\r\n\r\n\r\n-----011000010111000001101001--\r\n", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Example_0
import Foundation

let headers = ["xi-api-key": "xi-api-key"]
let parameters = [
  [
    "name": "additional_formats",
    "value": 
  ],
  [
    "name": "cloud_storage_url",
    "value": 
  ],
  [
    "name": "detect_speaker_roles",
    "value": 
  ],
  [
    "name": "diarization_threshold",
    "value": 
  ],
  [
    "name": "diarize",
    "value": 
  ],
  [
    "name": "entity_detection",
    "value": 
  ],
  [
    "name": "entity_redaction",
    "value": 
  ],
  [
    "name": "entity_redaction_mode",
    "value": 
  ],
  [
    "name": "file",
    "fileName": "<file1>"
  ],
  [
    "name": "file_format",
    "value": 
  ],
  [
    "name": "keyterms",
    "value": 
  ],
  [
    "name": "language_code",
    "value": 
  ],
  [
    "name": "model_id",
    "value": "scribe_v2"
  ],
  [
    "name": "multichannel_output_style",
    "value": 
  ],
  [
    "name": "no_verbatim",
    "value": 
  ],
  [
    "name": "num_speakers",
    "value": 
  ],
  [
    "name": "seed",
    "value": 
  ],
  [
    "name": "source_url",
    "value": 
  ],
  [
    "name": "tag_audio_events",
    "value": 
  ],
  [
    "name": "temperature",
    "value": 
  ],
  [
    "name": "timestamps_granularity",
    "value": 
  ],
  [
    "name": "transcript_edit",
    "value": 
  ],
  [
    "name": "use_multi_channel",
    "value": 
  ],
  [
    "name": "use_speaker_library",
    "value": 
  ],
  [
    "name": "webhook",
    "value": 
  ],
  [
    "name": "webhook_id",
    "value": 
  ],
  [
    "name": "webhook_metadata",
    "value": 
  ]
]

let boundary = "---011000010111000001101001"

var body = ""
var error: NSError? = nil
for param in parameters {
  let paramName = param["name"]!
  body += "--\(boundary)\r\n"
  body += "Content-Disposition:form-data; name=\"\(paramName)\""
  if let filename = param["fileName"] {
    let contentType = param["content-type"]!
    let fileContent = String(contentsOfFile: filename, encoding: String.Encoding.utf8)
    if (error != nil) {
      print(error as Any)
    }
    body += "; filename=\"\(filename)\"\r\n"
    body += "Content-Type: \(contentType)\r\n\r\n"
    body += fileContent
  } else if let paramValue = param["value"] {
    body += "\r\n\r\n\(paramValue)"
  }
}

let request = NSMutableURLRequest(url: NSURL(string: "https://api.elevenlabs.io/v1/speech-to-text?enable_logging=true&token=token")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

### Example_1

**Request**

```json
{
  "file": "<file: <file1>>",
  "model_id": "scribe_v2"
}
```

**Response**

```json
{
  "transcripts": [
    {
      "language_code": "en",
      "language_probability": 0.98,
      "text": "Hello from channel one.",
      "words": [
        {
          "channel_index": 0,
          "end": 0.5,
          "logprob": -0.124,
          "speaker_id": "speaker_0",
          "start": 0,
          "text": "Hello",
          "type": "word"
        }
      ]
    },
    {
      "language_code": "en",
      "language_probability": 0.97,
      "text": "Greetings from channel two.",
      "words": [
        {
          "channel_index": 1,
          "end": 0.7,
          "logprob": -0.156,
          "speaker_id": "speaker_1",
          "start": 0.1,
          "text": "Greetings",
          "type": "word"
        }
      ]
    }
  ]
}
```

**SDK Code**

```python Example_1
import requests

url = "https://api.elevenlabs.io/v1/speech-to-text"

querystring = {"enable_logging":"true","token":"token"}

files = { "file": "open('<file1>', 'rb')" }
payload = {
    "additional_formats": ,
    "cloud_storage_url": ,
    "detect_speaker_roles": ,
    "diarization_threshold": ,
    "diarize": ,
    "entity_detection": ,
    "entity_redaction": ,
    "entity_redaction_mode": ,
    "file_format": ,
    "keyterms": ,
    "language_code": ,
    "model_id": "scribe_v2",
    "multichannel_output_style": ,
    "no_verbatim": ,
    "num_speakers": ,
    "seed": ,
    "source_url": ,
    "tag_audio_events": ,
    "temperature": ,
    "timestamps_granularity": ,
    "transcript_edit": ,
    "use_multi_channel": ,
    "use_speaker_library": ,
    "webhook": ,
    "webhook_id": ,
    "webhook_metadata": 
}
headers = {"xi-api-key": "xi-api-key"}

response = requests.post(url, data=payload, files=files, headers=headers, params=querystring)

print(response.json())
```

```javascript Example_1
const url = 'https://api.elevenlabs.io/v1/speech-to-text?enable_logging=true&token=token';
const form = new FormData();
form.append('additional_formats', '');
form.append('cloud_storage_url', '');
form.append('detect_speaker_roles', '');
form.append('diarization_threshold', '');
form.append('diarize', '');
form.append('entity_detection', '');
form.append('entity_redaction', '');
form.append('entity_redaction_mode', '');
form.append('file', '<file1>');
form.append('file_format', '');
form.append('keyterms', '');
form.append('language_code', '');
form.append('model_id', 'scribe_v2');
form.append('multichannel_output_style', '');
form.append('no_verbatim', '');
form.append('num_speakers', '');
form.append('seed', '');
form.append('source_url', '');
form.append('tag_audio_events', '');
form.append('temperature', '');
form.append('timestamps_granularity', '');
form.append('transcript_edit', '');
form.append('use_multi_channel', '');
form.append('use_speaker_library', '');
form.append('webhook', '');
form.append('webhook_id', '');
form.append('webhook_metadata', '');

const options = {method: 'POST', headers: {'xi-api-key': 'xi-api-key'}};

options.body = form;

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Example_1
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.elevenlabs.io/v1/speech-to-text?enable_logging=true&token=token"

	payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"additional_formats\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cloud_storage_url\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"detect_speaker_roles\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"diarization_threshold\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"diarize\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entity_detection\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entity_redaction\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entity_redaction_mode\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"<file1>\"\r\nContent-Type: application/octet-stream\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_format\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"keyterms\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language_code\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model_id\"\r\n\r\nscribe_v2\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"multichannel_output_style\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"no_verbatim\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"num_speakers\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"seed\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"source_url\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tag_audio_events\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"temperature\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamps_granularity\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transcript_edit\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"use_multi_channel\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"use_speaker_library\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_id\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_metadata\"\r\n\r\n\r\n-----011000010111000001101001--\r\n")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("xi-api-key", "xi-api-key")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Example_1
require 'uri'
require 'net/http'

url = URI("https://api.elevenlabs.io/v1/speech-to-text?enable_logging=true&token=token")

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

request = Net::HTTP::Post.new(url)
request["xi-api-key"] = 'xi-api-key'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"additional_formats\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cloud_storage_url\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"detect_speaker_roles\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"diarization_threshold\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"diarize\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entity_detection\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entity_redaction\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entity_redaction_mode\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"<file1>\"\r\nContent-Type: application/octet-stream\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_format\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"keyterms\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language_code\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model_id\"\r\n\r\nscribe_v2\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"multichannel_output_style\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"no_verbatim\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"num_speakers\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"seed\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"source_url\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tag_audio_events\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"temperature\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamps_granularity\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transcript_edit\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"use_multi_channel\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"use_speaker_library\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_id\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_metadata\"\r\n\r\n\r\n-----011000010111000001101001--\r\n"

response = http.request(request)
puts response.read_body
```

```java Example_1
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.elevenlabs.io/v1/speech-to-text?enable_logging=true&token=token")
  .header("xi-api-key", "xi-api-key")
  .body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"additional_formats\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cloud_storage_url\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"detect_speaker_roles\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"diarization_threshold\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"diarize\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entity_detection\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entity_redaction\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entity_redaction_mode\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"<file1>\"\r\nContent-Type: application/octet-stream\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_format\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"keyterms\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language_code\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model_id\"\r\n\r\nscribe_v2\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"multichannel_output_style\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"no_verbatim\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"num_speakers\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"seed\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"source_url\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tag_audio_events\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"temperature\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamps_granularity\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transcript_edit\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"use_multi_channel\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"use_speaker_library\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_id\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_metadata\"\r\n\r\n\r\n-----011000010111000001101001--\r\n")
  .asString();
```

```php Example_1
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.elevenlabs.io/v1/speech-to-text?enable_logging=true&token=token', [
  'multipart' => [
    [
        'name' => 'file',
        'filename' => '<file1>',
        'contents' => null
    ],
    [
        'name' => 'model_id',
        'contents' => 'scribe_v2'
    ]
  ]
  'headers' => [
    'xi-api-key' => 'xi-api-key',
  ],
]);

echo $response->getBody();
```

```csharp Example_1
using RestSharp;

var client = new RestClient("https://api.elevenlabs.io/v1/speech-to-text?enable_logging=true&token=token");
var request = new RestRequest(Method.POST);
request.AddHeader("xi-api-key", "xi-api-key");
request.AddParameter("undefined", "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"additional_formats\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cloud_storage_url\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"detect_speaker_roles\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"diarization_threshold\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"diarize\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entity_detection\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entity_redaction\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entity_redaction_mode\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"<file1>\"\r\nContent-Type: application/octet-stream\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_format\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"keyterms\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language_code\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model_id\"\r\n\r\nscribe_v2\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"multichannel_output_style\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"no_verbatim\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"num_speakers\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"seed\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"source_url\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tag_audio_events\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"temperature\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamps_granularity\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transcript_edit\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"use_multi_channel\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"use_speaker_library\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_id\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_metadata\"\r\n\r\n\r\n-----011000010111000001101001--\r\n", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Example_1
import Foundation

let headers = ["xi-api-key": "xi-api-key"]
let parameters = [
  [
    "name": "additional_formats",
    "value": 
  ],
  [
    "name": "cloud_storage_url",
    "value": 
  ],
  [
    "name": "detect_speaker_roles",
    "value": 
  ],
  [
    "name": "diarization_threshold",
    "value": 
  ],
  [
    "name": "diarize",
    "value": 
  ],
  [
    "name": "entity_detection",
    "value": 
  ],
  [
    "name": "entity_redaction",
    "value": 
  ],
  [
    "name": "entity_redaction_mode",
    "value": 
  ],
  [
    "name": "file",
    "fileName": "<file1>"
  ],
  [
    "name": "file_format",
    "value": 
  ],
  [
    "name": "keyterms",
    "value": 
  ],
  [
    "name": "language_code",
    "value": 
  ],
  [
    "name": "model_id",
    "value": "scribe_v2"
  ],
  [
    "name": "multichannel_output_style",
    "value": 
  ],
  [
    "name": "no_verbatim",
    "value": 
  ],
  [
    "name": "num_speakers",
    "value": 
  ],
  [
    "name": "seed",
    "value": 
  ],
  [
    "name": "source_url",
    "value": 
  ],
  [
    "name": "tag_audio_events",
    "value": 
  ],
  [
    "name": "temperature",
    "value": 
  ],
  [
    "name": "timestamps_granularity",
    "value": 
  ],
  [
    "name": "transcript_edit",
    "value": 
  ],
  [
    "name": "use_multi_channel",
    "value": 
  ],
  [
    "name": "use_speaker_library",
    "value": 
  ],
  [
    "name": "webhook",
    "value": 
  ],
  [
    "name": "webhook_id",
    "value": 
  ],
  [
    "name": "webhook_metadata",
    "value": 
  ]
]

let boundary = "---011000010111000001101001"

var body = ""
var error: NSError? = nil
for param in parameters {
  let paramName = param["name"]!
  body += "--\(boundary)\r\n"
  body += "Content-Disposition:form-data; name=\"\(paramName)\""
  if let filename = param["fileName"] {
    let contentType = param["content-type"]!
    let fileContent = String(contentsOfFile: filename, encoding: String.Encoding.utf8)
    if (error != nil) {
      print(error as Any)
    }
    body += "; filename=\"\(filename)\"\r\n"
    body += "Content-Type: \(contentType)\r\n\r\n"
    body += fileContent
  } else if let paramValue = param["value"] {
    body += "\r\n\r\n\(paramValue)"
  }
}

let request = NSMutableURLRequest(url: NSURL(string: "https://api.elevenlabs.io/v1/speech-to-text?enable_logging=true&token=token")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```