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

# Detalle de libro de compras/ventas

> Lista, documento por documento, el Registro de Compras y Ventas (RCV) del SII de una entidad para un período tributario y una operación. Es el detalle del que `/book-summaries` entrega los totales. Cada fila trae los montos tal como los informa el SII y el desglose de impuestos del RCV. Solo devuelve datos para entidades con el scrape del libro habilitado (ver `is_enabled`); la habilitación es independiente de la del resumen.

## ¿Para qué se usa?

Permite **obtener el detalle documento por documento del libro de compras y ventas** (Registro de Compras y Ventas, RCV) de una entidad para un período tributario y una operación. Es el detalle del que [`/book-summaries`](/api-reference/book-summaries/list) entrega los totales: cada ítem es un documento tal como aparece en el libro del SII, con los montos y el desglose de impuestos que informa el SII.

## Qué hace

* Devuelve las filas del libro de **COMPRA** (la entidad es el receptor) o de **VENTA** (la entidad es el emisor) para el `period` (YYYYMM) indicado. `operation` es obligatorio.
* El período es el **período tributario en que el SII clasifica el documento en ese libro**, que puede diferir del mes de emisión. Un mismo documento puede caer en períodos distintos en el libro de compras del receptor y en el de ventas del emisor.
* Cada fila trae `net_amount`, `exempt_amount`, `vat_amount` y `total_amount` tal como los informa el SII, más el objeto `taxes` con el desglose del RCV (IVA no recuperable, retenido, activo fijo, uso común, otros impuestos), el evento del receptor, el tipo de transacción y la referencia en notas de crédito y débito.
* `document_id` enlaza con [`/documents/{id}`](/api-reference/documents/get) para obtener el PDF, el XML y las líneas del documento.
* Puedes filtrar por tipo de documento con `dte_type_code` (lista separada por coma, por ejemplo `33,61`). La respuesta está paginada (`page`, `page_size`, máximo 100).
* La entidad se indica con `master_entity_id`, igual que en `/book-summaries`. Acepta el **id opaco** (`eid_...`) o el id entero.
* El campo **is\_enabled** indica si la entidad tiene habilitado el scrape del libro consultado (`PURCHASE_BOOK` para COMPRA, `SALE_BOOK` para VENTA). Esta habilitación es independiente de la del resumen (`BOOK_SUMMARY`). Si es `false`, `results` viene vacío aunque el período sea válido.

## Ejemplos de uso

* Reconstruir el libro de compras o ventas de un período en tu propio sistema contable, con los mismos montos que declara el SII.
* Cruzar línea a línea el RCV contra tu contabilidad y detectar documentos faltantes o con montos distintos.
* Obtener el IVA no recuperable, retenido o de activo fijo por documento para preparar el F29.


## OpenAPI

````yaml GET /book-documents
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:
  /book-documents:
    get:
      tags:
        - Libros SII
      summary: Listar detalle de libro de compras/ventas SII
      description: >-
        Lista, documento por documento, el Registro de Compras y Ventas (RCV)
        del SII de una entidad para un período tributario y una operación. Es el
        detalle del que `/book-summaries` entrega los totales. Cada fila trae
        los montos tal como los informa el SII y el desglose de impuestos del
        RCV. Solo devuelve datos para entidades con el scrape del libro
        habilitado (ver `is_enabled`); la habilitación es independiente de la
        del resumen.
      operationId: listBookDocuments
      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: period
          in: query
          required: true
          description: >-
            Período tributario a consultar, formato YYYYMM. Es el período en que
            el SII clasifica el documento en ese libro, que puede diferir del
            mes de emisión.
          schema:
            type: string
            example: '202603'
        - name: operation
          in: query
          required: true
          description: >-
            Libro a consultar: `COMPRA` (la entidad es el receptor, libro de
            compras) o `VENTA` (la entidad es el emisor, libro de ventas).
          schema:
            type: string
            enum:
              - COMPRA
              - VENTA
        - name: dte_type_code
          in: query
          required: false
          description: >-
            Filtra por tipo de documento SII. Lista separada por coma, por
            ejemplo `33,61`.
          schema:
            type: string
            example: 33,61
        - name: page
          in: query
          required: false
          description: Página (desde 1).
          schema:
            type: integer
            example: 1
        - name: page_size
          in: query
          required: false
          description: Filas por página. Por defecto 25, máximo 100.
          schema:
            type: integer
            example: 25
      responses:
        '200':
          description: Filas del libro para la entidad, período y operación consultados
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                    description: >-
                      Total de filas del libro para el período (todas las
                      páginas).
                  total_pages:
                    type: integer
                  current_page:
                    type: integer
                  next:
                    type: string
                    nullable: true
                  previous:
                    type: string
                    nullable: true
                  is_enabled:
                    type: boolean
                    description: >-
                      true si la entidad tiene habilitado el scrape del libro
                      consultado (PURCHASE_BOOK para COMPRA, SALE_BOOK para
                      VENTA). Si es false, `results` estará vacío aunque el
                      período sea válido.
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/BookDocumentItem'
        '400':
          description: >-
            master_entity_id, period u operation faltantes o inválidos, o
            dte_type_code mal formado
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: 'operation is required: COMPRA or VENTA.'
        '403':
          description: >-
            Sin acceso a la entidad, o la API key no tiene el permiso
            book_summary:access
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: Access denied.
      security:
        - apiKeyAuth: []
