# Payloads: settlement, purchase and export

> Complete, verified payloads for DTE types 43 (settlement invoice), 46 (purchase invoice), 110 (export invoice), 111 and 112 (export notes) — every example was actually emitted in the sandbox and accepted. The per-type rules are encoded machine-readable in the OpenAPI contract as a discriminated union on tipo_dte (EmitirDTERequestPorTipo).

The common types (33, 34, 39, 41, 52, 56, 61) are covered in the
[Quickstart](/en/comienza/quickstart/) and in
[DTE types](/en/referencia/tipos-de-dte/). This page completes the remaining
five types with **complete, measured payloads**: every example on this page
was emitted verbatim against `POST /api/v1/billing/dte` in the sandbox,
reached `aceptado` (simulated SII, `estado_sii: "DOK"`), and had its XML
verified. The response amounts you see here are what the API returned.

The general rules (mandatory `Idempotency-Key` header, async
`firmado → aceptado` flow, polling `GET /api/v1/billing/dte/{id}`) are the
usual ones — see [Emission](/en/referencia/emision/).

> **The per-type rules, machine-readable:**
> Everything this page explains in prose is encoded in the
> [OpenAPI contract](/en/referencia/contrato-openapi/) as a **discriminated
> union on `tipo_dte`**: the `EmitirDTERequestPorTipo` schema in
> [`/openapi.yaml`](/openapi.yaml) has one variant per type (all 12) declaring
> the conditionally-required fields (`tipo_doc_liq` on 43, `ind_traslado` on
> 52, `referencias` on 56/61/111/112, `export_data` on 110-112,
> `ind_servicio` on boletas) and the price semantics
> (`x-simplo-price-semantics`: gross on boletas, net elsewhere). Where the
> sandbox is more lenient than the real SII, the variant says so in
> `x-simplo-sandbox-leniency`. If your integration validates against the
> schema, these rules enforce themselves.

## 43 — Settlement invoice (liquidación-factura)

Issued by a consignee/commission agent to the **principal** (the receptor).
Two type-specific rules, both enforced by the API:

- **Every `detalle` line requires `tipo_doc_liq`** — the document-type code
  being settled (e.g. `"33"` invoices, `"39"` receipts). Omitting it returns
  `400 LIQUIDACION_TPO_DOC_LIQ_REQUERIDO`.
- **`comisiones` requires `tipo_movim` `"C"` (commission) or `"O"` (other
  charges), with a `glosa`.** Anything else returns
  `400 LIQUIDACION_COMISION_INVALIDA`.

The document total **nets out the commissions**:
`monto_total = neto + IVA − (val_com_neto + val_com_exe + val_com_iva)`.

```bash
curl -X POST https://api.simplo.cl/api/v1/billing/dte \
  -H "X-Api-Key: $SIMPLO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "tipo_dte": 43,
    "receptor": {
      "rut": "76543210-3",
      "razon_social": "COMERCIAL MANDANTE SPA",
      "giro": "VENTA AL POR MAYOR",
      "direccion": "AVENIDA PRINCIPAL 100",
      "comuna": "SANTIAGO",
      "ciudad": "SANTIAGO"
    },
    "detalle": [
      {
        "tipo_doc_liq": "33",
        "nombre": "Ventas del período por cuenta del mandante",
        "cantidad": 1,
        "precio": 500000
      }
    ],
    "comisiones": [
      {
        "tipo_movim": "C",
        "glosa": "Comisión de venta 10%",
        "tasa_comision": 10,
        "val_com_neto": 50000,
        "val_com_exe": 0,
        "val_com_iva": 9500
      }
    ]
  }'
```

Measured result: `201` with `estado: "firmado"`, and on the detail after
acceptance: `monto_neto: 500000`, `iva: 95000`, `monto_total: 535500`
(595,000 − 59,500 in commissions). In the XML the document is a
`<Liquidacion>`, each line carries `<TpoDocLiq>`, the `<Comisiones>` section
details each movement, and `Totales` includes the `<Comisiones>` summary with
`ValComNeto`/`ValComIVA`.

## 46 — Purchase invoice (factura de compra)

Issued by the **buyer**; the `receptor` is the **supplier** you are buying
from. The typical case is full VAT withholding (cambio de sujeto): declare
`impuestos_retenciones` with `tipo_imp: 15` and the rate — the API computes
the withholding over the net amount and **subtracts it from the total**.

