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

# Listar idiomas de destino de doblaje

GET https://api.elevenlabs.io/v1/dubbing/project/{project_id}/language

Enumera los idiomas de destino de un proyecto, con paginación por cursor, cada uno con URL de salida firmadas una vez que haya generado un resultado.

Reference: https://elevenlabs.io/docs/api-reference/dubbing/language-targets/list-language-targets

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

### Path parameters

- `project_id` (string, required) — Identificador del proyecto de doblaje principal.

### Query parameters

- `cursor` (string, optional, nullable) — Pasa el `next_cursor` de una respuesta anterior para obtener la página siguiente. Omítelo en la primera página.
- `page_size` (integer, optional, default: 20) — Número de idiomas de destino por página. Se limita a un valor entre 1 y 100 en lugar de rechazarse, por lo que un valor mayor devuelve una página completa.
- `status` (string, optional, nullable) — Filtra destinos con este estado: `queued`, `processing`, `completed`, `stale` o `failed`. Omítelo para devolver todos los estados.

## Response

### 200

Respuesta correcta.

- `languages` (list of DubbingLanguageResponse, required) — La página de idiomas de destino del proyecto.
- `next_cursor` (string, optional, nullable) — Cursor opaco que se debe devolver como `cursor` para la página siguiente, o null cuando no haya más resultados.

## Errors

### 422 Unprocessable Entity Error

Error de validación

- `detail` (list of ValidationError, optional)

## Types

### DubbingLanguageResponse

- `language_id` (string, required) — Identificador único del idioma de destino.
- `project_id` (string, required) — Identificador del proyecto de doblaje principal.
- `target_language` (string, required) — Etiqueta de idioma BCP-47 al que se dobla este destino.
- `status` (enum, required) — Estado del ciclo de vida: `queued` (esperando a que el proyecto esté listo o a un trabajador), `processing` mientras se dobla, `completed` cuando su resultado está disponible, `stale` cuando la transcripción ha cambiado después de generar el resultado, o `failed`.
  - Allowed values: `queued`, `processing`, `completed`, `stale`, `failed`
- `revision` (integer, required) — Contador monotónico que aumenta cada vez que cambia la transcripción de este destino (por una edición de origen que le afecta o una edición de su traducción).
- `created_at` (string, required) — Cuándo se creó el idioma de destino.
- `updated_at` (string, required) — Cuándo se actualizó por última vez el idioma de destino.
- `model_id` (string, optional, nullable) — Modelo de doblaje con el que se dobla este destino, heredado del proyecto y no seleccionable por idioma.
- `voice_settings` (VoiceSettings, optional, nullable) — Voice settings applied to every speaker in this language, or null if the defaults apply.
- `outputs` (DubbingLanguageOutputs, optional, nullable) — URL de salida firmadas; null hasta que el destino haya generado una salida (están presentes cuando `completed` y se conservan mientras `stale`; compara `output_revision` con `revision` para saber si la salida está actualizada).
- `output_revision` (integer, optional, nullable) — La `revision` a partir de la que se generó la salida doblada actual; es igual a `revision` cuando está actualizada y menor cuando está `stale`. Es nula hasta que se completa una generación.
- `error` (DubbingError, optional, nullable) — Por qué falló este idioma; null salvo que `status` sea `failed`, y también es null para los pocos idiomas que fallaron antes de que se introdujera el informe de errores. El código `project_failed` indica que falló el proyecto principal, así que consulta el proyecto para conocer la causa subyacente.
- `warnings` (list of VoicesNotPermittedWarning, optional) — Condiciones no críticas detectadas durante el doblaje de este idioma; está vacío si no hay ninguna. Refleja la generación más reciente. Las condiciones detectadas al preparar el origen se notifican en el proyecto.

### ValidationError

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

### VoiceSettings

- `cloning_strength` (integer, optional, default: 7) — Con qué intensidad los hablantes doblados clonan las voces de origen, de 0 a 10.

