cURL
#!/bin/sh
# listOpportunities: List live cross-venue opportunities. Needs TRENDLINE_API_KEY; TRENDLINE_API_BASE overrides the base.
curl -sS "${TRENDLINE_API_BASE:-https://systems.trendlinelabs.ai}/public/v1/opportunities" \
-H "Authorization: Bearer $TRENDLINE_API_KEY""""listOpportunities: List live cross-venue opportunities. Needs TRENDLINE_API_KEY; TRENDLINE_API_BASE overrides the base."""
import os
import requests
BASE = os.environ.get("TRENDLINE_API_BASE", "https://systems.trendlinelabs.ai")
KEY = os.environ["TRENDLINE_API_KEY"]
r = requests.get(f"{BASE}/public/v1/opportunities", params={},
headers={"Authorization": f"Bearer {KEY}"}, timeout=10)
r.raise_for_status()
print(r.json())
// listOpportunities: List live cross-venue opportunities. Needs TRENDLINE_API_KEY; TRENDLINE_API_BASE overrides the base.
const BASE = process.env.TRENDLINE_API_BASE ?? "https://systems.trendlinelabs.ai";
const KEY = process.env.TRENDLINE_API_KEY;
const r = await fetch(`${BASE}/public/v1/opportunities`, { headers: { Authorization: `Bearer ${KEY}` } });
console.log(r.status, await r.json());
{
"metadata": {
"active_markets": 37,
"age_s": 8,
"last_update_secs": 1791266392,
"total_markets": 2140,
"total_publishes": 88412
},
"opportunities": [
{
"arb_type": "kalshi_yes_poly_no",
"category_group": "crypto",
"detected_at_ms": 1791266396000,
"estimated_fee_cents": 2,
"event_universal_id": "ev-btc-100k-2026",
"gas_fee_cents": 0,
"image_url": null,
"kalshi_event_title": "Bitcoin price at year end",
"kalshi_no_ask": 60,
"kalshi_no_size": 205,
"kalshi_ticker": "KXBTC-26DEC31-B100000",
"kalshi_title": "Bitcoin above $100k?",
"kalshi_url": "https://kalshi.com/markets/kxbtc",
"kalshi_yes_ask": 41,
"kalshi_yes_size": 310,
"limitless_no_ask": null,
"limitless_no_size": null,
"limitless_slug": null,
"limitless_title": null,
"limitless_url": null,
"limitless_yes_ask": null,
"limitless_yes_size": null,
"market_universal_id": "mk-btc-100k-2026",
"max_contracts": 120,
"no_price": 55,
"poly_market_title": "Bitcoin above $100k on December 31?",
"poly_no_ask": 55,
"poly_no_size": 120,
"poly_slug": "bitcoin-above-100k-on-december-31",
"poly_title": "Bitcoin above $100k on December 31?",
"poly_url": "https://polymarket.com/event/bitcoin-above-100k-on-december-31",
"poly_yes_ask": 46,
"poly_yes_size": 1500,
"profit_cents": 2,
"sport": "crypto",
"total_cost_cents": 98,
"yes_price": 41
}
]
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>"
}
}Opportunities
List live cross-venue opportunities
Live cross-venue opportunities with the feed’s age; 503 when the feed is unreadable, never published or stale.
GET
/
public
/
v1
/
opportunities
cURL
#!/bin/sh
# listOpportunities: List live cross-venue opportunities. Needs TRENDLINE_API_KEY; TRENDLINE_API_BASE overrides the base.
curl -sS "${TRENDLINE_API_BASE:-https://systems.trendlinelabs.ai}/public/v1/opportunities" \
-H "Authorization: Bearer $TRENDLINE_API_KEY""""listOpportunities: List live cross-venue opportunities. Needs TRENDLINE_API_KEY; TRENDLINE_API_BASE overrides the base."""
import os
import requests
BASE = os.environ.get("TRENDLINE_API_BASE", "https://systems.trendlinelabs.ai")
KEY = os.environ["TRENDLINE_API_KEY"]
r = requests.get(f"{BASE}/public/v1/opportunities", params={},
headers={"Authorization": f"Bearer {KEY}"}, timeout=10)
r.raise_for_status()
print(r.json())
// listOpportunities: List live cross-venue opportunities. Needs TRENDLINE_API_KEY; TRENDLINE_API_BASE overrides the base.
const BASE = process.env.TRENDLINE_API_BASE ?? "https://systems.trendlinelabs.ai";
const KEY = process.env.TRENDLINE_API_KEY;
const r = await fetch(`${BASE}/public/v1/opportunities`, { headers: { Authorization: `Bearer ${KEY}` } });
console.log(r.status, await r.json());
{
"metadata": {
"active_markets": 37,
"age_s": 8,
"last_update_secs": 1791266392,
"total_markets": 2140,
"total_publishes": 88412
},
"opportunities": [
{
"arb_type": "kalshi_yes_poly_no",
"category_group": "crypto",
"detected_at_ms": 1791266396000,
"estimated_fee_cents": 2,
"event_universal_id": "ev-btc-100k-2026",
"gas_fee_cents": 0,
"image_url": null,
"kalshi_event_title": "Bitcoin price at year end",
"kalshi_no_ask": 60,
"kalshi_no_size": 205,
"kalshi_ticker": "KXBTC-26DEC31-B100000",
"kalshi_title": "Bitcoin above $100k?",
"kalshi_url": "https://kalshi.com/markets/kxbtc",
"kalshi_yes_ask": 41,
"kalshi_yes_size": 310,
"limitless_no_ask": null,
"limitless_no_size": null,
"limitless_slug": null,
"limitless_title": null,
"limitless_url": null,
"limitless_yes_ask": null,
"limitless_yes_size": null,
"market_universal_id": "mk-btc-100k-2026",
"max_contracts": 120,
"no_price": 55,
"poly_market_title": "Bitcoin above $100k on December 31?",
"poly_no_ask": 55,
"poly_no_size": 120,
"poly_slug": "bitcoin-above-100k-on-december-31",
"poly_title": "Bitcoin above $100k on December 31?",
"poly_url": "https://polymarket.com/event/bitcoin-above-100k-on-december-31",
"poly_yes_ask": 46,
"poly_yes_size": 1500,
"profit_cents": 2,
"sport": "crypto",
"total_cost_cents": 98,
"yes_price": 41
}
]
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>"
}
}Authorizations
Authorization: Bearer tl_live_…
Query Parameters
only opportunities in this sport or category (for example politics); omit for all