Felo APIs
PPT Task API
Crea tareas de generación de PPT, enumera temas y consulta endpoints de tareas compartidos.
/v2/pptsAutenticación
Bearer API key
Tipo de contenido
application/json
Notas sobre límites
Pueden aplicarse límites específicos del endpoint.
La PPT Task API ofrece capacidades de generación asíncrona de PPT. Puedes crear una tarea y después consultar el estado de la tarea por task_id. También puedes explorar los temas de PPT disponibles y aplicarlos al crear tareas.
Esta es una API asíncrona. Para conocer el patrón compartido de envío, consulta y recuperación, consulta Tareas asíncronas.
Autenticación
Todas las solicitudes requieren una clave de API en el encabezado Authorization:
Authorization: Bearer YOUR_API_KEYUso con agentes de IA
Para crear diapositivas desde un agente, instala el paquete completo felo-ai en lugar de un subconjunto fijo de Skills. Su instalador descubre dinámicamente todos los directorios del paquete que contengan SKILL.md, incluida la Skill de PPT y las incorporaciones futuras. Instala todas las Skills descubiertas en el directorio nativo de tu agente: Codex ~/.codex/skills, Claude Code ~/.claude/skills, OpenClaw ~/.agents/skills o Hermes Agent ~/.hermes/skills. Sigue la guía de configuración manual de agentes de IA para la configuración y verificación de la clave de API específicas de cada plataforma.
1. Listar temas de PPT
Consulta los temas de PPT disponibles con paginación, búsqueda por palabra clave y filtrado por idioma y tipo.
Endpoint
GET https://openapi.felo.ai/v2/ppt-themesParámetros de consulta
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
lang | string | No | Código de idioma para el contenido localizado (por ejemplo, en, zh-Hans). Predeterminado: en |
type | string | No | Filtra por tipo de tema (por ejemplo, default, custom) |
keyword | string | No | Palabra clave de búsqueda; coincide con los títulos de los temas |
page | integer | No | Número de página, empezando por 1. Predeterminado: 1 |
size | integer | No | Tamaño de página, máximo 100. Predeterminado: 20 |
Ejemplo
curl -X GET 'https://openapi.felo.ai/v2/ppt-themes?lang=en&page=1&size=10' \
-H 'accept: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY'Respuesta correcta (200)
{
"status": "ok",
"message": null,
"data": {
"total": 8,
"page": 1,
"size": 10,
"items": [
{
"id": "43122897-0d3c-4c9e-ae19-20527ad36c04",
"title": "Inspiration Themes",
"subtitle": "AI-tailored visual solutions",
"description": "Style and layout, both crafted by AI from your content in real time"
}
]
}
}Campos de la respuesta de temas
| Campo | Tipo | Descripción |
|---|---|---|
total | integer | Número total de temas que coinciden con el filtro |
page | integer | Número de página actual |
size | integer | Tamaño de página |
items | array | Lista de objetos de tema |
items[].id | string | ID del tema; úsalo como ai_theme_id al crear un PPT |
items[].title | string | Título del tema (localizado) |
items[].subtitle | string | Subtítulo del tema (localizado) |
items[].description | string | Descripción del tema (localizada) |
2. Crear una tarea de PPT
Endpoint
POST https://openapi.felo.ai/v2/pptsEncabezados de la solicitud
| Encabezado | Obligatorio | Descripción |
|---|---|---|
Authorization | Sí | Tu clave de API con el formato Bearer YOUR_API_KEY |
Content-Type | Sí | application/json o multipart/form-data |
Cuerpo de la solicitud
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
query | string | Sí | Prompt de solicitud de generación del PPT |
livedoc_short_id | string | No | ID corto de un LiveDoc existente que se asociará a la sesión de PPT. Si se omite, se crea automáticamente un nuevo LiveDoc. |
resource_ids | array de strings | No | Lista de ID de recursos de LiveDoc que se usarán como contexto para generar el PPT |
ppt_config | object | No | Opciones de configuración del PPT |
ppt_config.ai_theme_id | string | No | ID de tema del endpoint Listar temas de PPT |
Ejemplo
curl -X POST 'https://openapi.felo.ai/v2/ppts' \
-H 'accept: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"query": "Felo, 2 pages",
"ppt_config": {
"ai_theme_id": "02968979-a69f-42c4-b136-de02c40ab2d7"
}
}'Crear a partir de un archivo subido
Usa multipart/form-data para subir un archivo y crear una tarea de PPT en una sola solicitud. La plataforma sube primero el archivo como recurso de LiveDoc y después pasa su ID de recurso a la tarea de PPT.
| Parte | Tipo | Obligatorio | Descripción |
|---|---|---|---|
query | string | Sí | Prompt de solicitud de generación del PPT |
file | file | Sí | Archivo de origen usado como contexto del PPT |
stream_protocol | string | No | Protocolo de streaming; su valor predeterminado es message_center_v1 |
livedoc_short_id | string | No | LiveDoc existente que recibirá el archivo. Si se omite, se crea un nuevo LiveDoc. |
ppt_config | JSON | No | Configuración del PPT con la misma estructura que el cuerpo de la solicitud JSON. Envía esta parte como application/json. |
curl -X POST 'https://openapi.felo.ai/v2/ppts' \
-H 'accept: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-F 'query=Create a 10-page presentation based on this report' \
-F 'ppt_config={"ai_theme_id":"02968979-a69f-42c4-b136-de02c40ab2d7"};type=application/json' \
-F '[email protected]'La respuesta usa el mismo esquema que la solicitud JSON. El livedoc_short_id devuelto identifica el LiveDoc que contiene el recurso subido.
Respuesta correcta (200)
{
"status": "ok",
"message": null,
"data": {
"livedoc_short_id": "PvyKouzJirXjFdst4uKRK3",
"ppt_business_id": "BfLPuQKmChk9SPmyQawxgr",
"task_id": "019cad6d-e874-55ef-d577-686344b5a7e9"
}
}3. Consultar el estado de la tarea
Endpoint
GET https://openapi.felo.ai/v2/tasks/{task_id}/statusEjemplo
curl -X GET 'https://openapi.felo.ai/v2/tasks/019cad6d-e874-55ef-d577-686344b5a7e9/status' \
-H 'accept: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY'Respuesta correcta (200)
{
"status": "ok",
"message": null,
"data": {
"status": "RUNNING"
}
}4. Consultar la información histórica de la tarea
Endpoint
GET https://openapi.felo.ai/v2/tasks/{task_id}/historicalEjemplo
curl -X GET 'https://openapi.felo.ai/v2/tasks/019cb17e-9e23-3d40-4447-48a651249460/historical' \
-H 'accept: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY'Respuesta RUNNING
{
"status": "ok",
"message": null,
"data": {
"task_id": "019cb17e-9e23-3d40-4447-48a651249460",
"task_status": "RUNNING",
"ppt_biz_id": "oM8A9iJHg8dT4ZKgHThQTx",
"ppt_url": "https://felo.ai/slides/oM8A9iJHg8dT4ZKgHThQTx"
}
}Respuesta COMPLETED
{
"status": "ok",
"message": null,
"data": {
"task_id": "019cb17e-9e23-3d40-4447-48a651249460",
"task_status": "COMPLETED",
"ppt_biz_id": "oM8A9iJHg8dT4ZKgHThQTx",
"ppt_url": "https://felo.ai/slides/oM8A9iJHg8dT4ZKgHThQTx",
"live_doc_short_id": "oM8A9iJHg8dT4ZKgHThQTx",
"live_doc_url": "https://felo.ai/livedoc/oM8A9iJHg8dT4ZKgHThQTx"
}
}Respuesta COMPLETED (AI_PAGE)
{
"status": "ok",
"message": null,
"data": {
"task_id": "019d7a4d-6ab5-a96d-0f98-43ca434ab621",
"task_status": "COMPLETED",
"ppt_biz_id": "9qiLTmT77fA3aVurrMHvRJ",
"ppt_url": "https://felo.ai/slides/9qiLTmT77fA3aVurrMHvRJ",
"ai_page_html": "https://felo.ai/ai-page/9qiLTmT77fA3aVurrMHvRJ"
}
}Respuesta FAILED / PENDING / EXPIRED / CANCELED
{
"status": "ok",
"message": null,
"data": {
"task_id": "019cb17e-9e23-3d40-4447-48a651249460",
"task_status": "FAILED",
"ppt_biz_id": "oM8A9iJHg8dT4ZKgHThQTx",
"ppt_url": "https://felo.ai/slides/oM8A9iJHg8dT4ZKgHThQTx",
"error_message": "PPT generation failed",
"live_doc_short_id": "oM8A9iJHg8dT4ZKgHThQTx",
"live_doc_url": "https://felo.ai/livedoc/oM8A9iJHg8dT4ZKgHThQTx"
}
}Campos de la respuesta histórica
| Campo | Tipo | Descripción |
|---|---|---|
task_id | string | ID de la tarea |
task_status | string | Estado actual de la tarea |
ppt_biz_id | string | ID de negocio del PPT (asignado desde thread_short_id del backend) |
ppt_url | string | URL del PPT, formato: https://felo.ai/slides/{ppt_biz_id} |
error_message | string | Presente en FAILED / PENDING / EXPIRED / CANCELED; cadena vacía "" cuando el downstream no proporciona detalles del error |
ai_page_html | string | Presente cuando la tarea se ejecuta en modo AI_PAGE y el historial downstream devuelve una URL de resultado HTML |
live_doc_short_id | string | ID corto del LiveDoc. Para COMPLETED procede del live_doc_short_id downstream; en los estados de fallo terminal se devuelve cuando está disponible |
live_doc_url | string | URL del LiveDoc correspondiente a live_doc_short_id |
Exportar PPTX
Después de que la tarea de generación de PPT alcance COMPLETED, envía una exportación asíncrona usando ppt_business_id de la respuesta de creación (o ppt_biz_id de la respuesta histórica):
curl -X POST 'https://openapi.felo.ai/v2/ppts/YOUR_PPT_BUSINESS_ID/export' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{}'Consulta GET https://openapi.felo.ai/v2/ppts/{ppt_business_id}/export con la misma clave de API Bearer cada 2–5 segundos. El propietario de la clave de API debe ser el propietario del PPT. Ambos endpoints devuelven data.status: NOT_STARTED, PROCESSING, COMPLETED o FAILED. Solo COMPLETED incluye download_url y expires_at.
La URL de descarga firmada caduca 30 minutos después de su emisión. Vuelve a llamar al endpoint GET para obtener una URL nueva; esto no regenera el PPTX. POST usa application/json y acepta {}. Repetir el POST mientras una exportación está en proceso no inicia otro trabajo; llamarlo después de completarse regenera el PPTX y genera el cargo existente por exportación de PPT. Si no hay créditos suficientes, se devuelve HTTP 402. Pueden aplicarse límites de solicitudes específicos del endpoint; vuelve a intentarlo más tarde si recibes HTTP 429. Una exportación fallida se puede volver a enviar.
{
"status": "ok",
"message": null,
"data": {
"status": "COMPLETED",
"download_url": "https://example.com/presentation.pptx?signature=...",
"expires_at": "2026-09-29T10:30:00Z"
}
}Recomendación de consulta periódica
Usa el task_id de la respuesta de creación y consulta el estado cada 2-5 segundos hasta que el estado sea terminal.
Ejemplos de estados habituales:
RUNNING: la tarea sigue en procesoCOMPLETED: la tarea se completó correctamenteFAILED/PENDING/EXPIRED/CANCELED: la tarea alcanzó un estado terminal conerror_message; también se devuelvelive_doc_urlcuando está disponible
Pueden aparecer valores de estado desconocidos a medida que evoluciona el backend; trátalos como no terminales salvo que la documentación indique lo contrario.
Códigos de error
| Código | Estado HTTP | Descripción |
|---|---|---|
UNAUTHORIZED | 401 | La clave de API no es válida o está revocada |
PPT_TASK_CREATE_FAILED | 502 | Falló la llamada downstream de creación de la tarea |
PPT_TASK_QUERY_FAILED | 502 | Falló la llamada downstream de consulta del estado de la tarea |