Developers
SDKs
Python SDK

Allora Python SDK

What You'll Learn

  • How to install and set up the Allora Python SDK for your applications
  • Complete API reference with method signatures and usage examples
  • Best practices for integrating Allora Network data into Python workflows
  • Error handling and authentication strategies for production use

Overview

The Allora Python SDK provides a convenient way to interact with the Allora API from Python applications.

Why Use the Python SDK?

Development Benefits:

  • Pythonic interface: Natural Python patterns and conventions
  • Data science integration: Seamless compatibility with pandas, numpy, and ML libraries
  • Production ready: Robust error handling and authentication support
  • Comprehensive coverage: Access to all Allora Network API endpoints

Use Cases:

  • Data analysis: Retrieve and analyze network inference data
  • Machine learning: Integrate predictions into ML pipelines
  • Backend services: Build Python web applications with Allora data
  • Research: Academic and commercial research applications

Installation

You can install the Allora Python SDK using pip:

pip install allora_sdk

Installation Benefits:

  • Simple setup: One command installation with automatic dependencies
  • Version management: Pip handles SDK updates and compatibility
  • Virtual environment support: Works with conda, venv, and other environments
  • Cross-platform: Compatible with Windows, macOS, and Linux

Basic Usage

Here's how to use the Allora Python SDK:

from allora_sdk import AlloraClient
 
# Initialize the client
client = AlloraClient(
    chain="testnet",  # Use "mainnet" for mainnet
    api_key="YOUR_API_KEY"  # Optional, but recommended for production use
)
 
# Fetch all available topics
def fetch_topics():
    try:
        topics = client.get_all_topics()
        print(f"Available topics: {topics}")
    except Exception as e:
        print(f"Error fetching topics: {e}")
 
# Fetch inference for a specific topic
def fetch_inference(topic_id):
    try:
        inference = client.get_inference_by_topic_id(topic_id)
        print(f"Inference data: {inference}")
    except Exception as e:
        print(f"Error fetching inference: {e}")
 
# Fetch price inference for a specific asset and timeframe
def fetch_price_inference():
    try:
        inference = client.get_price_inference(
            asset="BTC",
            timeframe="8h"
        )
        print(f"Price inference data: {inference}")
    except Exception as e:
        print(f"Error fetching price inference: {e}")

Code Example Breakdown

Client Initialization:

  • Chain selection: Choose between testnet and mainnet environments
  • API key: Optional authentication for production use and rate limiting
  • Configuration: Simple constructor with sensible defaults

Error Handling:

  • Try-catch blocks: Robust error management for network operations
  • Graceful degradation: Handle API failures without crashing applications
  • Debugging support: Clear error messages for development and troubleshooting

The API key is optional but recommended for production use. If not provided, a default API key will be used, which may be subject to rate limiting.

API Reference

AlloraClient

The main class for interacting with the Allora API.

Constructor

def __init__(self, chain="testnet", api_key=None, base_api_url=None):
    """
    Initialize the Allora API client.
    
    Args:
        chain (str): The chain to use. Can be "testnet" or "mainnet".
        api_key (str, optional): Your API key. Recommended for production use.
        base_api_url (str, optional): The base URL for the API.
    """

Constructor Parameters:

  • chain: Network environment selection for development or production
  • api_key: Authentication token for enhanced rate limits and tracking
  • base_api_url: Custom API endpoint for specialized deployments

Core Methods

get_all_topics()

Fetches all available topics from the Allora API.

Method Signature:

def get_all_topics(self) -> dict:
    """
    Retrieve all available topics from the network.
    
    Returns:
        dict: Dictionary containing all topics with their metadata
    
    Raises:
        AlloraAPIError: When API request fails
        NetworkError: When network connectivity issues occur
    """

Usage Pattern:

  • Topic discovery: Find available prediction categories
  • Network exploration: Understand current network offerings
  • Integration planning: Select appropriate topics for your application
get_inference_by_topic_id(topic_id)

Retrieves the latest inference for a specific topic.

Method Signature:

def get_inference_by_topic_id(self, topic_id: int) -> dict:
    """
    Get the most recent inference for a given topic.
    
    Args:
        topic_id (int): The ID of the topic to query
        
    Returns:
        dict: Inference data including prediction and metadata
        
    Raises:
        ValueError: When topic_id is invalid
        AlloraAPIError: When API request fails
    """

