{"openapi":"3.1.0","info":{"title":"Furlong API","version":"0.1.0","description":"A hand-curated horse racing terminology and reference connector: distance unit conversion, the US Triple Crown races with current venue status, race-class and racing terminology, a betting-terminology reference (not advice), track surfaces, silks tradition, and racing age/class conventions.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://furlong.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/furlong/docs"},"termsOfService":"https://connectorbay.com/furlong/terms"},"servers":[{"url":"https://furlong.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/furlong/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/distance_unit_converter":{"post":{"operationId":"distance_unit_converter","summary":"Converts a racing distance between furlongs, miles and meters, using the exact modern definition (1","description":"Converts a racing distance between furlongs, miles and meters, using the exact modern definition (1\n    furlong = 1/8 mile = 660 feet = 220 yards = 201.168 meters). Provide exactly one of furlongs/miles/meters;\n    the other units are returned. Also lists common race distances for reference. Use for \"how many meters\n    is a furlong\", \"convert 6 furlongs to miles\", \"what's 1.25 miles in furlongs\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"furlongs":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"A distance in furlongs to convert.","title":"Furlongs"},"miles":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"A distance in miles to convert.","title":"Miles"},"meters":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"A distance in meters to convert.","title":"Meters"}},"title":"distance_unit_converterArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/triple_crown_race_info":{"post":{"operationId":"triple_crown_race_info","summary":"One US Triple Crown race's distance, traditional date, track, and CURRENT venue status — including","description":"One US Triple Crown race's distance, traditional date, track, and CURRENT venue status — including\n    the Preakness Stakes' 2026 relocation to Laurel Park (Pimlico under reconstruction) and the Belmont\n    Stakes' 2024-2026 relocation to Saratoga Race Course at a shortened distance (Belmont Park under\n    reconstruction), both expected to return to their traditional homes in 2027. Omit race_name to list all\n    three races and the Triple Crown overview. Use for \"what track is the Kentucky Derby at\", \"where is the\n    Preakness run this year\", \"how long is the Belmont Stakes\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"race_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Kentucky Derby, Preakness Stakes, or Belmont Stakes; omit to list all three.","examples":["Kentucky Derby","Preakness Stakes","Belmont Stakes"],"title":"Race Name"}},"title":"triple_crown_race_infoArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/race_type_info":{"post":{"operationId":"race_type_info","summary":"Explains a race class/type — maiden, claiming, allowance, or stakes — including how each fits into","description":"Explains a race class/type — maiden, claiming, allowance, or stakes — including how each fits into\n    the overall class structure of a racing card. Use for \"what's a maiden race\", \"what does claiming mean\n    in horse racing\", \"what's the difference between allowance and stakes races\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"maiden | claiming | allowance | stakes. Omit to list all.","title":"Type"}},"title":"race_type_infoArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/racing_terminology_guide":{"post":{"operationId":"racing_terminology_guide","summary":"General horse racing terminology — post position, photo finish, furlong pole, silks, paddock, route","description":"General horse racing terminology — post position, photo finish, furlong pole, silks, paddock, route\n    vs. sprint, morning line, scratch, fractions/splits, backstretch, homestretch. Use for \"what does post\n    position mean\", \"what's a photo finish\", \"what is the furlong pole\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"term":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A specific term to look up, e.g. post position, photo finish, furlong pole, silks, paddock, morning line, scratch. Omit to list all.","title":"Term"}},"title":"racing_terminology_guideArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/betting_terminology_reference":{"post":{"operationId":"betting_terminology_reference","summary":"Explains racetrack wagering VOCABULARY only — win/place/show, across the board, exacta/trifecta/","description":"Explains racetrack wagering VOCABULARY only — win/place/show, across the board, exacta/trifecta/\n    superfecta, odds, pari-mutuel wagering, handle, favorite/longshot. This is a terminology reference, not\n    betting advice, a recommendation to wager, an odds calculator, or gambling encouragement — it never\n    calculates odds or suggests a bet. Every response carries an explicit not-advice disclaimer with a\n    problem-gambling helpline. Use for \"what does exacta mean\", \"what's the difference between win place and\n    show\", \"what is a trifecta\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"term":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A specific betting term to look up, e.g. win, place, show, exacta, trifecta, superfecta, odds, pari-mutuel, handle, favorite, longshot. Omit to list all.","title":"Term"}},"title":"betting_terminology_referenceArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/track_surface_info":{"post":{"operationId":"track_surface_info","summary":"Describes a racing surface type — dirt, turf, or synthetic (e.g. Tapeta, Polytrack) — and its typical","description":"Describes a racing surface type — dirt, turf, or synthetic (e.g. Tapeta, Polytrack) — and its typical\n    characteristics. Use for \"what's the difference between dirt and turf racing\", \"what is Tapeta\", \"what\n    surface is synthetic racing\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"surface":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"dirt | turf | synthetic. Omit to list all three.","title":"Surface"}},"title":"track_surface_infoArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/racing_silks_tradition_info":{"post":{"operationId":"racing_silks_tradition_info","summary":"A general factual note on the jockey-silks (racing colors) tradition — its origin, purpose, and","description":"A general factual note on the jockey-silks (racing colors) tradition — its origin, purpose, and\n    modern-day registration practice. Use for \"why do jockeys wear bright colors\", \"what are racing silks\",\n    \"are racing colors registered to an owner\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"racing_silks_tradition_infoArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/horse_age_and_class_terminology_guide":{"post":{"operationId":"horse_age_and_class_terminology_guide","summary":"Racing-specific age and class terminology — 2-year-old, 3-year-old, older/aged horse, and the","description":"Racing-specific age and class terminology — 2-year-old, 3-year-old, older/aged horse, and the\n    universal January 1st (August 1st in the Southern Hemisphere) Thoroughbred birthday convention used for\n    racing-age purposes — plus class terms (claiming/allowance/stakes class, black type). Distinct from\n    saddle's general equestrian age terms (foal, yearling, colt, filly), which describe the same life stages\n    without this racing-specific convention. Use for \"why do all racehorses turn a year older on January\n    1st\", \"what is a 3-year-old in horse racing\", \"what does black type mean\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"horse_age_and_class_terminology_guideArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/racing_glossary":{"post":{"operationId":"racing_glossary","summary":"A short core glossary of horse racing terms (furlong, maiden, stakes race, claiming race, post","description":"A short core glossary of horse racing terms (furlong, maiden, stakes race, claiming race, post\n    position, photo finish, silks, win/place/show, exacta, trifecta, dirt, turf, Triple Crown, furlong\n    pole). Use for \"what does maiden mean in horse racing\", \"what is the Triple Crown\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"term":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A specific term to look up; omit to list all.","title":"Term"}},"title":"racing_glossaryArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}