openapi: 3.2.0 info: title: Parlay Verdict API description: Real-time sports odds aggregation from **33 books and data sources** updated every 2-120 seconds depending on source cadence. version: 3.2.0 x-credit-currency: credits x-credit-cost-catalogue-url: /v1/meta/credit-costs x-pricing-url: /v1/pricing x-usage-url: /v1/usage contact: name: ParlayAPI support url: https://parlay-api.com/support email: support@parlay-api.com license: name: ParlayAPI Terms of Service url: https://parlay-api.com/terms termsOfService: https://parlay-api.com/terms servers: - url: https://parlay-api.com description: Production (primary; HTTP/2, TLS 1.3). - url: https://api.parlay-api.com description: Production (high-volume; bypasses Cloudflare edge for trading bots above 30 req/min). Same origin, same auth, same endpoints. tags: - name: Verdict paths: /v1/verdict: get: summary: Verdict description: 'One-call bet verdict: fair price vs the market + a plain-English call. 5 credits. Give it a specific bet and it returns the no-vig fair price, how the best available (and your) price compares as EV, which book has the best number, and a verdict: BET / LEAN / FAIR / PASS (or NO_DATA). Reuses the same sharp no-vig math as /ev and /consensus. Examples: /v1/verdict?sport=baseball_mlb&team=Yankees&market=h2h&side=Yankees&book=draftkings /v1/verdict?sport=baseball_mlb&home=Toronto Blue Jays&away=Tampa Bay Rays&market=totals&side=over&line=8.5 /v1/verdict?sport=baseball_mlb&team=Braves&market=player_hits&player=Austin Riley&side=over&line=1.5&price=-115' operationId: verdict_v1_verdict_get parameters: - name: sport in: query required: true schema: type: string description: sport_key, e.g. baseball_mlb title: Sport description: sport_key, e.g. baseball_mlb - name: market in: query required: false schema: type: string description: h2h | spreads | totals | a player prop key (player_points, ...) default: h2h title: Market description: h2h | spreads | totals | a player prop key (player_points, ...) - name: side in: query required: true schema: type: string description: Team name or home/away (h2h/spreads); over/under (totals/props) title: Side description: Team name or home/away (h2h/spreads); over/under (totals/props) - name: home in: query required: false schema: anyOf: - type: string - type: 'null' description: Home team (with `away`, to identify the game) title: Home description: Home team (with `away`, to identify the game) - name: away in: query required: false schema: anyOf: - type: string - type: 'null' description: Away team title: Away description: Away team - name: event in: query required: false schema: anyOf: - type: string - type: 'null' description: 'Alternative to home/away: ''Away @ Home''' title: Event description: 'Alternative to home/away: ''Away @ Home''' - name: team in: query required: false schema: anyOf: - type: string - type: 'null' description: 'Alternative: one team name to find the game' title: Team description: 'Alternative: one team name to find the game' - name: player in: query required: false schema: anyOf: - type: string - type: 'null' description: Player name (required for player-prop markets) title: Player description: Player name (required for player-prop markets) - name: line in: query required: false schema: anyOf: - type: number - type: 'null' description: Line/point for spreads, totals, props title: Line description: Line/point for spreads, totals, props - name: book in: query required: false schema: anyOf: - type: string - type: 'null' description: The book you'd bet at (grades that book's price) title: Book description: The book you'd bet at (grades that book's price) - name: price in: query required: false schema: anyOf: - type: string - type: 'null' description: The price you're offered (American or decimal). Overrides `book` price. title: Price description: The price you're offered (American or decimal). Overrides `book` price. - name: region in: query required: false schema: anyOf: - type: string - type: 'null' description: 'Where you can bet: us (default) | eu | uk | au | ca. Scopes the best-price/shop recommendation to books you can actually use. Omit to use your saved preference or US.' title: Region description: 'Where you can bet: us (default) | eu | uk | au | ca. Scopes the best-price/shop recommendation to books you can actually use. Omit to use your saved preference or US.' - name: books in: query required: false schema: anyOf: - type: string - type: 'null' description: Exact CSV of books you can bet at (e.g. draftkings,fanduel,novig). Overrides region; use this for state geo-blocks. Omit to use your saved preference. title: Books description: Exact CSV of books you can bet at (e.g. draftkings,fanduel,novig). Overrides region; use this for state geo-blocks. Omit to use your saved preference. - name: bankroll in: query required: false schema: anyOf: - type: number - type: 'null' description: Your bankroll. When the bet is +EV, returns a suggested Kelly stake amount. title: Bankroll description: Your bankroll. When the bet is +EV, returns a suggested Kelly stake amount. - name: kelly in: query required: false schema: type: number maximum: 1.0 minimum: 0.0 description: Kelly fraction for staking (default 0.5 = half-Kelly, the bankroll-safe standard). default: 0.5 title: Kelly description: Kelly fraction for staking (default 0.5 = half-Kelly, the bankroll-safe standard). - name: sharpBook in: query required: false schema: type: string description: Sharp book to anchor the fair line default: pinnacle title: Sharpbook description: Sharp book to anchor the fair line responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' tags: - Verdict /v1/verdict/prefs: get: summary: Get Verdict Prefs description: Read the saved book preference for the calling key. No credits. operationId: get_verdict_prefs_v1_verdict_prefs_get responses: '200': description: Successful Response content: application/json: schema: {} tags: - Verdict post: summary: Set Verdict Prefs description: 'Remember which books you can bet at so /v1/verdict scopes best-price and shop recommendations to them without repeating region/books every call. Pass `region` OR an exact `books` list. No credits.' operationId: set_verdict_prefs_v1_verdict_prefs_post parameters: - name: region in: query required: false schema: anyOf: - type: string - type: 'null' description: 'Where you bet: us | eu | uk | au | ca' title: Region description: 'Where you bet: us | eu | uk | au | ca' - name: books in: query required: false schema: anyOf: - type: string - type: 'null' description: Exact CSV of book keys you can bet at (overrides region) title: Books description: Exact CSV of book keys you can bet at (overrides region) responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' tags: - Verdict components: schemas: HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' type: array title: Detail type: object title: HTTPValidationError ValidationError: properties: loc: items: anyOf: - type: string - type: integer type: array title: Location msg: type: string title: Message type: type: string title: Error Type input: title: Input ctx: type: object title: Context type: object required: - loc - msg - type title: ValidationError securitySchemes: apiKeyHeader: type: apiKey in: header name: X-API-Key description: API key passed in the X-API-Key header. Recommended. apiKeyQuery: type: apiKey in: query name: apiKey description: API key passed as the ?apiKey= query parameter. Useful for browser fetch() and webhooks where header control is limited. Equivalent to X-API-Key. bearerAuth: type: http scheme: bearer bearerFormat: APIKey description: 'API key passed via Authorization: Bearer . Equivalent to X-API-Key for compatibility with auth libraries that expect bearer tokens.'