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

# Transkript erstellen

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

Transkribiert eine Audio- oder Videodatei. Wenn webhook auf true gesetzt ist, wird die Anfrage asynchron verarbeitet und die Ergebnisse an konfigurierte Webhooks gesendet. Wenn use_multi_channel true ist und das bereitgestellte Audio mehrere Kanäle hat, wird ein 'transcripts'-Objekt mit separaten Transkripten für jeden Kanal zurückgegeben. Setzen Sie multichannel_output_style='combined', um stattdessen ein einzelnes Transkript mit zusammengeführten und zeitlich sortierten Kanälen zu erhalten. Andernfalls wird ein einzelnes Transkript zurückgegeben. Mit dem optionalen Parameter webhook_metadata können Sie benutzerdefinierte Daten anhängen, die zur Anfragenkorrelation und Nachverfolgung in Webhook-Antworten aufgenommen werden.

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) — Ein Einmal-Authentifizierungstoken, das über POST /v1/single-use-token/batch_scribe erstellt wird. Dieser Token kann nur einmal verwendet werden und läuft nach 15 Minuten ab. Alternative zur Authentifizierung per API-Key oder Bearer-Token für Frontend-Clients.
- `enable_logging` (boolean, optional, default: true) — Wenn enable_logging auf false gesetzt ist, wird für die Anfrage der Zero-Retention-Modus verwendet. Dadurch sind Funktionen zur Speicherung von Logs und Transkripten für diese Anfrage nicht verfügbar. Der Zero-Retention-Modus darf nur von Enterprise-Kunden verwendet werden.

### Body (multipart/form-data)

This endpoint expects a multipart form containing an optional file.

