openapi: 3.2.0 info: title: Parlay Alerts 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: Alerts paths: /v1/alerts/prop-line: post: tags: - Alerts summary: Create Prop Line Alert description: 'Register a new prop-line threshold alert. Cost: free (configuration only). Tier gate: Pro+.' operationId: create_prop_line_alert_v1_alerts_prop_line_post requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AlertCreate' responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' get: tags: - Alerts summary: List Prop Line Alerts description: List alerts owned by the calling user. operationId: list_prop_line_alerts_v1_alerts_prop_line_get parameters: - name: enabled_only in: query required: false schema: type: boolean default: false title: Enabled Only - name: sport_key in: query required: false schema: anyOf: - type: string - type: 'null' title: Sport Key - name: limit in: query required: false schema: type: integer default: 100 title: Limit responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /v1/alerts/prop-line/{alert_id}: get: tags: - Alerts summary: Get Prop Line Alert description: Single-alert detail. operationId: get_prop_line_alert_v1_alerts_prop_line__alert_id__get parameters: - name: alert_id in: path required: true schema: type: integer title: Alert Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' patch: tags: - Alerts summary: Patch Prop Line Alert description: 'Toggle enabled / update cooldown / change threshold or direction / set expiry. NEVER changes the underlying webhook or the sport/player/market identity; for those, delete and re-register.' operationId: patch_prop_line_alert_v1_alerts_prop_line__alert_id__patch parameters: - name: alert_id in: path required: true schema: type: integer title: Alert Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AlertPatch' responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - Alerts summary: Delete Prop Line Alert operationId: delete_prop_line_alert_v1_alerts_prop_line__alert_id__delete parameters: - name: alert_id in: path required: true schema: type: integer title: Alert Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' components: schemas: HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' type: array title: Detail type: object title: HTTPValidationError AlertPatch: properties: enabled: anyOf: - type: boolean - type: 'null' title: Enabled cooldown_seconds: anyOf: - type: integer - type: 'null' title: Cooldown Seconds threshold_line: anyOf: - type: number - type: 'null' title: Threshold Line direction: anyOf: - type: string - type: 'null' title: Direction expires_at: anyOf: - type: string - type: 'null' title: Expires At type: object title: AlertPatch 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 AlertCreate: properties: sport_key: type: string title: Sport Key player_name: type: string title: Player Name market_key: type: string title: Market Key threshold_line: type: number title: Threshold Line webhook_id: type: integer title: Webhook Id book: type: string title: Book default: any direction: type: string title: Direction default: any_cross match_mode: type: string title: Match Mode default: any_book cooldown_seconds: type: integer title: Cooldown Seconds default: 300 expires_at: anyOf: - type: string - type: 'null' title: Expires At event_id: anyOf: - type: string - type: 'null' title: Event Id type: object required: - sport_key - player_name - market_key - threshold_line - webhook_id title: AlertCreate 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.'