Metadata-Version: 2.4
Name: rango-sdk-py
Version: 0.0.1
Summary: Python bindings for Rango Exchange Main API
Project-URL: Home, https://github.com/rango-exchange/rango-python
Project-URL: Contact, https://t.me/rangoexchange
Project-URL: Documentation, https://docs.rango.exchange/
Author-email: Rango <hi@rango.exchange>
License-File: LICENSE
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.8
Requires-Dist: httpx>=0.27.0
Requires-Dist: pydantic>=2.6.0
Provides-Extra: dev
Requires-Dist: build>=1.2.0; extra == 'dev'
Requires-Dist: twine>=5.0.0; extra == 'dev'
Description-Content-Type: text/markdown

# Python SDK for Rango Exchange Main API

Rango Aggregation APIs for dApps and Wallets for cross-chain and on-chain swaps using the best route from all of the available on-chain liquidity protocols, getting multichain balance/portfolio for user wallets, and easiest method to transfer tokens across all blockchain networks.

## Requirements

This package supports **Python 3.8** and newer.

## Installation

Install it with:

```bash
python -m pip install rango-sdk-py
```

Alternatively, install from the source code with this command from the project root:

```bash
python -m pip install .
```

For an editable installation while developing:

```bash
python -m pip install -e .
```

## Usage

### Synchronous client

`Client` is the synchronous API. Close it when finished, or use a `with` block.

```python
from decimal import Decimal

from rango_sdk import Client, models

with Client(api_key='c6381a79-2817-4602-83bf-6a641a409e32') as client:
    result = client.routing.get_best_route(body=models.SingleRouteRequest(from_=models.RequestAsset(blockchain=models.Blockchain.ETH, symbol="ETH"), to=models.RequestAsset(blockchain=models.Blockchain.AVAX_CCHAIN, symbol="USDT.E", address="0xc7198437980c041c805a1edcba50c1ce5db95118"), amount=Decimal("0.28")))
```

Endpoints are nested under attributes (see `client.py`):

- `client.balance` → `BalanceOperations`
- `client.metadata` → `MetadataOperations`
- `client.multi_routing` → `MultiRoutingOperations`
- `client.routing` → `RoutingOperations`
- `client.transaction` → `TransactionOperations`

### Asynchronous client

`AsyncClient` is the asynchronous API. Use `async with` and `await` each call.

```python
import asyncio
from decimal import Decimal

from rango_sdk import AsyncClient, models

async def main() -> None:
    async with AsyncClient(api_key='c6381a79-2817-4602-83bf-6a641a409e32') as client:
        result = await client.routing.get_best_route(body=models.SingleRouteRequest(from_=models.RequestAsset(blockchain=models.Blockchain.ETH, symbol="ETH"), to=models.RequestAsset(blockchain=models.Blockchain.AVAX_CCHAIN, symbol="USDT.E", address="0xc7198437980c041c805a1edcba50c1ce5db95118"), amount=Decimal("0.28")))

asyncio.run(main())
```

## Authentication

The **Usage** section above and the **`examples/`** / **`docs/`** trees show authentication via **constructor keyword arguments**; This package also supports **environment-variable** credentials (using **`RANGO`** prefix for env vars).

#### `apiKey` — API key (query parameter)

- This sdk uses **apiKey** auth: the credential is sent as the query parameter `apiKey`.
- Use constructor option `api_key`.
- Pass these as keyword arguments to `Client(...)` / `AsyncClient(...)`.
- Alternatively set environment variable `RANGO_API_KEY`. Explicit constructor options override env when both are set.


For private or production authentication parameters, contact **Rango** via [hi@rango.exchange](mailto:hi@rango.exchange) or [https://t.me/rangoexchange](https://t.me/rangoexchange). See the [official API documentation](https://docs.rango.exchange/).

## API Endpoints Reference

For a complete list of all available SDK methods, including detailed parameter descriptions, return values, and code examples, see the **API Reference**:

[📖 View Full API Reference](docs/API_REFERENCE.md)


## Example Codes

The examples below show only the most commonly used endpoints to help you get started quickly.

For advanced usage and less common operations, consult the API Reference.


### Get Balance of a Token

Fetches the balance of a specific token address for the user's wallet


**Runnable source:** [`get_token_balance.py`](examples/quickstart/balance/get_token_balance.py)

```python
from rango_sdk import Client, models

with Client(api_key='c6381a79-2817-4602-83bf-6a641a409e32') as client:
    result = client.balance.get_token_balance(wallet_address="0x9F8cCdaFCc39F3c7D6EBf637c9151673CBc36b88", blockchain=models.Blockchain.BSC, symbol="USDT", address="0x55d398326f99059ff775485246999027b3197955")
    print(result)
```

### Get the Best Swap Route

Get the best route to perform a cross-chain or same-chain swap, the `requestId` parameter from the response of this endpoint will be used for creating the transaction and checking the transaction status in next steps


**Runnable source:** [`get_best_route.py`](examples/quickstart/routing/get_best_route.py)

```python
from decimal import Decimal
from rango_sdk import Client, models

with Client(api_key='c6381a79-2817-4602-83bf-6a641a409e32') as client:
    result = client.routing.get_best_route(body=models.SingleRouteRequest(from_=models.RequestAsset(blockchain=models.Blockchain.ETH, symbol="ETH"), to=models.RequestAsset(blockchain=models.Blockchain.AVAX_CCHAIN, symbol="USDT.E", address="0xc7198437980c041c805a1edcba50c1ce5db95118"), amount=Decimal("0.28")))
    print(result)
```

### Create the Transaction

Creates a transaction to be signed by user's wallet and broadcasted to the network


**Runnable source:** [`create_transaction.py`](examples/quickstart/transaction/create_transaction.py)

```python
from decimal import Decimal
from rango_sdk import Client, models

with Client(api_key='c6381a79-2817-4602-83bf-6a641a409e32') as client:
    result = client.transaction.create_transaction(body=models.CreateTransactionRequest(request_id="1978d8fa-335d-4915-a039-77f1a17315f5", step=1, user_settings=models.UserSettings(slippage=Decimal("8.25"), use_max_native_token_balance=False), validations=models.CreateTransactionValidation(balance=True, fee=True, approve=True)))
    print(result)
```

### Check the Transaction Status

Checks the status of the transaction using the requestId from the quote/route and the broadcasted transaction hash (txId)


**Runnable source:** [`check_tx_status.py`](examples/quickstart/transaction/check_tx_status.py)

```python
from rango_sdk import Client, models

with Client(api_key='c6381a79-2817-4602-83bf-6a641a409e32') as client:
    result = client.transaction.check_tx_status(body=models.CheckTxStatusRequest(request_id="b3a12c6d-86b8-4c21-97e4-809151dd4036", tx_id="0xfa88b705a5b4049adac7caff50c887d9600ef023ef1a937f8f8b6f44e90042b5", step=1))
    print(result)
```



Additional samples for all endpoints live under the **[`examples/`](examples/)** folder.

## Advanced Examples

For more advanced walkthroughs, step-by-step guides and custom samples, check the **[Advanced Examples](examples/advanced/)** folder.
