Reportia

Actualizado 4 junio 2026 · 10 min de lectura

Cómo generar facturas PDF con Python (API REST + JSON)

Generar facturas PDF es una de las tareas más comunes en sistemas de facturación, ERPs y aplicaciones SaaS. En este tutorial te muestro cómo hacerlo en 3 pasos usando Python y una API REST que acepta JSON.

Sin instalar bibliotecas de renderizado. Sin configurar servidores de PDF. Solo un POST con tus datos y recibes el PDF listo.

El problema con generar PDFs manualmente

Si has intentado generar PDFs con Python, probablemente te has encontrado con esto:

Lo que necesitas es: manda JSON, recibe PDF. Sin dependencias.

Paso 1: Estructura tus datos en JSON

La clave es separar los datos del diseño. Tu aplicación solo se preocupa por generar el JSON con la información correcta:

{
  "template": "factura-servicios",
  "format": "pdf",
  "data": {
    "empresa": {
      "nombre": "Mi Empresa SA de CV",
      "rfc": "MEM210101ABC",
      "direccion": "Av. Reforma 123, CDMX"
    },
    "cliente": {
      "nombre": "Cliente Final",
      "rfc": "XAXX010101000",
      "email": "[email protected]"
    },
    "folio": "F-2026-0142",
    "fecha": "2026-06-04",
    "items": [
      {"concepto": "Diseño web", "cantidad": 1, "precio": 15000},
      {"concepto": "Hosting anual", "cantidad": 12, "precio": 250},
      {"concepto": "Soporte técnico", "cantidad": 10, "precio": 500}
    ],
    "subtotal": 23000,
    "iva": 3680,
    "total": 26680,
    "moneda": "MXN"
  }
}

Paso 2: Envía el JSON a la API

Con requests de Python, son 5 líneas:

import requests

api_url = "https://reportia.4l3.org/v1/render"
headers = {
    "Authorization": "Bearer TU_API_KEY",
    "Content-Type": "application/json"
}

payload = {
    "template": "factura-servicios",
    "format": "pdf",
    "data": {
        "empresa": {"nombre": "Mi Empresa SA de CV", "rfc": "MEM210101ABC"},
        "cliente": {"nombre": "Cliente Final"},
        "folio": "F-2026-0142",
        "fecha": "2026-06-04",
        "items": [
            {"concepto": "Diseño web", "cantidad": 1, "precio": 15000},
            {"concepto": "Hosting anual", "cantidad": 12, "precio": 250}
        ],
        "subtotal": 18000,
        "iva": 2880,
        "total": 20880,
        "moneda": "MXN"
    }
}

response = requests.post(api_url, json=payload, headers=headers)

if response.status_code == 200:
    with open("factura.pdf", "wb") as f:
        f.write(response.content)
    print("Factura generada: factura.pdf")
else:
    print(f"Error: {response.status_code} - {response.text}")

Eso es todo. El PDF llega en el body del response, listo para guardar, enviar por email, o devolver al usuario.

Paso 3: Personaliza la plantilla

Reportia incluye plantillas prediseñadas para diferentes industrias. Si necesitas algo personalizado, puedes crear tu propia plantilla HTML/CSS en el editor visual:

Generar facturas en lote (batch)

Si necesitas generar 100 facturas de un CSV o base de datos, usa un loop:

import csv
import requests

api_url = "https://reportia.4l3.org/v1/render"
headers = {"Authorization": "Bearer TU_API_KEY"}

with open("facturas.csv") as f:
    reader = csv.DictReader(f)
    for row in reader:
        payload = {
            "template": "factura-servicios",
            "format": "pdf",
            "data": {
                "cliente": {"nombre": row["cliente"]},
                "folio": row["folio"],
                "fecha": row["fecha"],
                "items": [{"concepto": row["concepto"],
                           "cantidad": int(row["qty"]),
                           "precio": float(row["precio"])}],
                "total": float(row["total"]),
                "moneda": "MXN"
            }
        }
        r = requests.post(api_url, json=payload, headers=headers)
        if r.status_code == 200:
            with open(f"{row['folio']}.pdf", "wb") as out:
                out.write(r.content)
            print(f"OK: {row['folio']}.pdf")

100 facturas en menos de 2 minutos. Sin instalar nada en tu servidor.

También Excel y CSV

Reportia no solo genera PDF. Cambia "format": "pdf" por "format": "xlsx" o "format": "csv" y obtén la misma factura en Excel o CSV. Ideal para contadores que necesitan importar datos a su sistema.

Prueba gratis: 50 documentos/mes sin tarjeta

Genera facturas, cotizaciones y reportes desde tu aplicación en minutos.

Ver planes →

Preguntas frecuentes

¿Necesito instalar algo en mi servidor?

No. Reportia es una API en la nube. Solo necesitas hacer un HTTP POST desde cualquier lenguaje (Python, JavaScript, PHP, Ruby, Go, etc.).

¿Funciona para CFDI 4.0?

Reportia genera el PDF de representación impresa. El XML fiscal se genera con tu PAC (Finkok, SW, etc.). Reportia complementa tu PAC generando el PDF bonito que envías al cliente.

¿Cuánto cuesta?

Gratis hasta 50 documentos/mes. Plan Pro desde $9 USD/mes (1,000 docs). Ver precios completos.

¿Puedo usar mi propia plantilla HTML?

Sí. Sube tu HTML/CSS en el editor visual o envíalo inline en el campo template_html.