# Getting Started

This section will guide you through the initial steps to set up and begin using the 21X SDK.

***

## Prerequisites

Before you start, ensure you have the following:

1. **Python Version**: Ensure Python 3.97 or higher is installed on your system.
2. **Access Credentials**: Obtain an API key for the REST API and ensure your wallet is registered and whitelisted in the 21X platform.
3. **Polygon Wallet**: Use a funded wallet on the Polygon network to cover gas fees for smart contract interactions.
4. **Polygon RPC Provider**: Access a Polygon-compatible RPC endpoint (e.g., Infura, Alchemy, or a self-hosted node) for blockchain communication.

## Installation

Install the SDK using pip:

```bash
pip install 21x-sdk
```

## Basic Setup

### 1. Initialize the REST API Client

The REST API client is used to interact with platform features like fetching open orders and price information.

```python
from x21_sdk import Client, AuthenticatedClient

# Initialize either a client for the public endpoints
client = Client(base_url="<insert the 21X API url here>")

# Or a Client to use the authenticated endpoints
client = AuthenticatedClient(
    base_url="<insert the 21X API url here>",
    client_id="<insert the client id here>",
    client_secret="<insert the client secret here>",
    token_endpoint="<insert the oidc token endpoint here>",
)
```

Alternatively, you can make use the following environment variables, to auto configure the clients.

```bash
export 21X_BASE_URL=<>
export 21X_AUTH_CLIENT_ID=<>
export 21X_AUTH_CLIENT_SECRET=<>
export 21X_AUTH_CLIENT_TOKEN_ENDPOINT=<>
```

```python
from x21_sdk import Client, AuthenticatedClient

# Initialize either a client for the public endpoints
client = Client()

# Or a Client to use the authenticated endpoints
client = AuthenticatedClient()
```

### 2. Example: Fetch Available Trading Pairs

Use the REST API client to list all trading pairs:

```python
from x21_sdk.client.api.public_market_data import get_trading_pairs

trading_pairs = get_trading_pairs.sync(client=client)
for pair in trading_pairs.items:
    print("orderbook_addr: " + pair.smart_contract_order_book)
    print("base: " + pair.base_token_data.symbol)
    print("quote: " + pair.quote_token_symbol)
```

### 3. Initialize the OrderBook Class

The `OrderBook` class is your entry point for interacting with the EVM-based smart contract.

```python
from x21_sdk import OrderBook

# Initialize the OrderBook class with your private key and RPC URL
order_book = OrderBook(
  private_key="your_private_key",
  orderbook_addr="0xOrderBookAddress",
  rpc_url="https://polygon-mainnet.g.alchemy.com/v2/YOUR_API_KEY",
)
```

### 4. Example: Check Token Balances

Here’s how you can check the token balances for a trading pair:

```python
balances = order_book.get_balance()

print(f"Base Token Balance: {balances.base}")
print(f"Quote Token Balance: {balances.quote}")
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.21x.eu/sdk/02-getting_started.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
