Merch firmowy w innych krajach:AMArmeniaGEGeorgiaTRTürkiyeRSSerbiaAEUAECYCyprusITItalyPTPortugalESSpain

SDK Python dla Polski

corp-merch (PyPI) — klienty sync i async, Python 3.10+, pełne type hints, modele Pydantic v2, FastAPI-friendly.

Instalacja i init

pip install corp-merch. Sync: from corp_merch import CorpMerch; cm = CorpMerch(api_key=os.environ['CM_KEY'], country='PL'). Async: from corp_merch import AsyncCorpMerch; ta sama sygnatura. Country stosuje VAT 23% via KSeF przez hub Warszawa.

Quickstart — złóż zamówienie

order = cm.orders.create(idempotency_key=str(uuid4()), buyer={'vat_id': 'PL…'}, lines=[{'sku': 'TSH-001', 'qty': 200}], promised_date=date(2026,7,1)). Zwraca model Pydantic Order z pełnym typingiem. Błędy podnoszone jako ValidationError, RateLimitError itp. Równoważnik async: await acm.orders.acreate(…).

Weryfikacja webhook (FastAPI)

@app.post('/wh') async def wh(req: Request): event = cm.webhooks.construct_event(await req.body(), req.headers['x-corp-signature'], os.environ['CM_WEBHOOK_SECRET']); …. Podnosi SignatureVerificationError przy złym podpisie; FastAPI konwertuje na 400 via exception handler zarejestrowany na app.

FAQ

Działa z Django/Flask?

Tak — framework-agnostic. Wysyłamy middleware dla Django (corp_merch.django) i Flask (corp_merch.flask) dla tras webhook.

Sync i async oba wspierane?

Tak — osobne klienty (CorpMerch / AsyncCorpMerch) dzielą te same typy. Używają httpx pod spodem; bring your own event loop.

Jak paginować katalog?

for item in cm.catalog.list(country='PL'): … iteruje wszystkie strony (cursor pagination wewnątrz). Async: async for item in acm.catalog.alist(country='PL'): …

Type hints / mypy?

Pełne pokrycie. Marker ./py.typed. Testowane z mypy --strict i pyright. Modele Pydantic v2 dla wszystkich response.

Kod źródłowy?

MIT na GitHub: github.com/corp-merch/sdk-python. Issue tracker dla bugów / RFC.

Porozmawiaj ze specjalistą