Use Cases:

  • Real-time data: Access current network predictions
  • Application integration: Feed live data into your applications
  • Decision support: Use predictions for automated decision making
get_price_inference(asset, timeframe)

Fetches price predictions for specific assets and timeframes.

Method Signature:

def get_price_inference(self, asset: str, timeframe: str) -> dict:
    """
    Retrieve price predictions for cryptocurrency assets.
    
    Args:
        asset (str): Asset symbol (e.g., "BTC", "ETH")
        timeframe (str): Prediction timeframe (e.g., "1h", "8h", "24h")
        
    Returns:
        dict: Price inference data with prediction and confidence metrics
        
    Raises:
        ValueError: When asset or timeframe is not supported
        AlloraAPIError: When API request fails
    """

Supported Parameters:

  • Assets: Major cryptocurrencies and trading pairs
  • Timeframes: Various prediction horizons from minutes to days
  • Return format: Structured data with predictions and confidence intervals

Advanced Usage Patterns

Data Integration

Pandas Integration Example:

import pandas as pd
from allora_sdk import AlloraClient
 
client = AlloraClient(chain="mainnet", api_key="your_key")
 
# Get multiple topics and convert to DataFrame
topics = client.get_all_topics()
df = pd.DataFrame(topics['data'])
 
# Analyze topic metadata
print(df.describe())
print(df.groupby('category').size())

Benefits for Data Science:

  • DataFrame compatibility: Direct integration with pandas workflows
  • Statistical analysis: Easy computation of metrics and summaries
  • Visualization: Seamless plotting with matplotlib, seaborn, or plotly
  • Machine learning: Feature engineering for predictive models

Production Deployment

Robust Error Handling:

import logging
from allora_sdk import AlloraClient, AlloraAPIError
 
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
 
class AlloraService:
    def __init__(self, api_key):
        self.client = AlloraClient(
            chain="mainnet",
            api_key=api_key
        )
    
    def get_inference_safely(self, topic_id, retries=3):
        for attempt in range(retries):
            try:
                return self.client.get_inference_by_topic_id(topic_id)
            except AlloraAPIError as e:
                logger.warning(f"API error on attempt {attempt + 1}: {e}")
                if attempt == retries - 1:
                    raise
                time.sleep(2 ** attempt)  # Exponential backoff

Production Considerations:

  • Retry logic: Handle temporary network failures gracefully
  • Logging: Track API usage and errors for monitoring
  • Rate limiting: Implement delays to respect API limits
  • Caching: Store frequently accessed data to reduce API calls

Authentication and Configuration

API Key Management

Best Practices:

  • Environment variables: Store API keys securely outside code
  • Configuration files: Use config files with proper permissions
  • Key rotation: Regularly update API keys for security
  • Monitoring: Track API usage for cost and performance optimization

Network Selection

Environment Strategy:

  • Development: Use testnet for development and testing
  • Staging: Validate with testnet before production deployment
  • Production: Switch to mainnet for live applications
  • Fallback: Implement graceful degradation when networks are unavailable

Integration Examples

Web Application Integration

Flask Example:

from flask import Flask, jsonify
from allora_sdk import AlloraClient
 
app = Flask(__name__)
client = AlloraClient(chain="mainnet", api_key=os.getenv("ALLORA_API_KEY"))
 
@app.route('/api/inference/<int:topic_id>')
def get_inference(topic_id):
    try:
        inference = client.get_inference_by_topic_id(topic_id)
        return jsonify(inference)
    except Exception as e:
        return jsonify({"error": str(e)}), 500

Automated Trading Systems

Trading Bot Integration:

class TradingBot:
    def __init__(self, api_key):
        self.allora = AlloraClient(chain="mainnet", api_key=api_key)
    
    def make_trading_decision(self, asset):
        price_inference = self.allora.get_price_inference(asset, "1h")
        confidence = price_inference.get('confidence', 0)
        
        if confidence > 0.8:
            return self.execute_trade(asset, price_inference)
        return None

Prerequisites

  • Python 3.7+: Modern Python version with full feature support
  • Network access: Internet connectivity for API communications
  • API credentials: Optional API key for enhanced functionality
  • Development environment: Python package manager (pip) and virtual environment

Next Steps