As páginas do manual estão escritas em espanhol.

La API

Para conectar Liora con tus propios sistemas: crear salas, consultar el consumo, mandar trabajos de traducción.

⚠️Hace falta el modo integrador

Las llaves de API se emiten desde Cuenta, y esa tarjeta sólo aparece con el modo integrador encendido. Cómo se enciende.


Cómo se identifica quien llama

Una llave de API. Se emite desde Cuenta y se enseña una sola vez: de ella guardamos sólo una huella, así que si se pierde hay que emitir otra.

Se manda en una cabecera, de estas dos formas:

curl -H "X-API-Key: lk_…" https://…/api/v1/rooms
curl -H "Authorization: Bearer lk_…" https://…/api/v1/rooms

No la pongas en la dirección

Se acepta ?api_key=… por compatibilidad, pero no lo uses: una llave en la dirección queda en el historial del navegador, en el Referer de cualquier cosa que cargue esa página, y en los registros de cualquier proxy por el que pase.

Los nuestros no la guardan. Los de otro sí pueden.


Lo que abre una llave

La cuenta entera. No hay llaves de sólo lectura ni acotadas a un sitio: quien tiene la llave puede todo lo que puede la cuenta.

Por eso sólo la emite quien administra la cuenta —ni siquiera quien lleva las facturas—, y por eso conviene tener una por sistema y revocar la que ya no se use: así se corta uno sin tocar los demás.

Cada llave ve sólo lo suyo

Una llave de una cuenta no puede leer ni tocar los datos de otra. Pedir una sala ajena contesta que no existe, y borrarla, lo mismo.


Qué se puede hacer

Camino Para qué
GET /api/v1/rooms Las salas de tu cuenta
POST /api/v1/rooms Crear una
GET /api/v1/rooms/{id} Una en concreto, por su id, no por su identificador de emisión
PATCH /api/v1/rooms/{id} Cambiarle el nombre
PUT /api/v1/rooms/{id}/languages A qué idiomas traduce
DELETE /api/v1/rooms/{id} Borrarla
GET /api/v1/rooms/{id}/events Qué ha ido pasando en ella
GET /api/v1/usage El consumo, día a día
GET /api/v1/credit El saldo
GET /api/v1/jobs · POST /api/v1/jobs Trabajos de traducción de audio o texto
GET /api/v1/jobs/{id}/result Lo transcrito, en txt, json, srt o vtt
GET /api/v1/jobs/{id}/result?format=acta El acta del fichero, en txt. También acta.md, acta.json y acta.pdf
POST /api/v1/jobs/{id}/summary Encarga el resumen. Contesta 202: se está haciendo
GET /api/v1/jobs/{id}/summary Lo recoge cuando está
PUT · POST · DELETE /api/v1/jobs/{id}/acta/email A dónde mandar el acta, mandarla ahora, o dejar de mandarla
PUT · DELETE /api/v1/jobs/{id}/acta/webhook Que te avisemos a una dirección cuando esté, o dejar de avisar

Los ajustes acústicos de una sala no están en la API: se afinan escuchando cómo suena ese sitio, y de eso nos encargamos nosotros. Si una sala no se oye como debería, dilo y la ajustamos.


Y si pides que te avisemos: qué te llega

PUT /api/v1/jobs/{id}/acta/webhook con {"url": "https://…"} hace que te mandemos un POST cuando el acta esté. Esto es lo que llega, con Content-Type: application/json:

{
  "event": "acta.ready",
  "job_id": 4711,
  "name": "reunion-de-ventas.mp4",
  "lines": 128,
  "formats": ["txt", "md", "json", "pdf"],
  "download": "https://<nuestra-api>/api/v1/jobs/4711/acta?format=txt",
  "at": 1788557146020
}
  • event — hoy sólo hay uno, acta.ready, y va igualmente: quien lo reciba quiere poder distinguirlo el día que haya un segundo.
  • formats — los que de verdad se pueden escribir de este documento: el pdf depende de que haya letra para lo que se dijo. No des por hecho los cuatro.
  • download — ya montada, para que no tengas que componer la dirección a mano ni acertar con el parámetro.
  • at — en milisegundos, para poder ordenar dos avisos sin fiarte de la hora del que los recibe.

Estos nombres son un contrato. Quien monte un Zapier contra esto lo lee por nombre de campo, así que se añaden campos y no se renombran.


Lo que devuelve

JSON llano. Un campo que venga vacío no aparece en la respuesta, en vez de salir como un cero o como una fecha del año 1.

{
  "rooms": [
    {
      "id": "039e1c2d-96da-4a62-8b39-1102e11d1d22",
      "company_id": 7,
      "private": false,
      "access_ttl_minutes": 0,
      "source": "srt",
      "client_id": "rm_sh55iky7i5zgw",
      "enabled": true,
      "name": "Sala principal",
      "created_at": "2026-08-15T14:01:19Z"
    }
  ]
}

Los campos son ésos y en ese orden. access_ttl_minutes en cero significa «mientras dure la emisión», y private en falso, que no hace falta código para entrar.

ℹ️En qué servidor está tu sala no sale

Es infraestructura nuestra, no información tuya. Si algún día cambiamos de sitio una sala, tu integración no se entera — que es como tiene que ser.


Cuando algo va mal

Siempre la misma forma, y el que manda es error — el message está para leerlo una persona y puede cambiar:

{ "success": false, "error": "API_KEY_INVALID", "message": "The API key is not valid" }

Identificarse

Código error Cuándo
401 API_KEY_MISSING No mandaste llave por ninguna de las tres formas
401 API_KEY_INVALID La llave no existe o está revocada

Salas

Código error Cuándo
404 NOT_FOUND Esa sala no existe o no es de tu cuenta — la misma respuesta a propósito: decir «existe pero no es tuya» ya es contar algo de otro
409 ROOM_NOT_CONFIGURED La sala aún no tiene ajustes; pásale los idiomas antes
409 APP_ID_TAKEN Al crear, el nombre que le diste ya lo lleva otra sala tuya

Trabajos

Código error Cuándo
413 TOO_LONG Se pasa de los límites de arriba
422 NO_SPEECH En esa grabación no se ha encontrado voz. No se cobra
429 QUEUE_FULL Ya tienes tres en cola. Espera a que termine uno
402 NO_CREDIT No hay saldo para lo que va a costar. Lo dice antes de empezar
409 NOT_DONE Pides el resultado y el trabajo aún no ha terminado
410 RESULT_GONE Ha pasado el plazo de guardado y el resultado ya no está
409 TOO_LATE Intentas cancelar algo que ya se estaba haciendo
409 OFFSET_MISMATCH Al reanudar una subida, el byte por el que ibas no cuadra. La respuesta trae por cuál seguir

💡Los que se arreglan solos y los que no

QUEUE_FULL se arregla esperando y merece reintento. NO_CREDIT, TOO_LONG y NO_SPEECH no: reintentarlos da exactamente el mismo resultado y sólo gasta viajes.


Límites

Están en su propia página: límites de la API.


La referencia completa

Esto es lo que hace falta entender. Cada parámetro, cada respuesta y cada código, uno a uno, están en la referencia, que se puede leer y probar desde el navegador:

La referencia de la API →

Está en inglés, como la propia especificación de la que se genera.