Skip to main content

Python SDK para construir, firmar y timbrar CFDI 4.0 contra el API de ContaDB

Project description

contadb-sdk

PyPI version Python versions License: MIT

SDK oficial de Python para construir, firmar y timbrar CFDI 4.0 contra el API público de ContaDB.

Consume timbres de tu bolsa prepagada usando un API token. Sin pagos por uso, sin contratos mensuales — solo timbra cuando lo necesites.


Instalación

pip install contadb-sdk

Requiere Python 3.10+.

Quickstart

from decimal import Decimal
from contadb_sdk import (
    ContaDBClient,
    CFDIBuilder,
    Certificado,
    Emisor,
    Receptor,
    Concepto,
)

# 1. Carga tu CSD (Certificado de Sello Digital del SAT)
cert = Certificado.cargar(
    cer_path="emisor.cer",
    key_path="emisor.key",
    password="MI_PASSWORD",
)

# 2. Construye el CFDI
cfdi_xml = (
    CFDIBuilder(
        emisor=Emisor(
            rfc="EKU9003173C9",
            nombre="ESCUELA KEMPER URGATE",
            regimen_fiscal="601",
        ),
        receptor=Receptor(
            rfc="URE180429TM6",
            nombre="UNIVERSIDAD ROBOTICA ESPAÑOLA",
            uso_cfdi="G03",
            domicilio_fiscal_receptor="65000",
            regimen_fiscal_receptor="601",
        ),
        serie="A",
        folio="1001",
        forma_pago="03",       # Transferencia electrónica
        metodo_pago="PUE",      # Pago en una sola exhibición
        lugar_expedicion="64000",
    )
    .agregar_concepto(
        Concepto(
            clave_prod_serv="43232408",
            clave_unidad="E48",
            descripcion="Servicios de consultoría en sistemas",
            cantidad=Decimal("1"),
            valor_unitario=Decimal("1000.00"),
            objeto_imp="02",
            tasa_iva=Decimal("0.16"),
        )
    )
    .construir_y_firmar(cert)
)

# 3. Timbra contra ContaDB
with ContaDBClient(api_token="cdb_TU_TOKEN_AQUI") as client:
    resultado = client.timbrar(cfdi_xml)

print(f"UUID:           {resultado.uuid}")
print(f"Saldo restante: {resultado.saldo_restante} timbres")
print(f"XML timbrado:   {len(resultado.xml_timbrado)} chars")

Características

  • Construcción CFDI 4.0 — Builder con API fluida, validación Pydantic, cálculo automático de impuestos.
  • Firma RSA-SHA256 — Carga .cer + .key del SAT, firma cadena original generada con XSLT oficial.
  • Cliente HTTP tipado — Errores mapeados a excepciones específicas (SaldoInsuficienteError, TokenRevocadoError, etc.).
  • Idempotency-Key — Auto-generado por llamada para resistir reintentos.
  • 100% tipado — Marcador py.typed para inferencia perfecta en IDEs y mypy --strict.
  • Cero dependencias mágicas — Solo pydantic, httpx, cryptography, lxml.

Manejo de errores

from contadb_sdk import (
    ContaDBClient,
    SaldoInsuficienteError,
    RateLimitError,
    TokenRevocadoError,
)

try:
    resultado = client.timbrar(xml)
except SaldoInsuficienteError:
    # Comprar más timbres en https://contadb.com/facturacion
    ...
except RateLimitError as e:
    # Esperar e.retry_after segundos
    ...
except TokenRevocadoError:
    # Generar un nuevo token
    ...

Configuración

Por defecto el cliente apunta a https://api.contadb.com. Puedes cambiarlo:

client = ContaDBClient(
    api_token="cdb_xxx",
    base_url="https://staging.contadb.com",  # o env var CONTADB_BASE_URL
    timeout=60.0,
)

Documentación

Cómo obtener un API token

  1. Crea cuenta en contadb.com.
  2. Ve a Facturación → API Tokens y genera uno.
  3. Compra una bolsa de timbres (desde 100 timbres / $200 MXN).
  4. Usa el token con este SDK.

Licencia

MIT — ver LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

contadb_sdk-1.1.0.tar.gz (91.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

contadb_sdk-1.1.0-py3-none-any.whl (70.9 kB view details)

Uploaded Python 3

File details

Details for the file contadb_sdk-1.1.0.tar.gz.

File metadata

  • Download URL: contadb_sdk-1.1.0.tar.gz
  • Upload date:
  • Size: 91.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for contadb_sdk-1.1.0.tar.gz
Algorithm Hash digest
SHA256 2c885c83a4b54b4832b991642889fbb6eb503443eab981573b7e11d76eb6b929
MD5 8fe3a17fc4d14214951d5e6da48c3048
BLAKE2b-256 6a35a65f14f58dac2a701ef0d2d669309a4c061867276fead1463e60c8692e55

See more details on using hashes here.

File details

Details for the file contadb_sdk-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: contadb_sdk-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 70.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for contadb_sdk-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fc85e0b1fedc4d13702c9654bd5a1be9c71e991866d881bcacb217f309049365
MD5 d1e275e6edc6f3423a780d2102d1835c
BLAKE2b-256 a4ab596a3b68a062f49095ea9c89dcff132da08c33726cdb644cabc76fe20600

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page