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

# Listar Usuarios Autorizados

> Obtiene la lista de usuarios autorizados para emitir boletas de honorarios, leída desde un caché local. Nunca consulta el SII en el momento del request — para refrescarla contra el SII, usa POST /honorary/master-entities/{master_entity_id}/authorized-users/sync/. El master_entity_id se proporciona como query parameter.

## Qué hace

Obtiene la lista de usuarios autorizados para emitir boletas de honorarios para una entidad emisora específica, **leída desde un caché local** — nunca consulta el SII en el momento del request. Esta lista incluye todos los usuarios que tenían permisos para autorizar boletas en la empresa según la última sincronización.

Para refrescar el caché contra el SII, usa [Sincronizar Usuarios Autorizados](/api-reference/honorary/authorized-users-sync). Si la entidad nunca fue sincronizada, este endpoint devuelve una lista vacía.

## Endpoints disponibles

Este endpoint está disponible en dos formatos:

* **`GET /v1/honorary/authorized-users/?master_entity_id={id}`** (recomendado): El `master_entity_id` se proporciona como query parameter
* **`GET /v1/honorary/master-entities/{master_entity_id}/authorized-users/`**: El `master_entity_id` se proporciona en la ruta (mantiene compatibilidad)

## Ejemplos de uso

* Mostrar en la interfaz de administración qué usuarios pueden ser enrolados para una entidad específica
* Verificar qué usuarios ya están autorizados por el SII para emitir boletas
* Actualizar el estado de enrolamiento de cada usuario en el sistema

## Reglas de negocio

### Lectura siempre desde caché

La lista nunca se scrapea del SII en el momento del `GET` — esto garantiza que el endpoint responda rápido y no falle por una caída o lentitud transitoria del SII. El caché se actualiza únicamente vía [Sincronizar Usuarios Autorizados](/api-reference/honorary/authorized-users-sync).

### Un sync fallido no borra el caché

Si la última sincronización terminó en error, el `GET` sigue devolviendo la última lista exitosa conocida — nunca queda vacío por una falla transitoria del SII. El campo `last_sync_status` permite distinguir "nunca sincronizado" de "sincronizado con error" de "sincronizado con éxito".

### Estado de enrolamiento

Cada usuario en la lista incluye un campo que indica si ya fue enrolado en el sistema. Esto permite al frontend mostrar visualmente qué usuarios están disponibles para enrolar y cuáles ya están activos.

### Validación de credenciales (solo al sincronizar)

La credencial SII válida asociada a la entidad emisora solo se necesita al sincronizar (ver [Sincronizar Usuarios Autorizados](/api-reference/honorary/authorized-users-sync)), no al hacer este `GET`.

## Consideraciones importantes

* La lista se lee de un caché local; nunca dispara un scrape al SII
* Incluye `last_sync_status`, `last_sync_error` y `last_synced_at` para saber el estado y frescura del caché
* El campo `enrolled` indica si el usuario ya fue enrolado en el sistema
* Los nombres se obtienen tal como aparecían en el SII durante la última sincronización exitosa


## OpenAPI

````yaml GET /honorary/authorized-users/
openapi: 3.0.0
info:
  title: Tupana API
  description: API para integración con el sistema Tupana - Facturación Electrónica
  version: 1.0.0
servers:
  - url: https://api.tupana.ai/v1
    description: Servidor de producción
security:
  - apiKeyAuth: []
paths:
  /honorary/authorized-users/:
    get:
      tags:
        - Honorary
      summary: Listar usuarios autorizados
      description: >-
        Obtiene la lista de usuarios autorizados para emitir boletas de
        honorarios, leída desde un caché local. Nunca consulta el SII en el
        momento del request — para refrescarla contra el SII, usa POST
        /honorary/master-entities/{master_entity_id}/authorized-users/sync/. El
        master_entity_id se proporciona como query parameter.
      parameters:
        - name: master_entity_id
          in: query
          required: true
          schema:
            type: integer
            description: ID de la entidad maestra
          description: >-
            ID de la entidad para la cual se consultan los autorizados. Debe
            proporcionarse como query parameter.
      responses:
        '200':
          description: Lista de usuarios autorizados obtenida exitosamente
          content:
            application/json:
              schema:
                type: object
                properties:
                  authorized_users:
                    type: array
                    items:
                      type: object
                      properties:
                        rut:
                          type: string
                          description: RUT del usuario con formato de puntos y guión
                          example: 12.345.678-9
                        nombre:
                          type: string
                          description: Nombre completo del usuario autorizado
                          example: MARIA JOSEFA GONZALEZ LOPEZ
                        enrolled:
                          type: boolean
                          description: Si el usuario ya está enrolado en el sistema
                          example: false
                      required:
                        - rut
                        - nombre
                        - enrolled
                  last_sync_status:
                    type: string
                    nullable: true
                    enum:
                      - queued
                      - syncing
                      - done
                      - error
                      - null
                    description: >-
                      Estado del último intento de sincronización con el SII.
                      null si esta entidad nunca fue sincronizada.
                    example: done
                  last_sync_error:
                    type: string
                    description: >-
                      Mensaje de error del último intento, solo presente si
                      last_sync_status es 'error'
                    example: ''
                  last_synced_at:
                    type: string
                    format: date-time
                    nullable: true
                    description: >-
                      Fecha y hora (ISO 8601) en que terminó la última
                      sincronización exitosa o fallida. null si nunca terminó
                      ninguna (incluye el caso de una sincronización todavía en
                      curso, cuando aún no hay ninguna completada).
                    example: '2026-07-22T15:40:12.123456+00:00'
                required:
                  - authorized_users
        '400':
          description: Parámetros inválidos
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: Se requiere el parámetro master_entity_id
        '403':
          description: Sin permisos para acceder a la entidad
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: Usuario sin permisos para acceder a la entidad
        '404':
          description: Entidad no encontrada o sin credenciales
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: No se encontró una credencial válida para la entidad
        '500':
          description: Error interno del servidor
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: Error al obtener usuarios autorizadores
      security:
        - apiKeyAuth: []
components:
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        API Key para autenticación. Debe proporcionarse en el header
        Authorization con el formato: 'Api-Key YOUR-API-KEY' (incluye el prefijo
        'Api-Key ' seguido de tu API key)

````