vendus Python SDK¶
Python SDK for Vendus, Portugal's AT-certified invoicing & POS platform.
Community SDK
This is an independent open-source project, not affiliated with or endorsed by Vendus.
Quickstart¶
from decimal import Decimal
from vendus import ClientData, DocumentItem, TaxCategory, VendusClient
client = VendusClient(api_key="your-api-key")
invoice = client.documents.create_invoice(
register_id=1,
client=ClientData(name="Acme Lda", fiscal_id="123456789"),
items=[
DocumentItem(
description="Consulting hours",
quantity=Decimal("10"),
unit_price=Decimal("75.00"),
tax_category=TaxCategory.NORMAL,
),
],
)
print(invoice.number) # "FT 2026/123"
print(invoice.atcud) # AT communication code
print(invoice.qrcode) # AT QR code payload
Supported document types¶
| Document | Code | Method | Status |
|---|---|---|---|
| Invoice | FT | client.documents.create_invoice |
✅ |
| Simplified Invoice | FS | client.documents.create_simplified_invoice |
✅ |
| Invoice-Receipt | FR | client.documents.create_invoice_receipt |
✅ |
| Receipt | RG | client.documents.create_receipt |
✅ |
| Credit Note | NC | client.documents.create_credit_note |
✅ |
Why this SDK?¶
- Sync + Async — same client,
_asyncsuffix for async variants - Fully typed —
mypy --strict, full IDE autocomplete Decimalfor money — neverfloat. Cent precision required by AT- Safe retries — GET auto-retries; POST only when
external_referenceis present (prevents duplicate fiscal documents) - NIF validated locally — mod 11 algorithm, fails before hitting the API
- PII redaction in logs —
fiscal_id, email, phone, address - AT is opaque — Vendus communicates with AT; the SDK never talks to AT directly
Next steps¶
-
Installation
Install and configure in 2 minutes
-
Documents
Which type to use? Decision guide
-
Recipes
Guides for FastAPI, Flask, Django
-
Errors
Exception hierarchy and handling