curl --request GET \
--url https://api.tupana.ai/v1/book-documents \
--header 'Authorization: <api-key>'import requests
url = "https://api.tupana.ai/v1/book-documents"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.tupana.ai/v1/book-documents', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tupana.ai/v1/book-documents",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.tupana.ai/v1/book-documents"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.tupana.ai/v1/book-documents")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tupana.ai/v1/book-documents")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"count": 123,
"total_pages": 123,
"current_page": 123,
"next": "<string>",
"previous": "<string>",
"is_enabled": true,
"results": [
{
"document_id": 184521,
"operation": "COMPRA",
"period": "202603",
"dte_type_code": 33,
"folio": "12345",
"issue_date": "2026-03-10",
"counterparty": {
"rut": "77222333-4",
"name": "PROVEEDOR SPA"
},
"reception_date": "2023-11-07T05:31:56Z",
"acknowledgment_date": "2023-11-07T05:31:56Z",
"claimed_date": "2023-11-07T05:31:56Z",
"receiver_event": {
"code": "A",
"label": "Acuse de recibo"
},
"transaction_type": {
"code": 1,
"description": "Del Giro"
},
"cancelled": true,
"exempt_amount": 123,
"net_amount": 123,
"vat_amount": 123,
"total_amount": 123,
"taxes": {
"fixed_asset_amount": 123,
"fixed_asset_vat_amount": 123,
"non_recoverable_vat_amount": 123,
"non_recoverable_code": 123,
"no_credit_amount": 123,
"common_use_vat": 123,
"total_withheld_vat": 123,
"partial_withheld_vat": 123,
"non_withheld_vat": 123,
"own_vat": 123,
"third_party_vat": 123,
"out_of_term_vat": 123,
"other_taxes_amount": 123,
"tax_rate": "19"
},
"reference": {
"dte_type_code": 33,
"folio": "12345"
},
"sii_branch_code": 123,
"synced_at": "2023-11-07T05:31:56Z"
}
]
}{
"error": "operation is required: COMPRA or VENTA."
}{
"error": "Access denied."
}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.
curl --request GET \
--url https://api.tupana.ai/v1/book-documents \
--header 'Authorization: <api-key>'import requests
url = "https://api.tupana.ai/v1/book-documents"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.tupana.ai/v1/book-documents', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tupana.ai/v1/book-documents",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.tupana.ai/v1/book-documents"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.tupana.ai/v1/book-documents")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tupana.ai/v1/book-documents")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"count": 123,
"total_pages": 123,
"current_page": 123,
"next": "<string>",
"previous": "<string>",
"is_enabled": true,
"results": [
{
"document_id": 184521,
"operation": "COMPRA",
"period": "202603",
"dte_type_code": 33,
"folio": "12345",
"issue_date": "2026-03-10",
"counterparty": {
"rut": "77222333-4",
"name": "PROVEEDOR SPA"
},
"reception_date": "2023-11-07T05:31:56Z",
"acknowledgment_date": "2023-11-07T05:31:56Z",
"claimed_date": "2023-11-07T05:31:56Z",
"receiver_event": {
"code": "A",
"label": "Acuse de recibo"
},
"transaction_type": {
"code": 1,
"description": "Del Giro"
},
"cancelled": true,
"exempt_amount": 123,
"net_amount": 123,
"vat_amount": 123,
"total_amount": 123,
"taxes": {
"fixed_asset_amount": 123,
"fixed_asset_vat_amount": 123,
"non_recoverable_vat_amount": 123,
"non_recoverable_code": 123,
"no_credit_amount": 123,
"common_use_vat": 123,
"total_withheld_vat": 123,
"partial_withheld_vat": 123,
"non_withheld_vat": 123,
"own_vat": 123,
"third_party_vat": 123,
"out_of_term_vat": 123,
"other_taxes_amount": 123,
"tax_rate": "19"
},
"reference": {
"dte_type_code": 33,
"folio": "12345"
},
"sii_branch_code": 123,
"synced_at": "2023-11-07T05:31:56Z"
}
]
}{
"error": "operation is required: COMPRA or VENTA."
}{
"error": "Access denied."
}¿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 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.operationes 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_amountytotal_amounttal como los informa el SII, más el objetotaxescon 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_idenlaza con/documents/{id}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 ejemplo33,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_BOOKpara COMPRA,SALE_BOOKpara VENTA). Esta habilitación es independiente de la del resumen (BOOK_SUMMARY). Si esfalse,resultsviene 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.
Authorizations
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)
Query Parameters
ID de la entidad maestra. Acepta el id opaco (eid_..., campo opaque_id de /master-entities?rut=) o el id entero.
"eid_NDgyMTM6c2lnbmF0dXJl"
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.
"202603"
Libro a consultar: COMPRA (la entidad es el receptor, libro de compras) o VENTA (la entidad es el emisor, libro de ventas).
COMPRA, VENTA Filtra por tipo de documento SII. Lista separada por coma, por ejemplo 33,61.
"33,61"
Página (desde 1).
1
Filas por página. Por defecto 25, máximo 100.
25
Response
Filas del libro para la entidad, período y operación consultados
Total de filas del libro para el período (todas las páginas).
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.
Show child attributes
Show child attributes
