---
title: "Tu primera llamada"
description: "Una primera llamada sin riesgo: listar y obtener los ejemplos de documentos que incluye la API."
type: "academy"
category: "lesson"
tags: []
authors: [Anonymous]
date: "2026-11-05"
last_update: "2026-11-05"
time_minutes: 3
draft: false
unlisted: false
url: "https://www.apigateway.cl/academy/emision-de-dte/preparacion/tu-primera-llamada"
---

# Tu primera llamada

Antes de construir documentos, haz una llamada sencilla que no necesita certificado ni folios: pedir los **ejemplos de documentos** que trae la biblioteca. Te sirve para confirmar que el token funciona y, además, te entrega documentos de ejemplo listos para adaptar.

## Listar los ejemplos

```bash
curl -X POST https://app.apigateway.cl/api/v2/libredte/billing/document/examples/list \
  -H "Authorization: Token $API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"parameters": {}}'
```

Esta operación no tiene parámetros, por eso `parameters` va vacío. La respuesta es la lista de ejemplos disponibles:

```json
{
    "data": [
        {
            "id": "033_factura_afecta/033_001_simple",
            "category": "033_factura_afecta",
            "case": "033_001_simple"
        },
        {
            "id": "052_guia_despacho/052_001_constituye_venta",
            "category": "052_guia_despacho",
            "case": "052_001_constituye_venta"
        }
    ]
}
```

La categoría empieza con el código del tipo de documento: `033` factura, `052` guía de despacho, `061` nota de crédito, etc.

## Obtener un ejemplo

```bash
curl -X POST https://app.apigateway.cl/api/v2/libredte/billing/document/examples/get \
  -H "Authorization: Token $API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"parameters": {"id": "033_factura_afecta/033_001_simple"}}'
```

Respuesta:

```json
{
    "data": {
        "id": "033_factura_afecta/033_001_simple",
        "example": {
            "Encabezado": {
                "IdDoc": {
                    "TipoDTE": 33,
                    "Folio": 1
                },
                "Emisor": {
                    "RUTEmisor": "88888888-8",
                    "RznSoc": "Mi Empresa SpA",
                    "GiroEmis": "Venta de software",
                    "Acteco": 620200,
                    "DirOrigen": "Av. Siempre Viva 742",
                    "CmnaOrigen": "Providencia"
                },
                "Receptor": {
                    "RUTRecep": "60803000-K",
                    "RznSocRecep": "Servicio de Impuestos Internos",
                    "GiroRecep": "Gobierno",
                    "DirRecep": "Santiago",
                    "CmnaRecep": "Santiago"
                }
            },
            "Detalle": [
                {
                    "NmbItem": "Conectores RJ45",
                    "QtyItem": 450,
                    "PrcItem": 70
                }
            ]
        },
        "expected": {
            "Encabezado": {
                "Totales": {
                    "MntNeto": 31500,
                    "IVA": 5985,
                    "MntTotal": 37485
                }
            }
        }
    }
}
```

> [!NOTE] Datos de ejemplo
>
> Los ejemplos de la API traen los datos de un emisor de demostración. En este extracto los reemplazamos por datos ficticios. Cuando emitas, usa siempre los datos de tu empresa.

- `example` son los datos del documento, tal como los enviarás para construirlo.
- `expected` son los totales que debería calcular la API. Fíjate que el ejemplo **no trae totales**: la API los calcula (450 × $70 = $31.500 neto, más 19% de IVA = $5.985).

> [!TIP] Usa los ejemplos como plantilla
>
> Cuando tengas que emitir un caso nuevo (una factura con descuento, una guía de devolución, una nota que corrige montos), busca primero si existe un ejemplo parecido. Es la forma más rápida de saber qué campos lleva.

## Qué revisar si falla

| Respuesta | Causa probable |
|-----------|----------------|
| `401` | El token está mal escrito o falta la palabra `Token` antes del token. |
| `402` | La conexión no tiene créditos o tiene un problema de pago. |
| `404` | Hay un error en la URL. |
| `200` con `data` | ¡Todo bien! Sigue con la siguiente lección. |

## En Python

La API es HTTP y JSON, así que funciona con cualquier lenguaje. En Python, con `requests`:

```python
import os
import requests

API_URL = 'https://app.apigateway.cl/api/v2/libredte'
HEADERS = {
    'Authorization': f'Token {os.environ["API_TOKEN"]}',
    'Content-Type': 'application/json',
}

def libredte(operacion: str, parameters: dict) -> dict | list | None:
    """Ejecuta una operación de LibreDTE y entrega el contenido de `data`."""
    response = requests.post(
        f'{API_URL}/{operacion}',
        json={'parameters': parameters},
        headers=HEADERS,
        timeout=120,
    )
    if response.status_code != 200:
        try:
            detalle = response.json().get('detail', response.text)
        except ValueError:  # La respuesta de error no viene en JSON.
            detalle = response.text
        raise RuntimeError(f'{operacion}: HTTP {response.status_code}: {detalle}')
    return response.json()['data']

ejemplos = libredte('billing/document/examples/list', {})
print(len(ejemplos), 'ejemplos disponibles')
```

Usaremos esta función `libredte()` en el resto del curso.


---
Última actualización el 05/11/2026

