# Facebook Video Transcript API

Beta

Returns the timed transcript of a public Facebook video or reel: the uploaded or auto-generated caption track when Facebook has one, otherwise speech-to-text on the video's audio. Accepts reel, watch, page video, video.php, fb.watch and share links, or a numeric video ID.

[Get 100 free credits](https://staging-fly.socialtap.dev/signup/?next=%2Fplayground%2F%3Fendpoint%3Dfacebook.transcript) · [API reference](https://staging-fly.socialtap.dev/docs/reference/facebook/transcript/index.md) · [Try it](https://staging-fly.socialtap.dev/playground/?endpoint=facebook.transcript)

- **Price**: From **1 credit** per request, up to 122 credits$0.75–$1.45 per 1,000 requests
- **Request**: `GET /v1/facebook/transcript`One API key, one JSON schema
- **Input**: `url`e.g. `https://www.facebook.com/reel/1803909017420449`
- **Measured**: p50 1,517 ms · 65.3% success

Use cases

## What teams build with it. From one request.

- Analyze public page and creator videos
- Make Facebook video content searchable
- Repurpose reels and videos into text
- Feed video content into LLM pipelines

What you get

## Transcripts in one schema. The same on every platform.

- **`platform`string**: Platform the media is hosted on.
- **`id`string**: Platform-native ID of the post (equals post.id).
- **`url`string**: Canonical URL of the post.
- **`language`string**: BCP-47 language of the returned transcript; null when unknown.
- **`source`string**: captions = platform caption track; asr = speech-to-text on the audio. New values may be added.
- **`is_auto_generated`boolean**: True when the track was machine-generated (platform auto-captions or ASR).
- **`available_languages`string\[\]**: BCP-47 caption languages the platform offers for this post; \[\] if none or not listed.
- **`duration_ms`integer**: Media duration in milliseconds; null when unknown.

Every field, its type and when it is `null`: [the response reference](https://staging-fly.socialtap.dev/docs/reference/facebook/transcript/index.md#response) and the [transcript schema](https://staging-fly.socialtap.dev/resources/transcript/index.md).

## Example request

cURL:

```shell
curl -G 'https://staging-fly.socialtap.dev/v1/facebook/transcript' \
  --data-urlencode 'url=https://www.facebook.com/reel/1803909017420449/' \
  -H "x-api-key: $SOCIALTAP_API_KEY"
```

Node.js:

```javascript
const params = new URLSearchParams({
  url: "https://www.facebook.com/reel/1803909017420449/",
});
const res = await fetch(`https://staging-fly.socialtap.dev/v1/facebook/transcript?${params}`, {
  headers: { "x-api-key": process.env.SOCIALTAP_API_KEY ?? "" },
});
const body = await res.json();
if (!res.ok) throw new Error(`${body.error.code}: ${body.error.message}`);
const { data, meta } = body;
console.log(data, meta.credits_charged);
```

Python:

```python
import os

import requests

res = requests.get(
    "https://staging-fly.socialtap.dev/v1/facebook/transcript",
    params={"url": "https://www.facebook.com/reel/1803909017420449/"},
    headers={"x-api-key": os.environ["SOCIALTAP_API_KEY"]},
)
body = res.json()
if not res.ok:
    raise RuntimeError(f"{body['error']['code']}: {body['error']['message']}")
data, meta = body["data"], body["meta"]
print(data, meta["credits_charged"])
```

Go:

```go
package main

import (
	"encoding/json"
	"fmt"
	"log"
	"net/http"
	"net/url"
	"os"
)

