Read AI ofrece una API REST pública, ideal para desarrolladores que buscan crear aplicaciones que accedan mediante programación a los datos de sus reuniones de Read AI. Actualmente está disponible como una versión beta abierta.
Solo puedes recuperar datos de los informes de reuniones a los que tienes acceso en la aplicación web de Read AI.
⚠️ Antes de comenzar, asegúrate de haber revisado los requisitos previos en Descripción general de la API y MCP de Read AI.
Autenticación
Todos los endpoints requieren autenticación mediante un token Bearer usando el encabezado Authorization. Consulta Claves de API y autenticación para obtener instrucciones sobre cómo obtener tu token de acceso.
Formato del encabezado
Authorization: Bearer ACCESS_TOKENEjemplo
curl https://api.read.ai/v1/meetings \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Accept: application/json"Reemplaza ACCESS_TOKEN con el token de acceso que obtuviste siguiendo los pasos de Claves de API y autenticación. Los tokens de acceso caducan después de 10 minutos, por lo que tendrás que actualizarlos usando tu token de actualización.
Estados de las reuniones
Las reuniones en la API de Read AI pueden encontrarse en diferentes estados:
-
Reunión activa: una reunión que está actualmente en curso. Se identifica porque
end_time_msno está presente o esnull. -
Reunión finalizada: una reunión completada. Se identifica porque
end_time_mstiene un valor. -
Reunión habilitada para datos en vivo: una reunión con la captura de datos en tiempo real habilitada. Se identifica mediante
live_enabled: true.
Endpoints
La URL base de todos los endpoints es https://api.read.ai/.
1. Enumerar reuniones
Método: GET /v1/meetings
Descripción: Devuelve una lista paginada de reuniones en orden cronológico inverso (de la más reciente a la más antigua), con la opción de filtrar por hora de inicio. Este endpoint devuelve tanto las reuniones activas como las finalizadas, incluido su estado de habilitación para datos en vivo. Ten en cuenta que las reuniones activas tendrán datos limitados o no tendrán datos para los campos expandibles, ya que estos se generan después de que finaliza una reunión.
Parámetros de consulta
| Nombre | Tipo | Descripción |
|---|---|---|
| limit | int | Número de resultados que se devolverán. Predeterminado: 10; máximo: 10. |
| start_time_ms.gt | int | Devuelve las reuniones en las que start_time_ms es mayor que este valor. |
| start_time_ms.gte | int | Devuelve las reuniones en las que start_time_ms es mayor o igual que este valor. |
| start_time_ms.lt | int | Devuelve las reuniones en las que start_time_ms es menor que este valor. |
| start_time_ms.lte | int | Devuelve las reuniones en las que start_time_ms es menor o igual que este valor. |
| cursor | str | Cursor para la paginación; usa el ID del último objeto de la página anterior. |
| expand[] | array | Campos que se expandirán (consulta la sección Campos expandibles). |
Solicitud de ejemplo
curl "https://api.read.ai/v1/meetings?limit=5&start_time_ms.gte=1733700000000" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Accept: application/json"Respuesta de ejemplo
{
"object": "list",
"url": "/v1/meetings",
"has_more": false,
"data": [
{
"id": "01HFYH0A6JM4R7MZ2E6X5T9BNP",
"start_time_ms": 1733800000000,
"end_time_ms": 1733803600000,
"scheduled_start_time_ms": 1733799800000,
"scheduled_end_time_ms": 1733803400000,
"participants": [
{
"name": "Alice Example",
"email": "alice@example.com",
"invited": true,
"attended": true
}
],
"owner": {
"name": "Alice Example",
"email": "alice@example.com"
},
"title": "Weekly status sync",
"report_url": "https://app.read.ai/analytics/meetings/01HFYH0A6JM4R7MZ2E6X5T9BNP",
"platform": "zoom",
"platform_id": "987654321",
"folders": ["Weekly Sync"],
"live_enabled": false
}
]
}2. Recuperar una reunión
Método: GET /v1/meetings/{id}
Descripción: Recupera una reunión específica mediante su ID único. Para reuniones activas y habilitadas para datos en vivo, usa el endpoint /v1/meetings/{id}/live en su lugar.
Parámetros de ruta
| Nombre | Tipo | Descripción |
|---|---|---|
| id | string | ULID de la reunión |
Parámetros de consulta
| Nombre | Tipo | Descripción |
|---|---|---|
| expand[] | array | Campos que se expandirán en la respuesta |
Solicitud de ejemplo
curl "https://api.read.ai/v1/meetings/01HFYH0A6JM4R7MZ2E6X5T9BNP?expand[]=summary&expand[]=metrics" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Accept: application/json"Respuesta de ejemplo
{
"id": "01HFYH0A6JM4R7MZ2E6X5T9BNP",
"start_time_ms": 1733800000000,
"end_time_ms": 1733803600000,
"scheduled_start_time_ms": 1733799800000,
"scheduled_end_time_ms": 1733803400000,
"participants": [
{
"name": "Alice Example",
"email": "alice@example.com",
"invited": true,
"attended": true
}
],
"owner": {
"name": "Alice Example",
"email": "alice@example.com"
},
"title": "Weekly status sync",
"report_url": "https://app.read.ai/analytics/meetings/01HFYH0A6JM4R7MZ2E6X5T9BNP",
"platform": "zoom",
"platform_id": "987654321",
"folders": ["Weekly Sync"],
"live_enabled": false,
"summary": "We reviewed project timelines and assigned new action items.",
"metrics": {
"read_score": 0.9,
"sentiment": 0.3,
"engagement": 0.75
}
}3. Recuperar una reunión en vivo
Método: GET /v1/meetings/{id}/live
Descripción: Recupera los datos en vivo de una reunión en curso mediante su ID único. Este endpoint te permite obtener la transcripción en tiempo real y los resúmenes de los capítulos a medida que avanza la reunión, con la opción de filtrar por hora de inicio.
Nota importante: No todas las reuniones tienen datos en vivo de forma predeterminada. Los datos en vivo solo están disponibles si alguien tiene abierto el panel de reuniones en vivo durante la reunión (consulta Usar el panel de reuniones en vivo de Read). Si quieres que la transcripción en vivo se active automáticamente para todas tus reuniones, ponte en contacto con el equipo de soporte.
Parámetros de ruta
| Nombre | Tipo | Descripción |
|---|---|---|
| id | string | ULID de la reunión |
Parámetros de consulta
| Nombre | Tipo | Descripción |
|---|---|---|
| start_time_ms.gt | int | Devuelve los datos en vivo donde start_time_ms es mayor que este valor |
| start_time_ms.gte | int | Devuelve los datos en vivo donde start_time_ms es mayor o igual que este valor |
| expand[] | array | Campos que se expandirán en la respuesta (solo transcript y chapter_summaries están disponibles para las reuniones en vivo) |
Solicitud de ejemplo
curl "https://api.read.ai/v1/meetings/01HFYH0A6JM4R7MZ2E6X5T9BNP/live?expand[]=transcript&start_time_ms.gte=1733800000000" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Accept: application/json"Respuesta de ejemplo
{
"id": "01HFYH0A6JM4R7MZ2E6X5T9BNP",
"start_time_ms": 1733800000000,
"end_time_ms": null,
"scheduled_start_time_ms": 1733799800000,
"scheduled_end_time_ms": 1733803400000,
"participants": [
{
"name": "Alice Example",
"email": "alice@example.com",
"invited": true,
"attended": true
}
],
"owner": {
"name": "Alice Example",
"email": "alice@example.com"
},
"title": "Weekly status sync",
"report_url": "https://app.read.ai/analytics/meetings/01HFYH0A6JM4R7MZ2E6X5T9BNP",
"platform": "zoom",
"platform_id": "987654321",
"folders": ["Weekly Sync"],
"live_enabled": true,
"transcript": {
"speakers": [
{
"name": "Alice Example"
}
],
"turns": [
{
"speaker": {
"name": "Alice Example"
},
"text": "Let's start with the project updates.",
"start_time_ms": 1733800000000,
"end_time_ms": 1733800005000
}
],
"text": "[Alice Example]: Let's start with the project updates."
}
}Campos expandibles
La API admite el parámetro expand[] para obtener campos enriquecidos adicionales que no se incluyen de forma predeterminada. Ten en cuenta que el uso de campos expandidos aumentará los tiempos de respuesta, ya que la API recupera y procesa datos adicionales. Expandir varios campos o usar expansiones en solicitudes de listas grandes puede generar tiempos de procesamiento considerablemente más lentos.
Campos disponibles
summarychapter_summariesaction_itemskey_questionstopicstranscriptmetricsrecording_download
Solicitud de ejemplo
curl "https://api.read.ai/v1/meetings?expand[]=metrics&expand[]=transcript" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Accept: application/json"Paginación
La API usa una paginación basada en cursores para navegar por grandes conjuntos de resultados.
Parámetros
| Parámetro | Descripción |
|---|---|
| limit | Número máximo de objetos que se devolverán. Predeterminado: 10; máximo: 10. |
| cursor | Cursor que apunta a la página siguiente. Usa el ID del último objeto de la respuesta anterior. |
Campos de respuesta
| Campo | Tipo | Descripción |
|---|---|---|
| object | str | Normalmente, "list". |
| url | str | URL de la solicitud. |
| has_more | bool | Indica si existen páginas adicionales. |
| data | array | Lista de objetos de reunión devueltos. |
Ejemplo de uso
El parámetro cursor debe establecerse en el ID de la última reunión devuelta en el arreglo data de la página anterior.
Paso 1: Solicitud de la primera página
Método: GET /v1/meetings
Respuesta de ejemplo:
{
"object": "list",
"url": "/v1/meetings",
"has_more": true,
"data": [
{
"id": "01KG7BZV04HJGVBM4KJCWV9P4N",
"title": "Team Standup",
...
},
{
"id": "01KG76TMYXDRZ0D86Z3MNXP566",
"title": "Client Call",
...
},
...
{
"id": "01KG4JRNA0EEFAJTM0S3PMDARK", // ← Last meeting id in this page
"title": "Sprint Planning",
...
}
]
}Paso 2: Solicitud de la segunda página
Toma el id del último objeto del arreglo data (01KG4JRNA0EEFAJTM0S3PMDARK) y úsalo como cursor:
Método: GET /v1/meetings?cursor=01KG4JRNA0EEFAJTM0S3PMDARK
Esto devolverá la siguiente página de resultados, comenzando después de esa reunión.
Paso 3: Continúa hasta terminar
Sigue repitiendo el proceso con el nuevo ID final hasta que has_more sea false.
Códigos de error
Las respuestas de error comunes siguen los códigos de estado HTTP estándar.
| Código de estado | Significado | Descripción |
|---|---|---|
| 200 | OK | La solicitud se realizó correctamente. |
| 400 | Solicitud incorrecta | Los parámetros de tu solicitud tienen un formato incorrecto o no son válidos. |
| 401 | No autorizado | La autenticación falló o falta el token. |
| 403 | Prohibido | No tienes permiso para acceder a este recurso. |
| 404 | No encontrado | El recurso solicitado no existe. |
| 422 | Entidad no procesable | Uno o más parámetros no superaron la validación. |
| 429 | Demasiadas solicitudes | Se superó el límite de frecuencia (máximo de 100 solicitudes por minuto por usuario). Reduce la velocidad y vuelve a intentarlo más tarde. |
| 500 | Error del servidor | Se produjo un error en el servidor. |