> For the complete documentation index, see [llms.txt](https://developers.oxylabs.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.oxylabs.io/api-reference/es/scrapers-dedicados/scrapers-de-medios.md).

# Scrapers de medios

Referencia de los endpoints scraper de medios dedicados de la Web API, sus parámetros y modos de entrega para cada endpoint.

<table><thead><tr><th width="110">Scraper</th><th>Endpoints</th></tr></thead><tbody><tr><td><a href="#general">General</a></td><td><code>/media</code></td></tr><tr><td><a href="#youtube">YouTube</a></td><td><code>/media/youtube/metadata</code>, <code>/media/youtube/subtitles</code>, <code>/media/youtube/download</code>, <code>/media/youtube/channel</code>, <code>/media/youtube/search</code>, <code>/media/youtube/search/max</code>, <code>/media/youtube/autocomplete</code>, <code>/media/youtube/video/trainability</code></td></tr></tbody></table>

{% hint style="info" %}
Los videos que no se pueden descargar fallan con un código de error específico de medios (`11201`–`11304`). Consulta [Códigos de error de medios](/api-reference/es/errores-y-codigos-de-estado.md#media-specific-errors).
{% endhint %}

{% hint style="info" %}
Las URLs de almacenamiento se validan para `s3`, `s3_gzip`, `s3_compatible`, y `tos`. Un valor inválido devuelve `400` antes de que se cree la solicitud.
{% endhint %}

### General

#### `POST /v1/async/scrape/media`

Descarga un video desde una URL (TikTok, BiliBili, etc.) y lo sube a tu bucket de almacenamiento. Duración máxima del video – `12` horas. Tiempo máximo de descarga – `1` hora.

**Modos:** `async`, `batch`

<table><thead><tr><th width="142">Nombre</th><th width="80.5">Tipo</th><th width="84.5">Requerido</th><th>Descripción</th></tr></thead><tbody><tr><td><code>url</code></td><td>cadena</td><td>sí</td><td>URL del video.<br>TikTok: <code>tiktok.com/@{user}/video/{id}</code>, <code>tiktok.com/embed/{id}</code>, <code>vm.tiktok.com/{id}</code>, <code>vt.tiktok.com/{id}</code>.<br>BiliBili: <code>bilibili.com/video/{id}</code>, <code>bilibili.com/bangumi/play/{id}</code>.<br><code>http://</code>, <code>https://</code>, <code>www.</code> se aceptan prefijos y cadenas de consulta</td></tr><tr><td><code>almacenamiento</code></td><td>objeto</td><td>sí</td><td>Entrega el resultado a un bucket de almacenamiento: <code>{"type": string, "url": string}</code>. <code>tipo</code> es <code>s3</code>, <code>s3_gzip</code>, <code>s3_compatible</code>, <code>gcs</code>, o <code>tos</code>. Solo asincrónico. <code>url</code> no se valida</td></tr><tr><td><code>video_quality</code></td><td>cadena</td><td>no</td><td><code>best</code>, <code>worst</code>, o una resolución: <code>144</code>, <code>360</code>, <code>480</code>, <code>720</code>, <code>1080</code>, <code>1440</code>, <code>2160</code> (4K), <code>4320</code> (8K).<br>Predeterminado: TikTok – <code>720</code>, BiliBili – <code>480</code>.</td></tr><tr><td><code>callback_url</code></td><td>cadena</td><td>no</td><td>URL de webhook para el trabajo finalizado. Las URLs mal formadas se rechazan con <code>400</code></td></tr></tbody></table>

### YouTube

#### **`POST /v1/scrape/media/youtube/metadata`**

Devuelve el título, canal, descripción, duración, conteos de visualizaciones, me gusta y comentarios, fecha de subida, categorías, etiquetas, capítulos, miniaturas y los idiomas de subtítulos disponibles.

**Modos:** `sincrónico`, `async`, `batch`

<table><thead><tr><th width="131">Nombre</th><th width="89">Tipo</th><th width="83">Requerido</th><th>Descripción</th></tr></thead><tbody><tr><td><code>query</code></td><td>cadena</td><td>sí</td><td>ID del video, por ejemplo <code>tIgIF5lve8U</code>. No es una URL. En lote, un array de IDs</td></tr><tr><td><code>salida</code></td><td>array de cadenas</td><td>no</td><td><code>["json"]</code> (predeterminado) devuelve los metadatos analizados. <code>["json", "html"]</code> también devuelve el código fuente de la página</td></tr><tr><td><code>callback_url</code></td><td>cadena</td><td>no</td><td>Solo asíncrono. URL de webhook a la que se publica el trabajo finalizado. Las URLs mal formadas se rechazan con <code>400</code></td></tr><tr><td><code>almacenamiento</code></td><td>objeto</td><td>no</td><td>Entrega el resultado a un bucket en lugar de la respuesta: <code>{"type": string, "url": string}</code>. <code>tipo</code> es <code>s3</code>, <code>s3_gzip</code>, <code>s3_compatible</code>, <code>gcs</code>, o <code>tos</code>. Solo asincrónico. <code>url</code> no se valida</td></tr></tbody></table>

Un video eliminado, privado o restringido devuelve `estado: "done"` con resultados vacíos `resultados`. La razón está en `results[0].metadata.statuses.video_download`, por ejemplo `11202` (unavailable) o `11206` (age-restricted).

#### **`POST /v1/scrape/media/youtube/subtitles`**

Devuelve las pistas de subtítulos de un video con texto y tiempos, agrupadas por origen e idioma.

**Modos:** `sincrónico`, `async`, `batch`

<table><thead><tr><th width="155">Nombre</th><th width="84">Tipo</th><th width="82">Requerido</th><th>Descripción</th></tr></thead><tbody><tr><td><code>query</code></td><td>cadena</td><td>sí</td><td>ID del video, por ejemplo <code>c4P_YuNnZ7U</code>. No es una URL. En lote, un array de IDs</td></tr><tr><td><code>language_code</code></td><td>cadena</td><td>no</td><td>Idioma de los subtítulos, por ejemplo <code>en</code>. En minúsculas; los códigos desconocidos se rechazan con <code>400</code>. Omite esto para obtener todos los idiomas</td></tr><tr><td><code>subtitle_origin</code></td><td>cadena</td><td>no</td><td><code>uploader_provided</code> o <code>auto_generated</code>. Omite esto para obtener ambos</td></tr><tr><td><code>json</code></td><td>objeto</td><td>no</td><td>Extracción personalizada: <code>{"prompt": string}</code> o <code>{"schema": object}</code>, nunca ambos. Sin él, las pistas de subtítulos se devuelven tal como las sirve YouTube</td></tr><tr><td><code>callback_url</code></td><td>cadena</td><td>no</td><td>Solo asíncrono. URL de webhook a la que se publica el trabajo finalizado. Las URLs mal formadas se rechazan con <code>400</code></td></tr><tr><td><code>almacenamiento</code></td><td>objeto</td><td>no</td><td>Entrega el resultado a un bucket en lugar de la respuesta: <code>{"type": string, "url": string}</code>. <code>tipo</code> es <code>s3</code>, <code>s3_gzip</code>, <code>s3_compatible</code>, <code>gcs</code>, o <code>tos</code>. Solo asincrónico. <code>url</code> no se valida</td></tr></tbody></table>

Un valor válido `language_code` sin una pista coincidente devuelve un resultado vacío (`{}`), no un error.

#### **`POST /v1/async/scrape/media/youtube/download`**

Descarga un video, su audio o un clip de cualquiera de los dos a tu almacenamiento en la nube.

**Modos:** `sincrónico`, `async`

<table><thead><tr><th width="150">Nombre</th><th width="87">Tipo</th><th width="83">Requerido</th><th>Descripción</th></tr></thead><tbody><tr><td><code>query</code></td><td>cadena</td><td>sí</td><td>ID del video, por ejemplo <code>9cQBNYsCqQs</code>. No es una URL. En lote, un array de IDs</td></tr><tr><td><code>almacenamiento</code></td><td>objeto</td><td>sí</td><td><code>{"type": string, "url": string}</code>. <code>tipo</code> es <code>s3</code>, <code>gcs</code>, <code>s3_compatible</code> o <code>tos</code>. <code>url</code> es el bucket y la carpeta, por ejemplo <code>bucket-name/folder/</code>; la API nombra el archivo</td></tr><tr><td><code>salida</code></td><td>array de cadenas</td><td>no</td><td>Uno de <code>["audio_video"]</code> (predeterminado), <code>["audio"]</code> o <code>["video"]</code></td></tr><tr><td><code>video_quality</code></td><td>cadena</td><td>no</td><td><code>best</code>, <code>worst</code>, <code>144</code>, <code>360</code>, <code>480</code>, <code>720</code>, <code>1080</code>, <code>1440</code>, <code>2160</code> o <code>4320</code>. Predeterminado <code>720</code>; si 720p no está disponible, la mejor calidad inferior</td></tr><tr><td><code>audio_language</code></td><td>cadena</td><td>no</td><td><code>default</code> (predeterminado) o <code>original</code>, la pista de audio original del video cuando tiene doblajes</td></tr><tr><td><code>start_at</code></td><td>cadena</td><td>no</td><td>Inicio de un clip, como <code>hh:mm:ss</code>, por ejemplo <code>00:01:30</code>. Omite esto para empezar desde el principio</td></tr><tr><td><code>end_at</code></td><td>cadena</td><td>no</td><td>Fin de un clip, como <code>hh:mm:ss</code>, por ejemplo <code>00:05:45</code>. Debe ser posterior a <code>start_at</code></td></tr><tr><td><code>callback_url</code></td><td>cadena</td><td>no</td><td>URL de webhook a la que se publica el trabajo finalizado</td></tr></tbody></table>

El trabajo finalizado devuelve el nombre del archivo en `results[0].filename`. Un video restringido por edad devuelve `estado: "done"` sin archivo y con estado `11206` en `results[0].metadata.statuses.video_download`.

#### **`POST /v1/scrape/media/youtube/channel`**

Devuelve los detalles de un canal (nombre, ID, suscriptores, conteos de videos y visualizaciones, país, fecha de unión, enlaces) y sus videos más recientes.

**Modos:** `sincrónico`, `async`

<table><thead><tr><th width="135">Nombre</th><th width="87">Tipo</th><th width="84">Requerido</th><th>Descripción</th></tr></thead><tbody><tr><td><code>query</code></td><td>cadena</td><td>sí</td><td>Identificador del canal, por ejemplo <code>@Oxylabs</code> (el <code>@</code> es opcional). Los IDs de canal (<code>UC…</code>) no son compatibles</td></tr><tr><td><code>limit</code></td><td>entero</td><td>no</td><td>Número de videos a devolver. Predeterminado <code>20</code>; <code>0</code> devuelve solo los detalles del canal</td></tr><tr><td><code>salida</code></td><td>array de cadenas</td><td>no</td><td><code>["json"]</code> devuelve los datos del canal analizados. <code>["html"]</code> (predeterminado) devuelve el código fuente de la página. Usa <code>json</code>: <code>["markdown"]</code> devuelve poco más que el pie de página</td></tr><tr><td><code>callback_url</code></td><td>cadena</td><td>no</td><td>Solo asíncrono. URL de webhook a la que se publica el trabajo finalizado. Las URLs mal formadas se rechazan con <code>400</code></td></tr><tr><td><code>almacenamiento</code></td><td>objeto</td><td>no</td><td>Entrega el resultado a un bucket en lugar de la respuesta: <code>{"type": string, "url": string}</code>. <code>tipo</code> es <code>s3</code>, <code>s3_gzip</code>, <code>s3_compatible</code>, <code>gcs</code>, o <code>tos</code>. Solo asincrónico. <code>url</code> no se valida</td></tr></tbody></table>

#### **`POST /v1/scrape/media/youtube/search`**

Devuelve hasta 20 resultados de búsqueda de YouTube.

**Modos:** `sincrónico`, `async`

<table><thead><tr><th width="168">Nombre</th><th width="96">Tipo</th><th width="87">Requerido</th><th>Descripción</th></tr></thead><tbody><tr><td><code>query</code></td><td>cadena</td><td>sí</td><td>Frase de búsqueda</td></tr><tr><td><code>upload_date</code></td><td>cadena</td><td>no</td><td><code>last_hour</code>, <code>today</code>, <code>this_week</code>, <code>this_month</code> o <code>this_year</code></td></tr><tr><td><code>tipo</code></td><td>cadena</td><td>no</td><td><code>video</code>, <code>channel</code>, <code>playlist</code> o <code>movie</code></td></tr><tr><td><code>duration</code></td><td>cadena</td><td>no</td><td><code>&#x3C;4</code> (menos de 4 minutos), <code>4-20</code> (de 4 a 20 minutos) o <code>>20</code> (más de 20 minutos)</td></tr><tr><td><code>sort_by</code></td><td>cadena</td><td>no</td><td><code>relevance</code> (predeterminado), <code>upload_date</code>, <code>view_count</code> o <code>rating</code></td></tr><tr><td><code>360</code></td><td>booleano</td><td>no</td><td>Solo videos de 360°</td></tr><tr><td><code>3d</code></td><td>booleano</td><td>no</td><td>Solo videos 3D</td></tr><tr><td><code>4k</code></td><td>booleano</td><td>no</td><td>Solo videos 4K</td></tr><tr><td><code>creative_commons</code></td><td>booleano</td><td>no</td><td>Solo videos con licencia Creative Commons</td></tr><tr><td><code>hd</code></td><td>booleano</td><td>no</td><td>Solo videos HD</td></tr><tr><td><code>hdr</code></td><td>booleano</td><td>no</td><td>Solo videos HDR</td></tr><tr><td><code>live</code></td><td>booleano</td><td>no</td><td>Solo transmisiones en vivo</td></tr><tr><td><code>location_tag</code></td><td>booleano</td><td>no</td><td>Solo videos que tienen una etiqueta de ubicación. Devuelve una lista vacía cuando no hay coincidencias</td></tr><tr><td><code>purchased</code></td><td>booleano</td><td>no</td><td>Solo contenido comprado</td></tr><tr><td><code>subtitles</code></td><td>booleano</td><td>no</td><td>Solo videos con subtítulos o subtítulos opcionales</td></tr><tr><td><code>vr180</code></td><td>booleano</td><td>no</td><td>Solo videos VR180</td></tr><tr><td><code>ubicación</code></td><td>cadena</td><td>no</td><td>País para el que se obtendrán resultados, como un código ISO de dos letras, por ejemplo <code>IN</code></td></tr><tr><td><code>callback_url</code></td><td>cadena</td><td>no</td><td>Solo asíncrono. URL de webhook a la que se publica el trabajo finalizado. Las URLs mal formadas se rechazan con <code>400</code></td></tr><tr><td><code>almacenamiento</code></td><td>objeto</td><td>no</td><td>Entrega el resultado a un bucket en lugar de la respuesta: <code>{"type": string, "url": string}</code>. <code>tipo</code> es <code>s3</code>, <code>s3_gzip</code>, <code>s3_compatible</code>, <code>gcs</code>, o <code>tos</code>. Solo asincrónico. <code>url</code> no se valida</td></tr></tbody></table>

#### **`POST /v1/scrape/media/youtube/search/max`**

Devuelve hasta 700 resultados de búsqueda con los mismos parámetros que `/search`, con mayor costo y latencia.

**Modos:** `sincrónico`, `async`

<table><thead><tr><th width="166">Nombre</th><th width="96">Tipo</th><th width="90">Requerido</th><th>Descripción</th></tr></thead><tbody><tr><td><code>query</code></td><td>cadena</td><td>sí</td><td>Frase de búsqueda</td></tr><tr><td><code>upload_date</code></td><td>cadena</td><td>no</td><td><code>last_hour</code>, <code>today</code>, <code>this_week</code>, <code>this_month</code> o <code>this_year</code></td></tr><tr><td><code>tipo</code></td><td>cadena</td><td>no</td><td><code>video</code>, <code>channel</code>, <code>playlist</code> o <code>movie</code></td></tr><tr><td><code>duration</code></td><td>cadena</td><td>no</td><td><code>&#x3C;4</code> (menos de 4 minutos), <code>4-20</code> (de 4 a 20 minutos) o <code>>20</code> (más de 20 minutos)</td></tr><tr><td><code>sort_by</code></td><td>cadena</td><td>no</td><td><code>relevance</code> (predeterminado), <code>upload_date</code>, <code>view_count</code> o <code>rating</code></td></tr><tr><td><code>360</code></td><td>booleano</td><td>no</td><td>Solo videos de 360°</td></tr><tr><td><code>3d</code></td><td>booleano</td><td>no</td><td>Solo videos 3D</td></tr><tr><td><code>4k</code></td><td>booleano</td><td>no</td><td>Solo videos 4K</td></tr><tr><td><code>creative_commons</code></td><td>booleano</td><td>no</td><td>Solo videos con licencia Creative Commons</td></tr><tr><td><code>hd</code></td><td>booleano</td><td>no</td><td>Solo videos HD</td></tr><tr><td><code>hdr</code></td><td>booleano</td><td>no</td><td>Solo videos HDR</td></tr><tr><td><code>live</code></td><td>booleano</td><td>no</td><td>Solo transmisiones en vivo</td></tr><tr><td><code>location_tag</code></td><td>booleano</td><td>no</td><td>Solo videos que tienen una etiqueta de ubicación. Devuelve una lista vacía cuando no hay coincidencias</td></tr><tr><td><code>purchased</code></td><td>booleano</td><td>no</td><td>Solo contenido comprado</td></tr><tr><td><code>subtitles</code></td><td>booleano</td><td>no</td><td>Solo videos con subtítulos o subtítulos opcionales</td></tr><tr><td><code>vr180</code></td><td>booleano</td><td>no</td><td>Solo videos VR180</td></tr><tr><td><code>ubicación</code></td><td>cadena</td><td>no</td><td>País para el que se obtendrán resultados, como un código ISO de dos letras, por ejemplo <code>IN</code></td></tr><tr><td><code>callback_url</code></td><td>cadena</td><td>no</td><td>Solo asíncrono. URL de webhook a la que se publica el trabajo finalizado. Las URLs mal formadas se rechazan con <code>400</code></td></tr><tr><td><code>almacenamiento</code></td><td>objeto</td><td>no</td><td>Entrega el resultado a un bucket en lugar de la respuesta: <code>{"type": string, "url": string}</code>. <code>tipo</code> es <code>s3</code>, <code>s3_gzip</code>, <code>s3_compatible</code>, <code>gcs</code>, o <code>tos</code>. Solo asincrónico. <code>url</code> no se valida</td></tr></tbody></table>

#### **`POST /v1/scrape/media/youtube/autocomplete`**

Devuelve las sugerencias de búsqueda de YouTube para una frase parcial.

**Modos:** `sincrónico`, `async`

<table><thead><tr><th width="135">Nombre</th><th width="84">Tipo</th><th width="89">Requerido</th><th>Descripción</th></tr></thead><tbody><tr><td><code>query</code></td><td>cadena</td><td>sí</td><td>Frase parcial a completar, por ejemplo <code>cómo hacer</code></td></tr><tr><td><code>location_tag</code></td><td>cadena</td><td>no</td><td>País para el que son las sugerencias, como un código de dos letras en minúsculas, por ejemplo <code>de</code></td></tr><tr><td><code>language</code></td><td>cadena</td><td>no</td><td>Idioma de las sugerencias, por ejemplo <code>en</code></td></tr><tr><td><code>callback_url</code></td><td>cadena</td><td>no</td><td>Solo asíncrono. URL de webhook a la que se publica el trabajo finalizado. Las URLs mal formadas se rechazan con <code>400</code></td></tr><tr><td><code>almacenamiento</code></td><td>objeto</td><td>no</td><td>Entrega el resultado a un bucket en lugar de la respuesta: <code>{"type": string, "url": string}</code>. <code>tipo</code> es <code>s3</code>, <code>s3_gzip</code>, <code>s3_compatible</code>, <code>gcs</code>, o <code>tos</code>. Solo asincrónico. <code>url</code> no se valida</td></tr></tbody></table>

#### **`POST /v1/scrape/media/youtube/video/trainability`**

Devuelve el permiso declarado de entrenamiento de IA de un video: `permitted` es `["all"]`, `["None"]`, o una lista de las partes autorizadas para entrenarlo.

**Modos:** `sincrónico`, `async`

<table><thead><tr><th width="135">Nombre</th><th width="75">Tipo</th><th width="85">Requerido</th><th>Descripción</th></tr></thead><tbody><tr><td><code>query</code></td><td>cadena</td><td>sí</td><td>ID del video, por ejemplo <code>rFNDylrjn_w</code>. No es una URL</td></tr><tr><td><code>callback_url</code></td><td>cadena</td><td>no</td><td>Solo asíncrono. URL de webhook a la que se publica el trabajo finalizado. Las URLs mal formadas se rechazan con <code>400</code></td></tr><tr><td><code>almacenamiento</code></td><td>objeto</td><td>no</td><td>Entrega el resultado a un bucket en lugar de la respuesta: <code>{"type": string, "url": string}</code>. <code>tipo</code> es <code>s3</code>, <code>s3_gzip</code>, <code>s3_compatible</code>, <code>gcs</code>, o <code>tos</code>. Solo asincrónico. <code>url</code> no se valida</td></tr></tbody></table>

La señal la declara el titular de los derechos. No es una autorización legal.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://developers.oxylabs.io/api-reference/es/scrapers-dedicados/scrapers-de-medios.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
