Python client for the Distyra Transaction Enrichment API (enrichment + SME underwriting)
Project description
distyra
Python client for the Distyra Transaction Enrichment API: transaction enrichment and SME cash-flow underwriting for EU lenders.
pip install distyra
Quick start
import os
from distyra import Distyra
client = Distyra(api_key=os.environ["DISTYRA_API_KEY"])
result = client.enrich(
descriptor="ALBERT HEIJN 1234 AMSTERDAM NL",
amount=-12.34,
currency="EUR",
mcc="5411",
)
print(result.merchant.name) # "Albert Heijn"
print(result.category.primary) # "Retail & E-commerce"
print(result.category.source) # "catalog" (curated) or "llm" (model-proposed)
Batch enrichment
batch = client.enrich_batch([
{"descriptor": "ALBERT HEIJN 1234 AMSTERDAM NL", "amount": -12.34, "currency": "EUR"},
{"descriptor": "NS GROEP B.V.", "amount": -4.50, "currency": "EUR"},
{"descriptor": "NETFLIX.COM", "amount": -13.99, "currency": "EUR"},
])
for item in batch.items:
print(item)
Up to 100 items per call; a failed item occupies its slot with an error envelope, the batch itself never fails.
Underwriting
Statement files in, one consolidated analysis out. Multiple files for the same applicant (the "last 6 months as 6 monthly PDFs" case) consolidate into one analysis over the merged window:
analysis = client.analyze_statement(
["jan.pdf", "feb.pdf", "mar.pdf"],
applicant_id="loan-2026-0142",
input_mode="statement_pdf", # one format per analysis
enrich=True, # optional: enrich every transaction
)
print(analysis.id, analysis.features)
JSON mode, when transactions are already on hand:
analysis = client.analyze(
applicant_id="loan-2026-0142",
input_mode="raw",
accounts=[{
"account_id": "main",
"currency": "EUR",
"opening_balance": 1500.0,
"transactions": [
{"date": "2026-05-01", "amount": 2500.0, "descriptor_raw": "INVOICE 1001 ACME BV"},
{"date": "2026-05-15", "amount": -1200.0, "descriptor_raw": "RENT MAY OFFICE"},
],
}],
)
Fetch a stored analysis later with client.get_analysis(analysis_id).
Note: enrichment is self-serve; underwriting endpoints are enabled per organization. Contact sales for access.
Errors
Every non-2xx raises DistyraError with the parsed envelope:
from distyra import Distyra, DistyraError
try:
client.enrich(descriptor="...")
except DistyraError as e:
print(e.status_code, e.error, e.detail)
Beyond the wrapper
The full generated client (every endpoint, typed models) ships in the same distribution as distyra_api_client. The wrapper's .raw attribute is a ready-authenticated instance:
from distyra_api_client.api.catalog import get_categories
categories = get_categories.sync(client=client.raw)
Development
This package lives in the Distyra monorepo at packages/saas-sdk-python/. The distyra_api_client package is generated from the committed OpenAPI snapshot — do not edit it by hand:
npm run snapshot -w @brightfield/saas-api # refresh openapi.json from source
bash scripts/generate-python-sdk.sh # regenerate distyra_api_client
bash scripts/test-python-sdk.sh # build wheel + smoke
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file distyra-0.1.0.tar.gz.
File metadata
- Download URL: distyra-0.1.0.tar.gz
- Upload date:
- Size: 137.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
205d320706f004c24229110b411abcf80a93a2364b1b5a811899151798f6a77a
|
|
| MD5 |
5b5b5c329eaa913f03264d60528b27e9
|
|
| BLAKE2b-256 |
6e65841ab215072ce71c449cba8f1bc8027cc88b6e9215a62e9dafe4f0720b5c
|
File details
Details for the file distyra-0.1.0-py3-none-any.whl.
File metadata
- Download URL: distyra-0.1.0-py3-none-any.whl
- Upload date:
- Size: 499.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ece9e6675129551e661cf9e0928575df277f2d35bd1efc914913a43352ee95c
|
|
| MD5 |
2b1669ee22395810da0503d8cd06c882
|
|
| BLAKE2b-256 |
c69e4aabeb6d25aa66259a4842ee7b39a570b0e285b9509dfb1743b9f3ccb88a
|