```bash
curl -X POST https://api.simplo.cl/api/v1/billing/dte \
  -H "X-Api-Key: $SIMPLO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "tipo_dte": 46,
    "receptor": {
      "rut": "77112223-K",
      "razon_social": "AGRICOLA PROVEEDOR LIMITADA",
      "giro": "CULTIVO DE CEREALES",
      "direccion": "CAMINO RURAL KM 12",
      "comuna": "MELIPILLA",
      "ciudad": "MELIPILLA"
    },
    "detalle": [
      {
        "nombre": "Compra de trigo a productor primario",
        "cantidad": 100,
        "precio": 1200,
        "unidad": "QQM"
      }
    ],
    "impuestos_retenciones": [
      { "tipo_imp": 15, "tasa_imp": 19 }
    ]
  }'
```

Measured result: `monto_neto: 120000`, `iva: 22800`, and since the VAT is
**fully withheld** (`tipo_imp: 15`), `monto_total: 120000` — equal to the
net. In the XML, `Totales` carries the `<ImptoReten>` block with
`TipoImp 15 / TasaImp 19 / MontoImp 22800`.

## 110 — Export invoice (factura de exportación)

An **exempt** document with foreign currency and customs data in
`export_data`. Measured rules:

- **`precio` is in the document's currency** (integer — e.g. `12` = USD 12).
  The total lands in `monto_exento`/`monto_total` in that currency; VAT is 0.
- **`tpo_moneda` uses the SII customs currency table names**: `"DOLAR USA"`,
  `"EURO"`, `"LIBRA EST"`, `"YEN"`, … An ISO code like `"USD"` returns
  `400 EXPORT_MONEDA_INVALIDA`.
- **Always include `tpo_cambio`** (pesos per unit of the currency). With it,
  the XML carries the `<OtraMoneda>` block with the `PESO CL` total
  (`MntTotOtrMnda`) that the real SII requires to balance the header.
  ⚠️ The **sandbox accepts** a foreign-currency export **without**
  `tpo_cambio` (measured: `201`), but the **real SII rejects** that document
  ("Encabezado No Cuadra"). Do not omit the field just because the sandbox
  lets you.
- Customs fields accept **either label or numeric code**:
  `clausula_venta: "CIF"` → `CodClauVenta 1` (an unknown clause returns
  `400 EXPORT_CLAUSULA_INVALIDA`), `pais_recep: "USA"` →
  `CodPaisRecep 225`, `puerto_embarque: "SAN ANTONIO"` →
  `CodPtoEmbarque 906`. A port not in the table (e.g. `"MIAMI"`) travels as
  free text in `IdAdicPtoDesemb`.
- For the foreign receptor use the generic RUT `55555555-5`.

```bash
curl -X POST https://api.simplo.cl/api/v1/billing/dte \
  -H "X-Api-Key: $SIMPLO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "tipo_dte": 110,
    "receptor": {
      "rut": "55555555-5",
      "razon_social": "OVERSEAS TRADING LLC",
      "giro": "IMPORTACION DE ALIMENTOS",
      "direccion": "1200 HARBOR BLVD, MIAMI FL",
      "ciudad": "MIAMI"
    },
    "detalle": [
      {
        "nombre": "Cajas de arándanos frescos 2,5 kg",
        "cantidad": 500,
        "precio": 12
      }
    ],
    "export_data": {
      "tpo_moneda": "DOLAR USA",
      "tpo_cambio": 945.3,
      "modalidad_venta": 1,
      "clausula_venta": "CIF",
      "total_clausula": 6000,
      "via_transporte": 1,
      "puerto_embarque": "SAN ANTONIO",
      "puerto_desembarque": "MIAMI",
      "pais_recep": "USA",
      "pais_dest": "USA",
      "peso_bruto": 1350.5,
      "unidad_peso_bruto": 6,
      "tipo_bulto": "PALLET",
      "total_bultos": 25
    }
  }'
```

Measured result: `monto_exento: 6000`, `monto_total: 6000` (USD), `iva: 0`.
The XML is emitted under `<Exportaciones>` with the
`<Transporte><Aduana>` block (codes already mapped) and `<OtraMoneda>`
`TpoCambio 945.3` / `MntTotOtrMnda 5671800`.

## 111 and 112 — Export debit and credit notes

Like 56/61, they **require `referencias`** (omitting them returns
`400 "referencia is required for document type 111"`), and being export
documents they carry `export_data` with `tpo_moneda` and `tpo_cambio`. Emit
the 110 first and reference its **real folio and date**.

Export debit note (111) — an additional charge over the 110:

