Metadata-Version: 2.4
Name: polymarket-client
Version: 0.1.0b1
Summary: Official Python client for Polymarket
Project-URL: Homepage, https://polymarket.com
Project-URL: Documentation, https://docs.polymarket.com
Project-URL: Repository, https://github.com/Polymarket/py-sdk
Project-URL: Issues, https://github.com/Polymarket/py-sdk/issues
Author-email: Polymarket Engineering <engineering@polymarket.com>
Maintainer-email: Polymarket Engineering <engineering@polymarket.com>
License: MIT
License-File: LICENSE
Keywords: client,polymarket,prediction-markets,trading,web3
Classifier: Development Status :: 4 - Beta
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.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: eth-abi<6,>=5
Requires-Dist: eth-account<1,>=0.13
Requires-Dist: eth-utils<6,>=4
Requires-Dist: httpx[http2]<1,>=0.27
Requires-Dist: pydantic<3,>=2
Requires-Dist: websockets<16,>=13
Description-Content-Type: text/markdown

# Polymarket Python SDK

Official Python SDK for Polymarket.

The SDK gives Python developers one coherent, workflow-oriented interface for building on Polymarket, starting with public data access and expanding toward authenticated account, trading, builder attribution, and relayer-backed workflows.

## Installation

```bash
uv add polymarket-client
```

or:

```bash
pip install polymarket-client
```

## Usage

Synchronous client:

```python
from polymarket import Market, PublicClient

with PublicClient() as client:
    market: Market = client.get_market(url="https://polymarket.com/event/example-market")
```

Asynchronous client:

```python
import asyncio

from polymarket import AsyncPublicClient, Market


async def main() -> None:
    async with AsyncPublicClient() as client:
        market: Market = await client.get_market(
            url="https://polymarket.com/event/example-market"
        )


asyncio.run(main())
```

## API Design

See [SDK Direction](docs/sdk-direction.md) for public API design principles and developer-experience decisions.

## Development

Install dependencies:

```bash
make sync
```

Run checks:

```bash
make check
```

Build package artifacts:

```bash
make build
```

The `Makefile` is a thin convenience wrapper around `uv`. Running the underlying commands directly is also fine.

## Testing

Unit tests run by default:

```bash
make test
```

Run unit tests in watch mode:

```bash
make test-watch
```

This runs the tests once immediately, then reruns them when Python files change.

Integration tests are opt-in:

```bash
make test-integration
```

Integration tests can load local secrets from a gitignored `.env` copied from `.env.example`:

```bash
cp .env.example .env
```

See `.env.example` for the supported local and CI secret names.

Tests that require credentials should use the `require_env` fixture so they skip when secrets are unavailable:

```python
import pytest


@pytest.mark.integration
def test_authenticated_flow(require_env):
    private_key = require_env("POLYMARKET_PRIVATE_KEY")
    builder_api_key = require_env("POLYMARKET_BUILDER_API_KEY")

    assert private_key
    assert builder_api_key
```

The SDK does not load `.env` files at runtime. The integration test fixture loads `.env` only for tests that request credentials, and existing environment variables take precedence over local `.env` values.

Tests that place orders, spend funds, or mutate live state must also use `@pytest.mark.metered`. Metered tests are skipped unless `POLYMARKET_RUN_METERED_TESTS=1` is set:

```python
import pytest


@pytest.mark.integration
@pytest.mark.metered
def test_order_lifecycle(require_env):
    private_key = require_env("POLYMARKET_PRIVATE_KEY")

    assert private_key
```

```bash
POLYMARKET_RUN_METERED_TESTS=1 make test-integration
```
