Document Stack
Document Stack
Docs

Python SDK

Generate PDFs from your Python applications — Django, Flask, FastAPI, or scripts.

Installation

Bash
pip install documentstack

Quick Start

Python
from documentstack import DocumentStack

client = DocumentStack(api_key="ds_live_your_key_here")

pdf = client.generate(
    template_id="tmpl_abc123",
    data={
        "customer_name": "Acme Corp",
        "invoice_number": "INV-001",
        "total": "$5,000.00",
    },
)

with open("invoice.pdf", "wb") as f:
    f.write(pdf)

print("PDF generated successfully!")
Store your API key in an environment variable and load it withos.environ["DOCUMENTSTACK_API_KEY"] instead of hardcoding.

Configuration

ParameterTypeDefaultDescription
api_keystrYour API key (required)
base_urlstrAPI URLCustom URL for self-hosted instances
timeoutint30Request timeout in seconds

Django Example

Serve PDFs from a Django view:

Python
from django.http import HttpResponse
from documentstack import DocumentStack

client = DocumentStack(api_key=settings.DOCUMENTSTACK_API_KEY)

def download_invoice(request, invoice_id):
    invoice = Invoice.objects.get(id=invoice_id)

    pdf = client.generate(
        template_id="tmpl_invoice",
        data={
            "customer_name": invoice.customer.name,
            "invoice_number": invoice.number,
            "line_items": [
                {"description": item.desc, "amount": str(item.amount)}
                for item in invoice.items.all()
            ],
            "total": str(invoice.total),
        },
    )

    response = HttpResponse(pdf, content_type="application/pdf")
    response["Content-Disposition"] = f'attachment; filename="invoice-{invoice.number}.pdf"'
    return response

FastAPI Example

Python
from fastapi import FastAPI
from fastapi.responses import Response
from documentstack import DocumentStack

app = FastAPI()
client = DocumentStack(api_key="ds_live_your_key_here")

@app.post("/generate-pdf")
async def generate_pdf(template_id: str, data: dict):
    pdf = client.generate(template_id=template_id, data=data)
    return Response(
        content=pdf,
        media_type="application/pdf",
        headers={"Content-Disposition": 'attachment; filename="document.pdf"'},
    )

Flask Example

Python
from flask import Flask, send_file
from documentstack import DocumentStack
import io
import { CodeBlock } from "@/components/docs/CodeBlock";
import { generateDocsMetadata, generateDocsJsonLd } from "@/lib/docs-seo";


export const metadata = generateDocsMetadata("/docs/sdk-python");

app = Flask(__name__)
client = DocumentStack(api_key="ds_live_your_key_here")

@app.route("/invoice/<invoice_id>/pdf")
def invoice_pdf(invoice_id):
    invoice = get_invoice(invoice_id)
    pdf = client.generate(
        template_id="tmpl_invoice",
        data={"customer_name": invoice["name"], "total": invoice["total"]},
    )
    return send_file(
        io.BytesIO(pdf),
        mimetype="application/pdf",
        download_name=f"invoice-{invoice_id}.pdf",
    )

Error Handling

Python
from documentstack import DocumentStack, DocumentStackError

client = DocumentStack(api_key="ds_live_your_key_here")

try:
    pdf = client.generate(template_id="tmpl_abc", data={"name": "Test"})
except DocumentStackError as e:
    print(f"Generation failed: {e.message}")
    print(f"Status code: {e.status_code}")

View on GitHub

The source code is available on GitHub. Report issues, view examples, or contribute improvements.