{"openapi":"3.1.0","info":{"title":"Bachelor Thesis Chatbot API","description":"API for skill-extraction chatbot with database integration","version":"1.0.0"},"paths":{"/api/users/register":{"post":{"tags":["users"],"summary":"Register User","description":"Register a new user.","operationId":"register_user_api_users_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/login":{"post":{"tags":["users"],"summary":"Login User","description":"Login user and return JWT token.","operationId":"login_user_api_users_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLogin"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/{user_id}":{"get":{"tags":["users"],"summary":"Get User","description":"Get user by ID.","operationId":"get_user_api_users__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["users"],"summary":"Update User","description":"Update a user (admin only).","operationId":"update_user_api_users__user_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["users"],"summary":"Delete User","description":"Delete a user and all related data (admin only).","operationId":"delete_user_api_users__user_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users":{"get":{"tags":["users"],"summary":"List Users","description":"List all users (admin only).","operationId":"list_users_api_users_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/UserResponse"},"type":"array","title":"Response List Users Api Users Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/users/{user_id}/sessions":{"post":{"tags":["sessions"],"summary":"Create Session","description":"Create a new chat session for a user.","operationId":"create_session_api_users__user_id__sessions_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatSessionCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["sessions"],"summary":"Get User Sessions","description":"Get all chat sessions for a user with skills count.","operationId":"get_user_sessions_api_users__user_id__sessions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ChatSessionWithSkillsResponse"},"title":"Response Get User Sessions Api Users  User Id  Sessions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}":{"get":{"tags":["sessions"],"summary":"Get Session","description":"Get a specific chat session.","operationId":"get_session_api_sessions__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["sessions"],"summary":"Update Session","description":"Update a chat session (currently only supports updating the name).","operationId":"update_session_api_sessions__session_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatSessionCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/messages":{"get":{"tags":["sessions"],"summary":"Get Session Messages","description":"Get all messages for a chat session.","operationId":"get_session_messages_api_sessions__session_id__messages_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MessageResponse"},"title":"Response Get Session Messages Api Sessions  Session Id  Messages Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/skills/export":{"get":{"tags":["sessions"],"summary":"Export Session Skills","description":"Export skills for a chat session in Schema.org format.","operationId":"export_session_skills_api_sessions__session_id__skills_export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","title":"Session Id"}},{"name":"skill_system","in":"query","required":true,"schema":{"$ref":"#/components/schemas/SkillSystem","description":"Skill system to export"},"description":"Skill system to export"},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format","default":"json","title":"Format"},"description":"Export format"},{"name":"language","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Language"},"description":"Language code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/skills/{skill_system}":{"get":{"tags":["sessions"],"summary":"Get Session Skills","description":"Get all skills for a chat session by skill system.","operationId":"get_session_skills_api_sessions__session_id__skills__skill_system__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","title":"Session Id"}},{"name":"skill_system","in":"path","required":true,"schema":{"$ref":"#/components/schemas/SkillSystem"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions/{session_id}/skills":{"get":{"tags":["sessions"],"summary":"Get All Session Skills","description":"Get all skills for a chat session grouped by skill system.","operationId":"get_all_session_skills_api_sessions__session_id__skills_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/{user_id}/chat":{"post":{"tags":["chat"],"summary":"Chat With User","description":"Process a chat message for a user.","operationId":"chat_with_user_api_users__user_id__chat_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"accept-language","in":"header","required":false,"schema":{"type":"string","default":"en","title":"Accept-Language"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/skills/systems":{"get":{"tags":["skills"],"summary":"Get Skill Systems","description":"Get all available skill systems.","operationId":"get_skill_systems_api_skills_systems_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Response Get Skill Systems Api Skills Systems Get"}}}}}}},"/api/skills/search/esco":{"get":{"tags":["skills"],"summary":"Search Esco Skills","description":"Search for skills in the ESCO database.","operationId":"search_esco_skills_api_skills_search_esco_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","title":"Query"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SkillResponse"},"title":"Response Search Esco Skills Api Skills Search Esco Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/skills/custom/{skill_id}":{"put":{"tags":["skills"],"summary":"Update Custom Skill","description":"Update a custom skill.","operationId":"update_custom_skill_api_skills_custom__skill_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"integer","title":"Skill Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomSkillUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomSkillResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/skills/esco/{skill_id}":{"put":{"tags":["skills"],"summary":"Update Esco Skill","description":"Update an ESCO skill (remapping).","operationId":"update_esco_skill_api_skills_esco__skill_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"integer","title":"Skill Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ESCOSkillUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/visualizations/session/{session_id}/custom":{"get":{"tags":["visualizations"],"summary":"Get Custom Visualizations","description":"Get data for Donut and Density charts based on Custom Skills.","operationId":"get_custom_visualizations_api_visualizations_session__session_id__custom_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/visualizations/session/{session_id}/esco":{"get":{"tags":["visualizations"],"summary":"Get Esco Visualizations","description":"Get data for Sunburst, Occupation Match, and Radar charts based on ESCO Skills.","operationId":"get_esco_visualizations_api_visualizations_session__session_id__esco_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/health":{"get":{"tags":["utils"],"summary":"Health Check","description":"Simple health check endpoint.","operationId":"health_check_api_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"ChatRequest":{"properties":{"message":{"type":"string","title":"Message"},"session_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Session Id"}},"type":"object","required":["message"],"title":"ChatRequest"},"ChatResponse":{"properties":{"message":{"$ref":"#/components/schemas/MessageResponse"},"assistant_response":{"$ref":"#/components/schemas/MessageResponse"},"session_id":{"type":"integer","title":"Session Id"}},"type":"object","required":["message","assistant_response","session_id"],"title":"ChatResponse"},"ChatSessionCreate":{"properties":{"session_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Name"}},"type":"object","title":"ChatSessionCreate"},"ChatSessionResponse":{"properties":{"session_id":{"type":"integer","title":"Session Id"},"user_id":{"type":"integer","title":"User Id"},"session_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Name"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["session_id","user_id","session_name","created_at","updated_at"],"title":"ChatSessionResponse"},"ChatSessionWithSkillsResponse":{"properties":{"session_id":{"type":"integer","title":"Session Id"},"user_id":{"type":"integer","title":"User Id"},"session_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Name"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"esco_skills":{"items":{"$ref":"#/components/schemas/SkillResponse"},"type":"array","title":"Esco Skills","default":[]},"custom_skills":{"items":{"$ref":"#/components/schemas/CustomSkillResponse"},"type":"array","title":"Custom Skills","default":[]}},"type":"object","required":["session_id","user_id","session_name","created_at","updated_at"],"title":"ChatSessionWithSkillsResponse"},"CustomSkillResponse":{"properties":{"id":{"type":"integer","title":"Id"},"skill_system":{"$ref":"#/components/schemas/SkillSystem"},"session_id":{"type":"integer","title":"Session Id"},"origin_message_id":{"type":"integer","title":"Origin Message Id"},"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type"},"confidence":{"type":"number","title":"Confidence"},"evidence":{"type":"string","title":"Evidence"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","skill_system","session_id","origin_message_id","name","type","confidence","evidence","created_at"],"title":"CustomSkillResponse"},"CustomSkillUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence"},"evidence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evidence"}},"type":"object","title":"CustomSkillUpdate"},"ESCOSkillUpdate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uri"},"reference_language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference Language"},"preferred_label":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Preferred Label"},"description":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Description"},"evidence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evidence"}},"type":"object","title":"ESCOSkillUpdate"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"MessageResponse":{"properties":{"message_id":{"type":"integer","title":"Message Id"},"session_id":{"type":"integer","title":"Session Id"},"role":{"type":"string","title":"Role"},"message_content":{"type":"string","title":"Message Content"},"usage":{"type":"integer","title":"Usage"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"}},"type":"object","required":["message_id","session_id","role","message_content","usage","model","timestamp"],"title":"MessageResponse"},"SkillResponse":{"properties":{"id":{"type":"integer","title":"Id"},"skill_system":{"$ref":"#/components/schemas/SkillSystem"},"uri":{"type":"string","title":"Uri"},"title":{"type":"string","title":"Title"},"reference_language":{"type":"string","title":"Reference Language"},"preferred_label":{"additionalProperties":{"type":"string"},"type":"object","title":"Preferred Label"},"description":{"additionalProperties":{"type":"string"},"type":"object","title":"Description"},"links":{"additionalProperties":true,"type":"object","title":"Links"},"origin_message_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Origin Message Id"},"custom_skill_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Custom Skill Id"},"custom_skill_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Skill Name"},"session_id":{"type":"integer","title":"Session Id"},"evidence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evidence"}},"type":"object","required":["id","skill_system","uri","title","reference_language","preferred_label","description","links","session_id"],"title":"SkillResponse"},"SkillSystem":{"type":"string","enum":["CUSTOM","ESCO"],"title":"SkillSystem"},"Token":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type"},"user":{"$ref":"#/components/schemas/UserResponse"}},"type":"object","required":["access_token","token_type","user"],"title":"Token"},"UserCreate":{"properties":{"username":{"type":"string","title":"Username"},"email":{"type":"string","format":"email","title":"Email"},"is_admin":{"type":"boolean","title":"Is Admin","default":false}},"type":"object","required":["username","email"],"title":"UserCreate"},"UserLogin":{"properties":{"username":{"type":"string","title":"Username"}},"type":"object","required":["username"],"title":"UserLogin"},"UserResponse":{"properties":{"user_id":{"type":"integer","title":"User Id"},"username":{"type":"string","title":"Username"},"email":{"type":"string","title":"Email"},"is_admin":{"type":"boolean","title":"Is Admin"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["user_id","username","email","is_admin","created_at"],"title":"UserResponse"},"UserUpdate":{"properties":{"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"is_admin":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Admin"}},"type":"object","title":"UserUpdate"},"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"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}