```bash
curl -X POST https://api.simplo.cl/api/v1/billing/dte \
  -H "X-Api-Key: $SIMPLO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "tipo_dte": 111,
    "receptor": {
      "rut": "55555555-5",
      "razon_social": "OVERSEAS TRADING LLC",
      "giro": "IMPORTACION DE ALIMENTOS",
      "direccion": "1200 HARBOR BLVD, MIAMI FL",
      "ciudad": "MIAMI"
    },
    "detalle": [
      { "nombre": "Flete marítimo adicional no facturado", "cantidad": 1, "precio": 350 }
    ],
    "referencias": [
      {
        "tipo_doc_ref": "110",
        "folio_ref": 1042,
        "fecha_ref": "2026-09-02",
        "codigo_ref": 3,
        "razon_ref": "Corrige monto: flete adicional"
      }
    ],
    "export_data": { "tpo_moneda": "DOLAR USA", "tpo_cambio": 945.3 }
  }'
```

Export credit note (112) — a partial return over the 110:

```bash
curl -X POST https://api.simplo.cl/api/v1/billing/dte \
  -H "X-Api-Key: $SIMPLO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "tipo_dte": 112,
    "receptor": {
      "rut": "55555555-5",
      "razon_social": "OVERSEAS TRADING LLC",
      "giro": "IMPORTACION DE ALIMENTOS",
      "direccion": "1200 HARBOR BLVD, MIAMI FL",
      "ciudad": "MIAMI"
    },
    "detalle": [
      { "nombre": "Devolución 40 cajas arándanos dañadas", "cantidad": 40, "precio": 12 }
    ],
    "referencias": [
      {
        "tipo_doc_ref": "110",
        "folio_ref": 1042,
        "fecha_ref": "2026-09-02",
        "codigo_ref": 3,
        "razon_ref": "Corrige monto: devolución parcial"
      }
    ],
    "export_data": { "tpo_moneda": "DOLAR USA", "tpo_cambio": 945.3 }
  }'
```

Measured results: 111 → `monto_total: 350`; 112 → `monto_total: 480`
(40 × 12), both `aceptado`, both carrying the `<Referencia>` to the 110's
real folio and their `<OtraMoneda>` block in the XML. Replace
`folio_ref: 1042` and `fecha_ref` with the folio and date your own 110
emission returned.

Two measured behaviors you should know:

- **A 111 referencing a 112 with `codigo_ref: 3` is rejected**:
  `400 REFERENCIA_CODIGO_INVALIDO` ("use codigo_ref=1") — to void an export
  credit note, reference it with `codigo_ref: 1`.
- **The API verifies that the referenced export folio exists**, same as
  56/61: a 111/112 pointing at a nonexistent 110 folio of your company
  returns `400 REFERENCIA_INVALIDA` (the real SII would reject it with
  `REF-3-750`, burning the folio). Same scope as 56/61: only references to
  electronic types managed by Simplo are checked; documents issued outside
  Simplo (e.g. pre-migration) are not verifiable and pass through unchecked.

## Errors specific to these types (measured)

| `code`                              | Status | When                                                                  |
| ----------------------------------- | ------ | --------------------------------------------------------------------- |
| `LIQUIDACION_TPO_DOC_LIQ_REQUERIDO` | 400    | Type 43 with a `detalle` line missing `tipo_doc_liq`                  |
| `LIQUIDACION_COMISION_INVALIDA`     | 400    | Type 43 with a commission missing `glosa` or `tipo_movim` not `C`/`O` |
| `EXPORT_MONEDA_INVALIDA`            | 400    | `tpo_moneda` outside the customs table (e.g. `"USD"`)                 |
| `EXPORT_CLAUSULA_INVALIDA`          | 400    | `clausula_venta` that is neither a customs Incoterm clause nor a code |
| `REFERENCIA_CODIGO_INVALIDO`        | 400    | 111 referencing a 112 with `codigo_ref: 3`                            |
| `REFERENCIA_INVALIDA`               | 400    | 56/61/111/112 referencing a type+folio that does not exist for your company |
| `BAD_REQUEST` (reference)           | 400    | 111/112 without `referencias`                                         |

## Related

- [DTE types](/en/referencia/tipos-de-dte/) — the 12 types and their requirements
- [Emission](/en/referencia/emision/) — endpoint, idempotency and async flow
- [States](/en/referencia/estados/) — lifecycle up to `aceptado`
- [Errors](/en/referencia/errores/) — error classes and retries

---

HTML version: https://docs.simplo.cl/en/referencia/payloads-por-tipo/ · Agent index: https://docs.simplo.cl/llms.txt
