Desarrolladores
Plataforma para desarrolladores
Tylode tiene una API REST pública, OAuth para apps de terceros, webhooks salientes, un servidor MCP para asistentes de IA y plugins dentro de la app. Con ellos puedes automatizar tu espacio de trabajo, conectarlo con las herramientas que ya usas o construir algo nuevo sobre tus páginas, tableros, calendario y chats.
Qué puedes construir
- Scripts e integraciones con la API REST. Lee, crea, cambia y borra páginas, tarjetas, eventos, filas de bases de datos, mensajes de chat, correo interno, archivos de Mi unidad y más, desde cualquier lenguaje que sepa hacer una petición HTTP.
- Apps OAuth. Deja que otras personas conecten tu app a su cuenta de Tylode con permisos acotados, en vez de pedirles un token que lo puede todo.
- Webhooks. Recibe en tu servidor una petición HTTP firmada cada vez que se crea una página, se mueve una tarjeta, alguien escribe en un chat de grupo y más. También funcionan directamente con Slack.
- Asistentes de IA con MCP. Conecta Claude, Cursor, VS Code o cualquier cliente MCP para que el asistente lea y escriba en tu Tylode.
- Plugins. Mete tu propia página web dentro de Tylode, en un marco aislado que puede llamar a la API con los permisos que le conceda el espacio.
Requisitos
| Función | Qué necesitas |
|---|---|
| API REST con token de acceso personal | Tu cuenta en Pro o Premium |
| Servidor MCP | Tu cuenta en Pro o Premium (usa un token de acceso personal) |
| Apps OAuth | Cualquiera puede registrar una app; cada persona que la autorice tiene que estar en Pro o Premium para que sus llamadas funcionen |
| Webhooks | Un espacio en Pro o Premium, y ser admin en él |
| Plugins | Ser admin para instalarlos; cualquiera del espacio puede usarlos |
El plan se comprueba en cada petición, no solo al crear el token. Si pasas a Free, tus tokens se quedan donde están pero dejan de funcionar, y vuelven a hacerlo en cuanto regresas a Pro. Tienes los precios en Planes.
URL base
Todos los endpoints REST cuelgan de:
https://app.tylode.com/api/v1Los endpoints de OAuth (/oauth/authorize y /api/oauth/token) y el servidor MCP (/api/mcp) están en el mismo dominio, fuera de /api/v1.
Inicio rápido
En tres pasos pasas de cero a tu primera respuesta de la API. Necesitas una cuenta en Pro o Premium.
1. Crea un token
- En Tylode, abre Ajustes → API y webhooks → API y plugins.
- En Tokens de acceso personal, escribe un nombre (por ejemplo, «Mi script») y pulsa Crear token.
- Copia el token que aparece. Empieza por
tylode_pat_y solo se muestra una vez.
Guárdalo en una variable de entorno en vez de en el código:
export TYLODE_TOKEN="tylode_pat_xxx"Más detalles en Autenticación.
2. Averigua el ID de tu espacio
Casi todos los endpoints piden un workspace_id. Lista tus espacios:
curl https://app.tylode.com/api/v1/workspaces \
-H "Authorization: Bearer $TYLODE_TOKEN"{
"data": [
{
"id": "7c1e2a4b-3f5d-4e8a-9b21-6d0f5c8e1a37",
"name": "Acme",
"slug": "acme",
"plan": "pro",
"role": "owner",
"frozen": false
}
]
}Copia el id del espacio que quieras. También lo tienes en la app, en Ajustes → Workspace → Datos del espacio → ID del espacio → Copiar.
3. Lista tus páginas
curl "https://app.tylode.com/api/v1/pages?workspace_id=7c1e2a4b-3f5d-4e8a-9b21-6d0f5c8e1a37" \
-H "Authorization: Bearer $TYLODE_TOKEN"{
"data": [
{
"id": "2b9d6f1e-8a4c-4f3b-b7e2-51c0d9a8e6f4",
"workspace_id": "7c1e2a4b-3f5d-4e8a-9b21-6d0f5c8e1a37",
"parent_page_id": null,
"title": "Product roadmap",
"icon": "🗺️",
"position": 0
}
]
}Las mismas llamadas en JavaScript (Node.js 18 o posterior):
const BASE = "https://app.tylode.com/api/v1";
const headers = { Authorization: `Bearer ${process.env.TYLODE_TOKEN}` };
const { data: workspaces } = await (await fetch(`${BASE}/workspaces`, { headers })).json();
const workspaceId = workspaces[0].id;
const { data: pages } = await (
await fetch(`${BASE}/pages?workspace_id=${workspaceId}`, { headers })
).json();
console.log(pages.map((p) => p.title));A partir de aquí, crea una página con POST /pages (mira la API de páginas) o salta a las recetas.
Convenciones
- JSON de entrada y de salida. Envía los cuerpos en JSON con
Content-Type: application/json. - Las respuestas correctas envuelven el resultado en
{ "data": … }. Los errores devuelven{ "error": "mensaje" }con un código HTTP significativo. Mira Errores y convenciones. - Los IDs son UUID, como
2b9d6f1e-8a4c-4f3b-b7e2-51c0d9a8e6f4. - Las fechas van en ISO 8601 y en UTC, como
2026-09-23T08:30:00+00:00. - Cada petición actúa como tú. La API ve exactamente lo que ves tú en la app, con los mismos permisos. Si no puedes abrir una página en Tylode, la API tampoco puede leerla, y lo que no ves simplemente no aparece en las listas.
- Crear devuelve
201; todo lo demás que sale bien devuelve200.
Listar tus espacios de trabajo
GET /api/v1/workspaces
Devuelve los espacios de trabajo a los que perteneces, empezando por aquel en el que entraste antes. Es la primera llamada de cualquier integración, porque casi todo lo demás necesita un ID de espacio.
Permiso (scope): ninguno. Cualquier app OAuth que hayas autorizado puede llamarlo, tenga los permisos que tenga, porque solo le dice en qué espacios estás.
Parámetros: ninguno.
Campos de la respuesta
| Campo | Tipo | Descripción |
|---|---|---|
id | string (UUID) | ID del espacio. Úsalo como workspace_id en las demás llamadas. |
name | string | Nombre del espacio. |
slug | string | Nombre corto del espacio. |
plan | string | Plan del espacio: free, pro o premium. |
role | string | Tu rol en él: owner, admin, member o viewer (solo lectura). |
frozen | boolean | true si el espacio está congelado para ti: puedes leerlo todo, pero no crear ni editar. Mira Espacios de trabajo. |
Ejemplo
curl https://app.tylode.com/api/v1/workspaces \
-H "Authorization: Bearer tylode_pat_xxx"const res = await fetch("https://app.tylode.com/api/v1/workspaces", {
headers: { Authorization: "Bearer tylode_pat_xxx" },
});
const { data } = await res.json();{
"data": [
{
"id": "7c1e2a4b-3f5d-4e8a-9b21-6d0f5c8e1a37",
"name": "Acme",
"slug": "acme",
"plan": "pro",
"role": "owner",
"frozen": false
},
{
"id": "e4a8c2d6-1b3f-4a5e-8c7d-9f0b2e4d6a81",
"name": "Freelance clients",
"slug": "freelance-clients",
"plan": "free",
"role": "member",
"frozen": true
}
]
}Errores: 401 si falta el token o no es válido, 403 si su dueño no está en Pro y 429 si te pasas del límite de peticiones.
Índice de endpoints
Todas las rutas son relativas a https://app.tylode.com/api/v1. La columna de permiso solo importa a las apps OAuth y a los plugins; los tokens de acceso personal pueden llamar a todo.
| Método | Ruta | Qué hace | Permiso | Referencia |
|---|---|---|---|---|
| GET | /workspaces | Lista tus espacios | ninguno | Arriba |
| GET | /pages | Lista las páginas de un espacio | pages:read | Páginas |
| POST | /pages | Crea una página | pages:write | Páginas |
| GET | /pages/:id | Lee una página con su contenido | pages:read | Páginas |
| PATCH | /pages/:id | Cambia el título o el contenido | pages:write | Páginas |
| DELETE | /pages/:id | Mueve una página a la papelera | pages:delete | Páginas |
| GET | /databases | Lista las bases de datos y sus columnas | databases:read | Bases de datos |
| GET | /databases/:id/rows | Lista las filas | databases:read | Bases de datos |
| POST | /databases/:id/rows | Añade una fila | databases:write | Bases de datos |
| PATCH | /databases/:id/rows/:rowId | Cambia celdas de una fila | databases:write | Bases de datos |
| DELETE | /databases/:id/rows/:rowId | Borra una fila | databases:delete | Bases de datos |
| GET | /boards | Lista los tableros | boards:read | Tableros |
| GET | /boards/:id/lists | Lista las listas (columnas) de un tablero | boards:read | Tableros |
| GET | /boards/:id/cards | Lista las tarjetas de un tablero | boards:read | Tableros |
| POST | /boards/:id/cards | Crea una tarjeta | boards:write | Tableros |
| PATCH | /boards/:id/cards/:cardId | Cambia o mueve una tarjeta | boards:write | Tableros |
| DELETE | /boards/:id/cards/:cardId | Borra una tarjeta | boards:delete | Tableros |
| DELETE | /boards/:id | Mueve un tablero a la papelera | boards:delete | Tableros |
| GET | /calendar/events | Lista eventos, con los recurrentes desplegados | calendar:read | Calendario |
| POST | /calendar/events | Crea un evento | calendar:write | Calendario |
| PATCH | /calendar/events/:id | Cambia un evento | calendar:write | Calendario |
| DELETE | /calendar/events/:id | Borra un evento | calendar:delete | Calendario |
| GET | /chats | Lista tus conversaciones | chats:read | Comunicación |
| GET | /chats/:id/messages | Lee una conversación | chats:read | Comunicación |
| POST | /chats/:id/messages | Envía un mensaje | chats:write | Comunicación |
| GET | /mail | Lista los hilos de correo interno | mail:read | Comunicación |
| POST | /mail | Empieza un hilo | mail:write | Comunicación |
| GET | /mail/:id | Lee un hilo | mail:read | Comunicación |
| POST | /mail/:id | Responde a un hilo | mail:write | Comunicación |
| PATCH | /mail/:id | Marca como leído o archiva | mail:write | Comunicación |
| GET | /notifications | Lista las notificaciones | notifications:read | Comunicación |
| POST | /notifications | Las marca todas como leídas | notifications:write | Comunicación |
| GET | /whiteboards | Lista las pizarras | whiteboards:read | Contenido |
| POST | /whiteboards | Crea una pizarra | whiteboards:write | Contenido |
| GET | /whiteboards/:id/elements | Lista los elementos de una pizarra | whiteboards:read | Contenido |
| POST | /whiteboards/:id/elements | Añade una nota, un texto o una forma | whiteboards:write | Contenido |
| PATCH | /whiteboards/:id/elements/:elementId | Mueve o cambia un elemento | whiteboards:write | Contenido |
| DELETE | /whiteboards/:id/elements/:elementId | Borra un elemento | whiteboards:delete | Contenido |
| DELETE | /whiteboards/:id | Mueve una pizarra a la papelera | whiteboards:delete | Contenido |
| GET | /presentations | Lista tus presentaciones | presentations:read | Contenido |
| POST | /presentations | Crea una presentación | presentations:write | Contenido |
| GET | /presentations/:id/slides | Lista las diapositivas | presentations:read | Contenido |
| POST | /presentations/:id/slides | Añade una diapositiva en blanco | presentations:write | Contenido |
| GET | /presentations/:id/slides/:slideId/elements | Lista los elementos de una diapositiva | presentations:read | Contenido |
| POST | /presentations/:id/slides/:slideId/elements | Añade un texto o una forma a una diapositiva | presentations:write | Contenido |
| PATCH | /presentations/:id/slides/:slideId/elements/:elementId | Mueve o cambia un elemento de una diapositiva | presentations:write | Contenido |
| DELETE | /presentations/:id/slides/:slideId/elements/:elementId | Borra un elemento de una diapositiva | presentations:delete | Contenido |
| DELETE | /presentations/:id/slides/:slideId | Borra una diapositiva | presentations:delete | Contenido |
| DELETE | /presentations/:id | Mueve una presentación a la papelera | presentations:delete | Contenido |
| GET | /search | Busca en el espacio | search:read | Contenido |
| GET | /storage | Lista carpetas y archivos de Mi unidad | storage:read | Contenido |
| POST | /storage | Sube un archivo a Mi unidad | storage:write | Contenido |
| GET | /storage/:id | Lee un archivo y un enlace de descarga | storage:read | Contenido |
| DELETE | /storage/:id | Mueve un archivo de Mi unidad a la papelera | storage:delete | Contenido |
Páginas relacionadas
- Autenticación: tokens, cabeceras y límites de uso.
- Errores y convenciones: códigos de estado y límites.
- Servidor MCP: usa Tylode desde un asistente de IA sin escribir código.