### DubbingLanguageOutputs

URL de descarga firmadas y con límite de tiempo para las salidas de un destino de idioma.

- `lossless_audio` (string, optional, nullable) — URL firmada para la pista de audio doblada sin pérdida, en FLAC. El enlace caduca una hora después de emitirse; vuelve a consultar el destino de idioma para obtener uno nuevo.
- `subtitles` (string, optional, nullable) — Signed URL for the translated lines as WebVTT subtitles, timed to the source speech. Null when none are available, such as for languages dubbed before subtitles were produced. The link expires one hour after it is issued.

### DubbingError

- `message_type` ("error", required)
- `error` (string, required)

### VoicesNotPermittedWarning

- `type` ("voices_not_permitted", required) — Identifica esta advertencia; úsalo para consultar los demás campos.
- `speaker_ids` (list of string, required) — Hablantes cuyas voces no estaban autorizadas para clonación. El doblaje utilizó una voz de sustitución para cada uno de ellos; los demás hablantes no se ven afectados.
- `message` (string, required) — Descripción legible de la advertencia para mostrar. El texto puede cambiar en cualquier momento, por lo que recomendamos crear ramificaciones según `type`.

### ValidationErrorLocItems

## Examples

**Response**

```json
{
  "languages": [
    {
      "language_id": "lang_1001kwkyxp0je6ktn4knsfrasx5s",
      "project_id": "proj_1601kwkyxp0hfzvtmyxwqxx6mcy3",
      "target_language": "es",
      "status": "completed",
      "revision": 3,
      "created_at": "2026-07-03T10:16:00Z",
      "updated_at": "2026-07-03T10:20:45Z",
      "model_id": "dubbing_v2",
      "outputs": {
        "lossless_audio": "https://storage.googleapis.com/eleven-dubbing/proj_1601kwkyxp0hfzvtmyxwqxx6mcy3/lang_1001kwkyxp0je6ktn4knsfrasx5s/output.flac?X-Goog-Signature=...",
        "subtitles": "https://storage.googleapis.com/eleven-dubbing/proj_1601kwkyxp0hfzvtmyxwqxx6mcy3/lang_1001kwkyxp0je6ktn4knsfrasx5s/subtitles.vtt?X-Goog-Signature=..."
      },
      "output_revision": 3,
      "warnings": []
    }
  ]
}
```

**SDK Code**

```python
import requests

url = "https://api.elevenlabs.io/v1/dubbing/project/proj_1601kwkyxp0hfzvtmyxwqxx6mcy3/language"

querystring = {"page_size":"20"}

response = requests.get(url, params=querystring)

print(response.json())
```

```javascript
const url = 'https://api.elevenlabs.io/v1/dubbing/project/proj_1601kwkyxp0hfzvtmyxwqxx6mcy3/language?page_size=20';
const options = {method: 'GET'};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

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

func main() {

	url := "https://api.elevenlabs.io/v1/dubbing/project/proj_1601kwkyxp0hfzvtmyxwqxx6mcy3/language?page_size=20"

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

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

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

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

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.elevenlabs.io/v1/dubbing/project/proj_1601kwkyxp0hfzvtmyxwqxx6mcy3/language?page_size=20")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.elevenlabs.io/v1/dubbing/project/proj_1601kwkyxp0hfzvtmyxwqxx6mcy3/language?page_size=20")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.elevenlabs.io/v1/dubbing/project/proj_1601kwkyxp0hfzvtmyxwqxx6mcy3/language?page_size=20');

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.elevenlabs.io/v1/dubbing/project/proj_1601kwkyxp0hfzvtmyxwqxx6mcy3/language?page_size=20");
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let request = NSMutableURLRequest(url: NSURL(string: "https://api.elevenlabs.io/v1/dubbing/project/proj_1601kwkyxp0hfzvtmyxwqxx6mcy3/language?page_size=20")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"

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