Metadata-Version: 2.5
Name: eulerpool
Version: 1.0.0
Summary: Financial Data API for stocks, ETFs, forex, crypto, bonds, and macro. Official Python SDK from Eulerpool, The Financial Data Company. 100,000+ securities, 375+ endpoints, 100,000 free API calls/month.
Project-URL: Homepage, https://eulerpool.com/financial-data-api
Project-URL: Documentation, https://eulerpool.com/financial-data-api/sdks/python
Project-URL: Repository, https://github.com/eulerpool/eulerpool-python
Project-URL: Issues, https://github.com/eulerpool/eulerpool-python/issues
Project-URL: Get API Key, https://eulerpool.com/developers/register
Author-email: Eulerpool Research Systems <api@eulerpool.com>
License-Expression: MIT
License-File: LICENSE
Keywords: bonds,crypto,etf,eulerpool,financial-data-api,forex,fundamentals,macro,market-data,sdk,stock-api,stock-market-api,stocks
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Financial and Insurance Industry
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
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: Programming Language :: Python :: 3.13
Classifier: Topic :: Office/Business :: Financial
Classifier: Typing :: Typed
Requires-Python: >=3.9
Requires-Dist: httpx>=0.24.0
Description-Content-Type: text/markdown

# Eulerpool SDK for Python

Official Python SDK for the [Eulerpool Financial Data API](https://eulerpool.com/developers).

## Installation

```bash
pip install eulerpool
```

## Quick Start

```python
import eulerpool

client = eulerpool.Eulerpool("YOUR_API_KEY")

# Get a company profile
profile = client.equity.profile("US0378331005")
print(profile)

# Get income statement
income = client.equity.income_statement("US0378331005")

# Get ETF holdings
holdings = client.etf.holdings("IE00B4L5Y983")

# Get forex rates
rates = client.forex.rates("EUR")

# Get macro calendar
calendar = client.macro.calendar()

client.close()
```

## Context Manager

```python
with eulerpool.Eulerpool("YOUR_API_KEY") as client:
    profile = client.equity.profile("US0378331005")
```

## Async Support

```python
import asyncio
import eulerpool

async def main():
    async with eulerpool.AsyncEulerpool("YOUR_API_KEY") as client:
        profile = await client.equity.profile("US0378331005")
        income = await client.equity.income_statement("US0378331005")
        print(profile)

asyncio.run(main())
```

## Authentication

Pass your API key when creating the client, or set `EULERPOOL_API_KEY`. By default it is sent as a `?token=` query parameter. To use the `Authorization: Bearer` header instead:

```python
client = eulerpool.Eulerpool("YOUR_API_KEY", use_auth_header=True)
```

Get your free API key at [eulerpool.com/developers/register](https://eulerpool.com/developers/register).

## Configuration

```python
client = eulerpool.Eulerpool(
    "YOUR_API_KEY",
    base_url="https://api.eulerpool.com/api/1",  # default
    use_auth_header=False,                         # default: use ?token= query param
    max_retries=2,                                 # default
    timeout=30.0,                                  # default: 30s
)
```

## Available Resources

53 resources / 400+ methods, generated from the public OpenAPI spec. Common accessors:

`equity` `equity_extended` `etf` `macro` `forex` `bonds` `crypto` `crypto_extended` `market` `alternative` `sentiment` `research` `calendar` `screener` `mutual_fund` `commodity` `institutional` `certificates` `earning_calls` `index` `news` `trends` `ice_swap` `fair_value` `aaq` `analytics` `calendar` `charting` `energy` `fundamentals` `government` `shipping` `singapore` `transcripts`

Any path also works without a typed method:

```python
client.get("/equity/profile/AAPL", language="en")
```

## Error Handling

```python
from eulerpool import Eulerpool, AuthenticationError, RateLimitError

client = Eulerpool("YOUR_API_KEY")

try:
    data = client.equity.profile("US0378331005")
except AuthenticationError:
    print("Invalid API key")
except RateLimitError as e:
    print(f"Rate limited. Retry after {e.retry_after}s")
```

## Requirements

- Python >= 3.9
- httpx >= 0.24.0

Pass the key explicitly or set `EULERPOOL_API_KEY`. Any undocumented path still works via `client.get("/path", **params)`.

## License

MIT
