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

# Añadir un endpoint

> Receta completa, del route handler a la documentación.

Esta receta resume, en orden, todo lo que hay que tocar al añadir un
endpoint nuevo bajo `src/app/api/`. Cada paso enlaza a la página que lo
explica en detalle.

1. **Crea el route handler** en `src/app/api/<ruta>/route.ts` siguiendo el
   patrón de cuatro pasos descrito en
   [Route handlers](/docs/handbook/arquitectura/route-handlers).

2. **Define el schema Zod** y valida con `safeParse`. Si falla, responde
   `400`:

   ```json theme={null}
   {
     "error": "Parametros invalidos",
     "issues": {}
   }
   ```

   `issues` es la salida de `parsed.error.flatten()`.

3. **Si la ruta es `/api/admin/*`**, empieza llamando a `requireAdmin()` y
   retorna `error` tal cual cuando no sea `null`:

   ```ts theme={null}
   const auth = await requireAdmin();
   if (auth.error) {
     return auth.error;
   }
   ```

4. **Si el listado pagina**, usa cursor: `take: limit + 1`, `cursor` +
   `skip: 1`, y responde:

   ```json theme={null}
   {
     "items": [],
     "nextCursor": "clx...",
     "hasMore": true
   }
   ```

5. **Escribe el test** junto al código (`foo.test.ts`) → ver
   [Testing](/docs/handbook/guias/testing).

6. **Si añadiste o quitaste un modelo Prisma**, incrementa
   `PRISMA_SCHEMA_VERSION` en `src/lib/prisma.ts` → ver
   [Datos y Prisma](/docs/handbook/arquitectura/datos-y-prisma).

7. **Actualiza `docs/openapi-auth.yaml`** con la ruta nueva y su tag.

8. **Actualiza la página del handbook** que corresponda, según la regla de
   docs → ver
   [Flujo y regla de docs](/docs/handbook/contribuir/flujo-y-regla-de-docs).
