> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dscribeai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Batch Transcribe

> Transcribe multiple media content in a single request

### Overview

The Batch Transcribe API processes multiple video and audio files simultaneously, allowing you to transcribe content at scale.
Simply provide a list of media URLs, and the API will return transcriptions for each.

### Features

* **All Transcribe Features**: Includes all existing Transcribe API capabilities
* **Bulk Processing**: Transcribe multiple media files in a single request (limit depends on your plan)
* **Cross-Platform Support**: Process videos and audio from different platforms in one request
* **Progress Tracking**: Monitor the status of each transcription in real time
* **Webhook Support**: Receive real-time notifications when the entire batch is complete

### Basic Usage

To transcribe multiple videos, simply add the media URLs to the `post_urls` parameter as a list. E.g. `["https://www.youtube.com/watch?v=example1", "https://www.tiktok.com/@user/video/123456789"]`.

You can optionally include a `callback_url` to receive a notification when the entire batch is complete. E.g. `https://your-domain.com/webhook`.

If using a proxy, provide the `proxy_url` to route downloads through a specific server and set `max_mb_download_on_proxy` to limit the maximum file size downloaded via the proxy.

<CodeGroup>
  ```bash cURL theme={null}
  curl --request POST \
    --url https://api.scribesocial.ai/v1/transcribe-batch \
    --header 'Authorization: Bearer <token>' \
    --header 'Content-Type: application/json' \
    --data '{
    "post_urls": [
      "<string>"
    ],
    "callback_url": "<string>",
    "proxy_url": "<string>",
    "max_mb_download_on_proxy": 123
  }'
  ```

  ```python Python theme={null}
  import requests

  url = "https://api.scribesocial.ai/v1/transcribe-batch"

  payload = {
      "post_urls": ["<string>"],
      "callback_url": "<string>",
      "proxy_url": "<string>",
      "max_mb_download_on_proxy": 123
  }
  headers = {
      "Authorization": "Bearer <token>",
      "Content-Type": "application/json"
  }

  response = requests.request("POST", url, json=payload, headers=headers)

  print(response.text)
  ```

  ```javascript JavaScript theme={null}
  const options = {
    method: 'POST',
    headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
    body: '{"post_urls":["<string>"],"callback_url":"<string>","proxy_url":"<string>","max_mb_download_on_proxy":123}'
  };

  fetch('https://api.scribesocial.ai/v1/transcribe-batch', options)
    .then(response => response.json())
    .then(response => console.log(response))
    .catch(err => console.error(err));
  ```

  ```php PHP theme={null}
  <?php

  $curl = curl_init();

  curl_setopt_array($curl, [
    CURLOPT_URL => "https://api.scribesocial.ai/v1/transcribe-batch",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => "{\n  \"post_urls\": [\n    \"<string>\"\n  ],\n  \"callback_url\": \"<string>\",\n  \"proxy_url\": \"<string>\",\n  \"max_mb_download_on_proxy\": 123\n}",
    CURLOPT_HTTPHEADER => [
      "Authorization: Bearer <token>",
      "Content-Type: application/json"
    ],
  ]);

  $response = curl_exec($curl);
  $err = curl_error($curl);

  curl_close($curl);

  if ($err) {
    echo "cURL Error #:" . $err;
  } else {
    echo $response;
  }
  ```

  ```go Go theme={null}
  package main

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

  func main() {
  	url := "https://api.scribesocial.ai/v1/transcribe-batch"

  	payload := strings.NewReader("{\n  \"post_urls\": [\n    \"<string>\"\n  ],\n  \"callback_url\": \"<string>\",\n  \"proxy_url\": \"<string>\",\n  \"max_mb_download_on_proxy\": 123\n}")

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

  	req.Header.Add("Authorization", "Bearer <token>")
  	req.Header.Add("Content-Type", "application/json")

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

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

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

  ```java Java theme={null}
  HttpResponse<String> response = Unirest.post("https://api.scribesocial.ai/v1/transcribe-batch")
    .header("Authorization", "Bearer <token>")
    .header("Content-Type", "application/json")
    .body("{\n  \"post_urls\": [\n    \"<string>\"\n  ],\n  \"callback_url\": \"<string>\",\n  \"proxy_url\": \"<string>\",\n  \"max_mb_download_on_proxy\": 123\n}")
    .asString();
  ```
</CodeGroup>

### Checking Batch Status

Batch transcriptions are processed asynchronously, and you can track their progress using the operation polling URL.
When you submit a batch request, the API response will include a Location header with the polling URL, which you can use to check the status of the transcription.

Example Operation Polling URL:
`https://api.scribesocial.ai/v1/transcribe-result/{operation-id}`

