Catalog PyPI
PACKAGE EXPLORERView in registry

agavadex

PyPI

Python SDK for the AgavaDEX exchange API (REST + WebSocket)

agavadexapicryptoexchangesdktradingwebsocket
Versions collected1
Direct dependencies5From release 0.1.2
Last observed20 Oct, 21:20 UTC

README

Version 0.1.2 documentation

AgavaDEX Python SDK

Python client for the AgavaDEX exchange API — a thin, typed wrapper over the public REST + WebSocket interface.

Install

pip install agavadex

Requires Python 3.9+.

Quick start

Public market data — no key needed

from agavadex import Client

with Client() as client:
    for sym in client.get_symbols():
        print(sym.symbol, sym.tick_size)

    book = client.get_order_book("AGAVAUSDT")
    print(book.bids[0].price, book.asks[0].price)

Private account & trading

API keys are created in the AgavaDEX web app (Account → API keys). Pass them to the client — never hard-code them; read them from the environment.

import os
from agavadex import Client

with Client(api_key=os.environ["AGAVADEX_API_KEY"],
            api_secret=os.environ["AGAVADEX_API_SECRET"]) as client:
    for balance in client.get_balances():
        print(balance.asset, balance.available)

    result = client.place_order(
        "AGAVAUSDT", side="buy", type="limit", price="100.00", qty="1",
    )
    print(result.order.id, result.order.status)

WebSocket streams

import asyncio
from agavadex import MarketDataStream

async def main():
    async with MarketDataStream(channels=["trades@AGAVAUSDT"]) as stream:
        async for msg in stream:
            print(msg.channel, msg.type, msg.data)

asyncio.run(main())

The private UserStream takes api_key / api_secret and authenticates in-band with a signed first frame. Subscribe to any of orders, trades, balances:

import asyncio, os
from agavadex import UserStream

async def main():
    async with UserStream(
        api_key=os.environ["AGAVADEX_API_KEY"],
        api_secret=os.environ["AGAVADEX_API_SECRET"],
        channels=["orders", "balances"],
    ) as stream:
        async for msg in stream:
            print(msg.channel, msg.type, msg.data)

asyncio.run(main())

Both streams auto-reconnect and re-subscribe on a dropped socket.

The decimal contract

Every monetary value — price, qty, volume, fee amounts — is a decimal.Decimal, never a float. The API sends and receives these as JSON strings; this SDK parses them losslessly. When placing orders, price / qty accept a Decimal, str or int.

Errors

Non-2xx responses raise a typed exception — BadRequestError, AuthenticationError, PermissionDeniedError, NotFoundError, RateLimitError, ServerError — all subclasses of APIError. Each carries status_code and the API's request_id; RateLimitError adds retry_after. Pass max_retries= to Client to auto-retry 429s.

What this SDK does not do

Withdrawals are not part of the AgavaDEX API and not in this SDK — they require a wallet signature and happen only in the web app.

Development

pip install -e ".[dev]"
pytest            # offline tests run with no credentials
ruff check .

Integration tests run only when AGAVADEX_API_KEY / AGAVADEX_API_SECRET are set, and are read-only — they never place orders.

License

Apache-2.0

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.1.22 Jun 20265

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

ACCESSIBLE
agavadex-group/agavadex-python

Shared repository data · GitLab

License detected in repository
Apache License 2.0
License branch / ref
main
Contributor identities
1 · complete API traversal
License file
Contributors · showing 1 of 1 collected
ContributorContributions
John Michaelson4

Default-branch author identities; GitLab commit counts exclude merge commits.

Public sponsor counts have not been collected. These signals belong to the repository owner.

Downloads & popularity

1identities
Gauge · observed snapshots23 Oct 2026
10.50
2026-10-21: 1 · observed 2026-10-21T11:06:23.1187763Z2026-10-22: 1 · observed 2026-10-22T11:06:43.1429143Z2026-10-23: 1 · observed 2026-10-23T11:07:11.0353260Z
21 Oct23 Oct

gitlab · 3 observations shown. Missing days are unknown.

View observed values
Date / source periodValueObserved at
2026-10-2312026-10-23T11:07:11.0353260Z
2026-10-2212026-10-22T11:06:43.1429143Z
2026-10-2112026-10-21T11:06:23.1187763Z

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 21:20 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:12c64c6a522df41394bab4755bece89b04cc7837a729922ed778d3e1d638a7e7