{"openapi":"3.0.0","info":{"title":"Aspiturf API","version":"2.0.0","description":"API de donnees hippiques Aspiturf. Fournit des informations sur les courses, chevaux, jockeys, analyses de paris (trio, couple, quarte) et statistiques d'hippodromes.","contact":{"name":"Aspiturf","url":"https://aspiturf.com"}},"servers":[{"url":"https://aspiturf.com/api","description":"Production"},{"url":"http://localhost:1337","description":"Local"}],"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","in":"query","name":"uid","description":"UID utilisateur Firebase avec un paiement valide (< 30 jours). Peut aussi etre passe dans le header `uid`."},"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"Firebase ID Token","description":"Token Firebase ID obtenu via Firebase Auth."}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"string","example":"Une erreur s'est produite."}}},"Caractrap":{"type":"object","description":"Caracteristiques de la course","properties":{"id":{"type":"integer","example":123456},"jour":{"type":"string","format":"date","example":"2025-04-15"},"reun":{"type":"integer","example":1,"description":"Numero de reunion"},"prix":{"type":"integer","example":3,"description":"Numero de course/prix"},"hippo":{"type":"string","example":"ParisLongchamp","description":"Nom de l'hippodrome"},"typec":{"type":"string","example":"Plat","description":"Type de course (Plat, Attele, Monte, etc.)"},"partant":{"type":"integer","example":14,"description":"Nombre de partants"},"handi":{"type":"string","description":"Handicap"},"reclam":{"type":"string","description":"Course a reclamer"},"autos":{"type":"string","description":"Autostart"},"quinte":{"type":"string","description":"Course quinte"},"cheque":{"type":"string"},"amat":{"type":"string","description":"Apprentis/Amateurs"},"courseabc":{"type":"string"},"groupe":{"type":"string","description":"Groupe de la course"},"comp":{"type":"string"}}},"Cachedate":{"type":"object","description":"Donnees detaillees du partant dans une course","properties":{"numcourse":{"type":"integer","description":"ID de la course (ref caractrap)"},"jour":{"type":"string","format":"date"},"cheval":{"type":"string","example":"DOHA STAR"},"idChe":{"type":"integer","description":"ID unique du cheval"},"jockey":{"type":"string","example":"M. BARZALONA"},"idJockey":{"type":"integer","description":"ID unique du jockey"},"numero":{"type":"integer","description":"Numero du partant"},"cl":{"type":"string","description":"Classement (1, 2, 3... ou NP)"},"cotedirect":{"type":"number","description":"Cote directe"},"rangCotes":{"type":"integer","description":"Rang dans les cotes"},"hippo":{"type":"string"},"typec":{"type":"string"},"partant":{"type":"integer"},"musiqueche":{"type":"string","description":"Musique du cheval (tronquee a 30 car.)"},"musiquejoc":{"type":"string","description":"Musique du jockey (tronquee a 30 car.)"},"musiqueent":{"type":"string","description":"Musique de l'entraineur (tronquee a 30 car.)"},"defoeil":{"type":"string","description":"Defaut oeillere (DD, D4, DA, DP, etc.)"},"derniereplace":{"type":"string","description":"Derniere place obtenue"},"sexe":{"type":"string"},"age":{"type":"integer"}}},"CachedateWithCourse":{"allOf":[{"$ref":"#/components/schemas/Cachedate"},{"type":"object","properties":{"numcourse":{"$ref":"#/components/schemas/Caractrap"}}}],"description":"Partant avec les details de course imbriques"},"SearchResult":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"example":["12345: DOHA STAR","67890: DOHA QUEEN"]}}}}},"tags":[{"name":"Public","description":"Routes publiques sans authentification"},{"name":"Courses","description":"Donnees des courses et partants"},{"name":"Chevaux & Jockeys","description":"Historique et recherche de chevaux/jockeys"}],"paths":{"/free/arrive/{jour}/{r}/{c}":{"get":{"summary":"Arrivee d'une course (public)","description":"Retourne les caracteristiques et l'arrivee d'une course specifique. Route publique.","tags":["Public"],"parameters":[{"in":"path","name":"jour","required":true,"schema":{"type":"string","format":"date","example":"2025-04-15"},"description":"Date de la course"},{"in":"path","name":"r","required":true,"schema":{"type":"integer","example":1},"description":"Numero de reunion"},{"in":"path","name":"c","required":true,"schema":{"type":"integer","example":3},"description":"Numero de course"}],"responses":{"200":{"description":"Caracteristiques de la course","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Caractrap"}}}},"400":{"description":"Parametres manquants"}}}},"/api/commen/{numcourse}":{"get":{"summary":"Commentaires de la course","description":"Retourne les commentaires et statistiques communes d'une course via procedure stockee.","tags":["Courses"],"security":[{"ApiKey":[]}],"parameters":[{"in":"path","name":"numcourse","required":true,"schema":{"type":"integer"},"description":"ID de la course"}],"responses":{"200":{"description":"Resultats de la procedure stockee commen"},"400":{"description":"numcourse manquant"},"401":{"description":"UID invalide ou paiement expire"},"429":{"description":"Rate limit depasse"}}}},"/api/horse/{idChe}/{jour}":{"get":{"summary":"Historique d'un cheval","description":"Retourne l'historique des courses d'un cheval jusqu'a la date indiquee.","tags":["Chevaux & Jockeys"],"security":[{"ApiKey":[]}],"parameters":[{"in":"path","name":"idChe","required":true,"schema":{"type":"integer"},"description":"ID unique du cheval"},{"in":"path","name":"jour","required":true,"schema":{"type":"string","format":"date"},"description":"Date limite (incluse)"}],"responses":{"200":{"description":"Historique des courses du cheval","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Cachedate"}}}}},"401":{"description":"Non autorise"},"429":{"description":"Rate limit depasse"}}}},"/api/jockey/{idJockey}/{jour}":{"get":{"summary":"Historique d'un jockey","description":"Retourne l'historique des courses d'un jockey jusqu'a la date indiquee.","tags":["Chevaux & Jockeys"],"security":[{"ApiKey":[]}],"parameters":[{"in":"path","name":"idJockey","required":true,"schema":{"type":"integer"},"description":"ID unique du jockey"},{"in":"path","name":"jour","required":true,"schema":{"type":"string","format":"date"},"description":"Date limite (incluse)"},{"in":"query","name":"limit","schema":{"type":"integer","default":1000},"description":"Nombre maximum de resultats"}],"responses":{"200":{"description":"Historique des courses du jockey","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Cachedate"}}}}}}},"401":{"description":"Non autorise"},"429":{"description":"Rate limit depasse"}}}},"/api/searchHorseByName/{name}":{"get":{"summary":"Rechercher un cheval par nom","description":"Recherche full-text d'un cheval par son nom. Retourne les IDs et noms correspondants.","tags":["Chevaux & Jockeys"],"security":[{"ApiKey":[]}],"parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string","example":"DOHA"},"description":"Debut ou totalite du nom du cheval"}],"responses":{"200":{"description":"Liste des chevaux trouves","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResult"}}}},"400":{"description":"Parametre name manquant"},"401":{"description":"Non autorise"}}}},"/api/searchJockeyByName/{name}":{"get":{"summary":"Rechercher un jockey par nom","description":"Recherche full-text d'un jockey par son nom. Retourne les IDs et noms correspondants.","tags":["Chevaux & Jockeys"],"security":[{"ApiKey":[]}],"parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string","example":"BARZALONA"},"description":"Debut ou totalite du nom du jockey"}],"responses":{"200":{"description":"Liste des jockeys trouves","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResult"}}}},"400":{"description":"Parametre name manquant"},"401":{"description":"Non autorise"}}}},"/api/compar/{numcourse}":{"get":{"summary":"Comparaison des partants","description":"Compare les statistiques des partants d'une course via procedure stockee.","tags":["Courses"],"security":[{"ApiKey":[]}],"parameters":[{"in":"path","name":"numcourse","required":true,"schema":{"type":"integer"},"description":"ID de la course"}],"responses":{"200":{"description":"Resultats de comparaison"},"400":{"description":"numcourse manquant"},"401":{"description":"Non autorise"},"429":{"description":"Rate limit depasse"}}}},"/api/{jour}/{r}/{c}":{"get":{"summary":"Partants d'une course","description":"Retourne la liste des partants pour un jour donne, avec filtrage optionnel\npar reunion et course. Les donnees incluent les details de la course (caractrap)\nimbriques dans le champ `numcourse`.\n","tags":["Courses"],"security":[{"ApiKey":[]}],"parameters":[{"in":"path","name":"jour","required":true,"schema":{"type":"string","format":"date","example":"2025-04-15"},"description":"Date de la course (YYYY-MM-DD)"},{"in":"path","name":"r","schema":{"type":"integer","example":1},"description":"Numero de reunion (optionnel)"},{"in":"path","name":"c","schema":{"type":"integer","example":3},"description":"Numero de course (optionnel)"},{"in":"query","name":"limit","schema":{"type":"integer","default":100000},"description":"Nombre maximum de resultats"}],"responses":{"200":{"description":"Liste des partants","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CachedateWithCourse"}}}}},"400":{"description":"Parametre jour manquant"},"401":{"description":"Non autorise"},"429":{"description":"Rate limit depasse"}}}}}}