remnawave-client
Sync and async client for the Remnawave API, generated from the panel's OpenAPI specification.
pip install remnawave-client
Requires Python 3.11 or newer.
Versions
The library version equals the API version it was generated from. A tag exists for every minor release of the panel from 2.0 onwards, so pin the one matching your deployment:
pip install remnawave-client==3.0.0
Quick start
from remnawave import Remnawave
with Remnawave("https://panel.example.com", token) as rw:
user = rw.users.get_user_by_username("zen")
print(user.username, user.status, user.expire_at)
for u in rw.users.iter_users():
print(u.username)
The async client mirrors it:
import asyncio
from remnawave import AsyncRemnawave
async def main() -> None:
async with AsyncRemnawave("https://panel.example.com", token) as rw:
stats = await rw.system.get_stats()
nodes = await rw.nodes.get_nodes()
async for user in rw.users.iter_users():
print(user.username)
asyncio.run(main())
More in examples/: pagination, partial updates, error handling,
webhooks and swapping out the client's parts.
Errors
Everything the library raises inherits from RemnawaveError. Below it the
hierarchy splits by cause: ApiError for anything the panel answered with,
TransportError when the request never got a reply, SerializationError when
the payload did not match the schema.
from remnawave.exceptions import NotFoundError
try:
rw.users.get_user_by_id(42)
except NotFoundError as error:
print(error.status, error.error_code) # 404 'A025'
error_code is the panel's own code and is more specific than the HTTP
status — branch on it when you need to tell cases apart.
Webhooks
from remnawave.webhooks import SIGNATURE_HEADER, WebhookReceiver
hooks = WebhookReceiver(secret=os.environ["WEBHOOK_SECRET_HEADER"])
event = hooks.receive(request.body, request.headers[SIGNATURE_HEADER])
if event.scope == "user":
print(event.event, event.data.username)
Pass the raw request body: the signature covers those exact bytes, so re-serialising parsed JSON breaks verification.
Regenerating
src/remnawave/_generated/ is machine-written and must not be edited by hand.
To target another panel version, drop its specification into specs/ and run:
python -m tools.codegen 3.4.3
Where the specification is wrong or awkward, overlay.yaml patches it before
generation: type names, forced field types, fields kept out of repr. Editing
the generated code directly would be lost on the next run; editing the vendored
specification would be lost on the next update.
Release files for remnawave-client 2.1.19
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| remnawave_client-2.1.19.tar.gz | 27.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| remnawave_client-2.1.19-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 73.6 kB
Release files / remnawave_client-2.1.19.tar.gz
| Download URL | remnawave_client-2.1.19.tar.gz |
|---|---|
| Size | 27.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
91e59aac0fea76c83f79612771965f0c3da5dc4f650be9a18dea85507edcd7fe
|
|
BLAKE2b-256 checksum How to use checksums |
cf086e79a6cb1a57574e9c57e0c97d394a1ff3c03229b09212fadb472de95699
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / remnawave_client-2.1.19-py3-none-any.whl
| Download URL | remnawave_client-2.1.19-py3-none-any.whl |
|---|---|
| Size | 46.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
818e5ca72390b5b98feb4773bdfdd4362406c8fadbdcdd32256b4e9bf45ce942
|
|
BLAKE2b-256 checksum How to use checksums |
a3297b25bbe0ec9f7376d894b037ea585d4a5e4ef56e6068d9e327a6d4b0b0be
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.21 {"installer":{"name":"uv","version":"0.9.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|