Retrieve a list of orders for the authenticated user and return it as a JSON object.
If True, filter to only open orders (PENDING, PARTIALLY_FILLED, PARTIALLY_MERGED).
Optional market ID to filter orders. If 0, returns all orders.
Dictionary containing orders data if found, None otherwise
Raises
- ValueError — If API_SERVER_URL or ACCOUNT environment variable is not set
Example
>>> import os
>>> os.environ["API_SERVER_URL"] = "http://localhost:8080"
>>> os.environ["ACCOUNT"] = "0x1234..."
>>> orders = await getOrders()
>>> print(len(orders.get("orders", [])))
5
>>> open_orders = await getOrders(only_open_orders=True)
>>> print(len(open_orders.get("orders", [])))
2
async def getOrders(only_open_orders: bool=False, market_id: Union[str, int]=0) -> Optional[Dict[str, Any]]:
base_url = os.getenv('API_SERVER_URL')
if not base_url:
raise ValueError('API_SERVER_URL environment variable not set')
address = os.getenv('ACCOUNT')
if not address:
raise ValueError('ACCOUNT environment variable not set')
async with httpx.AsyncClient() as session:
client = PerpetualsClient(base_url=base_url, session=session)
try:
orders = await client.get_orders(address, market_id=market_id)
if orders is not None:
orders_list = [MessageToDict(order, always_print_fields_with_no_presence=True) for order in orders]
if only_open_orders:
open_statuses = ['ORDER_STATUS_PENDING', 'ORDER_STATUS_PARTIALLY_FILLED', 'ORDER_STATUS_PARTIALLY_MERGED']
orders_list = [order for order in orders_list if order.get('status') in open_statuses]
return {'orders': orders_list}
return None
except Exception as e:
print(f'Error getting orders: {e}')
print('\nTroubleshooting:')
print(' - Is the server running?')
print(' - Is the ACCOUNT environment variable set?')
print(' - Is this a valid address in the database?')
return None