> ## 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 solicitudes de sincronización

> Lista las solicitudes de sincronización de una entidad creadas en las últimas N horas (por defecto 24), ordenadas de la más nueva a la más antigua. Paginación simple con `page` y `page_size`.

## ¿Para qué se usa?

Permite **listar las solicitudes de sincronización recientes** de una entidad, para auditar qué se ha pedido y en qué estado va cada una.

## Qué hace

* Devuelve las solicitudes creadas en las últimas `hours` horas (por defecto **24**), de la más nueva a la más antigua.
* Paginación simple con `page` (parte en 1) y `page_size` (por defecto 50, máximo 200).
* La entidad se indica con el query param `master_entity_id`. Acepta el **id opaco** (`eid_...`, campo `opaque_id` de `/master-entities?rut=`) o el id entero.

## Ejemplos de uso

* Evitar duplicar trabajo: antes de crear una solicitud nueva, revisar si ya hay una `pending` o `processing` para la entidad.
* Panel de soporte: ver el historial de sincronizaciones a demanda del día y sus resultados.


## OpenAPI

````yaml GET /sync-requests
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:
  /sync-requests:
    get:
      tags:
        - Sincronización
      summary: Listar solicitudes de sincronización recientes
      description: >-
        Lista las solicitudes de sincronización de una entidad creadas en las
        últimas N horas (por defecto 24), ordenadas de la más nueva a la más
        antigua. Paginación simple con `page` y `page_size`.
      operationId: listSyncRequests
      parameters:
        - name: master_entity_id
          in: query
          required: true
          description: >-
            ID de la entidad maestra. Acepta el id opaco (`eid_...`, campo
            `opaque_id` de `/master-entities?rut=`) o el id entero.
          schema:
            type: string
            example: eid_NDgyMTM6c2lnbmF0dXJl
        - name: hours
          in: query
          required: false
          description: >-
            Ventana hacia atrás, en horas, sobre la fecha de creación. Por
            defecto 24.
          schema:
            type: integer
            default: 24
            example: 72
        - name: page
          in: query
          required: false
          description: Página a consultar (parte en 1).
          schema:
            type: integer
            default: 1
        - name: page_size
          in: query
          required: false
          description: Tamaño de página. Por defecto 50, máximo 200.
          schema:
            type: integer
            default: 50
            maximum: 200
      responses:
        '200':
          description: Página de solicitudes de sincronización de la entidad
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                    description: Total de solicitudes dentro de la ventana de horas
                  page:
                    type: integer
                    description: Página actual
                  page_size:
                    type: integer
                    description: Tamaño de página usado
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/SyncRequest'
              example:
                count: 2
                page: 1
                page_size: 50
                results:
                  - id: 1042
                    master_entity_id: 48213
                    requested_types:
                      - ISSUED_DOCS
                      - RECEIVED_DOCS
                    status: completed
                    webhook_url: ''
                    results:
                      ISSUED_DOCS:
                        success: true
                        new_documents: 3
                      RECEIVED_DOCS:
                        success: true
                        new_documents: 0
                    completed_at: '2026-07-20T14:34:12Z'
                    created_at: '2026-07-20T14:30:00Z'
                  - id: 1039
                    master_entity_id: 48213
                    requested_types: []
                    status: processing
                    webhook_url: https://miapp.cl/webhooks/tupana-sync
                    results: {}
                    completed_at: null
                    created_at: '2026-07-20T11:02:44Z'
        '400':
          description: >-
            master_entity_id faltante o inválido, o hours/page/page_size no son
            enteros
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: hours debe ser un entero.
        '403':
          description: Sin acceso a la entidad consultada
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    example: No tienes acceso a esta entidad.
      security:
        - apiKeyAuth: []
components:
  schemas:
    SyncRequest:
      type: object
      description: Solicitud de sincronización a demanda (recurso asíncrono)
      properties:
        id:
          type: string
          description: >-
            ID de la solicitud Id opaco (eid_...); la entrada acepta también el
            entero.
          example: eid_NDgyMTM6c2lnbmF0dXJl
        master_entity_id:
          type: string
          description: >-
            ID entero de la entidad sincronizada Id opaco (eid_...); la entrada
            acepta también el entero.
          example: eid_NDgyMTM6c2lnbmF0dXJl
        requested_types:
          type: array
          description: >-
            Tipos de scrape pedidos. Lista vacía = todos los tipos habilitados
            para la entidad.
          items:
            type: string
            enum:
              - ISSUED_DOCS
              - RECEIVED_DOCS
              - RECEIVED_HONORARY_BILLS
              - THIRD_PARTY_HONORARY
              - EMITTED_HONORARY_BILLS
              - PURCHASE_BOOK
              - SALE_BOOK
              - BOOK_SUMMARY
          example:
            - ISSUED_DOCS
            - RECEIVED_DOCS
        status:
          type: string
          enum:
            - pending
            - processing
            - completed
            - failed
          description: >-
            Estado de la solicitud: pending (creada, en cola), processing
            (scrapes corriendo), completed (todos los tipos terminaron OK),
            failed (al menos un tipo falló).
          example: pending
        webhook_url:
          type: string
          description: >-
            URL registrada para notificar al completar. String vacío si no se
            registró webhook.
          example: https://miapp.cl/webhooks/tupana-sync
        results:
          type: object
          description: >-
            Resultado por tipo de scrape al terminar. Las claves son los
            scrape_type ejecutados y cada valor es un objeto con `success`
            (boolean) más contadores como `new_documents`, o `error` si falló.
            Objeto vacío mientras la solicitud está pending/processing.
          additionalProperties:
            type: object
          example:
            ISSUED_DOCS:
              success: true
              new_documents: 3
            RECEIVED_DOCS:
              success: true
              new_documents: 0
        completed_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Fecha/hora en que terminó de procesarse. null mientras está
            pending/processing.
          example: '2026-07-20T14:34:12Z'
        created_at:
          type: string
          format: date-time
          description: Fecha/hora de creación de la solicitud
          example: '2026-07-20T14:30:00Z'
  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)

````