Docs/Guides/Listings & Suspensions

Managing market listings & suspensions

This guide walks through creating market listings (instrument–venue associations) and recording trading suspensions. Together, these let you track where each instrument trades and its current trading status.

Listing an instrument on a market

A market listing connects an instrument to a trading venue. The pair must be unique within the workspace — you can’t list the same instrument on the same market twice.

Before creating a listing, both the instrument and the market must exist. If you haven’t created them yet, see:

Create the instrument first
See Sync Instruments or POST /instruments in the API reference.
Create the market first
See POST /markets in the Markets API reference.
listing = client.post("/market-listings", json={ "instrument_id": "bhp.ax", "market_id": "asx", "local_code": "BHP", "currency": "AUD", "lot_size": 1 }).json() listing_id = listing["id"]

Recording a trading suspension

When a listing is suspended from trading, create a suspension record with the start time and an optional end time. An open-ended suspension (no suspended_until) means the instrument is currently halted.

# Create an open-ended suspension suspension = client.post("/market-listing-suspensions", json={ "listing_id": listing_id, "suspended_from": "2026-04-15T10:00:00Z", "suspended_until": None, "reason": "Trading halt pending announcement" }).json()
Suspension periods must not overlap for the same listing. If you attempt to create a suspension that overlaps an existing one, the API returns 409 Conflict.

Lifting a suspension

To lift a suspension, PATCH it with a suspended_until timestamp (or the current time to lift immediately):

from datetime import datetime, timezone client.patch( f"/market-listing-suspensions/{suspension['id']}", json={"suspended_until": datetime.now(timezone.utc).isoformat()} )

Querying listings and suspensions

Find all currently active listings for a market, and check which are suspended right now:

Active listings on ASX
POST /market-listings/filter { "filter": { "and": [ { "field": "market_id", "op": "eq", "value": "asx" }, { "field": "archived_at", "op": "is_null", "value": true } ] } }
Currently open suspensions
POST /market-listing-suspensions/filter { "filter": { "and": [ { "field": "suspended_from", "op": "lte", "value": "2026-04-15T12:00:00Z" }, { "field": "suspended_until", "op": "is_null", "value": true } ] } }

Archiving a listing

When an instrument is permanently delisted from a market, archive the listing. This preserves historical suspension records while marking the listing as inactive.

client.delete(f"/market-listings/{listing_id}") # Returns 204 No Content

To query archived listings, add ?archived=true to the GET endpoint or include an archived_at condition in your filter body.

PrivacyTermsStatus© 2025 Ptolemy Pty Ltd