{"openapi":"3.1.0","info":{"title":"Prop Line (BYOK) API","version":"0.1.0","description":"Prop Line (BYOK) lets an AI assistant read your own Prop Line data through the Prop Line API with a key you supply (PropLine API key). Read-only: 12 tools (list_sports, list_events, list_odds, get_event_odds, list_event_markets, get_event_best_line, get_event_expected_value, list_futures, list_scores, get_event_line_movement, get_event_context, search_players). The BYOK key travels with each...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-propline.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-propline/docs"},"termsOfService":"https://connectorbay.com/byok-propline/terms"},"servers":[{"url":"https://byok-propline.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-propline/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_sports":{"post":{"operationId":"list_sports","summary":"List the sports covered with their keys and whether they are active (the keys are used by the other tools). Use for \"Whi","description":"List the sports covered with their keys and whether they are active (the keys are used by the other tools). Use for \"Which sports does PropLine cover\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_sportsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_events":{"post":{"operationId":"list_events","summary":"List upcoming and live events of a sport with teams, start time and live flag (no prices). Use for \"What MLB games are c","description":"List upcoming and live events of a sport with teams, start time and live flag (no prices). Use for \"What MLB games are coming up\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sport_key":{"description":"Sport key from list_sports, for example 'baseball_mlb' or 'basketball_nba'.","maxLength":200,"title":"Sport Key","type":"string"}},"required":["sport_key"],"title":"list_eventsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_odds":{"post":{"operationId":"list_odds","summary":"List events of a sport with odds per bookmaker for the chosen markets (game lines by default). Large answers are cut off","description":"List events of a sport with odds per bookmaker for the chosen markets (game lines by default). Large answers are cut off, so narrow by bookmakers. Use for \"What are the moneyline odds for today's MLB games at DraftKings\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sport_key":{"description":"Sport key from list_sports, for example 'baseball_mlb' or 'basketball_nba'.","maxLength":200,"title":"Sport Key","type":"string"},"markets":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated market keys such as h2h, spreads or totals (default h2h).","title":"Markets"},"bookmakers":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated bookmaker keys to include, for example 'draftkings,fanduel'.","title":"Bookmakers"},"period":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Game period such as full_game or first_half (market dependent).","title":"Period"},"max_age":{"anyOf":[{"maximum":86400,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Drop markets not updated in the last N seconds (up to 86400).","title":"Max Age"}},"required":["sport_key"],"title":"list_oddsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_event_odds":{"post":{"operationId":"get_event_odds","summary":"Get one event's odds, including player prop markets such as pitcher strikeouts or points, per bookmaker. Use for \"What a","description":"Get one event's odds, including player prop markets such as pitcher strikeouts or points, per bookmaker. Use for \"What are the player prop lines for event 12345 at FanDuel\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sport_key":{"description":"Sport key from list_sports, for example 'baseball_mlb' or 'basketball_nba'.","maxLength":200,"title":"Sport Key","type":"string"},"event_id":{"description":"Event id from list_events, for example 12345.","minimum":1,"title":"Event Id","type":"integer"},"markets":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated market keys, for example 'player_points,player_rebounds' (see list_event_markets).","title":"Markets"},"bookmakers":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated bookmaker keys to include, for example 'draftkings,fanduel'.","title":"Bookmakers"},"period":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Game period such as full_game or first_half (market dependent).","title":"Period"}},"required":["sport_key","event_id"],"title":"get_event_oddsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_event_markets":{"post":{"operationId":"list_event_markets","summary":"List the market keys available for one event, to fill the markets filter of the odds tools. Use for \"Which markets are o","description":"List the market keys available for one event, to fill the markets filter of the odds tools. Use for \"Which markets are offered for event 12345\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sport_key":{"description":"Sport key from list_sports, for example 'baseball_mlb' or 'basketball_nba'.","maxLength":200,"title":"Sport Key","type":"string"},"event_id":{"description":"Event id from list_events, for example 12345.","minimum":1,"title":"Event Id","type":"integer"}},"required":["sport_key","event_id"],"title":"list_event_marketsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_event_best_line":{"post":{"operationId":"get_event_best_line","summary":"Get the best available price per side for each market line of an event and which books offer it. The free plan sees pric","description":"Get the best available price per side for each market line of an event and which books offer it. The free plan sees prices blanked. Use for \"Which book pays the most on the Yankees moneyline in event 12345\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sport_key":{"description":"Sport key from list_sports, for example 'baseball_mlb' or 'basketball_nba'.","maxLength":200,"title":"Sport Key","type":"string"},"event_id":{"description":"Event id from list_events, for example 12345.","minimum":1,"title":"Event Id","type":"integer"},"markets":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated market keys.","title":"Markets"},"bookmakers":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated bookmaker keys to include, for example 'draftkings,fanduel'.","title":"Bookmakers"}},"required":["sport_key","event_id"],"title":"get_event_best_lineArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_event_expected_value":{"post":{"operationId":"get_event_expected_value","summary":"Compare every book's price with a no-vig fair line for an event and show the expected value in percent for each outcome.","description":"Compare every book's price with a no-vig fair line for an event and show the expected value in percent for each outcome. Use for \"Are there +EV prices for event 12345\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sport_key":{"description":"Sport key from list_sports, for example 'baseball_mlb' or 'basketball_nba'.","maxLength":200,"title":"Sport Key","type":"string"},"event_id":{"description":"Event id from list_events, for example 12345.","minimum":1,"title":"Event Id","type":"integer"},"markets":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated market keys.","title":"Markets"},"bookmakers":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated bookmaker keys to include, for example 'draftkings,fanduel'.","title":"Bookmakers"},"devig":{"anyOf":[{"enum":["multiplicative","shin"],"type":"string"},{"type":"null"}],"default":"multiplicative","description":"Method used to remove the margin.","title":"Devig"}},"required":["sport_key","event_id"],"title":"get_event_expected_valueArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_futures":{"post":{"operationId":"list_futures","summary":"List futures and outright markets of a sport (for example championship winner) with prices per bookmaker. Use for \"What ","description":"List futures and outright markets of a sport (for example championship winner) with prices per bookmaker. Use for \"What are the NFL championship futures\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sport_key":{"description":"Sport key from list_sports, for example 'baseball_mlb' or 'basketball_nba'.","maxLength":200,"title":"Sport Key","type":"string"},"bookmakers":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated bookmaker keys to include, for example 'draftkings,fanduel'.","title":"Bookmakers"}},"required":["sport_key"],"title":"list_futuresArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_scores":{"post":{"operationId":"list_scores","summary":"List recent and live scores of a sport for the last few days. Use for \"What were yesterday's MLB scores\".","description":"List recent and live scores of a sport for the last few days. Use for \"What were yesterday's MLB scores\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sport_key":{"description":"Sport key from list_sports, for example 'baseball_mlb' or 'basketball_nba'.","maxLength":200,"title":"Sport Key","type":"string"},"days_from":{"anyOf":[{"maximum":30,"minimum":1,"type":"integer"},{"type":"null"}],"default":3,"description":"How many days back to include.","title":"Days From"}},"required":["sport_key"],"title":"list_scoresArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_event_line_movement":{"post":{"operationId":"get_event_line_movement","summary":"Show how an event's lines moved and which markets saw steam (many books moving the same way). Use for \"Has the line move","description":"Show how an event's lines moved and which markets saw steam (many books moving the same way). Use for \"Has the line moved on event 12345\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sport_key":{"description":"Sport key from list_sports, for example 'baseball_mlb' or 'basketball_nba'.","maxLength":200,"title":"Sport Key","type":"string"},"event_id":{"description":"Event id from list_events, for example 12345.","minimum":1,"title":"Event Id","type":"integer"},"markets":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated market keys (default h2h,spreads,totals).","title":"Markets"},"bookmakers":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated bookmaker keys to include, for example 'draftkings,fanduel'.","title":"Bookmakers"},"since":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only movement after this ISO 8601 time.","title":"Since"}},"required":["sport_key","event_id"],"title":"get_event_line_movementArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_event_context":{"post":{"operationId":"get_event_context","summary":"Get game context for an event: venue, roof, probable pitchers, lineup status, umpire and weather (baseball events). Use ","description":"Get game context for an event: venue, roof, probable pitchers, lineup status, umpire and weather (baseball events). Use for \"What is the weather and who is pitching in event 12345\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sport_key":{"description":"Sport key from list_sports, for example 'baseball_mlb' or 'basketball_nba'.","maxLength":200,"title":"Sport Key","type":"string"},"event_id":{"description":"Event id from list_events, for example 12345.","minimum":1,"title":"Event Id","type":"integer"}},"required":["sport_key","event_id"],"title":"get_event_contextArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/search_players":{"post":{"operationId":"search_players","summary":"Search players of a sport by name to get the names used by the player history endpoints. Use for \"Find the player named ","description":"Search players of a sport by name to get the names used by the player history endpoints. Use for \"Find the player named Judge in MLB\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sport_key":{"description":"Sport key from list_sports, for example 'baseball_mlb' or 'basketball_nba'.","maxLength":200,"title":"Sport Key","type":"string"},"search":{"description":"Part of the player name.","maxLength":60,"title":"Search","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many players (1 to 100).","title":"Limit"}},"required":["sport_key","search"],"title":"search_playersArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}