Skip to main content

Official SDKs

Production-ready client libraries for Python and Node.js with full type support, automatic retries, and idiomatic APIs.

Best For

Teams building inside Python or Node who want typed clients instead of raw HTTP calls.

Read This If

You care about retries, async support, version pinning, and predictable integration behavior.

Go Next

Use quickstart for setup or examples if you want full scripts instead of reference-style snippets.

Python SDK

Python 3.8+

Type Hints Async Support Auto Retry
PyPI GitHub v2.1.0

Node.js SDK

Node.js 16+

TypeScript ESM + CJS Auto Retry
npm GitHub v2.0.3

Installation

# Install with pip
pip install evsignals

# Or with poetry
poetry add evsignals

# Or with pipenv
pipenv install evsignals

Configuration

import evsignals

# Basic initialization
client = evsignals.Client(
    api_key="evs_live_your_api_key"
)

# With all configuration options
client = evsignals.Client(
    api_key="evs_live_your_api_key",
    base_url="https://api.evsignals.com",  # Custom endpoint
    timeout=30.0,                           # Request timeout (seconds)
    max_retries=3,                          # Auto-retry on failure
    api_version="2026-03-01"                # Pin to specific version
)

# Using environment variable (recommended)
# Set EVSIGNALS_API_KEY in your environment
client = evsignals.Client()  # Auto-loads from env
Pro tip: Store your API key in the EVSIGNALS_API_KEY environment variable. The SDK will automatically use it.

Async Support

Both SDKs support async/await for non-blocking I/O. Use concurrent requests to improve performance.

import asyncio
import evsignals

async def main():
    # Use async context manager
    async with evsignals.AsyncClient() as client:
        # Make concurrent requests
        signals, account = await asyncio.gather(
            client.signals.live(min_ev=2.0),
            client.account.get()
        )

        print(f"Found {len(signals)} signals")
        print(f"Account: {account.email}")

asyncio.run(main())

Type Safety

Get full IDE autocomplete and type checking. The Python SDK includes comprehensive type hints, and the Node.js SDK is written in TypeScript.

from evsignals import Client
from evsignals.types import Signal, Quote, Account

def process_signal(signal: Signal) -> None:
    """Process a single signal with full type safety."""
    print(f"Event: {signal.event}")
    print(f"EV: {signal.ev_percentage}%")
    print(f"Odds: {signal.best_odds}")

# IDE autocomplete works on all SDK objects
client = Client()
signals: list[Signal] = client.signals.live()

for signal in signals:
    process_signal(signal)

Error Handling

Both SDKs provide typed exception classes for different error scenarios. Handle each error type appropriately.

from evsignals import Client
from evsignals.exceptions import (
    EVSignalsError,       # Base exception
    AuthenticationError,  # 401 errors
    RateLimitError,       # 429 errors
    NotFoundError,        # 404 errors
    ValidationError,      # 400 errors
    APIError              # All other API errors
)

client = Client()

try:
    signals = client.signals.live(min_ev=2.0)
except AuthenticationError:
    print("Invalid API key")
except RateLimitError as e:
    print(f"Rate limited. Retry after {e.retry_after}s")
except ValidationError as e:
    print(f"Invalid parameter: {e.param}")
except EVSignalsError as e:
    print(f"API error: {e.message}")

Features

Feature Python Node.js
Async Support AsyncClient Native async/await
Type System Type hints (PEP 484) TypeScript (.d.ts)
Module Format PyPI package ESM + CommonJS
Min Runtime Python 3.8+ Node.js 16+
Automatic Retries
Rate Limit Handling
Webhook Verification
Custom HTTP Client

Resources