- `model_id` (string, required) — Die ID des für die Transkription zu verwendenden Modells.
- `file` (file, optional) — Die zu transkribierende Datei (mindestens 100 ms Audiolänge). Alle gängigen Audio- und Videoformate werden unterstützt. Genau einer der Parameter file oder cloud_storage_url muss angegeben werden. Die Dateigröße muss unter 5,0 GB liegen.
- `language_code` (string, optional) — Ein ISO-639-1- oder ISO-639-3-language_code, der der Sprache der Audiodatei entspricht. Kann die Transkriptionsleistung verbessern, wenn er im Voraus bekannt ist. Standardmäßig null; in diesem Fall wird die Sprache automatisch erkannt.
- `transcript_edit` (string, optional) — Anweisung in natürlicher Sprache, die auf das finale Transkript angewendet wird (maximal 2.000 Zeichen). Der bearbeitete Text wird in 'edited_transcript' zusammen mit dem ursprünglichen Transkript zurückgegeben. Kann nicht mit entity_detection, entity_redaction oder use_multi_channel kombiniert werden. Die Verwendung dieses Parameters führt zu einem Zuschlag von 30 % auf die Grundkosten der Transkription. Abgerechnet werden mindestens 10 Sekunden Audio.
- `tag_audio_events` (boolean, optional) — Ob Audioereignisse wie (Lachen), (Schritte) usw. in der Transkription markiert werden sollen.
- `num_speakers` (integer, optional) — The maximum amount of speakers talking in the uploaded file. Can help with predicting who speaks when. The maximum amount of speakers that can be predicted is 32. Defaults to null, in this case the amount of speakers is set to the maximum value the model supports.
- `timestamps_granularity` (enum, optional) — Die Granularität der Zeitstempel in der Transkription. „word“ liefert Zeitstempel auf Wortebene und „character“ Zeitstempel auf Zeichenebene pro Wort.
- `diarize` (boolean, optional) — Ob annotiert werden soll, welcher Sprecher derzeit in der hochgeladenen Datei spricht.
- `diarization_threshold` (double, optional) — Schwellenwert für die Sprecherdiarisierung. Ein höherer Wert verringert die Wahrscheinlichkeit, dass ein Sprecher als zwei unterschiedliche Sprecher diarisiert wird, erhöht aber die Wahrscheinlichkeit, dass zwei unterschiedliche Sprecher als ein Sprecher diarisiert werden (weniger Sprecher insgesamt vorhergesagt). Ein niedriger Wert erhöht die Wahrscheinlichkeit, dass ein Sprecher als zwei unterschiedliche Sprecher diarisiert wird, verringert aber die Wahrscheinlichkeit, dass zwei unterschiedliche Sprecher als ein Sprecher diarisiert werden (mehr Sprecher insgesamt vorhergesagt). Kann nur gesetzt werden, wenn diarize=True und num_speakers=None. Standard ist None; in diesem Fall wählen wir anhand von model_id einen Schwellenwert (in der Regel 0.22).
- `additional_formats` (list of ExportOptions, optional) — Eine Liste zusätzlicher Formate, in die das Transkript exportiert werden soll.
- `file_format` (enum, optional) — The format of input audio. Options are 'pcm_s16le_16' or 'other' For `pcm_s16le_16`, the input audio must be 16-bit PCM at a 16kHz sample rate, single channel (mono), and little-endian byte order. Latency will be lower than with passing an encoded waveform.
- `cloud_storage_url` (string, optional) — [Deprecated] Dieser Parameter ist veraltet und wird künftig entfernt. Verwenden Sie stattdessen 'source_url'. Die HTTPS-URL der zu transkribierenden Datei. Es muss genau einer der Parameter file oder cloud_storage_url angegeben werden. Die Datei muss über HTTPS erreichbar sein und kleiner als 2 GB sein. Jede gültige HTTPS-URL wird akzeptiert, einschließlich URLs von Cloud-Speicheranbietern (AWS S3, Google Cloud Storage, Cloudflare R2 usw.), CDNs oder anderen HTTPS-Quellen. URLs können vorab signiert sein oder Authentifizierungstoken in Abfrageparametern enthalten.
- `source_url` (string, optional) — Die URL einer zu transkribierenden Audio- oder Videodatei. Unterstützt gehostete Video- oder Audiodateien, YouTube-Video-URLs, TikTok-Video-URLs und andere Video-Hosting-Dienste.
- `webhook` (boolean, optional) — Ob das Transkriptionsergebnis an konfigurierte Speech-to-Text-Webhooks gesendet werden soll. Wenn festgelegt, wird die Anfrage frühzeitig ohne Transkription zurückgegeben, die später per Webhook zugestellt wird.
- `webhook_id` (string, optional) — Optionale spezifische Webhook-ID, an die das Transkriptionsergebnis gesendet wird. Nur gültig, wenn webhook auf true gesetzt ist. Wenn nicht angegeben, wird die Transkription an alle konfigurierten Speech-to-Text-Webhooks gesendet.
- `temperature` (double, optional) — Steuert die Zufälligkeit der Transkription. Akzeptiert Werte zwischen 0.0 und 2.0, wobei höhere Werte vielfältigere und weniger deterministische Ergebnisse liefern. Wenn nicht angegeben, verwenden wir eine Temperatur basierend auf dem gewählten Modell, die normalerweise 0 ist.
- `seed` (integer, optional) — Falls angegeben, bemüht sich unser System um eine deterministische Generierung, sodass wiederholte Anfragen mit demselben Seed und denselben Parametern dasselbe Ergebnis liefern sollten. Determinismus wird nicht garantiert. Muss eine Ganzzahl zwischen 0 und 2147483647 sein.
- `use_multi_channel` (boolean, optional) — Gibt an, ob die Audiodatei mehrere Kanäle enthält, wobei jeder Kanal einen einzelnen Sprecher enthält. Wenn aktiviert, wird jeder Kanal unabhängig transkribiert. Standardmäßig wird für jeden Kanal ein separates Transkript zurückgegeben. Setzen Sie multichannel_output_style='combined', um stattdessen ein einzelnes Transkript mit allen zusammengeführten und nach Zeit sortierten Kanälen zu erhalten. Jedes Wort in der Antwort enthält ein Feld 'channel_index', das angibt, auf welchem Kanal es gesprochen wurde. Es werden maximal 5 Kanäle unterstützt. Jeder Kanal wird unabhängig über die volle Audiodauer abgerechnet, sodass die Kosten linear mit der Anzahl der Kanäle steigen.
- `multichannel_output_style` (enum, optional) — Controls the response shape when use_multi_channel is enabled. 'separate' (default) returns one transcript per channel under 'transcripts'. 'combined' merges all channels into a single transcript whose words are sorted by start time, each carrying a 'channel_index' - matching the single-channel response shape. 'combined' requires timestamps (timestamps_granularity must not be 'none') and does not support entity detection or redaction.
- `webhook_metadata` (V1SpeechToTextPostRequestBodyContentMultipartFormDataSchemaWebhookMetadata, optional) — Optionale Metadaten, die in die Webhook-Antwort aufgenommen werden. Dies sollte ein JSON-String sein, der ein Objekt mit maximal 2 Ebenen und einer maximalen Größe von 16 KB darstellt. Nützlich zum Nachverfolgen interner IDs, Job-Referenzen oder anderer Kontextinformationen.
- `entity_detection` (V1SpeechToTextPostRequestBodyContentMultipartFormDataSchemaEntityDetection, optional) — Erkennt Entitäten im Transkript. Kann 'all' sein, um alle Entitäten zu erkennen, ein einzelner Entitätstyp oder Kategorie-String oder eine Liste von Entitätstypen/Kategorien. Kategorien umfassen 'pii', 'phi', 'pci', 'other' und 'offensive_language'. Bei Aktivierung werden erkannte Entitäten im Feld 'entities' mit ihrem Text, Typ und ihren Zeichenpositionen zurückgegeben.
- `no_verbatim` (boolean, optional) — Wenn true, enthält die Transkription keine Füllwörter, Fehlansätze oder nichtsprachlichen Geräusche. Wird nur vom Modell scribe_v2 unterstützt.
- `use_speaker_library` (boolean, optional) — Ob die Sprecherbibliothek verwendet werden soll, um bekannte Sprecher bei der Sprechertrennung zu identifizieren. Wenn aktiviert und diarize auf true gesetzt ist, werden erkannte Sprecher mit registrierten Sprechern in der Sprecherbibliothek des Workspace abgeglichen.
- `detect_speaker_roles` (boolean, optional) — Ob Sprecherrollen erkannt werden sollen (Agent vs. Kunde). Erfordert diarize=true. Kann nicht mit use_multi_channel=true verwendet werden. Wenn aktiviert, lauten die speaker_id-Werte 'agent' und 'customer' statt 'speaker_0', 'speaker_1' usw. Die Nutzung verursacht einen zusätzlichen Aufschlag von 10 % auf die Grundkosten der Transkription.
- `entity_redaction` (V1SpeechToTextPostRequestBodyContentMultipartFormDataSchemaEntityRedaction, optional) — Schwärzt Entitäten im Transkripttext. Akzeptiert dasselbe Format wie entity_detection: 'all', eine Kategorie ('pii', 'phi') oder bestimmte Entitätstypen. Muss eine Teilmenge von entity_detection sein. Wenn die Schwärzung aktiviert ist, wird das Feld entities nicht zurückgegeben.
- `entity_redaction_mode` (string, optional) — Wie geschwärzte Entitäten formatiert werden. 'redacted' ersetzt durch \{REDACTED}, 'entity\_type' durch \{ENTITY\_TYPE}, 'enumerated\_entity\_type' durch \{ENTITY\_TYPE\_N}, wobei N jedes Vorkommen nummeriert. Wird nur verwendet, wenn entity\_redaction festgelegt ist.
- `keyterms` (list of string, optional) — Eine Liste von Schlüsselbegriffen, auf die die Transkription ausgerichtet wird. Die Schlüsselbegriffe sind Wörter oder Phrasen, die das Modell genauer erkennen soll. Die Anzahl der Schlüsselbegriffe darf 1000 nicht überschreiten. Jeder Schlüsselbegriff darf höchstens 50 Zeichen lang sein. Schlüsselbegriffe dürfen nach der Normalisierung höchstens 5 Wörter enthalten. Zum Beispiel \["hello", "world", "technical term"]. Die folgenden Zeichen werden nicht unterstützt: `<`, `>`, `{`, `}`, `[`, `]`, `\`. Die Verwendung dieses Parameters verursacht einen zusätzlichen Aufschlag von 20 % auf die Basiskosten der Transkription. Bei mehr als 100 Schlüsselbegriffen gilt pro Anfrage eine abrechenbare Mindestdauer von 20 Sekunden.

## Response

### 200

Synchrones Transkriptionsergebnis

- `speech_to_text_convert_Response_200`

### 202

Asynchrone Anfrage akzeptiert

## Errors

### 422 Unprocessable Entity Error

Validierungsfehler

- `detail` (list of ValidationError, optional)

## Types

### SpeechToTextChunkResponseModel

Details der Transkription auf Chunk-Ebene mit Zeitinformationen.

- `language_code` (string, required) — Der erkannte Sprachcode (z. B. „eng“ für Englisch).
- `language_probability` (double, required) — Der Konfidenzwert der Spracherkennung (0 bis 1).
- `text` (string, required) — Der Rohtext der Transkription.
- `words` (list of SpeechToTextWordResponseModel, required) — Liste der Wörter mit ihren Zeitinformationen.
- `channel_index` (integer, optional, nullable) — Der Kanalindex, zu dem dieses Transkript gehört (bei Mehrkanal-Audio).
- `additional_formats` (list of AdditionalFormatResponseModel, optional, nullable) — Angeforderte zusätzliche Formate für das Transkript.
- `transcription_id` (string, optional, nullable) — Die Transkriptions-ID der Antwort.
- `entities` (list of DetectedEntity, optional, nullable) — Liste der erkannten Entitäten mit Text, Typ und Zeichenpositionen im Transkript.
- `audio_duration_secs` (double, optional, nullable) — Die Dauer des transkribierten Audios in Sekunden.
- `edited_transcript` (SpeechToTextChunkResponseModelEditedTranscript, optional, nullable) — Ergebnis der optionalen Transkriptbearbeitung: der bearbeitete Text oder ein Fehler, falls er nicht erstellt werden konnte. Fehlt, wenn keine Bearbeitung angefordert wurde. Bei Erfolg enthalten sowohl `text` als auch `edited_text` das bearbeitete Transkript. Vergleichen Sie sie mit dem `text` der obersten Ebene, um die Änderungen zu sehen.

### MultichannelSpeechToTextResponseModel

Antwortmodell für mehrkanalige Speech-to-Text-Transkription.

- `transcripts` (list of SpeechToTextChunkResponseModel, required) — Liste der Transkripte, eines pro Audiokanal. Jedes Transkript enthält den Text und Details auf Wortebene für den jeweiligen Kanal.
- `transcription_id` (string, optional, nullable) — Die Transkriptions-ID der Antwort.
- `audio_duration_secs` (double, optional, nullable) — Die Dauer des über alle Kanäle transkribierten Audios in Sekunden.

### SpeechToTextWebhookResponseModel

- `message` (string, required) — Die Meldung der Webhook-Antwort.
- `request_id` (string, required) — Die Anfrage-ID der Webhook-Antwort.
- `transcription_id` (string, optional, nullable) — Die Transkriptions-ID der Webhook-Antwort.

### ValidationError

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

### SpeechToTextWordResponseModel

Details der Transkription auf Wortebene mit Zeitinformationen.

- `text` (string, required) — Das transkribierte Wort oder Geräusch.
- `type` (enum, required) — Der Typ des Wortes oder Geräuschs. 'audio_event' wird für Geräusche verwendet, die keine Wörter sind, etwa Lachen oder Schritte.
  - Allowed values: `word`, `spacing`, `audio_event`
- `logprob` (double, required) — Der Logarithmus der Wahrscheinlichkeit, mit der dieses Wort vorhergesagt wurde. Logprobs liegen im Bereich [-infinity, 0]; höhere Logprobs zeigen ein höheres Vertrauen des Modells in seine Vorhersagen an.
- `start` (double, optional, nullable) — Die Startzeit des Worts oder Sounds in Sekunden.
- `end` (double, optional, nullable) — Die Endzeit des Worts oder Sounds in Sekunden.
- `speaker_id` (string, optional, nullable) — Eindeutige Kennung des Sprechers dieses Wortes.
- `characters` (list of SpeechToTextCharacterResponseModel, optional, nullable) — Die Zeichen, aus denen das Wort besteht, und ihre Zeitinformationen.
- `channel_index` (integer, optional, nullable) — The channel this word was spoken on (for multichannel audio). Null for single-channel transcriptions.

### AdditionalFormatResponseModel

- `requested_format` (string, required) — Das angeforderte Format.
- `file_extension` (string, required) — Die Dateierweiterung des zusätzlichen Formats.
- `content_type` (string, required) — Der Inhaltstyp des zusätzlichen Formats.
- `is_base64_encoded` (boolean, required) — Gibt an, ob der Inhalt base64-kodiert ist.
- `content` (string, required) — Der Inhalt des zusätzlichen Formats.

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

Ergebnis der optionalen Transkriptbearbeitung: der bearbeitete Text oder ein Fehler, falls er nicht erstellt werden konnte. Fehlt, wenn keine Bearbeitung angefordert wurde. Bei Erfolg enthalten sowohl `text` als auch `edited_text` das bearbeitete Transkript. Vergleichen Sie sie mit dem `text` der obersten Ebene, um die Änderungen zu sehen.

- `kind`: `error` (TranscriptEditError)
  - `error_type` ("edit_failed", required) — edit_failed: Die Bearbeitung konnte nicht erstellt werden.
  - `message` (string, required) — Eine kurze, nutzerorientierte Erklärung des Fehlers.
- `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) — Das transkribierte Zeichen.
- `start` (double, optional, nullable) — Die Startzeit des Zeichens in Sekunden.
- `end` (double, optional, nullable) — Die Endzeit des Zeichens in Sekunden.

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