components:
  schemas:
    BookDocumentItem:
      type: object
      description: >-
        Un documento tal como aparece en el libro de compras o ventas del SII
        para la entidad y el período consultados. Los montos son enteros en
        pesos, tal como los informa el SII.
      properties:
        document_id:
          type: integer
          description: >-
            ID del documento. Úsalo en `GET /documents/{id}/` para el PDF, XML y
            líneas.
          example: 184521
        operation:
          type: string
          enum:
            - COMPRA
            - VENTA
          description: Libro al que pertenece la fila.
        period:
          type: string
          description: >-
            Período tributario YYYYMM en que el SII clasifica el documento en
            este libro.
          example: '202603'
        dte_type_code:
          type: integer
          description: Código de tipo de documento SII (33, 34, 61, etc.).
          example: 33
        folio:
          type: string
          example: '12345'
        issue_date:
          type: string
          format: date
          description: Fecha de emisión del documento según el SII.
          example: '2026-03-10'
        counterparty:
          $ref: '#/components/schemas/BookDocumentCounterparty'
        reception_date:
          type: string
          format: date-time
          nullable: true
          description: Fecha de recepción en el SII. Solo en COMPRA.
        acknowledgment_date:
          type: string
          format: date-time
          nullable: true
          description: Fecha del acuse de recibo.
        claimed_date:
          type: string
          format: date-time
          nullable: true
          description: Fecha del reclamo, si lo hubo.
        receiver_event:
          type: object
          nullable: true
          description: Evento registrado por el receptor (acuse, reclamo, etc.).
          properties:
            code:
              type: string
              nullable: true
              example: A
            label:
              type: string
              nullable: true
              example: Acuse de recibo
        transaction_type:
          type: object
          nullable: true
          description: >-
            Tipo de transacción declarado en el libro de compras (del giro,
            activo fijo, etc.). Solo en COMPRA.
          properties:
            code:
              type: integer
              nullable: true
              example: 1
            description:
              type: string
              nullable: true
              example: Del Giro
        cancelled:
          type: boolean
          nullable: true
          description: Documento anulado según el SII.
        exempt_amount:
          type: integer
          nullable: true
          description: Monto exento.
        net_amount:
          type: integer
          nullable: true
          description: Monto neto.
        vat_amount:
          type: integer
          nullable: true
          description: Monto IVA.
        total_amount:
          type: integer
          nullable: true
          description: Monto total.
        taxes:
          $ref: '#/components/schemas/BookDocumentTaxes'
        reference:
          type: object
          nullable: true
          description: Documento referenciado (notas de crédito y débito).
          properties:
            dte_type_code:
              type: integer
              nullable: true
              example: 33
            folio:
              type: string
              nullable: true
              example: '12345'
        sii_branch_code:
          type: integer
          nullable: true
          description: Código de sucursal SII.
        synced_at:
          type: string
          format: date-time
          description: Última vez que esta fila se actualizó desde el SII.
    BookDocumentCounterparty:
      type: object
      description: 'Contraparte del documento: el emisor en COMPRA, el receptor en VENTA.'
      properties:
        rut:
          type: string
          nullable: true
          example: 77222333-4
        name:
          type: string
          nullable: true
          example: PROVEEDOR SPA
    BookDocumentTaxes:
      type: object
      description: >-
        Desglose de impuestos del Registro de Compras y Ventas. Montos enteros
        en pesos; `null` cuando el SII no informa el campo.
      properties:
        fixed_asset_amount:
          type: integer
          nullable: true
          description: Monto neto activo fijo.
        fixed_asset_vat_amount:
          type: integer
          nullable: true
          description: IVA activo fijo.
        non_recoverable_vat_amount:
          type: integer
          nullable: true
          description: IVA no recuperable.
        non_recoverable_code:
          type: integer
          nullable: true
          description: Código del IVA no recuperable.
        no_credit_amount:
          type: integer
          nullable: true
          description: Monto sin derecho a crédito.
        common_use_vat:
          type: integer
          nullable: true
          description: IVA uso común.
        total_withheld_vat:
          type: integer
          nullable: true
          description: IVA retenido total.
        partial_withheld_vat:
          type: integer
          nullable: true
          description: IVA retenido parcial.
        non_withheld_vat:
          type: integer
          nullable: true
          description: IVA no retenido.
        own_vat:
          type: integer
          nullable: true
          description: IVA propio.
        third_party_vat:
          type: integer
          nullable: true
          description: IVA de terceros.
        out_of_term_vat:
          type: integer
          nullable: true
          description: IVA fuera de plazo.
        other_taxes_amount:
          type: integer
          nullable: true
          description: Otros impuestos (DTOI), por ejemplo impuestos adicionales.
        tax_rate:
          type: string
          nullable: true
          description: Tasa de IVA aplicada.
          example: '19'
  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)

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.