Generar XML firmado de un DTE

Generar XML firmado de un Documento Tributario Electronico (DTE).

POST /api/v1/vendemas/dte/documentos/generar
import requests
 
headers = {
    "X-API-Token": "sk_live_replace_with_your_token",
}
 
response = requests.post(
    "https://api.fiscalbridge.cl/api/v1/vendemas/dte/documentos/generar",
    headers=headers,
)
response.raise_for_status()
print(response.json())

Generar XML firmado de un Documento Tributario Electronico (DTE).

Genera XML completo segun esquema SII con firma digital RSA-SHA1, a partir del CAF + datos del DTE + certificado digital. Opcionalmente envia el XML al SII y retorna track_id.

Autenticacion requerida: API token en header X-API-Token con scope vendemas:write

  • certificado digital en auth.cert (PFX o PEM).

Quota: Consume 1 consulta | Peso: 5x (operacion critica si enviar_sii=1)


Tipos de DTE soportados

CodigoDocumento
33 / 34Factura Electronica / Factura Exenta
39 / 41Boleta Electronica / Boleta Exenta
43Liquidacion Factura Electronica
52Guia de Despacho Electronica
56 / 61Nota de Debito / Nota de Credito
110 / 111 / 112Factura / Nota Debito / Nota Credito de Exportacion

Parametros de consulta

ParametroTipoDefaultDescripcion
normalizarstring11 calcula valores derivados; 0 usa valores tal cual
formatostringjsonjson, xml, yaml, JSONString, Acepta.{Normal,Boleta}, FacturacionCL.XML
enviar_siistring01 envia al SII tras generar
gzipstring01 comprime el envio al SII
retrystring1Intentos de envio

Body (JSON)

{
    "auth": {"cert": {"pfx-data": "<base64>", "passphrase": "clave"}},
    "caf": "XML_o_base64_del_CAF",
    "dte": {
        "Encabezado": {
            "IdDoc": {"TipoDTE": 33, "Folio": 1, "FchEmis": "2026-01-15"},
            "Emisor": {"RUTEmisor": "76.XXX.XXX-K", "RznSoc": "...", "GiroEmis": "..."},
            "Receptor": {"RUTRecep": "11.111.111-1", "RznSocRecep": "..."},
            "Totales": {"MntTotal": 119000}
        },
        "Detalle": [{"NmbItem": "Producto", "QtyItem": 1, "PrcItem": 100000}]
    },
    "resolucion": {"NroResol": 0, "FchResol": "2024-01-01"}
}

Campos auto-calculados con normalizar=1

  • FchEmis -> fecha de hoy si se omite.
  • IndServicio -> 3 para boletas (39, 41).
  • NroLinDet -> numerado 1, 2, 3...
  • MontoItem -> QtyItem * PrcItem (con descuentos).
  • MntNeto -> suma desde items.
  • IVA -> MntNeto * TasaIVA / 100.
  • MntTotal -> MntNeto + IVA + MntExe.
  • TasaIVA -> 19 para tipos afectos.

Con normalizar=0 debe enviar todos los campos explicitamente.

Respuesta exitosa (200)

{
    "certificacion": 1,
    "xml": {
        "dte": "PD94bWwg...",
        "receptor": "PD94bWwg...",
        "sii": "PD94bWwg..."
    },
    "track_id": 123456,
    "envio_estado": "recibido",
    "envio_descripcion": "El SII ha recibido el envio"
}

Errores especificos

Codigoerror_codeCausaResolucion
400VALIDATION_ERRORcaf o dte faltantesEnviar ambos
400AUTH_ERRORCertificado invalido o passphrase incorrectaRenovar certificado
401HTTP_401API token ausente o invalidoEnviar X-API-Token valido
403INSUFFICIENT_SCOPEToken sin scope vendemas:writeGenerar token con scope
429SII_RATE_LIMIT / QUOTA_EXCEEDEDRate limitRespetar Retry-After
502SII_UPLOAD_ERRORSII rechazo el envio (solo si enviar_sii=1)Reintentar con mismo XML
503SII_UNAVAILABLESII en mantenimientoReintentar en 5 min

(Docstring legacy con estructura interna del body - preservado para referencia)

El body debe tener la siguiente estructura::

{
    "auth": {
        "cert": {
            "cert-data": "base64...",  // certificado PEM en base64
            "pkey-data": "base64...",  // llave privada PEM en base64
            // alternativa: "pfx-data": "base64..." (PKCS#12)
            "passphrase": "..."        // opcional
        }
    },
    "caf": "base64_o_xml_del_caf...",
    "dte": {
        "Encabezado": {
            "IdDoc": {"TipoDTE": 33, "Folio": 1, "FchEmis": "2024-01-15"},
            "Emisor": {"RUTEmisor": "12345678-9", ...},
            "Receptor": {"RUTRecep": "98765432-1", ...},
            "Totales": {"MntTotal": 119000}
        },
        "Detalle": [{"NmbItem": "Producto", "MontoItem": 119000}]
    },
    "resolucion": {
        "NroResol": 0,
        "FchResol": "2024-01-01"
    }
}

Args: body: Request body con auth, caf, dte y resolucion. normalizar: "1" para calcular valores derivados, "0" para usarlos tal cual. formato: Formato de los datos del DTE en el body. enviar_sii: "1" para enviar el XML al SII tras generarlo. gzip: "1" para comprimir el envio al SII. retry: Numero de reintentos de envio al SII.

Returns: Diccionario con xml (dte, receptor, sii en base64), certificacion y track_id.

Raises: ValueError: Si faltan datos obligatorios o el DTE es invalido.

Parámetros

Header / Body
Tipo
Descripción
Requerido
enviar_sii
string · query
`0` No se envia el XML generado al SII. `1` Se envia el XML generado al SII
No
formato
string · query
Formato de los datos enviados para crear el DTE: `json` formato por defecto, `xml`, `yaml`, `JSONString`, `Acepta.Normal`, `Acepta.Boleta`, `FacturacionCL.XML`
No
gzip
string · query
`0` enviar sin comprimir. `1` enviar comprimido
No
normalizar
string · query
`1` Se usa normalizacion: se calcularan ciertos valores. `0` No se usa normalizacion: se deben enviar todos los valores segun esquema XML
No
retry
string · query
Cantidad de intentos de envio que se deben realizar
No

Respuestas

200XML del DTE generado (y opcionalmente enviado al SII)
400Datos invalidos, CAF faltante o certificado invalido
401API token ausente o invalido
403Sin scope `vendemas:write` o cuenta bloqueada
422Body con formato invalido
429Limite de tasa excedido
502SII rechazo el envio
503SII en mantenimiento

Forma de la respuesta

Código 200. Estructura del JSON devuelto.

{}

On this page