Python SDK for Finatic Server API
Project description
Finatic Server Python SDK
A Python SDK for integrating with Finatic's server-side trading and portfolio management APIs.
Installation
pip install finatic-server-python
Quick Start
import asyncio
from finatic_server import FinaticServerClient
async def main():
# Initialize with API key
client = FinaticServerClient("your-api-key")
# Option 1: Portal Authentication
await client.start_session()
portal_url = await client.get_portal_url()
print(f"User should visit: {portal_url}")
# After user completes authentication in portal, get user info
user_info = await client.get_session_user()
print(f"Authenticated user: {user_info['user_id']}")
# Option 2: Direct Authentication (if you know the user ID)
# client = FinaticServerClient("your-api-key", user_id="user123")
# await client.start_session()
# Now you can access broker data
brokers = await client.get_broker_list()
print(f"Available brokers: {len(brokers)}")
# Get all orders across all pages
all_orders = await client.get_all_broker_orders()
print(f"Total orders: {len(all_orders)}")
# Run the example
asyncio.run(main())
Authentication Flow
The SDK supports two authentication methods:
1. Portal Authentication (User completes auth in browser)
client = FinaticServerClient("your-api-key")
# Start session
await client.start_session()
# Get portal URL for user authentication
portal_url = await client.get_portal_url()
print(f"User should visit: {portal_url}")
# After user completes authentication in portal
user_info = await client.get_session_user()
print(f"User ID: {user_info['user_id']}")
print(f"Access Token: {user_info['access_token']}")
# Now you can make authenticated requests
brokers = await client.get_broker_list()
2. Direct Authentication (Server-side with known user ID)
client = FinaticServerClient("your-api-key", user_id="user123")
# Start session (automatically authenticates with user ID)
await client.start_session()
# Now you can make authenticated requests immediately
brokers = await client.get_broker_list()
Core Features
- API Key Authentication: Secure server-side authentication
- Portal Integration: Get portal URLs for user authentication
- Automatic Token Management: Handles access/refresh tokens automatically
- Pagination Support: Built-in pagination for large datasets
- Type-safe API: Full Pydantic model support
- Async/await Support: Non-blocking operations
- Comprehensive Error Handling: Detailed error types
API Reference
Initialization
client = FinaticServerClient(
api_key="your-api-key",
user_id="user123", # Optional - for direct authentication
)
Authentication Methods
start_session()- Start a new session (authenticates directly if user_id provided)get_portal_url()- Get portal URL for user authentication (portal flow only)get_session_user()- Get user info and tokens after portal completion (portal flow only)
Broker Data Methods
Basic Methods (with pagination support)
get_broker_list()- Get list of available brokersget_broker_connections()- Get broker connectionsget_broker_accounts(page=1, per_page=100, options=None, filters=None)- Get broker accountsget_broker_orders(page=1, per_page=100, options=None, filters=None)- Get broker ordersget_broker_positions(page=1, per_page=100, options=None, filters=None)- Get broker positions
Get All Methods (automatically handles pagination)
get_all_broker_accounts(options=None, filters=None)- Get all broker accounts across all pagesget_all_broker_orders(options=None, filters=None)- Get all broker orders across all pagesget_all_broker_positions(options=None, filters=None)- Get all broker positions across all pages
Filter Options
from finatic_server.types.broker import BrokerDataOptions, OrdersFilter, PositionsFilter, AccountsFilter
# Basic filtering
options = BrokerDataOptions(
broker_name="robinhood",
account_id="123456",
symbol="AAPL"
)
# Advanced filtering for orders
order_filters = OrdersFilter(
status="filled",
side="buy",
asset_type="stock",
created_after="2024-01-01T00:00:00Z"
)
# Advanced filtering for positions
position_filters = PositionsFilter(
symbol="AAPL",
side="long",
asset_type="stock"
)
# Advanced filtering for accounts
account_filters = AccountsFilter(
account_type="margin",
status="active",
currency="USD"
)
Usage Examples
Get All Orders with Filtering
# Get all filled orders for a specific symbol
all_filled_orders = await client.get_all_broker_orders(
filters=OrdersFilter(
status="filled",
symbol="AAPL"
)
)
print(f"Found {len(all_filled_orders)} filled AAPL orders")
Pagination Example
# Get first page of 10 orders
first_page = await client.get_broker_orders(page=1, per_page=10)
print(f"First page: {len(first_page)} orders")
# Get second page
second_page = await client.get_broker_orders(page=2, per_page=10)
print(f"Second page: {len(second_page)} orders")
Get All Data for Analysis
# Get all accounts, orders, and positions
all_accounts = await client.get_all_broker_accounts()
all_orders = await client.get_all_broker_orders()
all_positions = await client.get_all_broker_positions()
print(f"Total accounts: {len(all_accounts)}")
print(f"Total orders: {len(all_orders)}")
print(f"Total positions: {len(all_positions)}")
Filter by Broker
# Get all orders from Robinhood
robinhood_orders = await client.get_all_broker_orders(
options=BrokerDataOptions(broker_name="robinhood")
)
# Get all positions from Tasty Trade
tasty_positions = await client.get_all_broker_positions(
options=BrokerDataOptions(broker_name="tasty_trade")
)
Error Handling
The SDK provides comprehensive error handling:
from finatic_server import AuthenticationError, ApiError, NetworkError
try:
orders = await client.get_broker_orders()
except AuthenticationError as e:
print(f"Authentication failed: {e}")
except NetworkError as e:
print(f"Network error: {e}")
except ApiError as e:
print(f"API error: {e}")
Complete Example
import asyncio
from finatic_server import FinaticServerClient
from finatic_server.types.broker import OrdersFilter, BrokerDataOptions
async def main():
# Option 1: Portal Authentication (user completes auth in browser)
client = FinaticServerClient("your-api-key")
try:
# Start session
await client.start_session()
# Get portal URL
portal_url = await client.get_portal_url()
print(f"Please visit: {portal_url}")
# Wait for user to complete authentication
input("Press Enter after completing authentication...")
# Get user info
user_info = await client.get_session_user()
print(f"Authenticated as: {user_info['user_id']}")
# Option 2: Direct Authentication (if you know the user ID)
# client = FinaticServerClient("your-api-key", user_id="user123")
# await client.start_session()
# print("Directly authenticated!")
# Get broker information
brokers = await client.get_broker_list()
print(f"Available brokers: {[b.name for b in brokers]}")
# Get all filled orders
filled_orders = await client.get_all_broker_orders(
filters=OrdersFilter(status="filled")
)
print(f"Total filled orders: {len(filled_orders)}")
# Get all positions
positions = await client.get_all_broker_positions()
print(f"Total positions: {len(positions)}")
# Get accounts with cash balance
accounts = await client.get_all_broker_accounts()
for account in accounts:
cash = account.cash_balance or 0.0
print(f"{account.account_name}: ${cash:,.2f}")
except Exception as e:
print(f"Error: {e}")
finally:
await client.close()
if __name__ == "__main__":
asyncio.run(main())
License
MIT License - see LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file finatic_server_python-0.1.5.tar.gz.
File metadata
- Download URL: finatic_server_python-0.1.5.tar.gz
- Upload date:
- Size: 30.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f45c3b06b8c28be1c2d484a25f1c3294bbd652567d6e21b6e698996256b3be0
|
|
| MD5 |
c6979944079fe9323ff181f1f2c50b2b
|
|
| BLAKE2b-256 |
7988b2c89d903e92f500c052ddd5184895f92b27194739e1e1f1a323453b81d7
|
File details
Details for the file finatic_server_python-0.1.5-py3-none-any.whl.
File metadata
- Download URL: finatic_server_python-0.1.5-py3-none-any.whl
- Upload date:
- Size: 30.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d9280a6c327639382df2eb59775a552a65c7cb816259076128ee45666e8f239
|
|
| MD5 |
d2db2a372d3d28bf75dd6cb4ad1e85d8
|
|
| BLAKE2b-256 |
5b8520007a473b6f271aa113df3181a96ea4eca183334c9a598d33e709dcec11
|