Skip to main content
curl --request GET \
  --url https://api.longshot.xyz/v1/u/alice/contests/550e8400-e29b-41d4-a716-446655440000
{
  "contest_id": "550e8400-e29b-41d4-a716-446655440000",
  "title": "Daily Mentions Contest",
  "category": "mentions",
  "status": "resolved",
  "bet_amount_micros": 1000000,
  "protocol_prize_pool_micros": 25000000,
  "total_pot_micros": 35000000,
  "entries_filled": 42,
  "entry_cap": 100,
  "entry_opens_at_ms": 1778010000000,
  "betting_closes_ms": 1778013600000,
  "live_ends_at_ms": 1778017200000,
  "resolved_at_ms": 1778020800000,
  "created_at_ms": 1778006400000,
  "description": "Pick the markets that resolve YES.",
  "bet_type": { "kind": "num_bets", "value": 2 },
  "game_type": "lineups",
  "winning_split_bps": [6000, 3000, 1000],
  "markets": [
    {
      "market_id": 61619,
      "category": "Politics",
      "name": "Will this person be mentioned?",
      "description": "Rules for this contest market.",
      "status": "RESOLVED",
      "outcome": "YES",
      "source_kind": "polymarket_fantasy",
      "source_event_id": "12345",
      "source_market_id": "67890",
      "betting_closes_at_ms": 1778013600000,
      "live_ends_at_ms": 1778017200000,
      "resolution_time_ms": 1778020800000
    }
  ],
  "profile_owner": {
    "joined": true,
    "entry_visibility": "visible",
    "entries": [
      {
        "entry_index": 0,
        "created_at_ms": 1778010300000,
        "picks": [
          { "market_id": 61619, "direction": "up", "outcome": "won" }
        ],
        "open_leg_count": 0,
        "resolved_win_count": 1,
        "payout_micros": 2500000,
        "net_payout_micros": 1500000,
        "rank": 1
      }
    ]
  }
}
curl --request GET \
  --url https://api.longshot.xyz/v1/u/alice/contests/550e8400-e29b-41d4-a716-446655440000
{
  "contest_id": "550e8400-e29b-41d4-a716-446655440000",
  "title": "Daily Mentions Contest",
  "category": "mentions",
  "status": "resolved",
  "bet_amount_micros": 1000000,
  "protocol_prize_pool_micros": 25000000,
  "total_pot_micros": 35000000,
  "entries_filled": 42,
  "entry_cap": 100,
  "entry_opens_at_ms": 1778010000000,
  "betting_closes_ms": 1778013600000,
  "live_ends_at_ms": 1778017200000,
  "resolved_at_ms": 1778020800000,
  "created_at_ms": 1778006400000,
  "description": "Pick the markets that resolve YES.",
  "bet_type": { "kind": "num_bets", "value": 2 },
  "game_type": "lineups",
  "winning_split_bps": [6000, 3000, 1000],
  "markets": [
    {
      "market_id": 61619,
      "category": "Politics",
      "name": "Will this person be mentioned?",
      "description": "Rules for this contest market.",
      "status": "RESOLVED",
      "outcome": "YES",
      "source_kind": "polymarket_fantasy",
      "source_event_id": "12345",
      "source_market_id": "67890",
      "betting_closes_at_ms": 1778013600000,
      "live_ends_at_ms": 1778017200000,
      "resolution_time_ms": 1778020800000
    }
  ],
  "profile_owner": {
    "joined": true,
    "entry_visibility": "visible",
    "entries": [
      {
        "entry_index": 0,
        "created_at_ms": 1778010300000,
        "picks": [
          { "market_id": 61619, "direction": "up", "outcome": "won" }
        ],
        "open_leg_count": 0,
        "resolved_win_count": 1,
        "payout_micros": 2500000,
        "net_payout_micros": 1500000,
        "rank": 1
      }
    ]
  }
}

Endpoint

