Metadata-Version: 2.4
Name: phemex-py
Version: 0.1.0
Summary: Typed, production-grade Python SDK for the Phemex crypto exchange API
Project-URL: Homepage, https://github.com/cstone/phemex-py
Project-URL: Repository, https://github.com/cstone/phemex-py
Project-URL: Issues, https://github.com/cstone/phemex-py/issues
Project-URL: Changelog, https://github.com/cstone/phemex-py/blob/main/CHANGELOG.md
Author: Connor Stone
License: MIT
License-File: LICENSE.txt
Keywords: api,crypto,exchange,futures,phemex,sdk,trading
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Office/Business :: Financial
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Requires-Python: >=3.12
Requires-Dist: httpx>=0.28.1
Requires-Dist: pydantic>=2.12.5
Description-Content-Type: text/markdown

# phemex-py

[![PyPI version](https://img.shields.io/pypi/v/phemex-py)](https://pypi.org/project/phemex-py/)
[![Python](https://img.shields.io/pypi/pyversions/phemex-py)](https://pypi.org/project/phemex-py/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

Typed, production-grade Python SDK for the [Phemex](https://phemex.com) crypto exchange API.

- Sync and async clients (built on [httpx](https://www.python-httpx.org/))
- Fully typed request/response models (built on [Pydantic](https://docs.pydantic.dev/))
- USD-M perpetual futures: orders, positions, market data, funding rates, and more

## Installation

```bash
pip install phemex-py
```

## Quick Start

### Authentication

You need a Phemex API key and secret. Create one from your [Phemex account settings](https://phemex.com/account/apiKeys).

Set them as environment variables or pass them directly:

```bash
export PHEMEX_API_KEY="your-api-key"
export PHEMEX_API_SECRET="your-api-secret"
```

### Sync Client

```python
from phemex_py import PhemexClient

with PhemexClient(
    base_url="https://api.phemex.com",
    api_key="your-api-key",
    api_secret="your-api-secret",
) as client:
    # Get server time
    server_time = client.server_time()

    # Get product info
    products = client.usdm_rest.product_information()

    # Get ticker
    ticker = client.usdm_rest.ticker(symbol="BTCUSDT")

    # Get open orders
    orders = client.usdm_rest.open_orders(symbol="BTCUSDT")

    # Get account positions
    positions = client.usdm_rest.positions()
```

### Async Client

```python
import asyncio
from phemex_py import AsyncPhemexClient

async def main():
    async with AsyncPhemexClient(
        base_url="https://api.phemex.com",
        api_key="your-api-key",
        api_secret="your-api-secret",
    ) as client:
        ticker = await client.usdm_rest.ticker(symbol="BTCUSDT")
        positions = await client.usdm_rest.positions()

asyncio.run(main())
```

### Testnet

Use the testnet base URL for paper trading:

```python
client = PhemexClient(
    base_url="https://testnet-api.phemex.com",
    api_key="your-testnet-key",
    api_secret="your-testnet-secret",
)
```

## API Coverage

### USD-M Perpetual REST API

| Category | Endpoints |
|----------|-----------|
| Market Data | `product_information`, `order_book`, `klines`, `trades`, `ticker`, `tickers` |
| Orders | `place_order`, `amend_order`, `cancel_order`, `bulk_cancel`, `cancel_all` |
| Positions | `positions`, `positions_with_pnl`, `switch_position_mode`, `set_leverage`, `assign_position_balance` |
| Account | `risk_units` |
| History | `open_orders`, `closed_orders`, `closed_positions`, `user_trades`, `order_history`, `lookup_order`, `trade_history` |
| Funding | `funding_fee_history`, `funding_rates` |

## Links

- [Phemex API Documentation](https://phemex-docs.github.io/)
- [GitHub Repository](https://github.com/cstone/phemex-py)
- [PyPI Package](https://pypi.org/project/phemex-py/)

## License

[MIT](LICENSE.txt)
