Python SDK Quickstart
Prerequisites
- Python 3.11+
- SnipeRoute account and API key
- SDK installed (
pip install sniperoute)
Step 1: Set Up Environment
Create a .env file:
SNIPEROUTE_API_KEY=sk_live_your_api_key_here
SNIPEROUTE_API_URL=https://api.sniperoute.ioStep 2: Initialize Client
from sniperoute import SnipeRouteClient
# Automatically loads from environment variables
client = SnipeRouteClient()The client automatically loads SNIPEROUTE_API_KEY and SNIPEROUTE_API_URL from your .env file.
Step 3: Create Your First Trade Intent
import asyncio
from sniperoute import SnipeRouteClient
from sniperoute.models import TradeIntentRequest, OrderSide, OrderType
from decimal import Decimal
async def main():
# Initialize client with async context manager
async with SnipeRouteClient() as client:
# Create Trade Intent
intent = TradeIntentRequest(
intent_id="my_first_trade",
symbol="AAPL",
side=OrderSide.BUY,
quantity=Decimal("10"),
order_type=OrderType.MARKET,
broker_id="mock" # Use "mock" for testing
)
# Submit to SnipeRoute
response = await client.create_intent(intent)
print(f"Intent created!")
print(f" Intent ID: {response.intent_id}")
print(f" Status: {response.status}")
print(f" Internal ID: {response.id}")
asyncio.run(main())Expected Output
Intent created!
Intent ID: my_first_trade
Status: pending
Internal ID: 550e8400-e29b-41d4-a716-446655440000Step 4: Check Intent Status
async def check_status():
async with SnipeRouteClient() as client:
# Get intent by your external ID
intent = await client.get_intent_by_external_id("my_first_trade")
print(f"Status: {intent.status}")
print(f"Symbol: {intent.symbol}")
print(f"Orders: {len(intent.orders)}")
# Check fills
for order in intent.orders:
print(f"\nOrder {order.broker_order_id}:")
print(f" Status: {order.status}")
for fill in order.fills:
print(f" Fill: {fill.quantity} @ ${fill.price}")
asyncio.run(check_status())Complete Example with Error Handling
import asyncio
from sniperoute import SnipeRouteClient
from sniperoute.models import (
TradeIntentRequest,
OrderSide,
OrderType,
TimeInForce
)
from sniperoute.exceptions import (
SnipeRouteAPIError,
ValidationError,
ConflictError
)
from decimal import Decimal
async def create_limit_order():
try:
# Initialize client with async context manager
async with SnipeRouteClient() as client:
# Create limit order
intent = TradeIntentRequest(
intent_id="limit_order_001",
symbol="TSLA",
side=OrderSide.BUY,
quantity=Decimal("5"),
order_type=OrderType.LIMIT,
limit_price=Decimal("250.00"),
time_in_force=TimeInForce.GTC,
broker_id="mock"
)
# Submit intent
print("Submitting Trade Intent...")
response = await client.create_intent(intent)
print(f"Intent submitted successfully!")
print(f" Intent ID: {response.intent_id}")
print(f" Symbol: {response.symbol}")
print(f" Limit Price: ${response.limit_price}")
print(f" Status: {response.status}")
# Check status
print("\nChecking status...")
status = await client.get_intent_by_external_id("limit_order_001")
if status.status == "filled":
print("Order fully filled!")
for order in status.orders:
for fill in order.fills:
print(f" {fill.quantity} shares @ ${fill.price}")
elif status.status == "pending":
print("⏳ Order pending execution...")
except ValidationError as e:
print(f"Validation error: {e.message}")
except ConflictError as e:
print(f"Duplicate intent_id: {e.message}")
except SnipeRouteAPIError as e:
print(f"API error: {e.message}")
if __name__ == "__main__":
asyncio.run(create_limit_order())Common Order Types
Market Order
intent = TradeIntentRequest(
intent_id="market_001",
symbol="AAPL",
side=OrderSide.BUY,
quantity=Decimal("10"),
order_type=OrderType.MARKET,
broker_id="my_broker"
)Limit Order
intent = TradeIntentRequest(
intent_id="limit_001",
symbol="AAPL",
side=OrderSide.BUY,
quantity=Decimal("10"),
order_type=OrderType.LIMIT,
limit_price=Decimal("175.00"),
time_in_force=TimeInForce.GTC,
broker_id="my_broker"
)Stop-Loss Order
intent = TradeIntentRequest(
intent_id="stop_001",
symbol="AAPL",
side=OrderSide.SELL,
quantity=Decimal("10"),
order_type=OrderType.STOP,
stop_price=Decimal("170.00"),
broker_id="my_broker"
)Stop-Limit Order
intent = TradeIntentRequest(
intent_id="stop_limit_001",
symbol="AAPL",
side=OrderSide.SELL,
quantity=Decimal("10"),
order_type=OrderType.STOP_LIMIT,
stop_price=Decimal("170.00"),
limit_price=Decimal("168.00"),
broker_id="my_broker"
)Using Different Brokers
Replace "mock" with your connected broker:
# Alpaca
broker_id="alpaca_abc123"
# Interactive Brokers
broker_id="ibkr_xyz789"
# Charles Schwab
broker_id="schwab_def456"Connect Broker
Learn how to connect your broker account
Environment Configuration
Direct Configuration
client = SnipeRouteClient(
base_url="https://api.sniperoute.io",
api_key="sk_live_your_api_key_here"
)Environment Variables (Recommended)
import os
from sniperoute import SnipeRouteClient
# Option 1: Automatic (reads .env)
client = SnipeRouteClient()
# Option 2: Explicit
client = SnipeRouteClient(
api_key=os.getenv("SNIPEROUTE_API_KEY"),
base_url=os.getenv("SNIPEROUTE_API_URL")
)