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

# API REST de Reporter

> Oriéntate en la API de Reporter: la ruta base /v1, la autenticación bearer, las 23 operaciones agrupadas por tarea, la idempotencia, la paginación y el formato de error RFC 9457.

Reporter sirve una sola API HTTP. Cada operación vive bajo la ruta base `/v1`, sin ningún segmento de producto por delante. Una lista de plantillas es `GET /v1/templates`.

La API reúne **23 operaciones** repartidas en siete áreas: plantillas, el constructor de plantillas, informes, fuentes de datos, plazos, métricas y el manifiesto de streaming. Las 23 se renderizan bajo el ancla **Reporter** de la [Referencia de API](/es/reference/introduction). Esta página es el mapa, no el territorio. Cubre lo que las operaciones comparten y te apunta a la página de referencia de cada una.

<Note>
  Los documentos OpenAPI de este portal son fuentes de renderizado para las páginas de referencia. No son contratos de cliente, ni una base para generar SDK.
</Note>

## Autenticación

***

Reporter acepta un token JWT bearer. Un único esquema de seguridad aplica a todas las operaciones:

```http theme={null}
Authorization: Bearer <token>
```

Reporter autoriza cada solicitud contra la aplicación `reporter`, un recurso y una acción. El recurso sigue al área — `templates`, `reports`, `deadlines`, `data-source`, `metrics` o `streaming`. La acción es el método HTTP en minúsculas, así que `POST /v1/reports` se autoriza como la acción `post` sobre `reports`. `PLUGIN_AUTH_ENABLED` activa el middleware y `PLUGIN_AUTH_ADDRESS` lo apunta al Access Manager.

Las rutas de sondeo quedan fuera de la autenticación para que un orquestador las alcance sin token: `/health`, `/readyz` y `/version`.

La identidad del tenant viaja dentro del token. Reporter resuelve el tenant a partir del claim `tenantId` del JWT. Ninguna de las operaciones de arriba toma un tenant de una cabecera de solicitud, y ningún valor que envíe el cliente lo sobrescribe. Lee [Multi-tenancy](/es/multi-tenancy).

## Las operaciones por tarea

***

### Plantillas

Cinco operaciones son dueñas del ciclo de vida de una plantilla: [listar](/es/reference/reporter/list-templates), [subir](/es/reference/reporter/upload-template), [obtener](/es/reference/reporter/retrieve-template-details), [actualizar](/es/reference/reporter/update-templates) y [eliminar](/es/reference/reporter/delete-template). Una plantilla es un archivo `.tpl` de texto plano más su formato de salida y su descripción. Eliminar una borra también los plazos que apuntan a ella.

### Constructor de plantillas

Cuatro operaciones respaldan un editor visual sin persistir nada. [Listar definiciones de bloque](/es/reference/reporter/list-block-definitions) y [listar definiciones de filtro](/es/reference/reporter/list-filter-definitions) devuelven el catálogo del que dibuja un editor. [Validar bloques](/es/reference/reporter/validate-template-blocks) revisa un árbol de bloques y reporta los errores de cada bloque. [Generar código](/es/reference/reporter/generate-template-code) convierte ese árbol en código fuente de plantilla que después puedes subir.

### Informes

Cuatro operaciones, y solo cuatro: [crear](/es/reference/reporter/create-report), [obtener](/es/reference/reporter/check-report-status), [listar](/es/reference/reporter/retrieve-reports) y [descargar](/es/reference/reporter/download-report).

El ciclo de vida es **crear y conservar**. `POST /v1/reports` responde `201` con un informe en `Processing` y entrega el trabajo a un worker en segundo plano. El informe llega después a `Finished`, `Partial` o `Error`. Consulta la operación de obtención por sondeo, o suscríbete a los eventos descritos en [Eventos](/es/reporter/reporter-events). La descarga sirve un informe en `Finished`. Cada informe que creas sigue siendo direccionable por su identificador mientras la política de retención de tu almacenamiento de objetos conserve el artefacto.

### Fuentes de datos

Dos operaciones de lectura: [listar](/es/reference/reporter/list-data-sources) y [obtener una](/es/reference/reporter/retrieve-data-source), ambas bajo `/v1/data-sources` — fíjate en el guion. Un operador registra las fuentes de datos mediante variables de entorno, así que estas operaciones informan lo que el despliegue ya tiene y no exponen ninguna vía de escritura.

### Plazos

