Skip to main content

litestar-unirate

PyPI Python License

Litestar plugin for the UniRate currency-exchange API:

  • UniRatePlugin — an InitPluginProtocol plugin that provides a shared, async UniRateClient to your handlers through Litestar's dependency injection (injected as unirate by default).
  • Prebuilt route handlers — a UniRateController mounted at /unirate exposing GET /unirate/rate, /convert, /currencies, and /vat, with full UniRate error mapping onto Litestar HTTP exceptions.
  • One HTTP client per app — an httpx.AsyncClient-backed client opened on demand and closed on shutdown.

UniRate covers 593+ fiat, crypto, and commodity codes. Latest rates, conversion, currencies, and VAT are on the free tier; historical endpoints (convert_historical) require Pro.

Install

pip install litestar-unirate

Or with uv / Poetry:

uv add litestar-unirate
poetry add litestar-unirate

Quick start

from litestar import Litestar, get

from litestar_unirate import UniRateClient, UniRateConfig, UniRatePlugin

app = Litestar(
    plugins=[UniRatePlugin(UniRateConfig())],  # reads UNIRATE_API_KEY from env
)

That alone mounts the prebuilt endpoints:

$ curl 'localhost:8000/unirate/rate?from_currency=USD&to_currency=JPY'
{"rate":151.83}

$ curl 'localhost:8000/unirate/convert?from_currency=USD&to_currency=EUR&amount=100'
{"result":92.5}

$ curl localhost:8000/unirate/currencies
{"currencies":["USD","EUR","GBP", ...]}

$ curl 'localhost:8000/unirate/vat?country=DE'
{"country":"DE","vat_data":{"country_code":"DE","country_name":"Germany","vat_rate":19.0}}

The plugin also injects the client into your own handlers under the unirate key:

@get("/summary")
async def summary(unirate: UniRateClient) -> dict[str, object]:
    return {"usd_eur": await unirate.get_rate("USD", "EUR")}

Configuration

UniRateConfig controls the client and the routes:

UniRateConfig(
    api_key=None,                          # default: $UNIRATE_API_KEY
    base_url="https://api.unirateapi.com", # default: production
    timeout=30.0,                          # HTTP timeout (seconds)
    dependency_key="unirate",              # DI name for the client
    register_routes=True,                  # mount the prebuilt /unirate/* routes
    route_path_prefix="/unirate",          # where to mount them
)

Set register_routes=False to expose only the injectable client and wire your own handlers.

Note: the prebuilt UniRateController injects the client under the name unirate. If you set a custom dependency_key, keep register_routes=False (or use the default key) so the controller resolves its dependency.

Client methods

The injected UniRateClient is a small async wrapper over UniRate:

Method Returns
get_rate(from_currency="USD", to_currency=None) float for a pair, else dict[str, float]
convert(from_currency, to_currency, amount=1.0) float
get_supported_currencies() list[str]
get_vat_rates(country=None) dict (vat_rates map, or vat_data for one country)
convert_historical(from_currency, to_currency, date, amount=1.0) float (Pro)

Errors

The client raises UniRateAPIError (with status_code) on non-2xx responses. The prebuilt handlers translate those onto Litestar HTTP exceptions:

UniRate HTTP Litestar exception Response
400 ClientException 400
401 NotAuthorizedException 401
403 PermissionDeniedException 403 (Pro required)
404 NotFoundException 404
429 TooManyRequestsException 429
503 ServiceUnavailableException 503
transport / other HTTPException 502

Compatibility

  • Python 3.10 – 3.13
  • Litestar ≥ 2.0
  • httpx ≥ 0.27

Related

Other UniRate clients

UniRate ships official client libraries and framework integrations across the ecosystem. The repos below are all maintained under the UniRate-API org.

Get a free API key at unirateapi.com.

License

MIT

Metadata

Release files for litestar-unirate 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for litestar-unirate 0.1.0
File Size Uploaded
litestar_unirate-0.1.0.tar.gz 11.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for litestar-unirate 0.1.0
File Interpreter ABI Platform
litestar_unirate-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 22.2 kB

Release files / litestar_unirate-0.1.0.tar.gz

Download URL litestar_unirate-0.1.0.tar.gz
Size 11.7 kB
Tags Source
SHA-256 checksum
How to use checksums
83594bf2147ecea29029c10e63cba13d81e569ea698216616d99b599ef6deecd
BLAKE2b-256 checksum
How to use checksums
6baaaaa19ca5117ff930f84b32bb8a5d580495360bc0399a389d7a2886a675e9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / litestar_unirate-0.1.0-py3-none-any.whl

Download URL litestar_unirate-0.1.0-py3-none-any.whl
Size 10.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
369ca16bdabfbe790493f440722a115b15f5e98a0d1b1e55230ca52b622c92af
BLAKE2b-256 checksum
How to use checksums
9c743536fd3141f1507fb5b09e9b2d63f4ce591ac72ce1788a7348c4284d92e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page