GET https://api.longshot.xyz/v1/u/{handle}/contests/{id}
Returns contest detail for the public profile owner identified by handle. This public detail endpoint is available for lineups and outcast contests; survivor and streak contests return 404 CONTEST_NOT_FOUND.
profile_owner.entries is populated with the profile owner’s entries only after the contest betting window closes (now_ms >= betting_closes_ms). While betting is still open, profile_owner.entry_visibility is hidden_while_betting_open and profile_owner.entries is empty to withhold live picks, so use profile_owner.joined to tell whether the profile owner entered.

Path Parameters

handle
string
required
User handle, case-insensitive.
id
uuid
required
Contest ID returned by GET /v1/contests.

Query Parameters

No query parameters.

Response Fields

contest_id
uuid
Contest ID.
title
string
Display title for the contest.
category
string
Contest category: mentions, sports, or culture.
status
string
Contest status: open, resolved, or voided.
bet_amount_micros
int64
Entry amount in micros.
protocol_prize_pool_micros
int64
Prize pool funded by the protocol, in micros.
total_pot_micros
int64
Current total contest pot in micros.
entries_filled
int32
Number of submitted entries.
entry_cap
int32
Maximum number of entries accepted.
entry_opens_at_ms
int64 | null
Entry-open timestamp as Unix milliseconds.
betting_closes_ms
int64
Last timestamp, in Unix milliseconds, when entries are accepted.
live_ends_at_ms
int64 | null
UI live-window end timestamp as Unix milliseconds, when configured.
resolved_at_ms
int64 | null
Resolution timestamp as Unix milliseconds when the contest has resolved.
profile_owner
object
Profile-owner scoped contest fields.
profile_owner.joined
boolean
True when the profile owner has entered the contest.
profile_owner.entry_visibility
string
visible when entries are included, or hidden_while_betting_open before betting closes.
created_at_ms
int64
Contest creation timestamp as Unix milliseconds.
image_url
string
Resolved contest image URL when an image is available.
description
string | null
Contest description when configured.
bet_type
object
Entry selection rule. kind is num_bets or bets_per_category; value is the required count.
game_type
string
Contest payout mode: lineups or outcast.
winning_split_bps
array
Winner split percentages in basis points for lineups-style contests.
markets
array
Markets available in the contest.
markets[].market_id
int64
Market ID for submitted picks.
markets[].category
string
Per-contest market category label.
markets[].name
string
Display name for the market.
markets[].description
string | null
Public rules text for this contest market.
markets[].status
string
Market status, for example OPEN, RESOLVED, or VOIDED.
markets[].outcome
string | null
Resolved outcome, YES or NO, when known.
markets[].source_kind
string | null
Source/provider kind for source-backed markets. Null for price markets.
markets[].source_event_id
string | null
Source event ID for source-backed markets. Null for price markets.
markets[].source_market_id
string | null
Source market ID for source-backed markets. Null for price markets.
markets[].betting_closes_at_ms
int64 | null
Market-level betting-close timestamp as Unix milliseconds.
markets[].live_ends_at_ms
int64 | null
Market-level live-window end timestamp as Unix milliseconds, when configured.
markets[].resolution_time_ms
int64 | null
Market resolution timestamp as Unix milliseconds when known.
profile_owner.entries
array
Entries for the profile owner on this contest. This array is intentionally empty while profile_owner.entry_visibility is hidden_while_betting_open; entries are exposed after betting closes.
profile_owner.entries[].entry_index
int32
Entry index for users with multiple paid entries.
profile_owner.entries[].created_at_ms
int64
Entry creation timestamp as Unix milliseconds.
profile_owner.entries[].picks
array
Profile owner’s picks in this contest entry, available only after betting closes.
profile_owner.entries[].picks[].market_id
int64
Market ID for the pick.
profile_owner.entries[].picks[].direction
string
Pick direction: up or down.
profile_owner.entries[].picks[].outcome
string
Pick outcome: pending, won, lost, or voided.
profile_owner.entries[].open_leg_count
int32
Count of picks that are not resolved yet.
profile_owner.entries[].resolved_win_count
int32
Count of resolved winning picks.
profile_owner.entries[].payout_micros
int64 | null
Gross payout in micros when the entry has resolved.
profile_owner.entries[].net_payout_micros
int64 | null
Net payout in micros when the entry has resolved.
profile_owner.entries[].rank
int32 | null
Contest rank when available.