> ## Documentation Index
> Fetch the complete documentation index at: https://docs.edtools.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Panorama

> Las 742 rutas de la API, ordenadas por quién las llama y qué garantía tienen.

Esta sección es un **mapa interno**, no un contrato. Documenta lo que existe para que el equipo pueda orientarse: qué hay montado, dónde vive el código y bajo qué middleware corre.

<Warning>
  Nada de lo que hay aquí es una API pública. Estos endpoints cambian con el producto, no están versionados y no tienen esquema declarado. Para integrar un sistema externo existe el [Client API](/client-api/inicio-rapido), y solo ese.
</Warning>

## Las cuatro capas

<CardGroup cols={2}>
  <Card title="Dashboard" icon="table-columns" href="/superficies/v1">
    **612 endpoints** en 55 grupos bajo `/api/v1`. Sesión de Better Auth, tenant por subdominio, acceso validado. Es el grueso del producto.
  </Card>

  <Card title="Portal" icon="house" href="/superficies/portal">
    **17 endpoints** bajo `/api/v1/portal`. Familias y estudiantes, detrás de `portalMiddleware`, con el acceso colgado de la cuenta financiera.
  </Card>

  <Card title="Pública" icon="globe" href="/superficies/publica">
    **40 endpoints** bajo `/api/public`. Sin sesión: widget, formularios, PQRS, firmas, callbacks de OAuth y webhooks entrantes.
  </Card>

  <Card title="Interna" icon="gear" href="/superficies/interna">
    **25 endpoints** bajo `/api/internal`. Solo para tareas de Trigger.dev, con secreto compartido.
  </Card>
</CardGroup>

A eso se suman las **41 operaciones** del Client API (documentadas en la pestaña Referencia) y siete rutas sueltas de arranque: `/api/health`, `/api/onboarding/*`, `/api/session/tenants` y `/api/access-requests`.

## Dónde está el peso

Los diez grupos más grandes del dashboard dicen bastante sobre en qué consiste el producto:

| Grupo                                   | Endpoints |
| --------------------------------------- | --------- |
| `/api/v1/communications`                | 62        |
| `/api/v1/scheduling`                    | 52        |
| `/api/v1/vault`                         | 39        |
| `/api/v1/signatures`                    | 35        |
| `/api/v1/finance/siigo`                 | 28        |
| `/api/v1/forms`                         | 27        |
| `/api/v1/automations/whatsapp-meta`     | 24        |
| `/api/v1/pqrs`                          | 23        |
| `/api/v1/automations/conversation-bots` | 19        |
| `/api/v1/finance/collections`           | 18        |

## Cómo se construyen estos catálogos

No están escritos a mano. `scripts/generar-docs-mintlify.mjs` lee `apps/web/src/server/app.ts`, resuelve qué archivo está montado en cada prefijo y extrae los métodos declarados en ese archivo. Cada página dice contra qué commit se generó.

```bash theme={null}
node scripts/generar-docs-mintlify.mjs
```

<Info>
  La extracción es estática. Reconoce las dos formas que usa el repo — el `xRoute.get('/ruta', ...)` de Hono y el `createRoute({ method, path })` de zod-openapi — y exige que la ruta empiece por `/` para no confundir un `c.get('tenant')` con un endpoint. Una ruta montada de una forma distinta no aparecería: el número es un piso confiable, no una prueba de exhaustividad.
</Info>

La forma de verificarlo es correr el generador después de tocar rutas y mirar el diff. Si cambió el conteo, cambió la superficie.
