Metadata-Version: 2.4
Name: synthientpy
Version: 0.3.0
Summary: Synthient API bindings.
License: Apache-2.0
License-File: LICENSE
Author: synthientpy
Author-email: benjamin@synthient.com
Requires-Python: >=3.9,<4.0
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Natural Language :: English
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: Programming Language :: Python :: 3.14
Provides-Extra: dev
Provides-Extra: doc
Provides-Extra: test
Requires-Dist: aiohttp (==3.13.3)
Requires-Dist: black (>=22.3.0,<23.0.0) ; extra == "dev"
Requires-Dist: flake8 (==4.0.1) ; extra == "dev"
Requires-Dist: flake8-docstrings (>=1.6.0,<2.0.0) ; extra == "dev"
Requires-Dist: isort (==5.10.1) ; extra == "dev"
Requires-Dist: mike (>=1.1.2,<2.0.0) ; extra == "doc"
Requires-Dist: mkdocs (>=1.2.3,<2.0.0) ; extra == "doc"
Requires-Dist: mkdocs-autorefs (>=0.3.1,<0.4.0) ; extra == "doc"
Requires-Dist: mkdocs-include-markdown-plugin (>=3.2.3,<4.0.0) ; extra == "doc"
Requires-Dist: mkdocs-material (>=8.1.11,<9.0.0) ; extra == "doc"
Requires-Dist: mkdocstrings (>=0.18.0,<0.19.0) ; extra == "doc"
Requires-Dist: mypy (>=1.5.1,<2.0.0) ; extra == "dev"
Requires-Dist: pkginfo (>=1.9,<2.0) ; extra == "doc"
Requires-Dist: pre-commit (>=2.17.0,<3.0.0) ; extra == "dev"
Requires-Dist: pydantic (==2.12.5)
Requires-Dist: pytest (>=7.0.1,<8.0.0) ; extra == "test"
Requires-Dist: pytest-cov (>=3.0.0,<4.0.0) ; extra == "test"
Requires-Dist: requests (==2.32.5)
Requires-Dist: setuptools (>=68.0,<69.0) ; extra == "doc"
Requires-Dist: toml (>=0.10.2,<0.11.0) ; extra == "dev"
Requires-Dist: tox (>=3.24.5,<4.0.0) ; extra == "dev"
Requires-Dist: twine (>=3.8.0,<4.0.0) ; extra == "dev"
Requires-Dist: virtualenv (>=20.0,<21.0) ; extra == "doc"
Project-URL: Homepage, https://github.com/synthient/synthientpy
Description-Content-Type: text/markdown

# synthientpy

A strongly typed Python client for [Synthient](https://synthient.com).
Supports asynchronous and synchronous requests to the Synthient API.

## Installation

MacOS/Linux
```bash
pip3 install synthientpy
```
Windows
```bat
pip install synthientpy
```

## Usage

Check synthientpy/models for the available fields in the response object.

Client and AsyncClient have the following methods:

```python
class Client:
    def __init__(
        self,
        api_key: str,
        default_timeout: int = DEFAULT_TIMEOUT,
        proxy: Optional[str] = None,
    ) -> None: ...
    def lookup_ip(self, ip_address: str) -> IPLookupResponse: ...
    def credits(self) -> Dict[str, Any]: ...
    def anonymizers(self, *, provider=None, type=None, last_observed=None, format=FeedFormat.CSV, country_code=None, full=False, order=SortOrder.DESC) -> bytes: ...
    def blacklist(self, *, provider=None, type=None, format=FeedFormat.CSV, order=SortOrder.DESC) -> bytes: ...
```

### Synchronous Usage

```python
import synthientpy as synthient

client = synthient.Client(api_key="sk_...")

ip_info = client.lookup_ip("8.8.8.8")
print(ip_info.ip_data.ip_risk)
print(ip_info.location)
print(ip_info.network)
```

### Asynchronous Usage

```python
import asyncio
import synthientpy as synthient

async def main():
    client = synthient.AsyncClient(api_key="sk_...")

    ip_info = await client.lookup_ip("8.8.8.8")
    print(ip_info.ip_data.ip_risk)

asyncio.run(main())
```

### Data Feeds

Bulk data is available for clients who want to perform large-scale analysis or integrate Synthient data into their own systems. Feeds are returned as raw bytes in JSONL, CSV, or TEXT format.

```python
import synthientpy as synthient

client = synthient.Client(api_key="sk_...")

anonymizers = client.anonymizers(
    provider="BIRDPROXIES",
    type="RESIDENTIAL_PROXY",
    last_observed="7D",
    format=synthient.FeedFormat.CSV,
    country_code="US",
)

blacklist = client.blacklist(
    provider="NORDVPN",
    type="COMMERCIAL_VPN",
    format=synthient.FeedFormat.CSV,
)
```

### Models

Full documentation of the fields and their types can be found in the [Synthient API documentation](https://docs.synthient.com). You can also find all the types in the `synthientpy.models` module.

### Issues

For any issues or feature requests, please open an issue on the [GitHub repository](https://github.com/synthient/synthientpy)

