{"openapi":"3.1.0","info":{"title":"PuntersEdge","version":"0.1.0"},"paths":{"/robots.txt":{"get":{"summary":"Robots","operationId":"robots_robots_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Robots","operationId":"robots_robots_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/llms.txt":{"get":{"summary":"Llms Txt","description":"Serve /llms.txt, preferring a static override if one is dropped in.","operationId":"llms_txt_llms_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Llms Txt","description":"Serve /llms.txt, preferring a static override if one is dropped in.","operationId":"llms_txt_llms_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/llms-full.txt":{"get":{"summary":"Llms Full Txt","description":"Serve /llms-full.txt, preferring a static override if one is dropped in.\n\nSame override contract as llms_txt() above: drop a file at static/llms-full.txt to\npublish a hand-edited version without a deploy. GET+HEAD because a fetcher or link\nvalidator probes with HEAD first, and every URL on this site answered 405 to HEAD until\n2026-08-18 (FastAPI's APIRoute, unlike Starlette's Route, does not add HEAD to a GET\nroute). A citation surface that 405s the validator checking it is not much of one.","operationId":"llms_full_txt_llms_full_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Llms Full Txt","description":"Serve /llms-full.txt, preferring a static override if one is dropped in.\n\nSame override contract as llms_txt() above: drop a file at static/llms-full.txt to\npublish a hand-edited version without a deploy. GET+HEAD because a fetcher or link\nvalidator probes with HEAD first, and every URL on this site answered 405 to HEAD until\n2026-08-18 (FastAPI's APIRoute, unlike Starlette's Route, does not add HEAD to a GET\nroute). A citation surface that 405s the validator checking it is not much of one.","operationId":"llms_full_txt_llms_full_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/sitemap.xml":{"get":{"summary":"Sitemap Index","description":"Sitemap index.\n\nEach child's lastmod is the newest lastmod inside that child, computed here rather\nthan stamped with the clock — so \"this file changed\" is only ever claimed when a\nURL in it actually carries a date saying so.\n\nsitemap-blog.xml dropped 2026-08-11 (tips retired): every URL it listed was a\nmatch-preview post, all now 410. The surviving developer guides that live under\n/blog/* are listed in sitemap-api.xml, where they belong.\n\nsitemap-results.xml dropped 2026-08-25 (crawl budget): it listed ~3.7k of the\n3,926 URLs submitted estate-wide, and URL Inspection showed every sampled one\n\"Discovered - currently not indexed\" with lastCrawlTime NEVER. In the same\nsweep 12 of 26 money pages were also never crawled -- nearly all of them\nsub-paths (/developers/*, /api/*). Google was rationing crawl across a queue\nthat was 95%% archive and never descending. The pages still serve 200; only\nthe crawl invitation is withdrawn.","operationId":"sitemap_index_sitemap_xml_get","responses":{"200":{"description":"Successful Response"}}},"head":{"summary":"Sitemap Index","description":"Sitemap index.\n\nEach child's lastmod is the newest lastmod inside that child, computed here rather\nthan stamped with the clock — so \"this file changed\" is only ever claimed when a\nURL in it actually carries a date saying so.\n\nsitemap-blog.xml dropped 2026-08-11 (tips retired): every URL it listed was a\nmatch-preview post, all now 410. The surviving developer guides that live under\n/blog/* are listed in sitemap-api.xml, where they belong.\n\nsitemap-results.xml dropped 2026-08-25 (crawl budget): it listed ~3.7k of the\n3,926 URLs submitted estate-wide, and URL Inspection showed every sampled one\n\"Discovered - currently not indexed\" with lastCrawlTime NEVER. In the same\nsweep 12 of 26 money pages were also never crawled -- nearly all of them\nsub-paths (/developers/*, /api/*). Google was rationing crawl across a queue\nthat was 95%% archive and never descending. The pages still serve 200; only\nthe crawl invitation is withdrawn.","operationId":"sitemap_index_sitemap_xml_get","responses":{"200":{"description":"Successful Response"}}}},"/sitemap-core.xml":{"get":{"summary":"Sitemap Core","operationId":"sitemap_core_sitemap_core_xml_get","responses":{"200":{"description":"Successful Response"}}},"head":{"summary":"Sitemap Core","operationId":"sitemap_core_sitemap_core_xml_get","responses":{"200":{"description":"Successful Response"}}}},"/sitemap-tools.xml":{"get":{"summary":"Sitemap Tools","operationId":"sitemap_tools_sitemap_tools_xml_get","responses":{"200":{"description":"Successful Response"}}},"head":{"summary":"Sitemap Tools","operationId":"sitemap_tools_sitemap_tools_xml_get","responses":{"200":{"description":"Successful Response"}}}},"/sitemap-blog.xml":{"get":{"summary":"Sitemap Blog","description":"Retired 2026-08-11 with the tips side.\n\nKept as a route rather than deleted so the URL Google already has on file answers\n410 — a sitemap that starts 404ing is retried for weeks, one that reports 410 is\ndropped. It is no longer referenced from the sitemap index.","operationId":"sitemap_blog_sitemap_blog_xml_get","responses":{"200":{"description":"Successful Response"}}},"head":{"summary":"Sitemap Blog","description":"Retired 2026-08-11 with the tips side.\n\nKept as a route rather than deleted so the URL Google already has on file answers\n410 — a sitemap that starts 404ing is retried for weeks, one that reports 410 is\ndropped. It is no longer referenced from the sitemap index.","operationId":"sitemap_blog_sitemap_blog_xml_get","responses":{"200":{"description":"Successful Response"}}}},"/sitemap-sports.xml":{"get":{"summary":"Sitemap Sports","operationId":"sitemap_sports_sitemap_sports_xml_get","responses":{"200":{"description":"Successful Response"}}},"head":{"summary":"Sitemap Sports","operationId":"sitemap_sports_sitemap_sports_xml_get","responses":{"200":{"description":"Successful Response"}}}},"/sitemap-api.xml":{"get":{"summary":"Sitemap Api Sm","operationId":"sitemap_api_sm_sitemap_api_xml_get","responses":{"200":{"description":"Successful Response"}}},"head":{"summary":"Sitemap Api Sm","operationId":"sitemap_api_sm_sitemap_api_xml_get","responses":{"200":{"description":"Successful Response"}}}},"/sitemap-legal.xml":{"get":{"summary":"Sitemap Legal","operationId":"sitemap_legal_sitemap_legal_xml_get","responses":{"200":{"description":"Successful Response"}}},"head":{"summary":"Sitemap Legal","operationId":"sitemap_legal_sitemap_legal_xml_get","responses":{"200":{"description":"Successful Response"}}}},"/sitemap-results.xml":{"get":{"summary":"Sitemap Results","description":"Retired 2026-08-25 -- see sitemap_index() for the measurement behind it.\n\nKept as a route rather than deleted, same as sitemap_blog.xml above: a sitemap\nthat starts 404ing is retried for weeks, one that reports 410 is dropped. The\nresults pages themselves are unaffected and still serve 200 -- this withdraws the\ncrawl invitation, it does not remove the content.","operationId":"sitemap_results_sitemap_results_xml_get","responses":{"200":{"description":"Successful Response"}}},"head":{"summary":"Sitemap Results","description":"Retired 2026-08-25 -- see sitemap_index() for the measurement behind it.\n\nKept as a route rather than deleted, same as sitemap_blog.xml above: a sitemap\nthat starts 404ing is retried for weeks, one that reports 410 is dropped. The\nresults pages themselves are unaffected and still serve 200 -- this withdraws the\ncrawl invitation, it does not remove the content.","operationId":"sitemap_results_sitemap_results_xml_get","responses":{"200":{"description":"Successful Response"}}}},"/coverage-report.json":{"get":{"summary":"Coverage Report Json","operationId":"coverage_report_json_coverage_report_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Coverage Report Json","operationId":"coverage_report_json_coverage_report_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/platform-facts.json":{"get":{"summary":"Platform Facts Json","description":"Every measured platform fact, in the exact form the pages render it.\n\nADDED 2026-08-18 with the extended facts layer. Three jobs, in order of importance:\n\n  1. It is the CHECK. A verifier — or the next remediation pass — can diff a page's\n     prose against this document instead of re-deriving twelve numbers by hand, which\n     is how the last two rounds left 13 claims disagreeing and introduced 4 more.\n  2. It is a citable machine surface, like /coverage-report.json, on the only\n     acquisition channel this business has measured.\n  3. It makes an absence VISIBLE. `unavailable` names every fact that could not be\n     measured and why, so \"the page stopped printing that sentence\" is a thing an\n     operator can see rather than something nobody notices for two days.\n\n503 with the same explicit body as /coverage-report.json when nothing is measurable —\nnever a substituted number, on any surface, ever.","operationId":"platform_facts_json_platform_facts_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Platform Facts Json","description":"Every measured platform fact, in the exact form the pages render it.\n\nADDED 2026-08-18 with the extended facts layer. Three jobs, in order of importance:\n\n  1. It is the CHECK. A verifier — or the next remediation pass — can diff a page's\n     prose against this document instead of re-deriving twelve numbers by hand, which\n     is how the last two rounds left 13 claims disagreeing and introduced 4 more.\n  2. It is a citable machine surface, like /coverage-report.json, on the only\n     acquisition channel this business has measured.\n  3. It makes an absence VISIBLE. `unavailable` names every fact that could not be\n     measured and why, so \"the page stopped printing that sentence\" is a thing an\n     operator can see rather than something nobody notices for two days.\n\n503 with the same explicit body as /coverage-report.json when nothing is measurable —\nnever a substituted number, on any surface, ever.","operationId":"platform_facts_json_platform_facts_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/coverage-report":{"get":{"summary":"Coverage Report Page","operationId":"coverage_report_page_coverage_report_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Coverage Report Page","operationId":"coverage_report_page_coverage_report_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/data-quality.json":{"get":{"summary":"Data Quality Json","operationId":"data_quality_json_data_quality_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Data Quality Json","operationId":"data_quality_json_data_quality_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/data-quality":{"get":{"summary":"Data Quality Page","operationId":"data_quality_page_data_quality_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Data Quality Page","operationId":"data_quality_page_data_quality_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/datasets.json":{"get":{"summary":"Datasets Json","operationId":"datasets_json_datasets_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Datasets Json","operationId":"datasets_json_datasets_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/datasets/au-racing-closing-lines/{release}/{filename}":{"get":{"summary":"Dataset File","operationId":"dataset_file_datasets_au_racing_closing_lines__release___filename__get","parameters":[{"name":"release","in":"path","required":true,"schema":{"type":"string","title":"Release"}},{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":"Dataset File","operationId":"dataset_file_datasets_au_racing_closing_lines__release___filename__get","parameters":[{"name":"release","in":"path","required":true,"schema":{"type":"string","title":"Release"}},{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/datasets":{"get":{"summary":"Datasets Page","operationId":"datasets_page_datasets_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Datasets Page","operationId":"datasets_page_datasets_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/tools":{"get":{"summary":"Tools Hub","operationId":"tools_hub_tools_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Tools Hub","operationId":"tools_hub_tools_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/tools/expected-value-calculator":{"get":{"summary":"Tool Ev Calculator","operationId":"tool_ev_calculator_tools_expected_value_calculator_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Tool Ev Calculator","operationId":"tool_ev_calculator_tools_expected_value_calculator_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/tools/implied-probability-calculator":{"get":{"summary":"Tool Implied Probability","operationId":"tool_implied_probability_tools_implied_probability_calculator_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Tool Implied Probability","operationId":"tool_implied_probability_tools_implied_probability_calculator_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/tools/kelly-criterion-calculator":{"get":{"summary":"Tool Kelly","operationId":"tool_kelly_tools_kelly_criterion_calculator_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Tool Kelly","operationId":"tool_kelly_tools_kelly_criterion_calculator_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/tools/odds-converter":{"get":{"summary":"Tool Odds Converter","operationId":"tool_odds_converter_tools_odds_converter_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Tool Odds Converter","operationId":"tool_odds_converter_tools_odds_converter_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/tools/arbitrage-calculator":{"get":{"summary":"Tool Arb Calc","description":"Promoted from stub to a full page 2026-08-12 — \"arbitrage calculator\" is the\nhighest-volume keyword the site can target (1,600/mo AU, vs ~500/mo for the entire\n\"odds api\" category). Now index,follow with a working calculator and real content.","operationId":"tool_arb_calc_tools_arbitrage_calculator_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Tool Arb Calc","description":"Promoted from stub to a full page 2026-08-12 — \"arbitrage calculator\" is the\nhighest-volume keyword the site can target (1,600/mo AU, vs ~500/mo for the entire\n\"odds api\" category). Now index,follow with a working calculator and real content.","operationId":"tool_arb_calc_tools_arbitrage_calculator_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/tools/dutching-calculator":{"get":{"summary":"Tool Dutching","operationId":"tool_dutching_tools_dutching_calculator_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Tool Dutching","operationId":"tool_dutching_tools_dutching_calculator_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/tools/clv-calculator":{"get":{"summary":"Tool Clv","operationId":"tool_clv_tools_clv_calculator_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Tool Clv","operationId":"tool_clv_tools_clv_calculator_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/tools/staking-plan-calculator":{"get":{"summary":"Tool Staking","operationId":"tool_staking_tools_staking_plan_calculator_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Tool Staking","operationId":"tool_staking_tools_staking_plan_calculator_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/best-odds/board.json":{"get":{"summary":"Best Odds Board","operationId":"best_odds_board_best_odds_board_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Best Odds Board","operationId":"best_odds_board_best_odds_board_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/best-odds/race/{race_id}.json":{"get":{"summary":"Best Odds Race","operationId":"best_odds_race_best_odds_race__race_id__json_get","parameters":[{"name":"race_id","in":"path","required":true,"schema":{"type":"string","title":"Race Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":"Best Odds Race","operationId":"best_odds_race_best_odds_race__race_id__json_get","parameters":[{"name":"race_id","in":"path","required":true,"schema":{"type":"string","title":"Race Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/best-odds/game/{event_id}.json":{"get":{"summary":"Best Odds Game","operationId":"best_odds_game_best_odds_game__event_id__json_get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":"Best Odds Game","operationId":"best_odds_game_best_odds_game__event_id__json_get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/best-odds":{"get":{"summary":"Best Odds Page","operationId":"best_odds_page_best_odds_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Best Odds Page","operationId":"best_odds_page_best_odds_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/endpoints":{"get":{"summary":"Endpoints Page","operationId":"endpoints_page_endpoints_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Endpoints Page","operationId":"endpoints_page_endpoints_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/melbourne-cup":{"get":{"summary":"Melbourne Cup","operationId":"melbourne_cup_melbourne_cup_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Melbourne Cup","operationId":"melbourne_cup_melbourne_cup_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api":{"get":{"summary":"Api Platform","operationId":"api_platform_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Platform","operationId":"api_platform_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api-platform":{"get":{"summary":"Api Platform Legacy","operationId":"api_platform_legacy_api_platform_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Api Platform Legacy","operationId":"api_platform_legacy_api_platform_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docs":{"get":{"summary":"Api Docs","operationId":"api_docs_api_docs_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Docs","operationId":"api_docs_api_docs_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/status":{"get":{"summary":"Api Status Page","operationId":"api_status_page_api_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Api Status Page","operationId":"api_status_page_api_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/changelog":{"get":{"summary":"Api Changelog Page","operationId":"api_changelog_page_api_changelog_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Changelog Page","operationId":"api_changelog_page_api_changelog_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/coverage":{"get":{"summary":"Api Coverage Page","operationId":"api_coverage_page_api_coverage_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Coverage Page","operationId":"api_coverage_page_api_coverage_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/examples":{"get":{"summary":"Api Examples Page","operationId":"api_examples_page_api_examples_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Examples Page","operationId":"api_examples_page_api_examples_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/pricing":{"get":{"summary":"Api Pricing Page","operationId":"api_pricing_page_api_pricing_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Pricing Page","operationId":"api_pricing_page_api_pricing_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/integrate":{"get":{"summary":"Api Integrate","description":"Human-and-machine-readable integration brief: auth, quickstart, schema, SDK.","operationId":"api_integrate_api_integrate_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Integrate","description":"Human-and-machine-readable integration brief: auth, quickstart, schema, SDK.","operationId":"api_integrate_api_integrate_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/status":{"get":{"summary":"Status Page","description":"Public status page — current health plus the uptime history the data\ncan actually support.","operationId":"status_page_status_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Status Page","description":"Public status page — current health plus the uptime history the data\ncan actually support.","operationId":"status_page_status_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/status.json":{"get":{"summary":"Status Json","description":"Machine-readable status for external monitors.\n\nA STRICT SUPERSET of the shape app.py served: `status` and\n`services.{name}.{up,last_check}` are byte-compatible, and the service map\nis still keyed off monitor_state.json so entries that exist there but not\non the page (e.g. \"Record Freshness\") keep appearing. Something out there\nmay be consuming this; the additions go alongside, never in place of.","operationId":"status_json_status_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Status Json","description":"Machine-readable status for external monitors.\n\nA STRICT SUPERSET of the shape app.py served: `status` and\n`services.{name}.{up,last_check}` are byte-compatible, and the service map\nis still keyed off monitor_state.json so entries that exist there but not\non the page (e.g. \"Record Freshness\") keep appearing. Something out there\nmay be consuming this; the additions go alongside, never in place of.","operationId":"status_json_status_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/uptime.json":{"get":{"summary":"Uptime Json","description":"Availability per public surface, in the form a citation or a directory\ncan quote without having to scrape the page.\n\nEvery figure states the window it was computed over and the share of that\nwindow in which the monitor was actually running. Windows longer than a\nservice's recorded history are absent, not zero and not 100.","operationId":"uptime_json_uptime_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Uptime Json","description":"Availability per public surface, in the form a citation or a directory\ncan quote without having to scrape the page.\n\nEvery figure states the window it was computed over and the share of that\nwindow in which the monitor was actually running. Windows longer than a\nservice's recorded history are absent, not zero and not 100.","operationId":"uptime_json_uptime_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/uptime":{"get":{"summary":"Uptime Redirect","description":"A developer or crawler guesses /uptime before /status. 301 rather than\na second page: three trust URLs already exist (/status, /api/status,\n/api/coverage) and a fourth would cannibalise them.","operationId":"uptime_redirect_uptime_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Uptime Redirect","description":"A developer or crawler guesses /uptime before /status. 301 rather than\na second page: three trust URLs already exist (/status, /api/status,\n/api/coverage) and a fourth would cannibalise them.","operationId":"uptime_redirect_uptime_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/changelog.json":{"get":{"summary":"Changelog Json Feed","description":"JSON Feed 1.1 — https://jsonfeed.org/version/1.1","operationId":"changelog_json_feed_api_changelog_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Changelog Json Feed","description":"JSON Feed 1.1 — https://jsonfeed.org/version/1.1","operationId":"changelog_json_feed_api_changelog_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/changelog.xml":{"get":{"summary":"Changelog Rss","description":"RSS 2.0 with a correct RFC 822 pubDate and an atom:link self reference —\nboth are what feed validators fail on, and a feed that fails validation\ndoes not get picked up by the directories this exists to reach.","operationId":"changelog_rss_api_changelog_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Changelog Rss","description":"RSS 2.0 with a correct RFC 822 pubDate and an atom:link self reference —\nboth are what feed validators fail on, and a feed that fails validation\ndoes not get picked up by the directories this exists to reach.","operationId":"changelog_rss_api_changelog_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/changelog":{"get":{"summary":"Changelog Redirect","description":"The URL a developer or a crawler guesses first. It was a 404.","operationId":"changelog_redirect_changelog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Changelog Redirect","description":"The URL a developer or a crawler guesses first. It was a 404.","operationId":"changelog_redirect_changelog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/devlog":{"get":{"summary":"Devlog Index","operationId":"devlog_index_devlog_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Devlog Index","operationId":"devlog_index_devlog_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/devlog/{slug}":{"get":{"summary":"Devlog Issue","operationId":"devlog_issue_devlog__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":"Devlog Issue","operationId":"devlog_issue_devlog__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/devlog/subscribe":{"post":{"summary":"Devlog Subscribe","operationId":"devlog_subscribe_devlog_subscribe_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/devlog.json":{"get":{"summary":"Devlog Json Feed","operationId":"devlog_json_feed_devlog_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Devlog Json Feed","operationId":"devlog_json_feed_devlog_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/devlog.xml":{"get":{"summary":"Devlog Rss","operationId":"devlog_rss_devlog_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Devlog Rss","operationId":"devlog_rss_devlog_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/testimonials":{"get":{"summary":"Testimonials Page","operationId":"testimonials_page_testimonials_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Testimonials Page","operationId":"testimonials_page_testimonials_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/how-it-works":{"get":{"summary":"How It Works","operationId":"how_it_works_how_it_works_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"How It Works","operationId":"how_it_works_how_it_works_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/methodology":{"get":{"summary":"Methodology","operationId":"methodology_methodology_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Methodology","operationId":"methodology_methodology_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/results-methodology":{"get":{"summary":"Results Methodology","operationId":"results_methodology_results_methodology_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Results Methodology","operationId":"results_methodology_results_methodology_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/faq":{"get":{"summary":"Faq","operationId":"faq_faq_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Faq","operationId":"faq_faq_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/about":{"get":{"summary":"About","operationId":"about_about_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"About","operationId":"about_about_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/why-puntersedge":{"get":{"summary":"Why Puntersedge","operationId":"why_puntersedge_why_puntersedge_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Why Puntersedge","operationId":"why_puntersedge_why_puntersedge_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/developers/api-reference":{"get":{"summary":"Api Reference Index","operationId":"api_reference_index_developers_api_reference_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Reference Index","operationId":"api_reference_index_developers_api_reference_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/developers/api-reference/{slug}":{"get":{"summary":"Api Reference Endpoint","operationId":"api_reference_endpoint_developers_api_reference__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":"Api Reference Endpoint","operationId":"api_reference_endpoint_developers_api_reference__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/errors/{slug}":{"get":{"summary":"Error Type Uri","description":"Dereference an RFC 7807 type URI to the human-readable error documentation.","operationId":"error_type_uri_errors__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":"Error Type Uri","description":"Dereference an RFC 7807 type URI to the human-readable error documentation.","operationId":"error_type_uri_errors__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/developers/errors":{"get":{"summary":"Developers Errors","operationId":"developers_errors_developers_errors_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Developers Errors","operationId":"developers_errors_developers_errors_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/developers/rate-limits":{"get":{"summary":"Developers Rate Limits","operationId":"developers_rate_limits_developers_rate_limits_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Developers Rate Limits","operationId":"developers_rate_limits_developers_rate_limits_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/developers/freshness":{"get":{"summary":"Developers Freshness","operationId":"developers_freshness_developers_freshness_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Developers Freshness","operationId":"developers_freshness_developers_freshness_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/developers/mcp-server":{"get":{"summary":"Developers Mcp Server","description":"The official MCP server: install, client config, tool list with live credit costs.","operationId":"developers_mcp_server_developers_mcp_server_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Developers Mcp Server","description":"The official MCP server: install, client config, tool list with live credit costs.","operationId":"developers_mcp_server_developers_mcp_server_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/developers/ai-assistants":{"get":{"summary":"Developers Ai Assistants","description":"Three ways to use the API from ChatGPT, Claude, Cursor and Copilot.","operationId":"developers_ai_assistants_developers_ai_assistants_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Developers Ai Assistants","description":"Three ways to use the API from ChatGPT, Claude, Cursor and Copilot.","operationId":"developers_ai_assistants_developers_ai_assistants_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/developers/nodejs":{"get":{"summary":"Developers Nodejs","description":"Node quickstart with raw fetch, mirroring /developers/getting-started.\n\nDeliberately kept separate from /developers/typescript: this one is the\nnothing-to-install path, and its value is that the whole contract fits on one screen.\nIt links the client rather than being rewritten around it.","operationId":"developers_nodejs_developers_nodejs_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Developers Nodejs","description":"Node quickstart with raw fetch, mirroring /developers/getting-started.\n\nDeliberately kept separate from /developers/typescript: this one is the\nnothing-to-install path, and its value is that the whole contract fits on one screen.\nIt links the client rather than being rewritten around it.","operationId":"developers_nodejs_developers_nodejs_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/developers/javascript":{"get":{"summary":"Developers Typescript","description":"The official npm client: install, the surface, errors, credits, webhooks.\n\n/developers/javascript is an alias rather than a second page — the template sets its\ncanonical to /developers/typescript, so the two never compete in search. Only the\ncanonical is in the sitemap.","operationId":"developers_typescript_developers_javascript_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Developers Typescript","description":"The official npm client: install, the surface, errors, credits, webhooks.\n\n/developers/javascript is an alias rather than a second page — the template sets its\ncanonical to /developers/typescript, so the two never compete in search. Only the\ncanonical is in the sitemap.","operationId":"developers_typescript_developers_javascript_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/developers/typescript":{"get":{"summary":"Developers Typescript","description":"The official npm client: install, the surface, errors, credits, webhooks.\n\n/developers/javascript is an alias rather than a second page — the template sets its\ncanonical to /developers/typescript, so the two never compete in search. Only the\ncanonical is in the sitemap.","operationId":"developers_typescript_developers_typescript_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Developers Typescript","description":"The official npm client: install, the surface, errors, credits, webhooks.\n\n/developers/javascript is an alias rather than a second page — the template sets its\ncanonical to /developers/typescript, so the two never compete in search. Only the\ncanonical is in the sitemap.","operationId":"developers_typescript_developers_typescript_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/developers":{"get":{"summary":"Developers Hub","operationId":"developers_hub_developers_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Developers Hub","operationId":"developers_hub_developers_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/developers/getting-started":{"get":{"summary":"Dev Getting Started","operationId":"dev_getting_started_developers_getting_started_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Dev Getting Started","operationId":"dev_getting_started_developers_getting_started_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/developers/sports-odds-api-australia":{"get":{"summary":"Dev Sports Odds","operationId":"dev_sports_odds_developers_sports_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Dev Sports Odds","operationId":"dev_sports_odds_developers_sports_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/developers/historical-racing-odds-api":{"get":{"summary":"Dev Intent Page","operationId":"dev_intent_page_developers_historical_racing_odds_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Dev Intent Page","operationId":"dev_intent_page_developers_historical_racing_odds_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/developers/harness-racing-odds-api":{"get":{"summary":"Dev Intent Page","operationId":"dev_intent_page_developers_harness_racing_odds_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Dev Intent Page","operationId":"dev_intent_page_developers_harness_racing_odds_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/developers/nz-racing-odds-api":{"get":{"summary":"Dev Intent Page","operationId":"dev_intent_page_developers_nz_racing_odds_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Dev Intent Page","operationId":"dev_intent_page_developers_nz_racing_odds_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/developers/greyhound-racing-api":{"get":{"summary":"Dev Intent Page","operationId":"dev_intent_page_developers_greyhound_racing_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Dev Intent Page","operationId":"dev_intent_page_developers_greyhound_racing_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/developers/horse-racing-odds-api-australia":{"get":{"summary":"Dev Intent Page","operationId":"dev_intent_page_developers_horse_racing_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Dev Intent Page","operationId":"dev_intent_page_developers_horse_racing_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/developers/python":{"get":{"summary":"Developers Python Alias","description":"The Python twin of /developers/typescript: the SDK guide lives under /blog and this\nis the URL people guess for it. Registered ahead of the {slug} catch-all below, which\nwould otherwise answer 404 before the routes in app.py are consulted.","operationId":"developers_python_alias_developers_python_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Developers Python Alias","description":"The Python twin of /developers/typescript: the SDK guide lives under /blog and this\nis the URL people guess for it. Registered ahead of the {slug} catch-all below, which\nwould otherwise answer 404 before the routes in app.py are consulted.","operationId":"developers_python_alias_developers_python_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/developers/{slug}":{"get":{"summary":"Dev Page Stub","operationId":"dev_page_stub_developers__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":"Dev Page Stub","operationId":"dev_page_stub_developers__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/privacy-policy":{"get":{"summary":"Privacy","operationId":"privacy_privacy_policy_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Privacy","operationId":"privacy_privacy_policy_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/terms":{"get":{"summary":"Terms","operationId":"terms_terms_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Terms","operationId":"terms_terms_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/responsible-gambling":{"get":{"summary":"Responsible Gambling","operationId":"responsible_gambling_responsible_gambling_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Responsible Gambling","operationId":"responsible_gambling_responsible_gambling_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/contact":{"get":{"summary":"Contact","operationId":"contact_contact_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Contact","operationId":"contact_contact_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/refund-policy":{"get":{"summary":"Refund Policy","operationId":"refund_policy_refund_policy_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Refund Policy","operationId":"refund_policy_refund_policy_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/track-record":{"get":{"summary":"Alias Track Record","operationId":"alias_track_record_track_record_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Alias Track Record","operationId":"alias_track_record_track_record_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/privacy":{"get":{"summary":"Alias Privacy","operationId":"alias_privacy_privacy_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Alias Privacy","operationId":"alias_privacy_privacy_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/terms-and-conditions":{"get":{"summary":"Alias Terms","operationId":"alias_terms_terms_and_conditions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Alias Terms","operationId":"alias_terms_terms_and_conditions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/blog/horse-racing-api-australia-guide":{"get":{"summary":"Api Longtail Guide Page","operationId":"api_longtail_guide_page_blog_horse_racing_api_australia_guide_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Longtail Guide Page","operationId":"api_longtail_guide_page_blog_horse_racing_api_australia_guide_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blog/nrl-odds-api-developer-guide":{"get":{"summary":"Api Longtail Guide Page","operationId":"api_longtail_guide_page_blog_nrl_odds_api_developer_guide_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Longtail Guide Page","operationId":"api_longtail_guide_page_blog_nrl_odds_api_developer_guide_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blog/afl-betting-model-data-guide":{"get":{"summary":"Api Longtail Guide Page","operationId":"api_longtail_guide_page_blog_afl_betting_model_data_guide_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Longtail Guide Page","operationId":"api_longtail_guide_page_blog_afl_betting_model_data_guide_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blog/australian-bookmaker-api-guide":{"get":{"summary":"Api Longtail Guide Page","operationId":"api_longtail_guide_page_blog_australian_bookmaker_api_guide_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Longtail Guide Page","operationId":"api_longtail_guide_page_blog_australian_bookmaker_api_guide_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blog/how-to-compare-bookmaker-odds-australia":{"get":{"summary":"Api Longtail Guide Page","operationId":"api_longtail_guide_page_blog_how_to_compare_bookmaker_odds_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Longtail Guide Page","operationId":"api_longtail_guide_page_blog_how_to_compare_bookmaker_odds_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blog/betting-model-data-sources-australia":{"get":{"summary":"Api Longtail Guide Page","operationId":"api_longtail_guide_page_blog_betting_model_data_sources_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Longtail Guide Page","operationId":"api_longtail_guide_page_blog_betting_model_data_sources_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blog/sports-odds-api-australia-guide":{"get":{"summary":"Api Longtail Guide Page","operationId":"api_longtail_guide_page_blog_sports_odds_api_australia_guide_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Longtail Guide Page","operationId":"api_longtail_guide_page_blog_sports_odds_api_australia_guide_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blog/australian-odds-api-python-guide":{"get":{"summary":"Python Guide Page","operationId":"python_guide_page_blog_australian_odds_api_python_guide_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Python Guide Page","operationId":"python_guide_page_blog_australian_odds_api_python_guide_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blog/australian-odds-api-nodejs-guide":{"get":{"summary":"Nodejs Guide Page","description":"Node.js/JavaScript counterpart to the Python guide.\n\nNode is the second language of hobbyist betting bots and the estate shipped only a Python\nguide. The page leads with a keyless /v1/demo/racing/next-to-go call rather than a signup\nwall, because 70 of the 169 keys ever issued (41.4%) have never made a single request —\nthe funnel loses more developers before the first call than anywhere after it.","operationId":"nodejs_guide_page_blog_australian_odds_api_nodejs_guide_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Nodejs Guide Page","description":"Node.js/JavaScript counterpart to the Python guide.\n\nNode is the second language of hobbyist betting bots and the estate shipped only a Python\nguide. The page leads with a keyless /v1/demo/racing/next-to-go call rather than a signup\nwall, because 70 of the 169 keys ever issued (41.4%) have never made a single request —\nthe funnel loses more developers before the first call than anywhere after it.","operationId":"nodejs_guide_page_blog_australian_odds_api_nodejs_guide_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blog/best-sports-tipping-service-australia":{"get":{"summary":"Best Sports Tipping","operationId":"best_sports_tipping_blog_best_sports_tipping_service_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Best Sports Tipping","operationId":"best_sports_tipping_blog_best_sports_tipping_service_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/compare":{"get":{"summary":"Compare Index","operationId":"compare_index_compare_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Compare Index","operationId":"compare_index_compare_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/compare/racing-data-apis-australia":{"get":{"summary":"Compare Page","operationId":"compare_page_compare_racing_data_apis_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Compare Page","operationId":"compare_page_compare_racing_data_apis_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/compare/betfair-api-vs-puntersedge":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_compare_betfair_api_vs_puntersedge_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_compare_betfair_api_vs_puntersedge_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/compare/krok-odds-vs-puntersedge":{"get":{"summary":"Compare Page","operationId":"compare_page_compare_krok_odds_vs_puntersedge_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Compare Page","operationId":"compare_page_compare_krok_odds_vs_puntersedge_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/the-odds-api-alternative-australia":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_the_odds_api_alternative_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_the_odds_api_alternative_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blog/historical-racing-odds-python":{"get":{"summary":"Tutorial","operationId":"tutorial_blog_historical_racing_odds_python_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Tutorial","operationId":"tutorial_blog_historical_racing_odds_python_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blog/odds-price-alert-bot-python":{"get":{"summary":"Tutorial","operationId":"tutorial_blog_odds_price_alert_bot_python_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Tutorial","operationId":"tutorial_blog_odds_price_alert_bot_python_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blog/betting-model-data-pipeline-python":{"get":{"summary":"Tutorial","operationId":"tutorial_blog_betting_model_data_pipeline_python_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Tutorial","operationId":"tutorial_blog_betting_model_data_pipeline_python_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blog/racing-next-to-go-dashboard-python":{"get":{"summary":"Tutorial","operationId":"tutorial_blog_racing_next_to_go_dashboard_python_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Tutorial","operationId":"tutorial_blog_racing_next_to_go_dashboard_python_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blog/odds-comparison-tool-python":{"get":{"summary":"Tutorial","operationId":"tutorial_blog_odds_comparison_tool_python_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Tutorial","operationId":"tutorial_blog_odds_comparison_tool_python_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blog/betting-line-movement-tracker-python":{"get":{"summary":"Tutorial","operationId":"tutorial_blog_betting_line_movement_tracker_python_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Tutorial","operationId":"tutorial_blog_betting_line_movement_tracker_python_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blog/how-to-build-arb-scanner-australia":{"get":{"summary":"Tutorial","operationId":"tutorial_blog_how_to_build_arb_scanner_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Tutorial","operationId":"tutorial_blog_how_to_build_arb_scanner_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/greyhound-results":{"get":{"summary":" View","operationId":"_view_greyhound_results_get","parameters":[{"name":"venue","in":"query","required":false,"schema":{"type":"string","title":"Venue"}},{"name":"date","in":"query","required":false,"schema":{"type":"string","title":"Date"}},{"name":"race_no","in":"query","required":false,"schema":{"type":"integer","title":"Race No"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":" View","operationId":"_view_greyhound_results_get","parameters":[{"name":"venue","in":"query","required":false,"schema":{"type":"string","title":"Venue"}},{"name":"date","in":"query","required":false,"schema":{"type":"string","title":"Date"}},{"name":"race_no","in":"query","required":false,"schema":{"type":"integer","title":"Race No"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/greyhound-results/{venue}":{"get":{"summary":" View","operationId":"_view_greyhound_results__venue__get","parameters":[{"name":"venue","in":"path","required":true,"schema":{"type":"string","title":"Venue"}},{"name":"date","in":"query","required":false,"schema":{"type":"string","title":"Date"}},{"name":"race_no","in":"query","required":false,"schema":{"type":"integer","title":"Race No"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":" View","operationId":"_view_greyhound_results__venue__get","parameters":[{"name":"venue","in":"path","required":true,"schema":{"type":"string","title":"Venue"}},{"name":"date","in":"query","required":false,"schema":{"type":"string","title":"Date"}},{"name":"race_no","in":"query","required":false,"schema":{"type":"integer","title":"Race No"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/greyhound-results/{venue}/{date}":{"get":{"summary":" View","operationId":"_view_greyhound_results__venue___date__get","parameters":[{"name":"venue","in":"path","required":true,"schema":{"type":"string","title":"Venue"}},{"name":"date","in":"path","required":true,"schema":{"type":"string","title":"Date"}},{"name":"race_no","in":"query","required":false,"schema":{"type":"integer","title":"Race No"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":" View","operationId":"_view_greyhound_results__venue___date__get","parameters":[{"name":"venue","in":"path","required":true,"schema":{"type":"string","title":"Venue"}},{"name":"date","in":"path","required":true,"schema":{"type":"string","title":"Date"}},{"name":"race_no","in":"query","required":false,"schema":{"type":"integer","title":"Race No"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/greyhound-results/{venue}/{date}/r{race_no}":{"get":{"summary":" View","operationId":"_view_greyhound_results__venue___date__r_race_no__get","parameters":[{"name":"venue","in":"path","required":true,"schema":{"type":"string","title":"Venue"}},{"name":"date","in":"path","required":true,"schema":{"type":"string","title":"Date"}},{"name":"race_no","in":"path","required":true,"schema":{"type":"integer","title":"Race No"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":" View","operationId":"_view_greyhound_results__venue___date__r_race_no__get","parameters":[{"name":"venue","in":"path","required":true,"schema":{"type":"string","title":"Venue"}},{"name":"date","in":"path","required":true,"schema":{"type":"string","title":"Date"}},{"name":"race_no","in":"path","required":true,"schema":{"type":"integer","title":"Race No"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/horse-racing-results":{"get":{"summary":" View","operationId":"_view_horse_racing_results_get","parameters":[{"name":"venue","in":"query","required":false,"schema":{"type":"string","title":"Venue"}},{"name":"date","in":"query","required":false,"schema":{"type":"string","title":"Date"}},{"name":"race_no","in":"query","required":false,"schema":{"type":"integer","title":"Race No"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":" View","operationId":"_view_horse_racing_results_get","parameters":[{"name":"venue","in":"query","required":false,"schema":{"type":"string","title":"Venue"}},{"name":"date","in":"query","required":false,"schema":{"type":"string","title":"Date"}},{"name":"race_no","in":"query","required":false,"schema":{"type":"integer","title":"Race No"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/horse-racing-results/{venue}":{"get":{"summary":" View","operationId":"_view_horse_racing_results__venue__get","parameters":[{"name":"venue","in":"path","required":true,"schema":{"type":"string","title":"Venue"}},{"name":"date","in":"query","required":false,"schema":{"type":"string","title":"Date"}},{"name":"race_no","in":"query","required":false,"schema":{"type":"integer","title":"Race No"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":" View","operationId":"_view_horse_racing_results__venue__get","parameters":[{"name":"venue","in":"path","required":true,"schema":{"type":"string","title":"Venue"}},{"name":"date","in":"query","required":false,"schema":{"type":"string","title":"Date"}},{"name":"race_no","in":"query","required":false,"schema":{"type":"integer","title":"Race No"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/horse-racing-results/{venue}/{date}":{"get":{"summary":" View","operationId":"_view_horse_racing_results__venue___date__get","parameters":[{"name":"venue","in":"path","required":true,"schema":{"type":"string","title":"Venue"}},{"name":"date","in":"path","required":true,"schema":{"type":"string","title":"Date"}},{"name":"race_no","in":"query","required":false,"schema":{"type":"integer","title":"Race No"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":" View","operationId":"_view_horse_racing_results__venue___date__get","parameters":[{"name":"venue","in":"path","required":true,"schema":{"type":"string","title":"Venue"}},{"name":"date","in":"path","required":true,"schema":{"type":"string","title":"Date"}},{"name":"race_no","in":"query","required":false,"schema":{"type":"integer","title":"Race No"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/horse-racing-results/{venue}/{date}/r{race_no}":{"get":{"summary":" View","operationId":"_view_horse_racing_results__venue___date__r_race_no__get","parameters":[{"name":"venue","in":"path","required":true,"schema":{"type":"string","title":"Venue"}},{"name":"date","in":"path","required":true,"schema":{"type":"string","title":"Date"}},{"name":"race_no","in":"path","required":true,"schema":{"type":"integer","title":"Race No"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":" View","operationId":"_view_horse_racing_results__venue___date__r_race_no__get","parameters":[{"name":"venue","in":"path","required":true,"schema":{"type":"string","title":"Venue"}},{"name":"date","in":"path","required":true,"schema":{"type":"string","title":"Date"}},{"name":"race_no","in":"path","required":true,"schema":{"type":"integer","title":"Race No"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/growth":{"get":{"summary":"Admin Growth","operationId":"admin_growth_admin_growth_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Admin Growth","operationId":"admin_growth_admin_growth_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/growth.json":{"get":{"summary":"Admin Growth Json","operationId":"admin_growth_json_admin_growth_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Admin Growth Json","operationId":"admin_growth_json_admin_growth_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/go/{target}":{"get":{"summary":"Go Target","operationId":"go_target_go__target__get","parameters":[{"name":"target","in":"path","required":true,"schema":{"type":"string","title":"Target"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":"Go Target","operationId":"go_target_go__target__get","parameters":[{"name":"target","in":"path","required":true,"schema":{"type":"string","title":"Target"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/checkout/vip":{"get":{"summary":"Checkout Vip","description":"In-app Stripe Checkout for the dedicated VIP (arb) tier — mirrors members,\ntags the subscription plan='vip' so the webhook grants arb access.","operationId":"checkout_vip_checkout_vip_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Checkout Vip","description":"In-app Stripe Checkout for the dedicated VIP (arb) tier — mirrors members,\ntags the subscription plan='vip' so the webhook grants arb access.","operationId":"checkout_vip_checkout_vip_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/checkout/members":{"get":{"summary":"Checkout Members","description":"Authenticated Stripe checkout for the members plan.\nRequires login so client_reference_id is attached and webhook can link payment to account.\nOn success: account is upgraded + welcome email with Telegram invite link is sent.","operationId":"checkout_members_checkout_members_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Checkout Members","description":"Authenticated Stripe checkout for the members plan.\nRequires login so client_reference_id is attached and webhook can link payment to account.\nOn success: account is upgraded + welcome email with Telegram invite link is sent.","operationId":"checkout_members_checkout_members_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/go/track":{"post":{"summary":"Go Track","operationId":"go_track_go_track_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/event":{"post":{"summary":"Pe Event","operationId":"pe_event_api_event_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/email-signup":{"post":{"summary":"Email Signup","operationId":"email_signup_api_email_signup_post","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/admin/refresh-stats":{"get":{"summary":"Admin Refresh Stats","description":"Trigger a stats JSON refresh from live DB. Requires admin token.","operationId":"admin_refresh_stats_api_admin_refresh_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Admin Refresh Stats","description":"Trigger a stats JSON refresh from live DB. Requires admin token.","operationId":"admin_refresh_stats_api_admin_refresh_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/conversion-clicks.json":{"get":{"summary":"Conversion Clicks","operationId":"conversion_clicks_admin_conversion_clicks_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Conversion Clicks","operationId":"conversion_clicks_admin_conversion_clicks_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"summary":"Home","description":"API-first homepage. The former tips homepage now lives at /tips.","operationId":"home__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Home","description":"API-first homepage. The former tips homepage now lives at /tips.","operationId":"home__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/playground":{"get":{"summary":"Api Playground Page","description":"Interactive no-signup API explorer (linkable asset). Runs the safe /v1/demo/* endpoints\nclient-side; shows the keyed depth endpoints from the API document's examples (2026-09-21).","operationId":"api_playground_page_playground_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Playground Page","description":"Interactive no-signup API explorer (linkable asset). Runs the safe /v1/demo/* endpoints\nclient-side; shows the keyed depth endpoints from the API document's examples (2026-09-21).","operationId":"api_playground_page_playground_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/console":{"get":{"summary":"Api Key Console Page","description":"Key console: client-side usage/plan-fit over /v1/usage. Conversion push 2026-09-01,\noperator-directed (website hold noted) — additive route, new template only.","operationId":"api_key_console_page_api_console_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Key Console Page","description":"Key console: client-side usage/plan-fit over /v1/usage. Conversion push 2026-09-01,\noperator-directed (website hold noted) — additive route, new template only.","operationId":"api_key_console_page_api_console_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/account":{"get":{"summary":"Api Account Alias","description":"Alias to the API key console. API customers arrive from a paid signup with no\nwebsite login -- their identity is the key itself (see /v1/billing/portal: \"the API\nkey is the identity\"). They naturally look for an 'account' page and used to land in\nthe tips /login, which never shows an API key. This points that instinct at the console,\nwhere pasting the key shows the plan/usage and how to upgrade it in place. Additive.","operationId":"api_account_alias_api_account_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Account Alias","description":"Alias to the API key console. API customers arrive from a paid signup with no\nwebsite login -- their identity is the key itself (see /v1/billing/portal: \"the API\nkey is the identity\"). They naturally look for an 'account' page and used to land in\nthe tips /login, which never shows an API key. This points that instinct at the console,\nwhere pasting the key shows the plan/usage and how to upgrade it in place. Additive.","operationId":"api_account_alias_api_account_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/odds-api-coverage":{"get":{"summary":"Odds Api Coverage Page","description":"Coverage hub: de-orphans the indexable bookmaker x sport endpoint pages with descriptive internal links.","operationId":"odds_api_coverage_page_odds_api_coverage_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Odds Api Coverage Page","description":"Coverage hub: de-orphans the indexable bookmaker x sport endpoint pages with descriptive internal links.","operationId":"odds_api_coverage_page_odds_api_coverage_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/inbound/{token}":{"post":{"summary":"Inbound Mail Capture","operationId":"inbound_mail_capture_inbound__token__post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard":{"get":{"summary":"Dashboard","operationId":"dashboard_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Dashboard","operationId":"dashboard_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/welcome":{"get":{"summary":"Welcome","operationId":"welcome_welcome_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Welcome","operationId":"welcome_welcome_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blog":{"get":{"summary":"Blog","description":"Developer-guide index. Was the tips blog hub until 2026-08-11 — get_blog_posts()\nnow reads an empty posts dir, so the hub is built from the API guide config.","operationId":"blog_blog_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Blog","description":"Developer-guide index. Was the tips blog hub until 2026-08-11 — get_blog_posts()\nnow reads an empty posts dir, so the hub is built from the API guide config.","operationId":"blog_blog_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blog/{slug}":{"get":{"summary":"Blog Post","operationId":"blog_post_blog__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":"Blog Post","operationId":"blog_post_blog__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/blog/sports-betting-expected-value-australia":{"get":{"summary":"Blog Ev Redirect","operationId":"blog_ev_redirect_blog_sports_betting_expected_value_australia_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Blog Ev Redirect","operationId":"blog_ev_redirect_blog_sports_betting_expected_value_australia_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/blog/sports-betting-bankroll-management-guide":{"get":{"summary":"Blog Bankroll Redirect","operationId":"blog_bankroll_redirect_blog_sports_betting_bankroll_management_guide_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Blog Bankroll Redirect","operationId":"blog_bankroll_redirect_blog_sports_betting_bankroll_management_guide_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/stats":{"get":{"summary":"Api Stats","operationId":"api_stats_api_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Api Stats","operationId":"api_stats_api_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/odds-api":{"get":{"summary":"Odds Api Landing","operationId":"odds_api_landing_odds_api_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Odds Api Landing","operationId":"odds_api_landing_odds_api_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/best-sports-odds-api-australia":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_best_sports_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_best_sports_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/tennis-odds-api-australia":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_tennis_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_tennis_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/cricket-odds-api-australia":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_cricket_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_cricket_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/nba-odds-api-australia":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_nba_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_nba_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/nrl-odds-api-australia":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_nrl_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_nrl_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/afl-odds-api-australia":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_afl_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_afl_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/neds-odds-api":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_neds_odds_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_neds_odds_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/ladbrokes-odds-api":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_ladbrokes_odds_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_ladbrokes_odds_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/tab-odds-api":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_tab_odds_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_tab_odds_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/sportsbet-odds-api":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_sportsbet_odds_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_sportsbet_odds_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/bookmaker-odds-api-australia":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_bookmaker_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_bookmaker_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/compare/sharpapi-vs-puntersedge":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_compare_sharpapi_vs_puntersedge_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_compare_sharpapi_vs_puntersedge_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/unibet-odds-api-australia":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_unibet_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_unibet_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/betting-model-data-api":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_betting_model_data_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_betting_model_data_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/odds-widget-api-australia":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_odds_widget_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_odds_widget_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/rugby-union-odds-api-australia":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_rugby_union_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_rugby_union_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/rugby-league-odds-api":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_rugby_league_odds_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_rugby_league_odds_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/greyhound-racing-api-australia":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_greyhound_racing_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_greyhound_racing_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/historical-odds-api-australia":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_historical_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_historical_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/live-odds-api-australia":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_live_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_live_odds_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/positive-ev-betting-api":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_positive_ev_betting_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_positive_ev_betting_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/arbitrage-betting-api-australia":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_arbitrage_betting_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_arbitrage_betting_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/use-cases/price-alert-system":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_api_use_cases_price_alert_system_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_api_use_cases_price_alert_system_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/use-cases/racing-dashboard":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_api_use_cases_racing_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_api_use_cases_racing_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/use-cases/betting-model-feed":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_api_use_cases_betting_model_feed_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_api_use_cases_betting_model_feed_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/use-cases/odds-comparison-widget":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_api_use_cases_odds_comparison_widget_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_api_use_cases_odds_comparison_widget_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/use-cases/arb-scanner":{"get":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_api_use_cases_arb_scanner_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Expanded Page","operationId":"api_seo_expanded_page_api_use_cases_arb_scanner_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/c54fe9d780616c7dce017bebd706963f.txt":{"get":{"summary":"Indexnow Key File","operationId":"indexnow_key_file_c54fe9d780616c7dce017bebd706963f_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Indexnow Key File","operationId":"indexnow_key_file_c54fe9d780616c7dce017bebd706963f_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/google{code}.html":{"get":{"summary":"Google Verification","operationId":"google_verification_google_code__html_get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":"Google Verification","operationId":"google_verification_google_code__html_get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/stats":{"get":{"summary":"Admin Stats Page","operationId":"admin_stats_page_admin_stats_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Admin Stats Page","operationId":"admin_stats_page_admin_stats_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/send-weekly-recap":{"get":{"summary":"Send Weekly Recap Form","operationId":"send_weekly_recap_form_admin_send_weekly_recap_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Send Weekly Recap Endpoint","operationId":"send_weekly_recap_endpoint_admin_send_weekly_recap_post","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Send Weekly Recap Form","operationId":"send_weekly_recap_form_admin_send_weekly_recap_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/unsubscribe":{"get":{"summary":"Unsubscribe Page","operationId":"unsubscribe_page_unsubscribe_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Unsubscribe Submit","description":"Accepts the confirm form, and a signed POST from anything that prefers POST.\n\nThe address may also arrive in the query string, which is how a link that was clicked\nwith a token and then submitted keeps its identity.","operationId":"unsubscribe_submit_unsubscribe_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Unsubscribe Page","operationId":"unsubscribe_page_unsubscribe_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/signup":{"post":{"summary":"Api Signup","operationId":"api_signup_api_signup_post","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/pricing":{"get":{"summary":"Pricing","operationId":"pricing_pricing_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Pricing","operationId":"pricing_pricing_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/signup":{"get":{"summary":"Signup Page","operationId":"signup_page_signup_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Signup Submit","operationId":"signup_submit_signup_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Signup Page","operationId":"signup_page_signup_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/onboarding":{"get":{"summary":"Onboarding Get","operationId":"onboarding_get_onboarding_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Onboarding Post","operationId":"onboarding_post_onboarding_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Onboarding Get","operationId":"onboarding_get_onboarding_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/login":{"get":{"summary":"Login Page","description":"The API account login (2026-09-28): email + password against api.puntersedge.online\n(POST /v1/login), with the emailed one-time link as the fallback for customers who have\nnot set a password. All client-side — see templates/login.html. The SQLite password form\nthat lived here (admins and the retired tips Members) is now /admin/login.","operationId":"login_page_login_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Login Page","description":"The API account login (2026-09-28): email + password against api.puntersedge.online\n(POST /v1/login), with the emailed one-time link as the fallback for customers who have\nnot set a password. All client-side — see templates/login.html. The SQLite password form\nthat lived here (admins and the retired tips Members) is now /admin/login.","operationId":"login_page_login_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/login":{"get":{"summary":"Admin Login Page","description":"Password login for the SQLite `users` table: the admin accounts and the retired tips\nMembers (2026-09-28). It lived at /login until API accounts got a password of their own;\nthat page now authenticates API customers, so the legacy form has a page of its own.","operationId":"admin_login_page_admin_login_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Login Submit","operationId":"login_submit_admin_login_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Admin Login Page","description":"Password login for the SQLite `users` table: the admin accounts and the retired tips\nMembers (2026-09-28). It lived at /login until API accounts got a password of their own;\nthat page now authenticates API customers, so the legacy form has a page of its own.","operationId":"admin_login_page_admin_login_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/logout":{"get":{"summary":"Logout","operationId":"logout_logout_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Logout","operationId":"logout_logout_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/forgot-password":{"get":{"summary":"Forgot Password Page","description":"API account password reset (2026-09-28): the page POSTs to api.puntersedge.online\n/v1/password/forgot, which mails a 30-minute link to /reset-password?token=...","operationId":"forgot_password_page_forgot_password_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Forgot Password Page","description":"API account password reset (2026-09-28): the page POSTs to api.puntersedge.online\n/v1/password/forgot, which mails a 30-minute link to /reset-password?token=...","operationId":"forgot_password_page_forgot_password_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/forgot-password":{"post":{"summary":"Forgot Password Submit","operationId":"forgot_password_submit_admin_forgot_password_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/reset-password":{"get":{"summary":"Reset Password Page","description":"Landing page for the API's password-reset email (2026-09-28). The token is minted and\nchecked by api.puntersedge.online (POST /v1/password/forgot -> POST /v1/password/reset);\nthis page only carries it into the form, so an expired link is reported by the API rather\nthan guessed here against a table the token was never in.","operationId":"reset_password_page_reset_password_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Reset Password Page","description":"Landing page for the API's password-reset email (2026-09-28). The token is minted and\nchecked by api.puntersedge.online (POST /v1/password/forgot -> POST /v1/password/reset);\nthis page only carries it into the form, so an expired link is reported by the API rather\nthan guessed here against a table the token was never in.","operationId":"reset_password_page_reset_password_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/reset-password":{"post":{"summary":"Reset Password Submit","operationId":"reset_password_submit_admin_reset_password_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/account":{"get":{"summary":"Account Page","operationId":"account_page_account_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Account Page","operationId":"account_page_account_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/account/api-key":{"post":{"summary":"Account Api Key","operationId":"account_api_key_account_api_key_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/members/archive":{"get":{"summary":"Members Archive","operationId":"members_archive_members_archive_get","parameters":[{"name":"sport","in":"query","required":false,"schema":{"type":"string","default":"","title":"Sport"}},{"name":"result","in":"query","required":false,"schema":{"type":"string","default":"","title":"Result"}},{"name":"tier","in":"query","required":false,"schema":{"type":"string","default":"","title":"Tier"}},{"name":"date_filter","in":"query","required":false,"schema":{"type":"string","default":"","title":"Date Filter"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":"Members Archive","operationId":"members_archive_members_archive_get","parameters":[{"name":"sport","in":"query","required":false,"schema":{"type":"string","default":"","title":"Sport"}},{"name":"result","in":"query","required":false,"schema":{"type":"string","default":"","title":"Result"}},{"name":"tier","in":"query","required":false,"schema":{"type":"string","default":"","title":"Tier"}},{"name":"date_filter","in":"query","required":false,"schema":{"type":"string","default":"","title":"Date Filter"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/tips":{"get":{"summary":"Admin Tips Page","operationId":"admin_tips_page_admin_tips_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Admin Tip Create","operationId":"admin_tip_create_admin_tips_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Admin Tips Page","operationId":"admin_tips_page_admin_tips_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/tips/{tip_id}/update":{"post":{"summary":"Admin Tip Update","operationId":"admin_tip_update_admin_tips__tip_id__update_post","parameters":[{"name":"tip_id","in":"path","required":true,"schema":{"type":"integer","title":"Tip Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stripe/create-checkout":{"post":{"summary":"Stripe Create Checkout","operationId":"stripe_create_checkout_api_stripe_create_checkout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/stripe/create-api-checkout":{"post":{"summary":"Stripe Create Api Checkout","description":"Create Stripe checkout for AU Odds API paid plans.","operationId":"stripe_create_api_checkout_api_stripe_create_api_checkout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/webhook/stripe/tipster":{"post":{"summary":"Legacy Tipster Webhook","operationId":"legacy_tipster_webhook_webhook_stripe_tipster_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/punters/webhook/stripe":{"post":{"summary":"Legacy Punters Webhook","operationId":"legacy_punters_webhook_punters_webhook_stripe_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/stripe/webhook":{"post":{"summary":"Stripe Webhook","operationId":"stripe_webhook_api_stripe_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/stripe/billing-portal":{"get":{"summary":"Stripe Billing Portal","operationId":"stripe_billing_portal_api_stripe_billing_portal_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Stripe Billing Portal","operationId":"stripe_billing_portal_api_stripe_billing_portal_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/today/preview":{"get":{"summary":"Today Preview","description":"Returns only a count of today's paid tips — safe for any user.","operationId":"today_preview_api_today_preview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Today Preview","description":"Returns only a count of today's paid tips — safe for any user.","operationId":"today_preview_api_today_preview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/members-launch":{"get":{"summary":"Members Launch","operationId":"members_launch_members_launch_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Members Launch","operationId":"members_launch_members_launch_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/r/{code}":{"get":{"summary":"Referral Landing","operationId":"referral_landing_r__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":"Referral Landing","operationId":"referral_landing_r__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/signup/ref/{code}":{"post":{"summary":"Signup With Ref","description":"Signup that stores referral attribution.","operationId":"signup_with_ref_signup_ref__code__post","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/account/cancel":{"get":{"summary":"Cancel Save Page","operationId":"cancel_save_page_account_cancel_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Cancel Save Page","operationId":"cancel_save_page_account_cancel_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/account/cancel/feedback":{"post":{"summary":"Cancel Feedback Submit","operationId":"cancel_feedback_submit_account_cancel_feedback_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/referrals":{"get":{"summary":"Admin Referrals","operationId":"admin_referrals_admin_referrals_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Admin Referral Create","operationId":"admin_referral_create_admin_referrals_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Admin Referrals","operationId":"admin_referrals_admin_referrals_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/arbs":{"get":{"summary":"Arbs Page","operationId":"arbs_page_arbs_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Arbs Page","operationId":"arbs_page_arbs_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/arbs/feed.json":{"get":{"summary":"Arbs Feed","operationId":"arbs_feed_arbs_feed_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Arbs Feed","operationId":"arbs_feed_arbs_feed_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/arbs/betfair/connect":{"post":{"summary":"Betfair Connect Route","operationId":"betfair_connect_route_arbs_betfair_connect_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/arbs/betfair/disconnect":{"post":{"summary":"Betfair Disconnect Route","operationId":"betfair_disconnect_route_arbs_betfair_disconnect_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/arbs/betfair/status.json":{"get":{"summary":"Betfair Status Route","operationId":"betfair_status_route_arbs_betfair_status_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Betfair Status Route","operationId":"betfair_status_route_arbs_betfair_status_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/vip/welcome":{"get":{"summary":"Vip Welcome","operationId":"vip_welcome_vip_welcome_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Vip Welcome","operationId":"vip_welcome_vip_welcome_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/arb-machine":{"get":{"summary":"Arb Machine Page","description":"Arb business front door — ADMIN-ONLY since 2026-08-27 (operator request: internal\nproduct experiments come off the public surface; the public identity is the racing\nodds API). The page and the gated /arbs tool behind it stay reachable for the operator.","operationId":"arb_machine_page_arb_machine_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Arb Machine Page","description":"Arb business front door — ADMIN-ONLY since 2026-08-27 (operator request: internal\nproduct experiments come off the public surface; the public identity is the racing\nodds API). The page and the gated /arbs tool behind it stay reachable for the operator.","operationId":"arb_machine_page_arb_machine_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/arb-status":{"get":{"summary":"Arb Status Page","description":"Admin-only read-only status of the arb engine + audit bot.","operationId":"arb_status_page_arb_status_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Arb Status Page","description":"Admin-only read-only status of the arb engine + audit bot.","operationId":"arb_status_page_arb_status_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/arb-status/ticket/confirm":{"post":{"summary":"Arb Ticket Confirm","operationId":"arb_ticket_confirm_arb_status_ticket_confirm_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/arb-status/ticket/void":{"post":{"summary":"Arb Ticket Void","operationId":"arb_ticket_void_arb_status_ticket_void_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/promos":{"get":{"summary":"Promos Page","operationId":"promos_page_promos_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Promos Page","operationId":"promos_page_promos_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/odds-health":{"get":{"summary":"Admin Odds Health","operationId":"admin_odds_health_admin_odds_health_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Admin Odds Health","operationId":"admin_odds_health_admin_odds_health_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/arb-machine":{"get":{"summary":"Admin Arb Machine","operationId":"admin_arb_machine_admin_arb_machine_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Admin Arb Machine","operationId":"admin_arb_machine_admin_arb_machine_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/arb-machine/control":{"post":{"summary":"Admin Arb Machine Control","operationId":"admin_arb_machine_control_admin_arb_machine_control_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/arb-machine/ticket":{"post":{"summary":"Admin Arb Machine Ticket","operationId":"admin_arb_machine_ticket_admin_arb_machine_ticket_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/arb-results.json":{"get":{"summary":"Arb Results Json","operationId":"arb_results_json_arb_results_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Arb Results Json","operationId":"arb_results_json_arb_results_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/arb-results":{"get":{"summary":"Arb Results Page","description":"Public, read-only track record — the honest 'profit generated for members'\nfigure (real, member-reported settled bets) + recent results. Shows a 'launching'\nstate until a member settles a bet (never a fabricated number).","operationId":"arb_results_page_arb_results_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Arb Results Page","description":"Public, read-only track record — the honest 'profit generated for members'\nfigure (real, member-reported settled bets) + recent results. Shows a 'launching'\nstate until a member settles a bet (never a fabricated number).","operationId":"arb_results_page_arb_results_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/my-bets":{"get":{"summary":"My Bets Page","description":"Member bet tracker: log the arbs you place, settle with the real profit, see\nyour running profit and the {PROFIT_SHARE_PCT}% share owed.","operationId":"my_bets_page_my_bets_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"My Bets Page","description":"Member bet tracker: log the arbs you place, settle with the real profit, see\nyour running profit and the {PROFIT_SHARE_PCT}% share owed.","operationId":"my_bets_page_my_bets_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/my-bets/log":{"post":{"summary":"My Bets Log","operationId":"my_bets_log_my_bets_log_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/my-bets/settle":{"post":{"summary":"My Bets Settle","operationId":"my_bets_settle_my_bets_settle_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/my-bets/void":{"post":{"summary":"My Bets Void","operationId":"my_bets_void_my_bets_void_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/my-bets/audit":{"post":{"summary":"My Bets Audit","operationId":"my_bets_audit_my_bets_audit_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/arb-machine/audit/{sub_id}.csv":{"get":{"summary":"Admin Audit Raw","description":"Download the raw uploaded CSV for one audit submission (admin-only, evidence).","operationId":"admin_audit_raw_admin_arb_machine_audit__sub_id__csv_get","parameters":[{"name":"sub_id","in":"path","required":true,"schema":{"type":"integer","title":"Sub Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":"Admin Audit Raw","description":"Download the raw uploaded CSV for one audit submission (admin-only, evidence).","operationId":"admin_audit_raw_admin_arb_machine_audit__sub_id__csv_get","parameters":[{"name":"sub_id","in":"path","required":true,"schema":{"type":"integer","title":"Sub Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/arb-machine/invoice":{"post":{"summary":"Admin Generate Invoice","description":"Admin: generate the {pct}% profit-share invoice(s) for a period. Either one\nmember (by email) or every member with billable profit (bill_all).","operationId":"admin_generate_invoice_admin_arb_machine_invoice_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/my-bets/payment-method/setup":{"post":{"summary":"My Bets Pm Setup","description":"Send the member to Stripe Checkout (setup mode) to save a card + payment\nmandate, so future profit-share invoices can auto-charge instead of needing a\nmanual pay-link.","operationId":"my_bets_pm_setup_my_bets_payment_method_setup_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/arb-machine/tickets.json":{"get":{"summary":"Admin Arb Machine Tickets Json","description":"Live pending tickets for the cockpit's 2s poller (admin-only). Lighter than\na full status run so a fallback/manual ticket surfaces within ~2s (with a beep)\ninstead of on the 15s page refresh.","operationId":"admin_arb_machine_tickets_json_admin_arb_machine_tickets_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Admin Arb Machine Tickets Json","description":"Live pending tickets for the cockpit's 2s poller (admin-only). Lighter than\na full status run so a fallback/manual ticket surfaces within ~2s (with a beep)\ninstead of on the 15s page refresh.","operationId":"admin_arb_machine_tickets_json_admin_arb_machine_tickets_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/requests":{"get":{"summary":"Feature Requests Page","operationId":"feature_requests_page_requests_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Feature Request Submit","operationId":"feature_request_submit_requests_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Feature Requests Page","operationId":"feature_requests_page_requests_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/contact/sales":{"get":{"summary":"Sales Enquiry Page","operationId":"sales_enquiry_page_contact_sales_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Sales Enquiry Submit","operationId":"sales_enquiry_submit_contact_sales_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Sales Enquiry Page","operationId":"sales_enquiry_page_contact_sales_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/requests":{"get":{"summary":"Admin Feature Requests","operationId":"admin_feature_requests_admin_requests_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Admin Feature Request Update","operationId":"admin_feature_request_update_admin_requests_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Admin Feature Requests","operationId":"admin_feature_requests_admin_requests_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/requests.json":{"get":{"summary":"Admin Feature Requests Json","description":"Counts only, for a future digest line. No bodies, no emails — a digest that\nquotes customer text puts it in a log and in an inbox for no added value.","operationId":"admin_feature_requests_json_admin_requests_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Admin Feature Requests Json","description":"Counts only, for a future digest line. No bodies, no emails — a digest that\nquotes customer text puts it in a log and in an inbox for no added value.","operationId":"admin_feature_requests_json_admin_requests_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/referrals":{"get":{"summary":"Referrals Programme Page","description":"The developer referral programme: terms, and the partner's own link and ledger.\n\nRenders for everyone, logged in or not, with an empty key box. The numbers arrive from\n/v1/referral in the browser.","operationId":"referrals_programme_page_api_referrals_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Referrals Programme Page","description":"The developer referral programme: terms, and the partner's own link and ledger.\n\nRenders for everyone, logged in or not, with an empty key box. The numbers arrive from\n/v1/referral in the browser.","operationId":"referrals_programme_page_api_referrals_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/built-with":{"get":{"summary":"Built With Page","operationId":"built_with_page_built_with_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Built With Submit","operationId":"built_with_submit_built_with_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Built With Page","operationId":"built_with_page_built_with_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/built-with/badge":{"get":{"summary":"Built With Badge Page","description":"The badge a customer can put on their own site, and what they get for it (2026-09-18).\n\nIts own page rather than a section of /built-with because the URL gets pasted into\noutreach mail, SDK READMEs and support replies, and because /built-with should stay\nabout the listings. The artwork itself is six static files under /static/badge/ — see\nstatic/badge/README-SERVING.txt for why it is not a route.","operationId":"built_with_badge_page_built_with_badge_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Built With Badge Page","description":"The badge a customer can put on their own site, and what they get for it (2026-09-18).\n\nIts own page rather than a section of /built-with because the URL gets pasted into\noutreach mail, SDK READMEs and support replies, and because /built-with should stay\nabout the listings. The artwork itself is six static files under /static/badge/ — see\nstatic/badge/README-SERVING.txt for why it is not a route.","operationId":"built_with_badge_page_built_with_badge_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/press":{"get":{"summary":"Press Kit Page","description":"Press and brand kit (2026-09-18): the facts, boilerplate, logos and links for anyone\ndescribing PuntersEdge somewhere we do not control. Every count on it renders from the\n`facts` template global with the base.html guard, never from a literal.","operationId":"press_kit_page_press_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Press Kit Page","description":"Press and brand kit (2026-09-18): the facts, boilerplate, logos and links for anyone\ndescribing PuntersEdge somewhere we do not control. Every count on it renders from the\n`facts` template global with the base.html guard, never from a literal.","operationId":"press_kit_page_press_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/showcase":{"get":{"summary":"Admin Showcase","operationId":"admin_showcase_admin_showcase_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Admin Showcase Action","operationId":"admin_showcase_action_admin_showcase_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Admin Showcase","operationId":"admin_showcase_admin_showcase_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/market-report.json":{"get":{"summary":"Market Report Json","operationId":"market_report_json_market_report_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Market Report Json","operationId":"market_report_json_market_report_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/market-report":{"get":{"summary":"Market Report Page","operationId":"market_report_page_market_report_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Market Report Page","operationId":"market_report_page_market_report_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/market-report/{key}":{"get":{"summary":"Market Report Edition","description":"A fixed monthly edition: /market-report/2026-09 (page) or /market-report/2026-09.json.\nServed from market_reports/<key>.json, written once by tools/market_report_month.py.\nUnknown or malformed keys 404 (never a redirect, never the live report in disguise).","operationId":"market_report_edition_market_report__key__get","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":"Market Report Edition","description":"A fixed monthly edition: /market-report/2026-09 (page) or /market-report/2026-09.json.\nServed from market_reports/<key>.json, written once by tools/market_report_month.py.\nUnknown or malformed keys 404 (never a redirect, never the live report in disguise).","operationId":"market_report_edition_market_report__key__get","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/horse-racing-api-australia":{"get":{"summary":"Api Seo Landing Page","operationId":"api_seo_landing_page_horse_racing_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Landing Page","operationId":"api_seo_landing_page_horse_racing_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/odds-comparison-api-australia":{"get":{"summary":"Api Seo Landing Page","operationId":"api_seo_landing_page_odds_comparison_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Landing Page","operationId":"api_seo_landing_page_odds_comparison_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/sports-betting-api-australia":{"get":{"summary":"Api Seo Landing Page","operationId":"api_seo_landing_page_sports_betting_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Landing Page","operationId":"api_seo_landing_page_sports_betting_api_australia_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/australian-sports-odds-api":{"get":{"summary":"Api Seo Landing Page","operationId":"api_seo_landing_page_australian_sports_odds_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"summary":"Api Seo Landing Page","operationId":"api_seo_landing_page_australian_sports_odds_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/{page_path}":{"get":{"summary":"Educational Pages","operationId":"educational_pages__page_path__get","parameters":[{"name":"page_path","in":"path","required":true,"schema":{"type":"string","title":"Page Path"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":"Educational Pages","operationId":"educational_pages__page_path__get","parameters":[{"name":"page_path","in":"path","required":true,"schema":{"type":"string","title":"Page Path"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}