> 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で作成される使い捨て認証トークンです。このトークンは1回のみ使用でき、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) — 最終的な文字起こしに適用する自然言語の指示です（最大2,000文字）。編集済みテキストは、元の文字起こしとともに'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) — 話者ダイアライゼーション時に適用するしきい値です。値を高くすると、1人の話者を2人の異なる話者として識別する可能性は低くなりますが、2人の異なる話者を1人として識別する可能性は高くなります（予測される話者総数は少なくなります）。値を低くすると、1人の話者を2人の異なる話者として識別する可能性は高くなりますが、2人の異なる話者を1人として識別する可能性は低くなります（予測される話者総数は多くなります）。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未満である必要があります。クラウドストレージプロバイダー（AWS S3、Google Cloud Storage、Cloudflare R2など）、CDN、その他のHTTPSソースのURLを含む、有効なHTTPS URLを使用できます。URLは事前署名済みでも、クエリパラメーターに認証トークンを含めてもかまいません。
- `source_url` (string, optional) — 文字起こしするオーディオまたはビデオファイルのURLです。ホストされたビデオまたはオーディオファイル、YouTubeビデオURL、TikTokビデオURL、その他のビデオホスティングサービスに対応しています。
- `webhook` (boolean, optional) — 文字起こし結果を設定済みのスピーチtoテキストWebhookに送信するかどうか。設定すると、リクエストは文字起こし結果を含まずに早期に返され、結果は後でWebhook経由で配信されます。
- `webhook_id` (string, optional) — 文字起こし結果の送信先となる任意の特定Webhook ID。webhookがtrueに設定されている場合にのみ有効です。指定しない場合、文字起こしは設定済みのすべてのスピーチtoテキストWebhookに送信されます。
- `temperature` (double, optional) — 文字起こし出力のランダム性を制御します。0.0から2.0までの値を指定でき、値が高いほど多様で決定性の低い結果になります。省略した場合、選択したモデルに基づくtemperatureを使用します。通常は0です。
- `seed` (integer, optional) — 指定すると、同じシードとパラメータでリクエストを繰り返した場合に同じ結果が返るよう、システムは決定論的サンプリングを最大限試みます。決定性は保証されません。0から2147483647までの整数である必要があります。
- `use_multi_channel` (boolean, optional) — オーディオファイルに複数のチャンネルが含まれ、各チャンネルに1人の話者が含まれるかどうか。有効にすると、各チャンネルは個別に文字起こしされます。デフォルトではチャンネルごとに個別の文字起こしが返されます。代わりに、すべてのチャンネルを統合して時刻順に並べた単一の文字起こしを受け取るには、multichannel_output_style='combined'に設定します。レスポンス内の各単語には、どのチャンネルで発話されたかを示す'channel_index'フィールドが含まれます。最大5チャンネルをサポートします。各チャンネルはオーディオの全長に対して個別に課金されるため、コストはチャンネル数に比例して増加します。
- `multichannel_output_style` (enum, optional) — use_multi_channelが有効な場合の応答形式を制御します。'separate'（デフォルト）は、'transcripts'配下にチャンネルごとに1つの文字起こしを返します。'combined'はすべてのチャンネルを1つの文字起こしに統合し、単語を開始時刻順に並べ、それぞれに'channel_index'を付与します。これは単一チャンネルの応答形式と一致します。'combined'にはタイムスタンプが必要です（timestamps_granularityは'none'以外である必要があります）。また、エンティティ検出と編集はサポートされません。
- `webhook_metadata` (V1SpeechToTextPostRequestBodyContentMultipartFormDataSchemaWebhookMetadata, optional) — Webhook応答に含める任意のメタデータです。最大深度2階層、最大サイズ16KBのオブジェクトを表すJSON文字列にしてください。内部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の値は「speaker_0」「speaker_1」などではなく、「agent」と「customer」になります。使用すると、基本文字起こし料金に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'は出現ごとにNを連番とする\{ENTITY\_TYPE\_N}に置き換えます。entity\_redactionが設定されている場合にのみ使用されます。
- `keyterms` (list of string, optional) — 文字起こし結果を特定のキータームに寄せるためのリストです。キータームには、モデルにより正確に認識させたい単語またはフレーズを指定します。キータームは1,000件まで指定できます。各キータームは50文字未満にする必要があります。キータームには（正規化後で）最大5語まで含められます。例： \["hello", "world", "technical term"]。次の文字はサポートされていません： `<`, `>`, `{`, `}`, `[`, `]`, `\`。このパラメータを使用すると、基本の文字起こし料金に20％の追加料金が発生します。100件を超えるキータームを指定した場合、リクエストごとに最低20秒分の課金対象時間が適用されます。

## Response

### 200

同期文字起こし結果。

- `speech_to_text_convert_Response_200`

### 202

非同期リクエストが受け付けられました

## Errors

### 422 Unprocessable Entity Error

検証エラー

- `detail` (list of ValidationError, optional)

## Types

### SpeechToTextChunkResponseModel

タイミング情報を含む、文字起こしのチャンクレベルの詳細。

- `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

マルチチャンネルのスピーチtoテキスト文字起こしのレスポンスモデル。

- `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

### 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()
```