{"openapi":"3.1.0","info":{"title":"Lumify Sports Intelligence API","description":"\nLumify is an agent-ready sports intelligence API: schedules, live scores, odds,\npublic betting splits, and AI-powered bet intelligence (confidence scores,\nsignal breakdowns, and LLM-generated narratives) across MLB, tennis, soccer\n(FIFA World Cup + MLS, EPL, La Liga, Serie A, Bundesliga, Ligue 1, and UEFA\nChampions League), NFL, NCAAF, NCAAB, NBA, and NHL.\n\n## Authentication\nAll `/v1/*` endpoints require a Bearer API key:\n\n    Authorization: Bearer lmfy-xxxxxx.yyyyyyyy...\n\nCreate an account and first key in the [dashboard](https://lumify.ai/api-keys);\nsubsequent keys and credit top-ups are available via `/api/agent/*`. Errors follow a\nsingle [envelope](https://lumify.ai/docs/reference#error-codes) with a machine-readable\n`error.code`. Exhausted credits return `402` (`insufficient_credits` or\n`daily_credit_cap_exceeded`) — not `401`. Responses include\n`X-RateLimit-*` and `X-Credits-*` headers.\n\n## For AI agents\n- Machine reference: [/llms.txt](https://lumify.ai/llms.txt) and\n  [/llms-full.txt](https://lumify.ai/llms-full.txt)\n- Model Context Protocol server: connect to `https://lumify.ai/mcp`\n- OpenAPI schema: [/openapi.json](https://lumify.ai/openapi.json)\n","contact":{"name":"Lumify Support","url":"https://lumify.ai/contact-us","email":"support@lumify.ai"},"license":{"name":"Terms of Service","url":"https://lumify.ai/terms-of-service"},"version":"1.0.0"},"paths":{"/v1/health":{"get":{"tags":["health"],"summary":"Health","operationId":"health_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/login":{"get":{"tags":["auth"],"summary":"Login Page","operationId":"login_page_login_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"tags":["auth"],"summary":"Login Submit","operationId":"login_submit_login_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_login_submit_login_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/logout":{"get":{"tags":["auth"],"summary":"Logout","operationId":"logout_logout_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/register":{"get":{"tags":["auth"],"summary":"Register Page","operationId":"register_page_register_get","parameters":[{"name":"plan","in":"query","required":false,"schema":{"type":"string","default":"","title":"Plan"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["auth"],"summary":"Register Submit","operationId":"register_submit_register_post","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_register_submit_register_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/forgot-password":{"get":{"tags":["auth"],"summary":"Forgot Password Page","operationId":"forgot_password_page_forgot_password_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"tags":["auth"],"summary":"Forgot Password Submit","operationId":"forgot_password_submit_forgot_password_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_forgot_password_submit_forgot_password_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/reset-password":{"get":{"tags":["auth"],"summary":"Reset Password Page","operationId":"reset_password_page_reset_password_get","parameters":[{"name":"token","in":"query","required":false,"schema":{"type":"string","default":"","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["auth"],"summary":"Reset Password Submit","operationId":"reset_password_submit_reset_password_post","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_reset_password_submit_reset_password_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/verify-email":{"get":{"tags":["auth"],"summary":"Verify Email","operationId":"verify_email_verify_email_get","parameters":[{"name":"token","in":"query","required":false,"schema":{"type":"string","default":"","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/resend-verification":{"post":{"tags":["auth"],"summary":"Resend Verification","operationId":"resend_verification_resend_verification_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/oauth/github/start":{"get":{"tags":["oauth"],"summary":"Github Oauth Start","description":"Begin the GitHub star verification flow.","operationId":"github_oauth_start_oauth_github_start_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/oauth/github/callback":{"get":{"tags":["oauth"],"summary":"Github Oauth Callback","description":"Finish the GitHub star verification flow and grant the reward.\n\nSession is optional — customer_id comes from the signed state. If a\nsession *is* present it must match the state binding (defence in depth).","operationId":"github_oauth_callback_oauth_github_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"type":"string","default":"","title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"","title":"State"}},{"name":"error","in":"query","required":false,"schema":{"type":"string","default":"","title":"Error"}},{"name":"error_description","in":"query","required":false,"schema":{"type":"string","default":"","title":"Error Description"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard":{"get":{"tags":["app"],"summary":"Dashboard","operationId":"dashboard_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/account":{"get":{"tags":["app"],"summary":"Account Page","operationId":"account_page_account_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/account/profile":{"post":{"tags":["app"],"summary":"Account Profile Update","operationId":"account_profile_update_account_profile_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_account_profile_update_account_profile_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/account/password":{"post":{"tags":["app"],"summary":"Account Password Change","operationId":"account_password_change_account_password_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_account_password_change_account_password_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api-keys":{"get":{"tags":["app"],"summary":"Api Keys Page","operationId":"api_keys_page_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"tags":["app"],"summary":"Api Key Create","operationId":"api_key_create_api_keys_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_api_key_create_api_keys_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api-keys/{key_id}/reveal":{"get":{"tags":["app"],"summary":"Api Key Reveal","operationId":"api_key_reveal_api_keys__key_id__reveal_get","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api-keys/{key_id}/revoke":{"post":{"tags":["app"],"summary":"Api Key Revoke","operationId":"api_key_revoke_api_keys__key_id__revoke_post","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing":{"get":{"tags":["app"],"summary":"Billing Page","operationId":"billing_page_billing_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/billing/invoices/{invoice_id}/receipt":{"get":{"tags":["app"],"summary":"Billing Invoice Receipt","description":"Stream the Stripe invoice PDF as a direct download (no redirect tab).","operationId":"billing_invoice_receipt_billing_invoices__invoice_id__receipt_get","parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"integer","title":"Invoice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/auto-recharge":{"post":{"tags":["app"],"summary":"Billing Auto Recharge","operationId":"billing_auto_recharge_billing_auto_recharge_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_billing_auto_recharge_billing_auto_recharge_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/subscribe":{"post":{"tags":["app"],"summary":"Billing Subscribe","operationId":"billing_subscribe_billing_subscribe_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_billing_subscribe_billing_subscribe_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/setup-intent":{"post":{"tags":["app"],"summary":"Billing Setup Intent","operationId":"billing_setup_intent_billing_setup_intent_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/billing/payment-method":{"post":{"tags":["app"],"summary":"Billing Attach Payment Method","operationId":"billing_attach_payment_method_billing_payment_method_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/billing/cancel":{"post":{"tags":["app"],"summary":"Billing Cancel Subscription","operationId":"billing_cancel_subscription_billing_cancel_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/billing/payment-method/remove":{"post":{"tags":["app"],"summary":"Billing Remove Payment Method","operationId":"billing_remove_payment_method_billing_payment_method_remove_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/billing/coupon":{"post":{"tags":["app"],"summary":"Billing Apply Coupon","operationId":"billing_apply_coupon_billing_coupon_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_billing_apply_coupon_billing_coupon_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/portal":{"get":{"tags":["app"],"summary":"Billing Portal","operationId":"billing_portal_billing_portal_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/usage":{"get":{"tags":["app"],"summary":"Usage Page","operationId":"usage_page_usage_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"","title":"Status"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}},{"name":"key_id","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/analytics":{"get":{"tags":["app"],"summary":"Analytics Page","operationId":"analytics_page_analytics_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/playground":{"get":{"tags":["app"],"summary":"Playground Page","operationId":"playground_page_playground_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/onboarding/docs-visit":{"post":{"tags":["app"],"summary":"Onboarding Docs Visit","description":"Grant the +50 docs_visit reward when a logged-in user loads /docs*.\n\nFired by an authenticated keepalive fetch from the docs templates\n(public/partials/_docs_scripts.html). This route has no rate limit of\nits own (session-authenticated requests bypass RateLimitMiddleware\nentirely, same as every other browser-session route), and the\nsessionStorage dedup on the client is only a soft, per-tab hint — a new\ntab, cleared storage, or incognito all cause a fresh beacon. So we\npre-check status via get_progress() and short-circuit before ever\ncalling grant_reward(): once granted, a repeat beacon costs one cheap\nSELECT instead of a doomed INSERT + rollback + diagnostic SELECT.","operationId":"onboarding_docs_visit_onboarding_docs_visit_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/users":{"get":{"tags":["admin"],"summary":"Admin Users","operationId":"admin_users_admin_users_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"role","in":"query","required":false,"schema":{"type":"string","default":"","title":"Role"}},{"name":"active","in":"query","required":false,"schema":{"type":"string","default":"","title":"Active"}},{"name":"employee","in":"query","required":false,"schema":{"type":"string","default":"","title":"Employee"}},{"name":"msg","in":"query","required":false,"schema":{"type":"string","default":"","title":"Msg"}},{"name":"msg_type","in":"query","required":false,"schema":{"type":"string","default":"success","title":"Msg Type"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/detail":{"get":{"tags":["admin"],"summary":"Admin User Detail","operationId":"admin_user_detail_admin_users__user_id__detail_get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/revoke-sessions":{"post":{"tags":["admin"],"summary":"Admin User Revoke Sessions","operationId":"admin_user_revoke_sessions_admin_users__user_id__revoke_sessions_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/password-reset":{"post":{"tags":["admin"],"summary":"Admin User Password Reset","description":"Admin-initiated password reset — sends reset email regardless of user status.","operationId":"admin_user_password_reset_admin_users__user_id__password_reset_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/resend-verification":{"post":{"tags":["admin"],"summary":"Admin User Resend Verification","description":"Admin-initiated resend of the signup verification email.","operationId":"admin_user_resend_verification_admin_users__user_id__resend_verification_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/delete":{"post":{"tags":["admin"],"summary":"Admin User Delete","description":"Permanently delete a user, their sessions, and deactivate their API keys.","operationId":"admin_user_delete_admin_users__user_id__delete_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/staff":{"post":{"tags":["admin"],"summary":"Admin User Staff Toggle","description":"Grant or revoke Lumify staff (admin) access for a user.","operationId":"admin_user_staff_toggle_admin_users__user_id__staff_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_user_staff_toggle_admin_users__user_id__staff_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/rate-limit":{"post":{"tags":["admin"],"summary":"Admin User Rate Limit","description":"Set or clear a subscription-level rate limit override (req/min) for a user's account.","operationId":"admin_user_rate_limit_admin_users__user_id__rate_limit_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_user_rate_limit_admin_users__user_id__rate_limit_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/role":{"post":{"tags":["admin"],"summary":"Admin User Role","operationId":"admin_user_role_admin_users__user_id__role_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_user_role_admin_users__user_id__role_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/toggle":{"post":{"tags":["admin"],"summary":"Admin User Toggle","operationId":"admin_user_toggle_admin_users__user_id__toggle_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_user_toggle_admin_users__user_id__toggle_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/coupons":{"get":{"tags":["admin"],"summary":"Admin Coupons","operationId":"admin_coupons_admin_coupons_get","parameters":[{"name":"msg","in":"query","required":false,"schema":{"type":"string","default":"","title":"Msg"}},{"name":"msg_type","in":"query","required":false,"schema":{"type":"string","default":"success","title":"Msg Type"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/coupons/create":{"post":{"tags":["admin"],"summary":"Admin Coupon Create","operationId":"admin_coupon_create_admin_coupons_create_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_coupon_create_admin_coupons_create_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/coupons/{coupon_id}/toggle":{"post":{"tags":["admin"],"summary":"Admin Coupon Toggle","operationId":"admin_coupon_toggle_admin_coupons__coupon_id__toggle_post","parameters":[{"name":"coupon_id","in":"path","required":true,"schema":{"type":"integer","title":"Coupon Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/coupons/{coupon_id}/delete":{"post":{"tags":["admin"],"summary":"Admin Coupon Delete","operationId":"admin_coupon_delete_admin_coupons__coupon_id__delete_post","parameters":[{"name":"coupon_id","in":"path","required":true,"schema":{"type":"integer","title":"Coupon Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/security":{"get":{"tags":["admin"],"summary":"Admin Security","operationId":"admin_security_admin_security_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"severity","in":"query","required":false,"schema":{"type":"string","default":"","title":"Severity"}},{"name":"event_type","in":"query","required":false,"schema":{"type":"string","default":"","title":"Event Type"}},{"name":"ip","in":"query","required":false,"schema":{"type":"string","default":"","title":"Ip"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/plans":{"get":{"tags":["admin"],"summary":"Admin Plans","operationId":"admin_plans_admin_plans_get","parameters":[{"name":"msg","in":"query","required":false,"schema":{"type":"string","default":"","title":"Msg"}},{"name":"msg_type","in":"query","required":false,"schema":{"type":"string","default":"success","title":"Msg Type"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/plans/{plan_id}/update":{"post":{"tags":["admin"],"summary":"Admin Plans Update","operationId":"admin_plans_update_admin_plans__plan_id__update_post","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"integer","title":"Plan Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_plans_update_admin_plans__plan_id__update_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/plans/{plan_id}/delete":{"post":{"tags":["admin"],"summary":"Admin Plans Delete","operationId":"admin_plans_delete_admin_plans__plan_id__delete_post","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"integer","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/settings":{"get":{"tags":["admin"],"summary":"Admin Settings","operationId":"admin_settings_admin_settings_get","parameters":[{"name":"msg","in":"query","required":false,"schema":{"type":"string","default":"","title":"Msg"}},{"name":"msg_type","in":"query","required":false,"schema":{"type":"string","default":"success","title":"Msg Type"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/settings/free-trial-daily-cap":{"post":{"tags":["admin"],"summary":"Admin Update Free Trial Daily Cap","description":"Update the free-trial rolling-24h daily credit cap (system_settings).\n\nMirrors the hot-update pattern documented in core/billing/spend_caps.py —\nthis UPDATEs the same row that a manual SQL statement would, just from the\nadmin UI instead of a SQL client.","operationId":"admin_update_free_trial_daily_cap_admin_settings_free_trial_daily_cap_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_update_free_trial_daily_cap_admin_settings_free_trial_daily_cap_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/customers":{"get":{"tags":["admin"],"summary":"Admin Customers","operationId":"admin_customers_admin_customers_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"tier","in":"query","required":false,"schema":{"type":"string","default":"","title":"Tier"}},{"name":"verified","in":"query","required":false,"schema":{"type":"string","default":"","title":"Verified"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/customers/{customer_id}/detail":{"get":{"tags":["admin"],"summary":"Admin Customer Detail","operationId":"admin_customer_detail_admin_customers__customer_id__detail_get","parameters":[{"name":"customer_id","in":"path","required":true,"schema":{"type":"integer","title":"Customer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/customers/{customer_id}/entitlements":{"post":{"tags":["admin"],"summary":"Admin Customer Entitlements","operationId":"admin_customer_entitlements_admin_customers__customer_id__entitlements_post","parameters":[{"name":"customer_id","in":"path","required":true,"schema":{"type":"integer","title":"Customer Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_customer_entitlements_admin_customers__customer_id__entitlements_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/customers/{customer_id}/resend-verification":{"post":{"tags":["admin"],"summary":"Admin Customer Resend Verification","description":"Resend the signup verification email to a customer's owning user.\n\nJSON in/out (unlike the Users-page equivalent) because this is invoked\nfrom the Customer detail offcanvas via fetch(), the same pattern already\nused there for the rate-limit override save/clear actions.","operationId":"admin_customer_resend_verification_admin_customers__customer_id__resend_verification_post","parameters":[{"name":"customer_id","in":"path","required":true,"schema":{"type":"integer","title":"Customer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/customers/{customer_id}/delete":{"post":{"tags":["admin"],"summary":"Admin Customer Delete","description":"Soft-delete a customer and cascade: soft-delete users, cancel subscriptions, deactivate API keys.","operationId":"admin_customer_delete_admin_customers__customer_id__delete_post","parameters":[{"name":"customer_id","in":"path","required":true,"schema":{"type":"integer","title":"Customer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/usage":{"get":{"tags":["admin"],"summary":"Admin Usage","operationId":"admin_usage_admin_usage_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}},{"name":"customer_id","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Customer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/usage/customer-errors":{"get":{"tags":["admin"],"summary":"Admin Usage Customer Errors","description":"Recent failed calls for one customer — the drill-down behind the Top\nCustomers by Volume error counts, so \"3 errors\" is diagnosable without a\ndatabase console: which endpoint, what status, and when.\n\nEverything here — the status-code breakdown and the row list — is scoped\nto a single customer_id and only runs when an admin actually clicks an\nerror count, so page load never pays for it across every customer.","operationId":"admin_usage_customer_errors_admin_usage_customer_errors_get","parameters":[{"name":"customer_id","in":"query","required":true,"schema":{"type":"integer","title":"Customer Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/onboarding-rewards":{"get":{"tags":["admin"],"summary":"Admin Onboarding Rewards","description":"Platform-wide onboarding reward grants, stuck pending rows, abuse flags.","operationId":"admin_onboarding_rewards_admin_onboarding_rewards_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/performance":{"get":{"tags":["admin"],"summary":"Admin Performance","operationId":"admin_performance_admin_performance_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":28,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing":{"get":{"tags":["admin"],"summary":"Admin Pricing","operationId":"admin_pricing_admin_pricing_get","parameters":[{"name":"msg","in":"query","required":false,"schema":{"type":"string","default":"","title":"Msg"}},{"name":"msg_type","in":"query","required":false,"schema":{"type":"string","default":"success","title":"Msg Type"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/create":{"post":{"tags":["admin"],"summary":"Admin Pricing Create","operationId":"admin_pricing_create_admin_pricing_create_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_pricing_create_admin_pricing_create_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/{config_id}/toggle":{"post":{"tags":["admin"],"summary":"Admin Pricing Toggle","operationId":"admin_pricing_toggle_admin_pricing__config_id__toggle_post","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"integer","title":"Config Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/{config_id}/update":{"post":{"tags":["admin"],"summary":"Admin Pricing Update","operationId":"admin_pricing_update_admin_pricing__config_id__update_post","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"integer","title":"Config Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_pricing_update_admin_pricing__config_id__update_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/actuals/save":{"post":{"tags":["admin"],"summary":"Admin Pricing Actuals Save","description":"Save or update an actual invoice amount for a vendor/month.","operationId":"admin_pricing_actuals_save_admin_pricing_actuals_save_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_pricing_actuals_save_admin_pricing_actuals_save_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/sports-schedule":{"get":{"tags":["admin"],"summary":"Admin Sports Schedule","operationId":"admin_sports_schedule_admin_sports_schedule_get","parameters":[{"name":"sport","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Sport"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"","title":"Status"}},{"name":"week","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Week"}},{"name":"view","in":"query","required":false,"schema":{"type":"string","default":"week","title":"View"}},{"name":"day","in":"query","required":false,"schema":{"type":"string","default":"","title":"Day"}},{"name":"tz_offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Tz Offset"}},{"name":"partial","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Partial"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/events/{event_id}/intelligence":{"get":{"tags":["admin"],"summary":"Admin Event Intelligence","description":"Return the exact same payload as GET /v1/events/{id}/intelligence.\n\nUsed by the admin sports schedule page so the intel modal reflects what\nAPI clients actually receive, rather than a raw DB snapshot.\nSupports ?bookmaker= to overlay a different book's current odds prices.\nRequires admin session auth — no API key needed.","operationId":"admin_event_intelligence_admin_events__event_id__intelligence_get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}},{"name":"bookmaker","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bookmaker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/events/{event_id}/odds":{"get":{"tags":["admin"],"summary":"Admin Event Odds","description":"Return the same payload as GET /v1/events/{id}/odds (no API key required).","operationId":"admin_event_odds_admin_events__event_id__odds_get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/events/{event_id}/splits":{"get":{"tags":["admin"],"summary":"Admin Event Splits","description":"Return the exact same payload as GET /v1/events/{id}/splits.\n\nUsed by the admin sports schedule page so the splits modal panel reflects\nwhat API clients actually receive.  Requires admin session auth.","operationId":"admin_event_splits_admin_events__event_id__splits_get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/job-health":{"get":{"tags":["admin"],"summary":"Admin Job Health","description":"Sport-by-sport job health board with attention, findings, and coverage gaps.","operationId":"admin_job_health_admin_job_health_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/job-health/status.json":{"get":{"tags":["admin"],"summary":"Admin Job Health Status","description":"JSON snapshot for auto-refresh of the sport health grid.","operationId":"admin_job_health_status_admin_job_health_status_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/backtest":{"get":{"tags":["admin"],"summary":"Admin Backtest","description":"Backtest results dashboard — model accuracy and P&L by sport/bet type.","operationId":"admin_backtest_admin_backtest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"tags":["public"],"summary":"Home","operationId":"home__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/pricing":{"get":{"tags":["public"],"summary":"Pricing","operationId":"pricing_pricing_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/quickstart":{"get":{"tags":["public"],"summary":"Docs Quickstart","operationId":"docs_quickstart_quickstart_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs":{"get":{"tags":["public"],"summary":"Docs","operationId":"docs_docs_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/docs/guides":{"get":{"tags":["public"],"summary":"Docs Guides","operationId":"docs_guides_docs_guides_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/docs/ai":{"get":{"tags":["public"],"summary":"Docs Ai","operationId":"docs_ai_docs_ai_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/docs/reference":{"get":{"tags":["public"],"summary":"Docs Reference","operationId":"docs_reference_docs_reference_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/faq":{"get":{"tags":["public"],"summary":"Faq","operationId":"faq_faq_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/contact-us":{"get":{"tags":["public"],"summary":"Contact Page","operationId":"contact_page_contact_us_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"tags":["public"],"summary":"Contact Submit","operationId":"contact_submit_contact_us_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_contact_submit_contact_us_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/newsletter-signup":{"post":{"tags":["public"],"summary":"Newsletter Signup","description":"Lightweight, lower-commitment lead capture from the homepage.\n\nMirrors contact_submit: no DB table, just an email notification. Always\nreports success to the caller so we don't leak backend failures into the\nUI for what is a low-stakes marketing form.","operationId":"newsletter_signup_newsletter_signup_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_newsletter_signup_newsletter_signup_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/terms-of-service":{"get":{"tags":["public"],"summary":"Terms","operationId":"terms_terms_of_service_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/privacy-policy":{"get":{"tags":["public"],"summary":"Privacy","operationId":"privacy_privacy_policy_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/404":{"get":{"tags":["public"],"summary":"Not Found Page","operationId":"not_found_page_404_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/webhooks/stripe":{"post":{"tags":["webhooks"],"summary":"Stripe Webhook","operationId":"stripe_webhook_api_webhooks_stripe_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/webhooks/gcp-job-alert":{"post":{"tags":["webhooks"],"summary":"Gcp Job Alert","operationId":"gcp_job_alert_api_webhooks_gcp_job_alert_post","parameters":[{"name":"token","in":"query","required":false,"schema":{"type":"string","default":"","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sports":{"get":{"tags":["sports"],"summary":"List sports","operationId":"list_sports_v1_sports_get","parameters":[{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","description":"Return only active sports (default true)","default":true,"title":"Active Only"},"description":"Return only active sports (default true)"}],"responses":{"200":{"description":"Active sports with their leagues and current season summary","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SportsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/v1/seasons":{"get":{"tags":["sports"],"summary":"List seasons","operationId":"list_seasons_v1_seasons_get","parameters":[{"name":"sport","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by sport slug (e.g. nhl, nba, soccer)","title":"Sport"},"description":"Filter by sport slug (e.g. nhl, nba, soccer)"},{"name":"current_only","in":"query","required":false,"schema":{"type":"boolean","description":"Return only currently active seasons","default":false,"title":"Current Only"},"description":"Return only currently active seasons"}],"responses":{"200":{"description":"Seasons per sport/league, optionally filtered","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeasonsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/v1/events":{"get":{"tags":["events"],"summary":"List events","operationId":"list_events_v1_events_get","parameters":[{"name":"sport","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sport slug: nfl, nba, mlb, nhl, tennis, soccer…","title":"Sport"},"description":"Sport slug: nfl, nba, mlb, nhl, tennis, soccer…"},{"name":"league","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"League slug: nfl, nba, atp, fifa_world_cup…","title":"League"},"description":"League slug: nfl, nba, atp, fifa_world_cup…"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Event status: scheduled|inprogress|final|…","title":"Status"},"description":"Event status: scheduled|inprogress|final|…"},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"UTC date YYYY-MM-DD (single day)","title":"Date"},"description":"UTC date YYYY-MM-DD (single day)"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"UTC start date YYYY-MM-DD","title":"From"},"description":"UTC start date YYYY-MM-DD"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"UTC end date YYYY-MM-DD (inclusive)","title":"To"},"description":"UTC end date YYYY-MM-DD (inclusive)"},{"name":"season_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by season ID","title":"Season Id"},"description":"Filter by season ID"},{"name":"team_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter to events where this team participates. Resolve ids via GET /v1/teams?q=…","title":"Team Id"},"description":"Filter to events where this team participates. Resolve ids via GET /v1/teams?q=…"},{"name":"after_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Cursor: return events with id > after_id","title":"After Id"},"description":"Cursor: return events with id > after_id"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"include_scores","in":"query","required":false,"schema":{"type":"boolean","description":"Inline participants + scores in each event. Intended for small result sets (≤ 200 events).","default":false,"title":"Include Scores"},"description":"Inline participants + scores in each event. Intended for small result sets (≤ 200 events)."},{"name":"has_recommend","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"When true, return only events with at least one recommended bet (has_recommend=1 in intelligence). Requires intelligence pipeline to have run.","title":"Has Recommend"},"description":"When true, return only events with at least one recommended bet (has_recommend=1 in intelligence). Requires intelligence pipeline to have run."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"Sort order: 'time' (chronological, default) or 'status' (Live → Delayed/Upcoming → Final → Cancelled/Postponed). Cursor pagination (after_id) is not supported with sort=status.","default":"time","title":"Sort"},"description":"Sort order: 'time' (chronological, default) or 'status' (Live → Delayed/Upcoming → Final → Cancelled/Postponed). Cursor pagination (after_id) is not supported with sort=status."}],"responses":{"200":{"description":"Paginated event list, newest first within the requested window","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Events V1 Events Get","$ref":"#/components/schemas/EventListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/v1/events/{event_id}":{"get":{"tags":["events"],"summary":"Get an event","operationId":"get_event_v1_events__event_id__get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","description":"Lumify event ID","title":"Event Id"},"description":"Lumify event ID"},{"name":"include_odds","in":"query","required":false,"schema":{"type":"boolean","description":"Inline current odds (all bookmakers) into the response under the 'odds' key. Costs +1 credit (total 2 for this call).","default":false,"title":"Include Odds"},"description":"Inline current odds (all bookmakers) into the response under the 'odds' key. Costs +1 credit (total 2 for this call)."},{"name":"include_intelligence","in":"query","required":false,"schema":{"type":"boolean","description":"Inline bet intelligence (signals, bets, narratives) into the response under the 'intelligence' key. Costs +1 credit (total 2 for this call).","default":false,"title":"Include Intelligence"},"description":"Inline bet intelligence (signals, bets, narratives) into the response under the 'intelligence' key. Costs +1 credit (total 2 for this call)."},{"name":"bookmaker","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bookmaker to use for market prices in intelligence.bets[].market when include_intelligence=true. Valid values: pinnacle, fanduel, draftkings.","title":"Bookmaker"},"description":"Bookmaker to use for market prices in intelligence.bets[].market when include_intelligence=true. Valid values: pinnacle, fanduel, draftkings."}],"responses":{"200":{"description":"Full event with participants, venue, and schedule metadata","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Event V1 Events  Event Id  Get","$ref":"#/components/schemas/EventDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/v1/events/batch":{"post":{"tags":["events"],"summary":"Get multiple events in one call","description":"Fetch multiple events by id in a single round-trip — for agents that\nalready have a list of ids (e.g. from GET /v1/events) and want full detail\nfor each without issuing one GET per event.\n\nBody: {\"event_ids\": [1, 2, 3], \"include_odds\": bool, \"include_intelligence\": bool, \"bookmaker\": str}\nMax 25 ids per call. Duplicate ids are billed once. Credits are the sum of\neach event's normal GET /v1/events/{id} cost — billing fairness applies\nper event (unavailable odds/intelligence are free; ids that don't exist\ncost nothing and are returned under \"not_found\").","operationId":"batch_get_events_v1_events_batch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchEventsRequest"}}},"required":true},"responses":{"200":{"description":"Requested events (each shaped like GET /v1/events/{id}) plus any ids not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchEventsResponse","additionalProperties":true,"type":"object","title":"Response Batch Get Events V1 Events Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/v1/query":{"post":{"tags":["events"],"summary":"Natural-language event search","description":"Map a natural-language query to the same filters GET /v1/events accepts,\nthen run that exact list query — results are identical to, and as fresh\nas, calling /v1/events directly. This is a small rule-based mapper, not an\nLLM call — see the module-level `_parse_nl_query` docstring for exactly\nwhat it recognizes.\n\nBody: {\"query\": \"live nfl games today\", \"limit\": 25}\nAn explicit top-level \"limit\" overrides one parsed from the text. Costs 1\ncredit, same as GET /v1/events — interpreting the query text is free.","operationId":"query_events_v1_query_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NLQueryRequest"}}},"required":true},"responses":{"200":{"description":"Events matching the parsed query, the interpreted filters, and their REST equivalent","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NLQueryResponse","additionalProperties":true,"type":"object","title":"Response Query Events V1 Query Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/v1/events/{event_id}/score":{"get":{"tags":["events"],"summary":"Get an event's score","operationId":"get_event_score_v1_events__event_id__score_get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","description":"Lumify event ID","title":"Event Id"},"description":"Lumify event ID"}],"responses":{"200":{"description":"Lightweight score snapshot: status, period, clock, and per-participant scores. Cache TTL is 30 s for in-progress events, 5 min otherwise.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Event Score V1 Events  Event Id  Score Get","$ref":"#/components/schemas/ScoreResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/v1/events/{event_id}/intelligence":{"get":{"tags":["events"],"summary":"Get bet intelligence for an event","operationId":"get_event_intelligence_v1_events__event_id__intelligence_get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","description":"Lumify event ID","title":"Event Id"},"description":"Lumify event ID"},{"name":"bookmaker","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bookmaker to use for market.price and market.line in the response. Overrides the system default (pinnacle). Valid values: pinnacle, fanduel, draftkings.","title":"Bookmaker"},"description":"Bookmaker to use for market.price and market.line in the response. Overrides the system default (pinnacle). Valid values: pinnacle, fanduel, draftkings."}],"responses":{"200":{"description":"Confidence scores, signal breakdowns, narratives, and market odds for all bet tokens. MLB tokens: ML_P1 (home), ML_P2 (away), SPREAD_P1, SPREAD_P2, OVER, UNDER. Tennis tokens: ML_P1, ML_P2, SPREAD_P1, SPREAD_P2, OVER, UNDER. Soccer tokens: ML_HOME, ML_AWAY, ML_DRAW, SPREAD_HOME, SPREAD_AWAY, OVER, UNDER. Also includes event-level analyst take and match overview from the lumify_match_intelligence table. If no intelligence has been computed for this event yet, returns 200 with available=false and is NOT charged (X-Credits-Used: 0).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Event Intelligence V1 Events  Event Id  Intelligence Get","$ref":"#/components/schemas/IntelligenceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/v1/events/{event_id}/odds":{"get":{"tags":["events"],"summary":"Get current betting odds for an event","operationId":"get_event_odds_v1_events__event_id__odds_get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","description":"Lumify event ID","title":"Event Id"},"description":"Lumify event ID"},{"name":"bookmaker","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bookmaker filter. Default: pinnacle. Use 'all' or a comma-separated list (e.g. 'fanduel,draftkings') for multiple books. Single book = 1 credit; multiple or 'all' = 2 credits.","title":"Bookmaker"},"description":"Bookmaker filter. Default: pinnacle. Use 'all' or a comma-separated list (e.g. 'fanduel,draftkings') for multiple books. Single book = 1 credit; multiple or 'all' = 2 credits."}],"responses":{"200":{"description":"Current moneyline, spread, and total lines for the requested bookmaker(s). Default is Pinnacle only (1 credit). Use bookmaker=all or a comma-separated list (e.g. bookmaker=fanduel,draftkings) to fetch multiple books (2 credits). Markets are grouped by type (h2h → moneyline, spreads → spread, totals → totals). If no odds have been ingested for this event yet, returns 200 with available=false and is NOT charged (X-Credits-Used: 0).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Event Odds V1 Events  Event Id  Odds Get","$ref":"#/components/schemas/OddsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/v1/events/{event_id}/odds/history":{"get":{"tags":["events"],"summary":"Get line movement history for an event","operationId":"get_event_odds_history_v1_events__event_id__odds_history_get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","description":"Lumify event ID","title":"Event Id"},"description":"Lumify event ID"},{"name":"bookmaker","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bookmaker filter. Default: pinnacle. Use 'all' or a comma-separated list for multiple books. Single book = 1 credit; multiple or 'all' = 2 credits.","title":"Bookmaker"},"description":"Bookmaker filter. Default: pinnacle. Use 'all' or a comma-separated list for multiple books. Single book = 1 credit; multiple or 'all' = 2 credits."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max movements to return","default":50,"title":"Limit"},"description":"Max movements to return"}],"responses":{"200":{"description":"All recorded line movements (price or point changes) for the event, ordered newest-first. Useful for detecting sharp line movement. If no movement has been recorded for this event yet, returns 200 with an empty movements list and is NOT charged (X-Credits-Used: 0).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Event Odds History V1 Events  Event Id  Odds History Get","$ref":"#/components/schemas/OddsHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/v1/events/{event_id}/splits":{"get":{"tags":["events"],"summary":"Get public betting splits for an event","operationId":"get_event_splits_v1_events__event_id__splits_get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","description":"Lumify event ID","title":"Event Id"},"description":"Lumify event ID"}],"responses":{"200":{"description":"Public bets% and handle% per side, per market, per bookmaker. Also includes a consensus (average across books) for quick use. If no splits have been ingested for this event yet, returns 200 with available=false and is NOT charged (X-Credits-Used: 0).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Event Splits V1 Events  Event Id  Splits Get","$ref":"#/components/schemas/SplitsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/v1/players":{"get":{"tags":["players"],"summary":"List players","operationId":"list_players_v1_players_get","parameters":[{"name":"sport","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sport slug, e.g. 'tennis' or 'mlb'","title":"Sport"},"description":"Sport slug, e.g. 'tennis' or 'mlb'"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name search (partial match)","title":"Q"},"description":"Name search (partial match)"},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 3166-1 alpha-3 country code, e.g. 'USA'","title":"Country"},"description":"ISO 3166-1 alpha-3 country code, e.g. 'USA'"},{"name":"active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by active status","title":"Active"},"description":"Filter by active status"},{"name":"ranked","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"If true, only players with a tennis ranking","title":"Ranked"},"description":"If true, only players with a tennis ranking"},{"name":"after_id","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Cursor: last player id from previous page","default":0,"title":"After Id"},"description":"Cursor: last player id from previous page"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlayersListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/v1/players/{player_id}":{"get":{"tags":["players"],"summary":"Get a player","operationId":"get_player_v1_players__player_id__get","parameters":[{"name":"player_id","in":"path","required":true,"schema":{"type":"integer","minimum":1,"title":"Player Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Player"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/v1/players/{player_id}/events":{"get":{"tags":["players"],"summary":"List a player's events","operationId":"get_player_events_v1_players__player_id__events_get","parameters":[{"name":"player_id","in":"path","required":true,"schema":{"type":"integer","minimum":1,"title":"Player Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Event status filter","title":"Status"},"description":"Event status filter"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Start date YYYY-MM-DD","title":"From"},"description":"Start date YYYY-MM-DD"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"End date YYYY-MM-DD","title":"To"},"description":"End date YYYY-MM-DD"},{"name":"after_id","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Cursor: last event id from previous page","default":0,"title":"After Id"},"description":"Cursor: last event id from previous page"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlayerEventsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/v1/teams":{"get":{"tags":["teams"],"summary":"List teams","operationId":"list_teams_v1_teams_get","parameters":[{"name":"sport","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sport slug, e.g. 'nba' or 'nhl'","title":"Sport"},"description":"Sport slug, e.g. 'nba' or 'nhl'"},{"name":"league","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"League slug, e.g. 'nba'","title":"League"},"description":"League slug, e.g. 'nba'"},{"name":"conference","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Conference filter","title":"Conference"},"description":"Conference filter"},{"name":"division","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Division filter","title":"Division"},"description":"Division filter"},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO country code, e.g. 'USA'","title":"Country"},"description":"ISO country code, e.g. 'USA'"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Team name search (partial match)","title":"Q"},"description":"Team name search (partial match)"},{"name":"active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by active status","title":"Active"},"description":"Filter by active status"},{"name":"after_id","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Cursor: last team id from previous page","default":0,"title":"After Id"},"description":"Cursor: last team id from previous page"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}}],"responses":{"200":{"description":"Paginated team list, filterable by sport/league/conference/division/country.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/v1/teams/{team_id}":{"get":{"tags":["teams"],"summary":"Get a team","operationId":"get_team_v1_teams__team_id__get","parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"Lumify team ID","title":"Team Id"},"description":"Lumify team ID"}],"responses":{"200":{"description":"Team profile with home venue.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Team"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/v1/events/{event_id}/stream":{"get":{"tags":["events"],"summary":"Stream live score updates (SSE)","operationId":"stream_event_score_v1_events__event_id__stream_get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","description":"Lumify event ID","title":"Event Id"},"description":"Lumify event ID"}],"responses":{"200":{"description":"text/event-stream of score updates; emits on change only.","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/v1/webhooks":{"get":{"tags":["events","events"],"summary":"List webhook subscriptions","operationId":"list_webhooks_v1_webhooks_get","responses":{"200":{"description":"The caller's webhook subscriptions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookListResponse"}}}}},"security":[{"ApiKeyBearer":[]}]},"post":{"tags":["events","events"],"summary":"Create a webhook subscription","operationId":"create_webhook_v1_webhooks_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"The created webhook subscription.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/v1/webhooks/{subscription_id}":{"delete":{"tags":["events","events"],"summary":"Delete a webhook subscription","operationId":"delete_webhook_v1_webhooks__subscription_id__delete","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"integer","minimum":1,"title":"Subscription Id"}}],"responses":{"200":{"description":"Deletion result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDeleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/v1/trial-key":{"post":{"tags":["trial"],"summary":"Issue an instant, unauthenticated trial API key","description":"Issues a throwaway API key with no signup or email verification — 100 lifetime credits, 14-day expiry, one per network per 7 days. Requires a valid Cloudflare Turnstile token. Intended for the 'Get instant trial key' button on /docs/ai, not for building a persistent integration — use /register for that.","operationId":"create_trial_key_v1_trial_key_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrialKeyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/keys":{"get":{"tags":["agent"],"summary":"List API keys","operationId":"get_keys_api_agent_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentApiKeyListResponse"}}}}},"security":[{"ApiKeyBearer":[]}]},"post":{"tags":["agent"],"summary":"Create an API key","operationId":"create_key_api_agent_keys_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentApiKey"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/api/agent/keys/{key_id}":{"delete":{"tags":["agent"],"summary":"Revoke an API key","operationId":"delete_key_api_agent_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","minimum":1,"title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentApiKeyRevokeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/api/agent/credits":{"get":{"tags":["agent"],"summary":"Get credit balance and usage","operationId":"get_credits_api_agent_credits_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentCreditsResponse"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/api/agent/credit-packs":{"get":{"tags":["agent"],"summary":"List purchasable credit packs","operationId":"get_credit_packs_api_agent_credit_packs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditPackListResponse"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/api/agent/credits/topup":{"post":{"tags":["agent"],"summary":"Purchase a credit pack","operationId":"topup_credits_api_agent_credits_topup_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditTopupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ApiKeyBearer":[]}]}},"/mcp":{"post":{"tags":["mcp","mcp"],"summary":"MCP JSON-RPC endpoint (streamable HTTP)","operationId":"mcp_rpc_mcp_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AgentApiKey":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"key_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key Prefix"},"scopes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scopes"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"last_used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used At"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key","description":"Full API key — returned once on create."}},"additionalProperties":true,"type":"object","title":"AgentApiKey"},"AgentApiKeyListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/AgentApiKey"},"type":"array","title":"Data","default":[]},"total":{"type":"integer","title":"Total","default":0}},"additionalProperties":true,"type":"object","title":"AgentApiKeyListResponse"},"AgentApiKeyRevokeResponse":{"properties":{"revoked":{"type":"boolean","title":"Revoked","default":true},"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"}},"additionalProperties":true,"type":"object","title":"AgentApiKeyRevokeResponse"},"AgentCreditsResponse":{"properties":{"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"credits_used":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Credits Used"},"credit_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Credit Limit"},"bonus_credits":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bonus Credits"},"total_remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Remaining"},"period_start":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period Start"},"period_end":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period End"},"is_trial":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Trial"},"is_trial_expired":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Trial Expired"}},"additionalProperties":true,"type":"object","title":"AgentCreditsResponse"},"BatchEventsRequest":{"properties":{"event_ids":{"items":{"type":"integer"},"type":"array","maxItems":25,"minItems":1,"title":"Event Ids","description":"Event ids to fetch (max 25). Duplicates are billed once."},"include_odds":{"type":"boolean","title":"Include Odds","description":"Inline current odds on each event (+1 credit per event when available).","default":false},"include_intelligence":{"type":"boolean","title":"Include Intelligence","description":"Inline bet intelligence on each event (+1 credit per event when available).","default":false},"bookmaker":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bookmaker","description":"Bookmaker for inlined odds; defaults to pinnacle, 'all' for every book."}},"additionalProperties":true,"type":"object","required":["event_ids"],"title":"BatchEventsRequest"},"BatchEventsResponse":{"properties":{"events":{"items":{"$ref":"#/components/schemas/EventDetail"},"type":"array","title":"Events","default":[]},"not_found":{"items":{"type":"integer"},"type":"array","title":"Not Found","description":"Requested event_ids that don't exist. Never billed.","default":[]},"total":{"type":"integer","title":"Total","default":0}},"additionalProperties":true,"type":"object","title":"BatchEventsResponse"},"BetIntelligence":{"properties":{"bet_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bet Type"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"confidence_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence Score"},"coverage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Coverage"},"market":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Market"},"signals":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Signals"},"validator":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Validator"},"narrative":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Narrative"},"rationale":{"items":{"type":"string"},"type":"array","title":"Rationale","default":[]},"attribution":{"items":{"type":"string"},"type":"array","title":"Attribution","default":[]}},"additionalProperties":true,"type":"object","title":"BetIntelligence"},"Body_account_password_change_account_password_post":{"properties":{"current_password":{"type":"string","title":"Current Password"},"new_password":{"type":"string","title":"New Password"},"new_password_confirm":{"type":"string","title":"New Password Confirm"}},"type":"object","required":["current_password","new_password","new_password_confirm"],"title":"Body_account_password_change_account_password_post"},"Body_account_profile_update_account_profile_post":{"properties":{"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"}},"type":"object","required":["first_name","last_name"],"title":"Body_account_profile_update_account_profile_post"},"Body_admin_coupon_create_admin_coupons_create_post":{"properties":{"code":{"type":"string","title":"Code"},"credit_amount":{"type":"integer","title":"Credit Amount"},"description":{"type":"string","title":"Description","default":""},"max_uses":{"type":"string","title":"Max Uses","default":""},"expires_at":{"type":"string","title":"Expires At","default":""}},"type":"object","required":["code","credit_amount"],"title":"Body_admin_coupon_create_admin_coupons_create_post"},"Body_admin_customer_entitlements_admin_customers__customer_id__entitlements_post":{"properties":{"tier":{"type":"string","title":"Tier"},"monthly_credit_limit":{"type":"integer","title":"Monthly Credit Limit"},"bonus_credits":{"type":"integer","title":"Bonus Credits","default":0}},"type":"object","required":["tier","monthly_credit_limit"],"title":"Body_admin_customer_entitlements_admin_customers__customer_id__entitlements_post"},"Body_admin_plans_update_admin_plans__plan_id__update_post":{"properties":{"display_name":{"type":"string","title":"Display Name","default":""},"description":{"type":"string","title":"Description","default":""},"features":{"type":"string","title":"Features","default":""},"monthly_credits":{"type":"integer","title":"Monthly Credits","default":0},"price_monthly":{"type":"string","title":"Price Monthly","default":""},"price_annual":{"type":"string","title":"Price Annual","default":""},"rate_limit_per_minute":{"type":"string","title":"Rate Limit Per Minute","default":""},"rate_limit_per_hour":{"type":"string","title":"Rate Limit Per Hour","default":""},"max_api_keys":{"type":"string","title":"Max Api Keys","default":""},"stripe_product_id":{"type":"string","title":"Stripe Product Id","default":""},"stripe_price_id_monthly":{"type":"string","title":"Stripe Price Id Monthly","default":""},"is_active":{"type":"string","title":"Is Active","default":""},"is_public":{"type":"string","title":"Is Public","default":""}},"type":"object","title":"Body_admin_plans_update_admin_plans__plan_id__update_post"},"Body_admin_pricing_actuals_save_admin_pricing_actuals_save_post":{"properties":{"vendor":{"type":"string","title":"Vendor"},"operation":{"type":"string","title":"Operation"},"billing_month":{"type":"string","title":"Billing Month"},"actual_cost_usd":{"type":"string","title":"Actual Cost Usd"},"invoice_ref":{"type":"string","title":"Invoice Ref","default":""},"notes":{"type":"string","title":"Notes","default":""}},"type":"object","required":["vendor","operation","billing_month","actual_cost_usd"],"title":"Body_admin_pricing_actuals_save_admin_pricing_actuals_save_post"},"Body_admin_pricing_create_admin_pricing_create_post":{"properties":{"vendor":{"type":"string","title":"Vendor"},"operation":{"type":"string","title":"Operation"},"model":{"type":"string","title":"Model","default":""},"cost_per_request":{"type":"string","title":"Cost Per Request","default":""},"cost_per_1k_input_tokens":{"type":"string","title":"Cost Per 1K Input Tokens","default":""},"cost_per_1k_output_tokens":{"type":"string","title":"Cost Per 1K Output Tokens","default":""},"cost_per_1k_vectors":{"type":"string","title":"Cost Per 1K Vectors","default":""},"monthly_fee":{"type":"string","title":"Monthly Fee","default":""},"monthly_request_quota":{"type":"string","title":"Monthly Request Quota","default":""},"overage_cost_per_request":{"type":"string","title":"Overage Cost Per Request","default":""},"billing_cycle_day":{"type":"string","title":"Billing Cycle Day","default":"1"},"billing_group":{"type":"string","title":"Billing Group","default":""},"effective_date":{"type":"string","title":"Effective Date"},"primary_function":{"type":"string","title":"Primary Function","default":"search"},"billing_frequency":{"type":"string","title":"Billing Frequency","default":"per_query"},"notes":{"type":"string","title":"Notes","default":""}},"type":"object","required":["vendor","operation","effective_date"],"title":"Body_admin_pricing_create_admin_pricing_create_post"},"Body_admin_pricing_update_admin_pricing__config_id__update_post":{"properties":{"vendor":{"type":"string","title":"Vendor"},"operation":{"type":"string","title":"Operation"},"model":{"type":"string","title":"Model","default":""},"effective_date":{"type":"string","title":"Effective Date"},"cost_per_request":{"type":"string","title":"Cost Per Request","default":""},"cost_per_1k_input_tokens":{"type":"string","title":"Cost Per 1K Input Tokens","default":""},"cost_per_1k_output_tokens":{"type":"string","title":"Cost Per 1K Output Tokens","default":""},"cost_per_1k_vectors":{"type":"string","title":"Cost Per 1K Vectors","default":""},"monthly_fee":{"type":"string","title":"Monthly Fee","default":""},"monthly_request_quota":{"type":"string","title":"Monthly Request Quota","default":""},"overage_cost_per_request":{"type":"string","title":"Overage Cost Per Request","default":""},"billing_cycle_day":{"type":"string","title":"Billing Cycle Day","default":"1"},"billing_group":{"type":"string","title":"Billing Group","default":""},"primary_function":{"type":"string","title":"Primary Function","default":"search"},"billing_frequency":{"type":"string","title":"Billing Frequency","default":"per_query"},"is_active":{"type":"string","title":"Is Active","default":"1"},"notes":{"type":"string","title":"Notes","default":""}},"type":"object","required":["vendor","operation","effective_date"],"title":"Body_admin_pricing_update_admin_pricing__config_id__update_post"},"Body_admin_update_free_trial_daily_cap_admin_settings_free_trial_daily_cap_post":{"properties":{"daily_cap":{"type":"string","title":"Daily Cap","default":""}},"type":"object","title":"Body_admin_update_free_trial_daily_cap_admin_settings_free_trial_daily_cap_post"},"Body_admin_user_rate_limit_admin_users__user_id__rate_limit_post":{"properties":{"rate_limit_override":{"type":"string","title":"Rate Limit Override","default":""}},"type":"object","title":"Body_admin_user_rate_limit_admin_users__user_id__rate_limit_post"},"Body_admin_user_role_admin_users__user_id__role_post":{"properties":{"role":{"type":"string","title":"Role"}},"type":"object","required":["role"],"title":"Body_admin_user_role_admin_users__user_id__role_post"},"Body_admin_user_staff_toggle_admin_users__user_id__staff_post":{"properties":{"is_staff":{"type":"string","title":"Is Staff"}},"type":"object","required":["is_staff"],"title":"Body_admin_user_staff_toggle_admin_users__user_id__staff_post"},"Body_admin_user_toggle_admin_users__user_id__toggle_post":{"properties":{"status":{"type":"string","title":"Status","default":""}},"type":"object","title":"Body_admin_user_toggle_admin_users__user_id__toggle_post"},"Body_api_key_create_api_keys_post":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description","default":""}},"type":"object","required":["name"],"title":"Body_api_key_create_api_keys_post"},"Body_billing_apply_coupon_billing_coupon_post":{"properties":{"code":{"type":"string","title":"Code"}},"type":"object","required":["code"],"title":"Body_billing_apply_coupon_billing_coupon_post"},"Body_billing_auto_recharge_billing_auto_recharge_post":{"properties":{"enabled":{"type":"string","title":"Enabled"},"threshold":{"type":"integer","title":"Threshold"}},"type":"object","required":["enabled"],"title":"Body_billing_auto_recharge_billing_auto_recharge_post"},"Body_billing_subscribe_billing_subscribe_post":{"properties":{"tier":{"type":"string","title":"Tier"},"billing_period":{"type":"string","title":"Billing Period","default":"monthly"}},"type":"object","required":["tier"],"title":"Body_billing_subscribe_billing_subscribe_post"},"Body_contact_submit_contact_us_post":{"properties":{"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"email":{"type":"string","title":"Email"},"subject":{"type":"string","title":"Subject","default":"general"},"message":{"type":"string","title":"Message"}},"type":"object","required":["first_name","last_name","email","message"],"title":"Body_contact_submit_contact_us_post"},"Body_forgot_password_submit_forgot_password_post":{"properties":{"email":{"type":"string","title":"Email"}},"type":"object","required":["email"],"title":"Body_forgot_password_submit_forgot_password_post"},"Body_login_submit_login_post":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"},"remember_me":{"type":"string","title":"Remember Me","default":""},"next":{"type":"string","title":"Next","default":""}},"type":"object","required":["email","password"],"title":"Body_login_submit_login_post"},"Body_newsletter_signup_newsletter_signup_post":{"properties":{"email":{"type":"string","title":"Email"}},"type":"object","required":["email"],"title":"Body_newsletter_signup_newsletter_signup_post"},"Body_register_submit_register_post":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"},"password_confirm":{"type":"string","title":"Password Confirm"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"company":{"type":"string","title":"Company","default":""},"plan_intent":{"type":"string","title":"Plan Intent","default":""},"utm_source":{"type":"string","title":"Utm Source","default":""},"utm_medium":{"type":"string","title":"Utm Medium","default":""},"utm_campaign":{"type":"string","title":"Utm Campaign","default":""},"utm_term":{"type":"string","title":"Utm Term","default":""},"utm_content":{"type":"string","title":"Utm Content","default":""},"gclid":{"type":"string","title":"Gclid","default":""},"fbclid":{"type":"string","title":"Fbclid","default":""},"referrer_url":{"type":"string","title":"Referrer Url","default":""},"landing_page":{"type":"string","title":"Landing Page","default":""},"cf-turnstile-response":{"type":"string","title":"Cf-Turnstile-Response","default":""}},"type":"object","required":["email","password","password_confirm","first_name","last_name"],"title":"Body_register_submit_register_post"},"Body_reset_password_submit_reset_password_post":{"properties":{"token":{"type":"string","title":"Token"},"password":{"type":"string","title":"Password"},"password_confirm":{"type":"string","title":"Password Confirm"}},"type":"object","required":["token","password","password_confirm"],"title":"Body_reset_password_submit_reset_password_post"},"CreditPack":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"credits":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Credits"},"price_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Price Cents"},"bonus_credits":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bonus Credits"}},"additionalProperties":true,"type":"object","title":"CreditPack"},"CreditPackListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/CreditPack"},"type":"array","title":"Data","default":[]},"total":{"type":"integer","title":"Total","default":0}},"additionalProperties":true,"type":"object","title":"CreditPackListResponse"},"CreditTopupResponse":{"properties":{"success":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Success"},"credits_added":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Credits Added"},"bonus_credits":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bonus Credits"},"pack_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pack Id"}},"additionalProperties":true,"type":"object","title":"CreditTopupResponse"},"EventDetail":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"sport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sport"},"league":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"League"},"season_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Season Id"},"starts_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Starts At","description":"ISO-8601 UTC start time."},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period"},"clock":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clock"},"venue":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Venue"},"participants":{"items":{"$ref":"#/components/schemas/Participant"},"type":"array","title":"Participants","default":[]},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"additionalProperties":true,"type":"object","required":["id"],"title":"EventDetail"},"EventListResponse":{"properties":{"events":{"items":{"$ref":"#/components/schemas/EventSummary"},"type":"array","title":"Events","default":[]},"total":{"type":"integer","title":"Total","default":0},"next_after_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Next After Id"}},"additionalProperties":true,"type":"object","title":"EventListResponse"},"EventSummary":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"sport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sport"},"league":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"League"},"season_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Season Id"},"starts_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Starts At","description":"ISO-8601 UTC start time."},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period"},"clock":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clock"},"venue":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Venue"}},"additionalProperties":true,"type":"object","required":["id"],"title":"EventSummary"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IntelligenceResponse":{"properties":{"event_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Event Id"},"available":{"type":"boolean","title":"Available","default":false},"has_recommend":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Recommend"},"analyst_take":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Analyst Take"},"match_overview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Match Overview"},"intelligence_updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Intelligence Updated At"},"bets":{"items":{"$ref":"#/components/schemas/BetIntelligence"},"type":"array","title":"Bets","default":[]}},"additionalProperties":true,"type":"object","title":"IntelligenceResponse"},"LeagueSummary":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"abbreviation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Abbreviation"},"league_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"League Type"},"country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Code"},"current_season":{"anyOf":[{"$ref":"#/components/schemas/SeasonSummary"},{"type":"null"}]}},"additionalProperties":true,"type":"object","title":"LeagueSummary"},"NLQueryFilters":{"properties":{"sport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sport"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"},"from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From"},"to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To"},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit"}},"additionalProperties":true,"type":"object","title":"NLQueryFilters"},"NLQueryRequest":{"properties":{"query":{"type":"string","maxLength":500,"minLength":1,"title":"Query","description":"Free text, e.g. 'live nfl games today' or 'college basketball this week'."},"limit":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":1.0},{"type":"null"}],"title":"Limit","description":"Overrides any limit parsed from the query text. Max 100."}},"additionalProperties":true,"type":"object","required":["query"],"title":"NLQueryRequest"},"NLQueryResponse":{"properties":{"query":{"type":"string","title":"Query","description":"The original natural-language query text."},"interpreted":{"$ref":"#/components/schemas/NLQueryFilters","description":"The GET /v1/events filters parsed from the query text."},"unrecognized_terms":{"items":{"type":"string"},"type":"array","title":"Unrecognized Terms","description":"Query words that didn't map to a known filter.","default":[]},"equivalent_request":{"type":"string","title":"Equivalent Request","description":"The literal GET /v1/events request this query was translated to."},"events":{"items":{"$ref":"#/components/schemas/EventSummary"},"type":"array","title":"Events","default":[]},"total":{"type":"integer","title":"Total","default":0},"next_after_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Next After Id"}},"additionalProperties":true,"type":"object","required":["query","interpreted","equivalent_request"],"title":"NLQueryResponse"},"OddsHistoryResponse":{"properties":{"event_id":{"type":"integer","title":"Event Id"},"movements":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Movements","default":[]},"total":{"type":"integer","title":"Total","default":0}},"additionalProperties":true,"type":"object","required":["event_id"],"title":"OddsHistoryResponse"},"OddsResponse":{"properties":{"event_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Event Id"},"available":{"type":"boolean","title":"Available","default":false},"bookmakers":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Bookmakers","default":[]},"last_updated":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Updated"}},"additionalProperties":true,"type":"object","title":"OddsResponse"},"Participant":{"properties":{"participant_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Participant Id"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"team":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Team"},"player":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Player"},"score":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Score"},"is_winner":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Winner"}},"additionalProperties":true,"type":"object","title":"Participant"},"Player":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"sport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sport"},"country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Code"},"birthdate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Birthdate","description":"YYYY-MM-DD date of birth."},"position":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Position"},"handedness":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Handedness"},"height_cm":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Height Cm"},"weight_kg":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Weight Kg"},"tennis_ranking":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tennis Ranking"},"tennis_ranking_points":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tennis Ranking Points"},"current_team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Team Id"},"current_team_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Team Name"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"retired_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Retired At"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"}},"additionalProperties":true,"type":"object","title":"Player"},"PlayerEventsResponse":{"properties":{"player_id":{"type":"integer","title":"Player Id"},"data":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Data","default":[]},"has_more":{"type":"boolean","title":"Has More","default":false},"next_after_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Next After Id"}},"additionalProperties":true,"type":"object","required":["player_id"],"title":"PlayerEventsResponse"},"PlayersListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Player"},"type":"array","title":"Data","default":[]},"has_more":{"type":"boolean","title":"Has More","default":false},"next_after_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Next After Id"}},"additionalProperties":true,"type":"object","title":"PlayersListResponse"},"ScoreEntry":{"properties":{"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"abbreviation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Abbreviation"},"score":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Score"},"is_winner":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Winner"},"period_scores":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Period Scores","default":[]}},"additionalProperties":true,"type":"object","title":"ScoreEntry"},"ScoreResponse":{"properties":{"event_id":{"type":"integer","title":"Event Id"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"finished":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Finished"},"period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period"},"clock":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clock"},"scores":{"items":{"$ref":"#/components/schemas/ScoreEntry"},"type":"array","title":"Scores","default":[]},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"additionalProperties":true,"type":"object","required":["event_id"],"title":"ScoreResponse"},"Season":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"phase":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phase"},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"},"is_current":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Current"},"sport":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Sport"},"league":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"League"}},"additionalProperties":true,"type":"object","title":"Season"},"SeasonSummary":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"phase":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phase"},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"}},"additionalProperties":true,"type":"object","title":"SeasonSummary"},"SeasonsListResponse":{"properties":{"seasons":{"items":{"$ref":"#/components/schemas/Season"},"type":"array","title":"Seasons","default":[]},"total":{"type":"integer","title":"Total","default":0}},"additionalProperties":true,"type":"object","title":"SeasonsListResponse"},"SplitsResponse":{"properties":{"event_id":{"type":"integer","title":"Event Id"},"available":{"type":"boolean","title":"Available","default":false},"captured_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Captured At"},"consensus":{"additionalProperties":true,"type":"object","title":"Consensus","default":{}},"books":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Books","default":[]}},"additionalProperties":true,"type":"object","required":["event_id"],"title":"SplitsResponse"},"Sport":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"is_team_sport":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Team Sport"},"leagues":{"items":{"$ref":"#/components/schemas/LeagueSummary"},"type":"array","title":"Leagues","default":[]}},"additionalProperties":true,"type":"object","title":"Sport"},"SportsListResponse":{"properties":{"sports":{"items":{"$ref":"#/components/schemas/Sport"},"type":"array","title":"Sports","default":[]},"total":{"type":"integer","title":"Total","default":0}},"additionalProperties":true,"type":"object","title":"SportsListResponse"},"Team":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"short_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Short Name"},"abbreviation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Abbreviation"},"sport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sport"},"league":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"League"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Code"},"conference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conference"},"division":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Division"},"venue":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Venue"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"additionalProperties":true,"type":"object","title":"Team"},"TeamsListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Team"},"type":"array","title":"Data","default":[]},"has_more":{"type":"boolean","title":"Has More","default":false},"next_after_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Next After Id"}},"additionalProperties":true,"type":"object","title":"TeamsListResponse"},"TrialKeyRequest":{"properties":{"cf-turnstile-response":{"type":"string","title":"Cf-Turnstile-Response","description":"Cloudflare Turnstile response token from the widget on /docs/ai.","default":""}},"type":"object","title":"TrialKeyRequest"},"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"},"WebhookCreateResponse":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"event_types":{"items":{"type":"string"},"type":"array","title":"Event Types","default":[]},"sport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sport"},"event_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Event Id"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"signing_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signing Secret","description":"Returned only on create — store it to verify Lumify-Signature."}},"additionalProperties":true,"type":"object","title":"WebhookCreateResponse"},"WebhookDeleteResponse":{"properties":{"deleted":{"type":"boolean","title":"Deleted","default":true},"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"}},"additionalProperties":true,"type":"object","title":"WebhookDeleteResponse"},"WebhookListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/WebhookSubscription"},"type":"array","title":"Data","default":[]},"total":{"type":"integer","title":"Total","default":0}},"additionalProperties":true,"type":"object","title":"WebhookListResponse"},"WebhookSubscription":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"event_types":{"items":{"type":"string"},"type":"array","title":"Event Types","default":[]},"sport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sport"},"event_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Event Id"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"signing_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signing Secret","description":"Returned only on create — store it to verify Lumify-Signature."}},"additionalProperties":true,"type":"object","title":"WebhookSubscription"}},"securitySchemes":{"ApiKeyBearer":{"type":"http","scheme":"bearer","bearerFormat":"lmfy-key","description":"Lumify API key passed as `Authorization: Bearer lmfy-...`."}}},"tags":[{"name":"sports","description":"Supported sports, leagues, and season calendars."},{"name":"events","description":"Schedules, live scores, odds, splits, and bet intelligence."},{"name":"teams","description":"First-class team resources."},{"name":"players","description":"Player profiles and participation history."},{"name":"agent","description":"Programmatic onboarding: key provisioning and credit balance."},{"name":"mcp","description":"Model Context Protocol server endpoint for AI agents."},{"name":"health","description":"Service health checks."}],"servers":[{"url":"https://lumify.ai","description":"Production"}]}