regiondo
A Python client for the Regiondo Booking API.
Implements the request signing scheme used by the Regiondo PHP/JS sample
clients (HMAC-SHA256 over timestamp + public_key + http_build_query(params)),
plus typed namespaces for every endpoint in the v1 spec.
Install
pip install py-regiondo
The distribution is py-regiondo, the import name is regiondo:
from regiondo import RegiondoClient
From source:
pip install -e ".[dev]"
Usage
from regiondo import RegiondoClient
client = RegiondoClient(
public_key="YOUR_PUBLIC_KEY",
private_key="YOUR_PRIVATE_KEY",
sandbox=True, # talks to https://sandbox-api.regiondo.com/v1/
accept_language="de-DE",
)
# Catalog
categories = client.categories.list()
product = client.products.get(12345)
products = client.products.list(limit=20, active_only="true")
slots = client.products.timeslots(product_id=12345)
# Checkout flow
hold = client.checkout.create_hold(
item={"product_id": 12345, "variation_id": 1, "qty": 2},
currency="EUR",
)
totals = client.checkout.totals(input_data={"items": [...]})
order = client.checkout.purchase(
input_data={"items": [...], "customer": {...}, "payment": {...}},
currency="EUR",
)
# Partner / supplier
sales = client.partner.sold_items_list(date_from="2026-01-01", date_to="2026-01-31")
# Validation
client.validate.submit(item={"ticket_code": "ABC-123"})
Namespaces
| Attribute | Endpoints |
|---|---|
client.account |
/account/locale, /account/currency |
client.categories |
/categories, /categories/{id} |
client.checkout |
hold / totals / purchase / cancel / permanent reservations |
client.languages |
/languages, /languages/{id} |
client.locations |
/locations, /locations/suggest, /locations/{id} |
client.partner |
sold items, CRM customers, bookings |
client.products |
listing, variations, timeslots, availabilities, widgets, … |
client.reviews |
/reviews |
client.supplier |
sold items, CRM customers, bookings, resources |
client.tags |
/tags |
client.validate |
/validate/submit |
Calling an arbitrary endpoint
client.get("products/availabilities/42", date_from="2026-01-01")
client.post("checkout/cancel", params={"reference_ids": "1,2,3"})
client.put("checkout/hold", params={"reservation_code": "X", "reserve_minutes": 15})
client.delete("checkout/hold", reservation_code="X")
All four methods sign the request, send PHP-style http_build_query params, and
return the parsed JSON body. JSON bodies passed via json=... are not
included in the signature, matching the reference PHP implementation.
Errors
Non-2xx responses raise:
| HTTP | Exception |
|---|---|
| 401/403 | regiondo.AuthenticationError |
| 404 | regiondo.NotFoundError |
| 429 | regiondo.RateLimitError |
| Other 4xx | regiondo.ValidationError |
| 5xx | regiondo.RegiondoAPIError (base class) |
All of them carry .status_code, .payload (parsed JSON body), and .response
(raw requests.Response).
Tests
pip install -e ".[dev]"
pytest
The signing tests pin output against PHP 7.2's http_build_query (captured
live) so the wire format stays compatible with the upstream verifier.
Releasing
Releases are published to PyPI automatically by the publish workflow when a
GitHub Release is created. Auth is via PyPI Trusted Publishing (OIDC) — no
API token secrets in the repo.
One-time PyPI setup
- Sign in at https://pypi.org/manage/account/publishing/.
- Under Add a new pending publisher (works even before the project exists),
fill in:
- PyPI project name:
py-regiondo - Owner:
e-dway - Repository name:
py-regiondo - Workflow filename:
publish.yml - Environment name:
pypi
- PyPI project name:
- Create a matching GitHub Environment named
pypiunder Settings → Environments (optionally add required reviewers as a manual approval gate). Repeat fortestpypiif you want to dry-run there.
Cutting a release
# 1. Bump the version in pyproject.toml
$EDITOR pyproject.toml # version = "X.Y.Z"
# 2. Commit, tag, push
git commit -am "release: X.Y.Z"
git tag vX.Y.Z
git push origin main vX.Y.Z
# 3. Create the GitHub Release for tag vX.Y.Z
gh release create vX.Y.Z --generate-notes
The workflow verifies that the tag (minus the v prefix) matches the version
in pyproject.toml before building and uploading. Dry-run uploads to TestPyPI
are available via the workflow's Run workflow button (choose testpypi).
Notes
- The sandbox URL is
https://sandbox-api.regiondo.com/v1/; production ishttps://api.regiondo.com/v1/. There are also regional production hosts (e.g.api.regiondo.de); pass them viabase_url=. - Regiondo limits API usage to 50,000 requests / 24 h (2,083 / h, 157 / 5 min). Prefer webhooks where possible.
/checkout/avaialableassigneesis misspelled upstream; the wrapperclient.checkout.available_assignees()uses the misspelled path on the wire.
Metadata
Release files for py-regiondo 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| py_regiondo-0.2.0.tar.gz | 19.7 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| py_regiondo-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 32.8 kB
Release files / py_regiondo-0.2.0.tar.gz
| Download URL | py_regiondo-0.2.0.tar.gz |
|---|---|
| Size | 19.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
85a760bf44615a6d7a45f52c53c086618cf03268f2213c31c64d201ae2d94e25
|
|
BLAKE2b-256 checksum How to use checksums |
988db1e7ef1e74e42f3925719bb6752f78542b53f85742503cd18a026a8abec4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 26, 2026.
Transparency logRelease files / py_regiondo-0.2.0-py3-none-any.whl
| Download URL | py_regiondo-0.2.0-py3-none-any.whl |
|---|---|
| Size | 13.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8f0b1bfa7e9932e5efe5ef469add33505e08b624a50848512fb8e250cdf0b978
|
|
BLAKE2b-256 checksum How to use checksums |
f276058e43a95733378db549d220a66b048ca196afe7b07d0381c5ce7c5ff8b1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 26, 2026.
Transparency logSecurity for py-regiondo 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for py_regiondo-0.2.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 26, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.