{"openapi":"3.1.0","info":{"title":"SkillBridge API","summary":"Data & AI provider pour le dataspace éducation & compétences","description":"API lecture seule du provider SkillBridge — profils de maîtrise, clustering empirique et recommandations explicables. Tous les calculs sont préchargés au démarrage ; les requêtes sont des lookups en mémoire (cohérence + perf).","version":"0.1.0"},"paths":{"/health":{"get":{"tags":["meta"],"summary":"Get Health","operationId":"get_health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthOut"}}}}}}},"/learners":{"get":{"tags":["learners"],"summary":"List Learners","operationId":"list_learners_learners_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/LearnerOut"},"type":"array","title":"Response List Learners Learners Get"}}}}}}},"/profile/{learner_id}":{"get":{"tags":["learners"],"summary":"Get Profile","operationId":"get_profile_profile__learner_id__get","parameters":[{"name":"learner_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Learner Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/clusters":{"get":{"tags":["clusters"],"summary":"Get Clusters","operationId":"get_clusters_clusters_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClusteringOut"}}}}}}},"/clusters/assignment/{learner_id}":{"get":{"tags":["clusters"],"summary":"Get Assignment","operationId":"get_assignment_clusters_assignment__learner_id__get","parameters":[{"name":"learner_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Learner Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignedClusterOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/recommend/{learner_id}":{"get":{"tags":["recommendations"],"summary":"Get Recommendations","operationId":"get_recommendations_recommend__learner_id__get","parameters":[{"name":"learner_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Learner Id"}},{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"default":5,"title":"N"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RecommendationOut"},"title":"Response Get Recommendations Recommend  Learner Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AssignedClusterOut":{"properties":{"learner_id":{"type":"string","format":"uuid","title":"Learner Id"},"cluster_id":{"type":"integer","title":"Cluster Id"},"cluster_label":{"type":"string","title":"Cluster Label"},"distance_to_centroid":{"type":"number","title":"Distance To Centroid"}},"type":"object","required":["learner_id","cluster_id","cluster_label","distance_to_centroid"],"title":"AssignedClusterOut"},"ClusterOut":{"properties":{"cluster_id":{"type":"integer","minimum":0.0,"title":"Cluster Id"},"label":{"type":"string","title":"Label"},"size":{"type":"integer","minimum":0.0,"title":"Size"},"centroid_per_domain":{"additionalProperties":{"type":"number"},"type":"object","title":"Centroid Per Domain"}},"type":"object","required":["cluster_id","label","size","centroid_per_domain"],"title":"ClusterOut"},"ClusteringOut":{"properties":{"k":{"type":"integer","minimum":2.0,"title":"K"},"silhouette":{"type":"number","title":"Silhouette"},"silhouette_by_k":{"additionalProperties":{"type":"number"},"type":"object","title":"Silhouette By K"},"clusters":{"items":{"$ref":"#/components/schemas/ClusterOut"},"type":"array","title":"Clusters"}},"type":"object","required":["k","silhouette","silhouette_by_k","clusters"],"title":"ClusteringOut"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthOut":{"properties":{"status":{"type":"string","title":"Status"},"preloaded":{"type":"boolean","title":"Preloaded"},"n_learners":{"type":"integer","title":"N Learners"},"n_resources":{"type":"integer","title":"N Resources"},"n_skills":{"type":"integer","title":"N Skills"},"n_clusters":{"type":"integer","title":"N Clusters"}},"type":"object","required":["status","preloaded","n_learners","n_resources","n_skills","n_clusters"],"title":"HealthOut"},"LearnerOut":{"properties":{"learner_id":{"type":"string","format":"uuid","title":"Learner Id"},"display_name":{"type":"string","title":"Display Name"},"grade_level":{"type":"integer","maximum":5.0,"minimum":1.0,"title":"Grade Level"}},"type":"object","required":["learner_id","display_name","grade_level"],"title":"LearnerOut","description":"Apprenant exposé publiquement — pas d'``ability``, pas d'``archetype``.\n\nLe champ ``archetype`` est de la **vérité-terrain de simulation**, pas un fait\nobservable : on ne le sert jamais via l'API."},"ProfileOut":{"properties":{"learner_id":{"type":"string","format":"uuid","title":"Learner Id"},"grade_level":{"type":"integer","maximum":5.0,"minimum":1.0,"title":"Grade Level"},"n_traces":{"type":"integer","minimum":0.0,"title":"N Traces"},"mean_score_per_domain":{"additionalProperties":{"type":"number"},"type":"object","title":"Mean Score Per Domain"},"success_rate_per_domain":{"additionalProperties":{"type":"number"},"type":"object","title":"Success Rate Per Domain"}},"type":"object","required":["learner_id","grade_level","n_traces","mean_score_per_domain","success_rate_per_domain"],"title":"ProfileOut","description":"Profil de maîtrise observé — dérivé des traces, jamais de la vérité latente."},"RecommendationOut":{"properties":{"resource_id":{"type":"string","title":"Resource Id"},"title":{"type":"string","title":"Title"},"score":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Score"},"weak_skills_targeted":{"items":{"type":"string"},"type":"array","title":"Weak Skills Targeted"},"grade_distance":{"type":"integer","minimum":0.0,"title":"Grade Distance"},"semantic_similarity":{"type":"number","title":"Semantic Similarity"},"cluster_success_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cluster Success Rate"},"explanation":{"type":"string","title":"Explanation"}},"type":"object","required":["resource_id","title","score","weak_skills_targeted","grade_distance","semantic_similarity","explanation"],"title":"RecommendationOut"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}