If you've provided a `callback_url`, the API will send a notification to your endpoint once the batch is complete.
This request will include a `Scribe-Verification-Token` header, which corresponds to the API key ID used in the original request, allowing you to verify that the callback is from dScribe AI and is legitimate.

<CodeGroup>
  ```bash cURL theme={null}
  curl --request GET \
    --url https://api.scribesocial.ai/v1/transcribe-result/{operationId} \
    --header 'Authorization: Bearer <token>'
  ```

  ```python Python theme={null}
  import requests

  url = "https://api.scribesocial.ai/v1/transcribe-result/{operationId}"

  headers = {"Authorization": "Bearer <token>"}

  response = requests.request("GET", url, headers=headers)

  print(response.text)
  ```

  ```javascript JavaScript theme={null}
  const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

  fetch('https://api.scribesocial.ai/v1/transcribe-result/{operationId}', options)
    .then(response => response.json())
    .then(response => console.log(response))
    .catch(err => console.error(err));
  ```

  ```php PHP theme={null}
  <?php

  $curl = curl_init();

  curl_setopt_array($curl, [
    CURLOPT_URL => "https://api.scribesocial.ai/v1/transcribe-result/{operationId}",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => [
      "Authorization: Bearer <token>"
    ],
  ]);

  $response = curl_exec($curl);
  $err = curl_error($curl);

  curl_close($curl);

  if ($err) {
    echo "cURL Error #:" . $err;
  } else {
    echo $response;
  }
  ```

  ```go Go theme={null}
  package main

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

  func main() {
  	url := "https://api.scribesocial.ai/v1/transcribe-result/{operationId}"

  	req, _ := http.NewRequest("GET", url, nil)

  	req.Header.Add("Authorization", "Bearer <token>")

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

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

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

  ```java Java theme={null}
  HttpResponse<String> response = Unirest.get("https://api.scribesocial.ai/v1/transcribe-result/{operationId}")
    .header("Authorization", "Bearer <token>")
    .asString();
  ```
</CodeGroup>

### Example Response

```json theme={null}
{
  "status": "completed",
  "operation_id": "abc123xyz789",
  "data": [
    {
      "video_url": "https://www.youtube.com/watch?v=example1",
      "post_url": "https://www.youtube.com/watch?v=example1",
      "description": "Part 1 of the machine learning tutorial series",
      "transcription": "Welcome to part one of our machine learning series...",
      "paragraphs": [
        {
          "sentences": [
            {
              "text": "Welcome to part one of our machine learning series.",
              "start": 0,
              "end": 3.2
            },
            {
              "text": "Today we'll cover the fundamental concepts.",
              "start": 3.2,
              "end": 6.5
            }
          ],
          "num_words": 18,
          "start": 0,
          "end": 6.5
        }
      ],
      "video_id": "example1",
      "transcribed_duration": 180,
      "total_duration": 180,
      "status": "completed",
      "platform": "youtube",
      "title": "Machine Learning Fundamentals - Part 1",
      "metadata": {
        "upload_time": "2024-01-15T10:30:00Z",
        "comment_count": 423,
        "like_count": 892,
        "thumbnail": "https://i.ytimg.com/vi/example1/maxresdefault.jpg",
        "retweet_count": null,
        "quote_count": null
      }
    },
    {
      "video_url": "https://www.tiktok.com/@user/video/example2",
      "post_url": "https://www.tiktok.com/@user/video/example2",
      "description": "Quick tips for machine learning beginners",
      "transcription": "Here are three essential tips for getting started...",
      "paragraphs": [
        {
          "sentences": [
            {
              "text": "Here are three essential tips for getting started.",
              "start": 0,
              "end": 2.8
            }
          ],
          "num_words": 9,
          "start": 0,
          "end": 2.8
        }
      ],
      "video_id": "example2",
      "transcribed_duration": 60,
      "total_duration": 60,
      "status": "completed",
      "platform": "tiktok",
      "title": "ML Tips for Beginners",
      "metadata": {
        "upload_time": "2024-01-16T15:45:00Z",
        "comment_count": 156,
        "like_count": 2341,
        "thumbnail": "https://p16-sign-va.tiktokcdn.com/example2.jpg",
        "retweet_count": null,
        "quote_count": null
      }
    }
  ],
  "markdown": "# Machine Learning Fundamentals - Part 1\n\n## Introduction (00:00)\nWelcome to part one of our machine learning series...\n\n# ML Tips for Beginners\n\n## Quick Tips (00:00)\nHere are three essential tips for getting started..."
}
```

For more details about request parameters, response fields, and status codes, check out our [Batch Transcribe API Reference](/api-reference/endpoint/transcribe-batch).