Seis operaciones modelan una obligación de presentación con una fecha de vencimiento y una regla de recurrencia: [listar](/es/reference/reporter/retrieve-deadlines), [crear](/es/reference/reporter/create-deadline), [actualizar](/es/reference/reporter/update-deadline), [eliminar](/es/reference/reporter/delete-deadline), [entregar](/es/reference/reporter/deliver-deadline) y [notificaciones](/es/reference/reporter/retrieve-deadline-notifications). El estado se deriva de la fecha de vencimiento y de la marca de entrega, y nunca lo envía un cliente. Las notificaciones son solo de consulta: la operación devuelve los plazos que están dentro de su ventana de alerta, ordenados con los vencidos primero.

### Métricas y streaming

[Métricas](/es/reference/reporter/get-metrics) devuelve los contadores del despliegue — plantillas, informes, fuentes de datos y errores de informe de la ventana actual frente a la anterior. `errorPeriodDays` fija esa ventana y vale 7 por defecto. [Eventos de streaming](/es/reference/reporter/get-streaming-events) devuelve el manifiesto de eventos que cubre [Eventos](/es/reporter/reporter-events).

## Tipos de contenido

***

La creación y la actualización de plantillas usan `multipart/form-data`: una parte de archivo `template`, más `outputFormat` y `description`. Todo lo demás que lleva cuerpo usa `application/json`.

La descarga responde con los bytes y un nombre de archivo en `Content-Disposition`. El tipo de medio sigue al formato de salida del informe — `application/pdf`, `application/xml`, `text/csv`, `text/html` o `text/plain`.

## Idempotencia

***

La creación de plantillas y la creación de informes aceptan una cabecera de solicitud `X-Idempotency`. Envía tu propia clave, u omite la cabecera y Reporter deriva una a partir de un hash del cuerpo de la solicitud.

* Una solicitud que repite otra todavía en curso se rechaza en lugar de duplicarse.
* Una solicitud que repite otra ya completada reproduce la respuesta original y la marca con `X-Idempotency-Replayed: true`.

## Paginación

***

Las operaciones de listado usan paginación por desplazamiento con los mismos dos parámetros.

| Parámetro | Valor por defecto | Reglas                                                                              |
| --------- | ----------------- | ----------------------------------------------------------------------------------- |
| `page`    | `1`               | Número de página.                                                                   |
| `limit`   | `10`              | Elementos por página. El techo es `MAX_PAGINATION_LIMIT`, que por defecto vale 100. |

Un `limit` por encima del techo se rechaza con un error de paginación en lugar de recortarse. La lista de informes también acepta un parámetro `cursor`, que lleva la posición de la página anterior en lugar de un número de página.

El listado de informes añade filtros encima: `status`, `template_id`, `output_format`, `description`, `type`, `active`, una ventana `start_date`/`end_date` y `sort_order`, que vale `desc` por defecto. El listado de plantillas filtra por `outputFormat`, y el de plazos por `status`.

## Errores

***

Cada error responde `application/problem+json` y sigue [RFC 9457](https://www.rfc-editor.org/rfc/rfc9457), con un `title`, un `status`, un `detail` y un `code` de dominio estable. Haz coincidir tu lógica con el código, nunca con el texto. La [lista de errores de Reporter](/es/reference/reporter/reporter-error-list) mapea cada código a su estado HTTP y a su solución.

## Leer la especificación desde un servicio en ejecución

***

`SWAGGER_ENABLED=true` monta una referencia navegable en `/swagger/docs`, con el documento OpenAPI 3.1 en `/swagger/openapi.json` y `/swagger/openapi.yaml`. Está apagada salvo que la enciendas. Mantenla apagada en producción.

## Próximos pasos

***

<CardGroup cols={2}>
  <Card title="Referencia de API" icon="code" href="/es/reference/introduction">
    Las 23 operaciones, con sus formatos completos de solicitud y respuesta.
  </Card>

  <Card title="Inicio rápido de la API" icon="rocket" href="/es/reference/reporter/reporter-developer-quick-start">
    Sube una plantilla, genera un informe y descárgalo con cURL.
  </Card>

  <Card title="Eventos" icon="bell" href="/es/reporter/reporter-events">
    Suscríbete a los eventos de informes y plazos en lugar de sondear.
  </Card>

  <Card title="¿Qué es Reporter?" icon="book" href="/es/reporter/what-is-reporter">
    Plantillas, informes, fuentes de datos y dónde encajan.
  </Card>
</CardGroup>
