# Platform Overview & Quickstart



Welcome to the **YouTube Transcript & Data API** — the fastest way to extract transcripts, metadata, and engagement data from YouTube. Purpose-built for AI agents, LLM pipelines, video intelligence, and content indexing.

<Callout type="info" title="Base URL">
  All API endpoints are versioned under the `/v1` prefix.

  **Production:** `https://api.ytapi.dev/v1`

  **Direct Node:** `https://cx33.ytapi.dev/v1`
</Callout>

Explore the API [#explore-the-api]

<Cards>
  <Card title="Transcripts" description="Multi-format extraction with word-level timestamps and AI-native Markdown." href="/transcripts" />

  <Card title="Video Metadata" description="Fast video metadata, view counts, and channel attribution." href="/videos" />

  <Card title="Playlists" description="Complete playlist details, video listings, and cursor pagination." href="/playlists" />

  <Card title="Channels" description="Channel profile metadata, subscriber counts, live streams, and playlists." href="/channels" />

  <Card title="Search" description="Zero-quota YouTube search with live autocomplete suggestions." href="/search" />

  <Card title="Batch Processing" description="Up to 10 parallel extraction tasks in a single request." href="/batch" />

  <Card title="Pricing" description="Credit packs. Credits never expire." href="/pricing" />

  <Card title="Credits & Billing" description="Transparent per-request credit metering and error reference." href="/credits" />
</Cards>

***

30-Second Quickstart [#30-second-quickstart]

<Steps>
  <Step>
    Get Your API Key [#get-your-api-key]

    Generate an API key with `transcripts:read` permissions from the [Developer Dashboard](https://ytapi.dev/app/api-keys).
  </Step>

  <Step>
    Make Your First Request [#make-your-first-request]

    <Tabs items={["cURL", "Python", "TypeScript", "Go"]}>
      <Tab value="cURL">
        ```bash
        curl -X POST https://api.ytapi.dev/v1/transcripts \
          -H "Authorization: Bearer YOUR_API_KEY" \
          -H "Content-Type: application/json" \
          -d '{
            "video_id": "dQw4w9WgXcQ",
            "format": "markdown"
          }'
        ```
      </Tab>

      <Tab value="Python">
        ```python
        import requests

        response = requests.post(
            "https://api.ytapi.dev/v1/transcripts",
            headers={"Authorization": "Bearer YOUR_API_KEY"},
            json={
                "video_id": "dQw4w9WgXcQ",
                "format": "markdown",
                "word_level": False
            }
        )

        print(response.json())
        ```
      </Tab>

      <Tab value="TypeScript">
        ```typescript
        const res = await fetch("https://api.ytapi.dev/v1/transcripts", {
          method: "POST",
          headers: {
            "Authorization": "Bearer YOUR_API_KEY",
            "Content-Type": "application/json"
          },
          body: JSON.stringify({
            video_id: "dQw4w9WgXcQ",
            format: "markdown"
          })
        });

        const data = await res.json();
        console.log(data);
        ```
      </Tab>

      <Tab value="Go">
        ```go
        package main

        import (
        	"bytes"
        	"encoding/json"
        	"fmt"
        	"net/http"
        )

        func main() {
        	payload, _ := json.Marshal(map[string]any{
        		"video_id": "dQw4w9WgXcQ",
        		"format":   "markdown",
        	})

        	req, _ := http.NewRequest("POST", "https://api.ytapi.dev/v1/transcripts", bytes.NewBuffer(payload))
        	req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
        	req.Header.Set("Content-Type", "application/json")

        	resp, err := http.DefaultClient.Do(req)
        	if err != nil {
        		panic(err)
        	}
        	defer resp.Body.Close()

        	fmt.Println("Status:", resp.Status)
        }
        ```
      </Tab>
    </Tabs>
  </Step>

  <Step>
    Parse the Response [#parse-the-response]

    Every response includes telemetry headers for observability:

    | Header                | Description                                           |
    | :-------------------- | :---------------------------------------------------- |
    | `X-Cache`             | `HIT` or `MISS` — whether served from cache           |
    | `X-Cache-Tier`        | `L1_MEMORY` (sub-10ms) or `L2_PERSISTENT`             |
    | `X-Track-Type`        | `ASR` (auto-generated) or `MANUAL` (creator-uploaded) |
    | `X-Language-Code`     | Negotiated ISO language code (e.g. `en`, `zh-Hans`)   |
    | `X-Duration-Seconds`  | Extraction latency in seconds                         |
    | `X-Credits-To-Deduct` | Credits consumed for this request                     |
  </Step>
</Steps>

***

Core Capabilities [#core-capabilities]

| Capability                 | Highlight                                                                                                    |
| :------------------------- | :----------------------------------------------------------------------------------------------------------- |
| **Wire-Speed Transcripts** | Sub-400ms median extraction with automatic language negotiation and multi-tier edge caching                  |
| **AI-Native Markdown**     | `format=markdown` produces structured paragraphs with timestamp references optimized for LLM context windows |
| **Word-Level Precision**   | `word_level=true` provides millisecond-accurate word offsets for speech sync and video editing               |
| **Playlists & Series**     | Complete playlist details, video listings, and opaque cursor continuation pagination                         |
| **Channels & Streams**     | Verified channel profiles, subscriber counts, live/past streams, and created playlists                       |
| **Zero-Quota Search**      | Full-text search across YouTube without consuming Google Cloud API quotas                                    |
| **Concurrent Batch**       | Up to 10 parallel extraction tasks in a single HTTP request                                                  |
