> ## 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

> Orientate en la API de Reporter: la ruta base /v1, la autenticación bearer, las 28 operaciones agrupadas por función, la idempotencia, la paginación y el formato de error RFC 9457.

Reporter expone una única API HTTP. Cada operación está bajo la ruta base `/v1`, sin ningún segmento de producto antes de ella. Una lista de plantillas es `GET /v1/templates`.

La API tiene **28 operaciones** distribuidas en siete áreas: plantillas, el generador de plantillas, informes, fuentes de datos, plazos, métricas y el manifiesto de streaming. Las 28 se renderizan bajo el anclaje **Reporter** en la [Referencia de API](/es/reference/introduction). Esta página cubre lo que las operaciones tienen en común y te dirige 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 para clientes ni una base para la generación de SDK.
</Note>

## Autenticación

***

Reporter acepta un token bearer JWT. Un mismo esquema de seguridad se 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 corresponde 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 hacia Access Manager.

Las rutas de sondeo quedan fuera de la autenticación para que un orquestador pueda acceder a ellas sin un 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 anteriores toma el tenant de un encabezado de la solicitud, y ningún valor enviado por el cliente lo sobrescribe. Consulta [Multi-tenancy](/es/platform/multi-tenancy).

## Las operaciones por función

***

### Plantillas

Cinco operaciones controlan el ciclo de vida de la plantilla: [listar](/es/reference/products/reporter/list-templates), [subir](/es/reference/products/reporter/upload-template), [obtener](/es/reference/products/reporter/retrieve-template-details), [actualizar](/es/reference/products/reporter/update-templates) y [eliminar](/es/reference/products/reporter/delete-template). Una plantilla es un archivo de texto plano `.tpl` junto con su formato de salida y su descripción. Eliminar una también elimina los plazos que la referencian.

### Generador de plantillas

Cuatro operaciones respaldan un editor visual sin persistir nada. [Listar definiciones de bloque](/es/reference/products/reporter/list-block-definitions) y [listar definiciones de filtro](/es/reference/products/reporter/list-filter-definitions) devuelven el catálogo del que se nutre un editor. [Validar bloques](/es/reference/products/reporter/validate-template-blocks) verifica un árbol de bloques e informa los errores por bloque. [Generar código](/es/reference/products/reporter/generate-template-code) convierte ese árbol en el código fuente de la plantilla que luego puedes subir.

### Informes

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

El ciclo de vida es de **crear y retener**. `POST /v1/reports` responde `201` con un informe en `Processing` y delega el trabajo a un worker en segundo plano. El informe luego llega a `Finished`, `Partial` o `Error`. Haz polling sobre la operación de obtener, o suscríbete a los eventos descritos en [Eventos](/es/products/reporter/reporter-events). La descarga sirve un informe en `Finished`. Todo informe que crees permanece direccionable por su identificador mientras tu política de retención de almacenamiento de objetos conserve el artefacto.

### Fuentes de datos

Siete operaciones administran el registro persistente bajo `/v1/data-sources` (fíjate en el guion). Puedes listar o crear entradas, y obtener, actualizar parcialmente o eliminar de forma lógica una por `dataSourceId`, inspeccionar su esquema en vivo y probar su conexión. Las contraseñas son de solo escritura, se cifran en reposo y no aparecen en ninguna respuesta. Una eliminación se rechaza mientras una plantilla activa siga referenciando la fuente de datos. Los despliegues de un solo tenant pueden sembrar entradas del registro a partir de variables `DATASOURCE_*` al iniciar. Los despliegues multi-tenant las crean por tenant a través de la API.

### Plazos

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

### Métricas y streaming

[Métricas](/es/reference/products/reporter/get-metrics) devuelve contadores del despliegue: plantillas, informes, fuentes de datos y errores de informes de la ventana actual frente a la anterior. `errorPeriodDays` define esa ventana y su valor predeterminado es 7. [Eventos de streaming](/es/reference/products/reporter/get-streaming-events) devuelve el manifiesto de eventos descrito en [Eventos](/es/products/reporter/reporter-events).

## Tipos de contenido

***

Crear y actualizar 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 el formato de salida del informe: `application/pdf`, `application/xml`, `text/csv`, `text/html` o `text/plain`.

## Idempotencia

***

Crear plantillas y crear informes aceptan un encabezado de solicitud `X-Idempotency`. Envía tu propia clave, u omite el encabezado y Reporter deriva una a partir de un hash del cuerpo de la solicitud.

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

## Paginación

***

Las listas de plantillas, plazos y fuentes de datos usan paginación por offset con los mismos dos parámetros.

| Parámetro | Valor predeterminado | Reglas                                                                                              |
| --------- | -------------------- | --------------------------------------------------------------------------------------------------- |
| `page`    | `1`                  | Número de página.                                                                                   |
| `limit`   | `10`                 | Elementos por página. El límite máximo es `MAX_PAGINATION_LIMIT`, cuyo valor predeterminado es 100. |

Un `limit` por encima del límite máximo se rechaza con un error de paginación en lugar de ajustarse.

La lista de informes usa paginación por keyset en su lugar: envía `limit` sin `page`, y luego sigue `nextCursor` o `prevCursor` de la respuesta. Un cursor está ausente cuando no hay página en esa dirección, y la respuesta no incluye `page` ni `total`. La lista de informes acepta `status`, `template_id`, `created_at` y `sort_order`. El cursor lleva el orden de clasificación para el recorrido. La lista de plantillas filtra por `outputFormat`, y la lista de plazos por `status`.

## Errores

***

Todo error responde con `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. Compara por el código, nunca por el texto. La [lista de errores de Reporter](/es/reference/products/reporter/reporter-error-list) asocia cada código con su estado HTTP y 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á desactivado a menos que lo actives. Mantenlo desactivado en producción.

## Próximos pasos

***

<CardGroup cols={2}>
  <Card title="Referencia de API" icon="code" href="/es/reference/introduction">
    Las 28 operaciones, con las formas completas de solicitud y respuesta.
  </Card>

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

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

  <Card title="¿Qué es Reporter?" icon="book" href="/es/products/reporter/what-is-reporter">
    Plantillas, informes, fuentes de datos y cómo encajan entre sí.
  </Card>
</CardGroup>