func main() {
	q := url.Values{}
	q.Set("url", "https://www.facebook.com/reel/1803909017420449/")
	req, err := http.NewRequest("GET", "https://staging-fly.socialtap.dev/v1/facebook/transcript?"+q.Encode(), nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("x-api-key", os.Getenv("SOCIALTAP_API_KEY"))
	res, err := http.DefaultClient.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer res.Body.Close()
	var body struct {
		Data  json.RawMessage `json:"data"`
		Meta  map[string]any  `json:"meta"`
		Error *struct {
			Code    string `json:"code"`
			Message string `json:"message"`
		} `json:"error"`
	}
	if err := json.NewDecoder(res.Body).Decode(&body); err != nil {
		log.Fatal(err)
	}
	if body.Error != nil {
		log.Fatalf("%s: %s", body.Error.Code, body.Error.Message)
	}
	fmt.Println(string(body.Data), body.Meta["credits_charged"])
}
```

200 OK:

```json
{
  "data": {
    "available_languages": [
      "en-US"
    ],
    "duration_ms": 59861,
    "id": "1803909017420449",
    "is_auto_generated": false,
    "language": "en-US",
    "platform": "facebook",
    "platform_specific": {},
    "segments": [
      {
        "end_ms": 4000,
        "start_ms": 33,
        "text": "But the standard that we should continuously aspire to exceed,"
      },
      {
        "end_ms": 7166,
        "start_ms": 4000,
        "text": "which is why we are bringing that intensity, that discipline, that"
      },
      {
        "end_ms": 11400,
        "start_ms": 7166,
        "text": "engineering ownership back to NASA, because great nations do not remain great"
      }
    ],
    "source": "captions",
    "text": "But the standard that we should continuously aspire to exceed, which is why we are bringing that intensity, that discipline, that engineering ownership back to NASA, because great nations do not remain great by being caretakers of history, but by continuously making history. We h…",
    "url": "https://www.facebook.com/reel/1803909017420449/"
  },
  "meta": {
    "request_id": "req_3f9c2a7d1e8b4c6a9f0e2d4b6a8c0e1f",
    "platform": "facebook",
    "source": "captions",
    "is_cached": false,
    "credits_charged": 1,
    "latency_ms": 1517,
    "fetched_at": "2026-10-25T12:00:00Z",
    "input": {
      "kind": "video",
      "id": "1803909017420449",
      "url": "https://www.facebook.com/reel/1803909017420449/"
    },
    "credits_remaining": 9999,
    "client_request_id": null,
    "warnings": [],
    "mode": "live"
  }
}
```

Long arrays and strings are shortened for display; real responses are complete.

> [!NOTE]
>
> **Good to know**
>
> - Videos that Facebook only serves to logged-in users return private_or_unavailable.

Reliability

## Measured, not promised. Every request counts.

- **p50 latency**: 1,517 ms
- **p95 latency**: 2,437 ms
- **Success rate**: 65.3%
- **Requests measured**: 26

**Staging measurements, not production.** Measured on our staging environment, over the 7 days before 2026-10-25. [How it is measured](https://staging-fly.socialtap.dev/status/index.md#method).

Pricing

## Pay per request. Only when it succeeds.

| Source | Price per successful request | Per 1,000 requests |
| --- | --- | --- |
| Captions `captions` | 1 credit | $0.75–$1.45 |
| Speech-to-text `asr` | 2 credits + 2 per started minute of media<br>up to 122 credits (60 started minutes of media) | $1.50–$2.90 + $1.50–$2.90 per started minute of media |

- Failed requests are free: errors cost 0 credits.
- Cache hits are free: responses served from the cache cost 0 credits.
- Credits never expire.
- One credit balance for every endpoint and platform.

[Credit packs](https://staging-fly.socialtap.dev/pricing/index.md) · [How this endpoint is priced](https://staging-fly.socialtap.dev/docs/reference/facebook/transcript/index.md#pricing) · [How credits work](https://staging-fly.socialtap.dev/docs/credits/index.md)

FAQ

## Questions, answered.

**How much does the Facebook Video Transcript API cost?**

1 credit for captions results (meta.source = captions) and 2 credits + 2 per started minute of media, up to 122 credits (60 started minutes of media) for speech-to-text results (meta.source = asr), charged only for successful requests. SocialTap credits cost $0.75–$1.45 per 1,000 depending on the pack.

**Am I charged for failed requests?**

No. Requests that return an error cost 0 credits. Responses served from the cache are free too.

Same schema, other platforms

## Transcripts everywhere. One parser.

[Instagram Reels Transcript APIBetaTranscript`GET /v1/instagram/transcript`From 1 credit](https://staging-fly.socialtap.dev/apis/instagram/transcript/index.md) · [Rumble Transcript APIBetaTranscript`GET /v1/rumble/transcript`From 1 credit](https://staging-fly.socialtap.dev/apis/rumble/transcript/index.md) · [TikTok Transcript APIBetaTranscript`GET /v1/tiktok/transcript`From 1 credit](https://staging-fly.socialtap.dev/apis/tiktok/transcript/index.md) · [YouTube Transcript APIBetaTranscript`GET /v1/youtube/transcript`From 1 credit](https://staging-fly.socialtap.dev/apis/youtube/transcript/index.md)

More Facebook

## Facebook API. 3 endpoints, one key.

[Facebook Post APIBetaPost`GET /v1/facebook/post`1 credit](https://staging-fly.socialtap.dev/apis/facebook/post/index.md) · [Facebook Ad Library Search APIBetaAd`GET /v1/facebook/search_ads`1 credit / page](https://staging-fly.socialtap.dev/apis/facebook/search_ads/index.md)

## Start with 100 free credits. No card required.

Test keys answer every endpoint from recorded responses, free, so you can build before you spend. Failed requests are always free.

[Get your API key](https://staging-fly.socialtap.dev/signup/?next=%2Fplayground%2F%3Fendpoint%3Dfacebook.transcript) · [Read the API reference](https://staging-fly.socialtap.dev/docs/reference/facebook/transcript/index.md)

---

[HTML version](https://staging-fly.socialtap.dev/apis/facebook/transcript/) · [Docs index for AI agents](https://staging-fly.socialtap.dev/llms.txt) · [All docs in one file](https://staging-fly.socialtap.dev/llms-full.txt)
