{ "openapi": "3.1.0", "info": { "title": "Dating App API", "version": "0.6.12" }, "servers": [ { "url": "http://127.0.0.1:8001", "description": "Local development" } ], "paths": { "/health": { "get": { "summary": "Health", "operationId": "health_health_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } } } } }, "/api/v1/auth/register": { "post": { "summary": "Register", "operationId": "register_api_v1_auth_register_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RegisterRequest" } } }, "required": true }, "responses": { "201": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RegisterTokenResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/auth/login": { "post": { "summary": "Login", "operationId": "login_api_v1_auth_login_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LoginRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/auth/oauth": { "post": { "summary": "Oauth Login", "operationId": "oauth_login_api_v1_auth_oauth_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OAuthRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/auth/refresh": { "post": { "summary": "Refresh Access Token", "operationId": "refresh_access_token_api_v1_auth_refresh_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RefreshRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/auth/logout": { "post": { "summary": "Logout", "operationId": "logout_api_v1_auth_logout_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RefreshRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/users/me": { "get": { "summary": "Get Me", "operationId": "get_me_api_v1_users_me_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserActivityResponse" } } } } }, "security": [ { "HTTPBearer": [] } ] }, "patch": { "summary": "Update Me", "operationId": "update_me_api_v1_users_me_patch", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProfileUpdate" } } }, "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" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/v1/auth/me": { "get": { "summary": "Get Me", "operationId": "get_me_api_v1_auth_me_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserActivityResponse" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/v1/users/me/interests": { "get": { "summary": "Get My Interests", "operationId": "get_my_interests_api_v1_users_me_interests_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InterestsResponse" } } } } }, "security": [ { "HTTPBearer": [] } ] }, "put": { "summary": "Update My Interests", "operationId": "update_my_interests_api_v1_users_me_interests_put", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InterestsUpdate" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InterestsResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/v1/users/me/location": { "put": { "summary": "Update Location", "operationId": "update_location_api_v1_users_me_location_put", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LocationUpdate" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LocationResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/v1/users/me/posts": { "get": { "summary": "List My Posts", "operationId": "list_my_posts_api_v1_users_me_posts_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "limit", "in": "query", "required": false, "schema": { "type": "integer", "maximum": 50, "minimum": 1, "default": 20, "title": "Limit" } }, { "name": "offset", "in": "query", "required": false, "schema": { "type": "integer", "maximum": 5000, "minimum": 0, "default": 0, "title": "Offset" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/PostResponse" }, "title": "Response List My Posts Api V1 Users Me Posts Get" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/users/me/liked": { "get": { "summary": "List Users I Liked", "operationId": "list_users_i_liked_api_v1_users_me_liked_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/DiscoveryUserResponse" }, "type": "array", "title": "Response List Users I Liked Api V1 Users Me Liked Get" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/v1/users/me/likes": { "get": { "summary": "List Users Who Liked Me", "operationId": "list_users_who_liked_me_api_v1_users_me_likes_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/DiscoveryUserResponse" }, "type": "array", "title": "Response List Users Who Liked Me Api V1 Users Me Likes Get" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/v1/users/me/matches": { "get": { "summary": "List My Matches", "operationId": "list_my_matches_api_v1_users_me_matches_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/MatchResponse" }, "type": "array", "title": "Response List My Matches Api V1 Users Me Matches Get" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/v1/users/{user_id}/posts": { "get": { "summary": "List Public User Posts", "operationId": "list_public_user_posts_api_v1_users__user_id__posts_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "user_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "User Id" } }, { "name": "limit", "in": "query", "required": false, "schema": { "type": "integer", "maximum": 50, "minimum": 1, "default": 20, "title": "Limit" } }, { "name": "offset", "in": "query", "required": false, "schema": { "type": "integer", "maximum": 5000, "minimum": 0, "default": 0, "title": "Offset" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/PostResponse" }, "title": "Response List Public User Posts Api V1 Users User Id Posts Get" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/users/{user_id}": { "get": { "summary": "Get Public User Profile", "operationId": "get_public_user_profile_api_v1_users__user_id__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": { "$ref": "#/components/schemas/PublicUserProfileResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/users/me/video": { "post": { "summary": "Upload Video", "operationId": "upload_video_api_v1_users_me_video_post", "requestBody": { "content": { "multipart/form-data": { "schema": { "$ref": "#/components/schemas/Body_upload_video_api_v1_users_me_video_post" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/v1/users/me/image": { "post": { "summary": "Upload Profile Image", "operationId": "upload_profile_image_api_v1_users_me_image_post", "requestBody": { "content": { "multipart/form-data": { "schema": { "$ref": "#/components/schemas/Body_upload_profile_image_api_v1_users_me_image_post" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/v1/users/me/identity": { "post": { "summary": "Upload Identity", "operationId": "upload_identity_api_v1_users_me_identity_post", "requestBody": { "content": { "multipart/form-data": { "schema": { "$ref": "#/components/schemas/Body_upload_identity_api_v1_users_me_identity_post" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/v1/media/{media_id}": { "get": { "summary": "Get Media", "operationId": "get_media_api_v1_media__media_id__get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "media_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Media Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/meet": { "get": { "summary": "Meet Candidates", "operationId": "meet_candidates_api_v1_meet_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "limit", "in": "query", "required": false, "schema": { "type": "integer", "maximum": 50, "minimum": 1, "default": 20, "title": "Limit" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/DiscoveryUserResponse" }, "title": "Response Meet Candidates Api V1 Meet Get" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/meet/swipes": { "post": { "summary": "Swipe", "operationId": "swipe_api_v1_meet_swipes_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SwipeRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SwipeResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/v1/meet/likes/{target_user_id}": { "delete": { "summary": "Cancel Like", "operationId": "cancel_like_api_v1_meet_likes__target_user_id__delete", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "target_user_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Target User Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/meet/swipes/{target_user_id}": { "delete": { "summary": "Undo Swipe", "operationId": "undo_swipe_api_v1_meet_swipes__target_user_id__delete", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "target_user_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Target User Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/matches": { "get": { "summary": "List Matches", "operationId": "list_matches_api_v1_matches_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/MatchResponse" }, "type": "array", "title": "Response List Matches Api V1 Matches Get" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/v1/search": { "get": { "summary": "Search Users", "operationId": "search_users_api_v1_search_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "q", "in": "query", "required": false, "schema": { "anyOf": [ { "type": "string", "maxLength": 200 }, { "type": "null" } ], "title": "Q" } }, { "name": "city", "in": "query", "required": false, "schema": { "anyOf": [ { "type": "string", "maxLength": 120 }, { "type": "null" } ], "title": "City" } }, { "name": "country", "in": "query", "required": false, "schema": { "anyOf": [ { "type": "string", "maxLength": 120 }, { "type": "null" } ], "title": "Country" } }, { "name": "latitude", "in": "query", "required": false, "schema": { "anyOf": [ { "type": "number", "maximum": 90, "minimum": -90 }, { "type": "null" } ], "title": "Latitude" } }, { "name": "longitude", "in": "query", "required": false, "schema": { "anyOf": [ { "type": "number", "maximum": 180, "minimum": -180 }, { "type": "null" } ], "title": "Longitude" } }, { "name": "max_distance_km", "in": "query", "required": false, "schema": { "anyOf": [ { "type": "number", "maximum": 500, "exclusiveMinimum": 0 }, { "type": "null" } ], "title": "Max Distance Km" } }, { "name": "limit", "in": "query", "required": false, "schema": { "type": "integer", "maximum": 50, "minimum": 1, "default": 20, "title": "Limit" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/DiscoveryUserResponse" }, "title": "Response Search Users Api V1 Search Get" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/explore/posts": { "post": { "summary": "Create Post", "operationId": "create_post_api_v1_explore_posts_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PostCreate" } } }, "required": true }, "responses": { "201": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PostResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/v1/explore/posts/{post_id}": { "patch": { "summary": "Update Post", "operationId": "update_post_api_v1_explore_posts__post_id__patch", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "post_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Post Id" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PostUpdate" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PostResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "get": { "summary": "Get Explore Post", "operationId": "get_explore_post_api_v1_explore_posts__post_id__get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "post_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Post Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PostResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "delete": { "summary": "Delete Post", "operationId": "delete_post_api_v1_explore_posts__post_id__delete", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "post_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Post Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/explore/feed": { "get": { "summary": "Explore Feed", "operationId": "explore_feed_api_v1_explore_feed_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "limit", "in": "query", "required": false, "schema": { "type": "integer", "maximum": 50, "minimum": 1, "default": 20, "title": "Limit" } }, { "name": "before_id", "in": "query", "required": false, "schema": { "anyOf": [ { "type": "integer", "exclusiveMinimum": 0 }, { "type": "null" } ], "title": "Before Id" } }, { "name": "offset", "in": "query", "required": false, "schema": { "type": "integer", "maximum": 5000, "minimum": 0, "default": 0, "title": "Offset" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/PostResponse" }, "title": "Response Explore Feed Api V1 Explore Feed Get" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/explore/posts/{post_id}/media": { "post": { "summary": "Upload Post Media", "operationId": "upload_post_media_api_v1_explore_posts__post_id__media_post", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "post_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Post Id" } }, { "name": "position", "in": "query", "required": false, "schema": { "type": "integer", "maximum": 9, "minimum": 0, "default": 0, "title": "Position" } } ], "requestBody": { "required": true, "content": { "multipart/form-data": { "schema": { "$ref": "#/components/schemas/Body_upload_post_media_api_v1_explore_posts__post_id__media_post" } } } }, "responses": { "201": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PostMediaResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/explore/media/{media_id}": { "get": { "summary": "Get Post Media", "operationId": "get_post_media_api_v1_explore_media__media_id__get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "media_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Media Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "delete": { "summary": "Delete Post Media", "operationId": "delete_post_media_api_v1_explore_media__media_id__delete", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "media_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Media Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/explore/posts/{post_id}/like": { "get": { "summary": "List Post Likers", "description": "Return all active post likers as ID/name pairs, newest like first. No pagination; empty list without likes.", "operationId": "list_post_likers_api_v1_explore_posts__post_id__like_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "post_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Post Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/PostLikerResponse" }, "title": "Response List Post Likers Api V1 Explore Posts Post Id Like Get" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "post": { "summary": "Like Post", "description": "Like a post and return a compact success result with count, viewer state, and liker ID/name pairs. Repeated likes are idempotent. The full post content and media are not returned.", "operationId": "like_post_api_v1_explore_posts__post_id__like_post", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "post_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Post Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PostLikeResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "delete": { "summary": "Unlike Post", "operationId": "unlike_post_api_v1_explore_posts__post_id__like_delete", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "post_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Post Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PostUnlikeResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/explore/posts/{post_id}/comments": { "get": { "summary": "List Comments", "operationId": "list_comments_api_v1_explore_posts__post_id__comments_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "post_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Post Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/CommentResponse" }, "title": "Response List Comments Api V1 Explore Posts Post Id Comments Get" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "post": { "summary": "Create Comment", "operationId": "create_comment_api_v1_explore_posts__post_id__comments_post", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "post_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Post Id" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CommentCreate" } } } }, "responses": { "201": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CommentResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/explore/comments/{comment_id}": { "patch": { "summary": "Update Comment", "operationId": "update_comment_api_v1_explore_comments__comment_id__patch", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "comment_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Comment Id" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CommentUpdate" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CommentResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "delete": { "summary": "Delete Comment", "operationId": "delete_comment_api_v1_explore_comments__comment_id__delete", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "comment_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Comment Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/explore/comments/{comment_id}/like": { "post": { "summary": "Like Comment", "operationId": "like_comment_api_v1_explore_comments__comment_id__like_post", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "comment_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Comment Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CommentLikeResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "delete": { "summary": "Unlike Comment", "operationId": "unlike_comment_api_v1_explore_comments__comment_id__like_delete", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "comment_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Comment Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CommentLikeResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/feed/questions": { "get": { "summary": "List Feed Questions", "operationId": "list_feed_questions_api_v1_feed_questions_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "unanswered_only", "in": "query", "required": false, "schema": { "type": "boolean", "default": false, "title": "Unanswered Only" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/FeedQuestionResponse" }, "title": "Response List Feed Questions Api V1 Feed Questions Get" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/feed/answers/me": { "get": { "summary": "List My Feed Answers", "operationId": "list_my_feed_answers_api_v1_feed_answers_me_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/FeedQuestionResponse" }, "type": "array", "title": "Response List My Feed Answers Api V1 Feed Answers Me Get" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/v1/feed/questions/{question_id}/answer": { "put": { "summary": "Answer Feed Question", "operationId": "answer_feed_question_api_v1_feed_questions__question_id__answer_put", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "question_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Question Id" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/QuestionAnswerUpdate" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/QuestionAnswerResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "delete": { "summary": "Delete Feed Answer", "operationId": "delete_feed_answer_api_v1_feed_questions__question_id__answer_delete", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "question_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Question Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/chat/conversations": { "get": { "summary": "List Conversations", "operationId": "list_conversations_api_v1_chat_conversations_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/ConversationResponse" }, "type": "array", "title": "Response List Conversations Api V1 Chat Conversations Get" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/v1/chat/conversations/{match_id}": { "post": { "summary": "Create Conversation", "operationId": "create_conversation_api_v1_chat_conversations__match_id__post", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "match_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Match Id" } } ], "responses": { "201": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConversationResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/chat/conversations/{conversation_id}/messages": { "get": { "summary": "List Messages", "operationId": "list_messages_api_v1_chat_conversations__conversation_id__messages_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "conversation_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Conversation Id" } }, { "name": "limit", "in": "query", "required": false, "schema": { "type": "integer", "maximum": 100, "minimum": 1, "default": 50, "title": "Limit" } }, { "name": "before_id", "in": "query", "required": false, "schema": { "anyOf": [ { "type": "integer", "exclusiveMinimum": 0 }, { "type": "null" } ], "title": "Before Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ChatMessageResponse" }, "title": "Response List Messages Api V1 Chat Conversations Conversation Id Messages Get" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "post": { "summary": "Send Message", "operationId": "send_message_api_v1_chat_conversations__conversation_id__messages_post", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "conversation_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Conversation Id" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ChatMessageCreate" } } } }, "responses": { "201": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ChatMessageResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/v1/chat/messages/{message_id}": { "delete": { "summary": "Recall Message", "operationId": "recall_message_api_v1_chat_messages__message_id__delete", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "message_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Message Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ChatMessageResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } } }, "components": { "schemas": { "Body_upload_identity_api_v1_users_me_identity_post": { "properties": { "document": { "type": "string", "format": "binary", "title": "Document" } }, "type": "object", "required": [ "document" ], "title": "Body_upload_identity_api_v1_users_me_identity_post" }, "Body_upload_post_media_api_v1_explore_posts__post_id__media_post": { "properties": { "media": { "type": "string", "format": "binary", "title": "Media" } }, "type": "object", "required": [ "media" ], "title": "Body_upload_post_media_api_v1_explore_posts__post_id__media_post" }, "Body_upload_profile_image_api_v1_users_me_image_post": { "properties": { "image": { "type": "string", "format": "binary", "title": "Image" } }, "type": "object", "required": [ "image" ], "title": "Body_upload_profile_image_api_v1_users_me_image_post" }, "Body_upload_video_api_v1_users_me_video_post": { "properties": { "video": { "type": "string", "format": "binary", "title": "Video" } }, "type": "object", "required": [ "video" ], "title": "Body_upload_video_api_v1_users_me_video_post" }, "ChatMessageCreate": { "properties": { "content": { "type": "string", "maxLength": 5000, "minLength": 1, "title": "Content" }, "message_type": { "type": "string", "const": "text", "title": "Message Type", "default": "text" } }, "type": "object", "required": [ "content" ], "title": "ChatMessageCreate" }, "ChatMessageResponse": { "properties": { "id": { "type": "integer", "title": "Id" }, "conversation_id": { "type": "integer", "title": "Conversation Id" }, "sender_id": { "type": "integer", "title": "Sender Id" }, "content": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Content" }, "message_type": { "type": "string", "title": "Message Type" }, "is_deleted": { "type": "boolean", "title": "Is Deleted" }, "created_at": { "type": "string", "format": "date-time", "title": "Created At" } }, "type": "object", "required": [ "id", "conversation_id", "sender_id", "content", "message_type", "is_deleted", "created_at" ], "title": "ChatMessageResponse" }, "ChatParticipantResponse": { "properties": { "id": { "type": "integer", "title": "Id" }, "full_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Full Name" }, "city": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "City" }, "country": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Country" } }, "type": "object", "required": [ "id" ], "title": "ChatParticipantResponse" }, "CommentCreate": { "properties": { "content": { "type": "string", "maxLength": 2000, "minLength": 1, "title": "Content" }, "parent_comment_id": { "anyOf": [ { "type": "integer", "exclusiveMinimum": 0.0 }, { "type": "null" } ], "title": "Parent Comment Id" } }, "type": "object", "required": [ "content" ], "title": "CommentCreate" }, "CommentLikeResponse": { "properties": { "message": { "type": "string", "title": "Message" }, "like_count": { "type": "integer", "title": "Like Count" }, "liked_by_me": { "type": "boolean", "title": "Liked By Me" } }, "type": "object", "required": [ "message", "like_count", "liked_by_me" ], "title": "CommentLikeResponse" }, "CommentResponse": { "properties": { "id": { "type": "integer", "title": "Id" }, "post_id": { "type": "integer", "title": "Post Id" }, "content": { "type": "string", "title": "Content" }, "author": { "$ref": "#/components/schemas/PostAuthorResponse" }, "parent_comment_id": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Parent Comment Id" }, "reply_count": { "type": "integer", "title": "Reply Count", "default": 0 }, "like_count": { "type": "integer", "title": "Like Count", "default": 0 }, "liked_by_me": { "type": "boolean", "title": "Liked By Me", "default": false }, "created_at": { "type": "string", "format": "date-time", "title": "Created At" } }, "type": "object", "required": [ "id", "post_id", "content", "author", "created_at" ], "title": "CommentResponse" }, "CommentUpdate": { "properties": { "content": { "type": "string", "maxLength": 2000, "minLength": 1, "title": "Content" } }, "type": "object", "required": [ "content" ], "title": "CommentUpdate" }, "ConversationResponse": { "properties": { "id": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Id" }, "match_id": { "type": "integer", "title": "Match Id" }, "other_user": { "$ref": "#/components/schemas/ChatParticipantResponse" }, "last_message": { "anyOf": [ { "$ref": "#/components/schemas/ChatMessageResponse" }, { "type": "null" } ] }, "created_at": { "anyOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ], "title": "Created At" }, "updated_at": { "anyOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ], "title": "Updated At" } }, "type": "object", "required": [ "match_id", "other_user" ], "title": "ConversationResponse" }, "DiscoveryUserResponse": { "properties": { "id": { "type": "integer", "title": "Id" }, "full_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Full Name" }, "gender": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Gender" }, "birth_date": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Birth Date" }, "city": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "City" }, "county": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "County" }, "country": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Country" }, "relationship_goal": { "anyOf": [ { "type": "string", "enum": [ "serious_relationship", "casual_dates", "new_friends", "marriage" ] }, { "type": "null" } ], "title": "Relationship Goal" }, "bio": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Bio" }, "profile_image_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Profile Image Url" }, "video_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Video Url" }, "distance_km": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Distance Km" }, "compatibility_percentage": { "type": "integer", "maximum": 100.0, "minimum": 0.0, "title": "Compatibility Percentage", "default": 0 }, "media": { "items": { "$ref": "#/components/schemas/PublicMediaResponse" }, "type": "array", "title": "Media" } }, "type": "object", "required": [ "id" ], "title": "DiscoveryUserResponse" }, "FeedQuestionResponse": { "properties": { "id": { "type": "integer", "title": "Id" }, "code": { "type": "string", "title": "Code" }, "question_text": { "type": "string", "title": "Question Text" }, "question_text_zh": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Question Text Zh" }, "answer_type": { "type": "string", "enum": [ "boolean", "text" ], "title": "Answer Type" }, "current_answer": { "anyOf": [ { "type": "boolean" }, { "type": "string" }, { "type": "null" } ], "title": "Current Answer" }, "answered_at": { "anyOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ], "title": "Answered At" } }, "type": "object", "required": [ "id", "code", "question_text", "question_text_zh", "answer_type" ], "title": "FeedQuestionResponse" }, "HTTPValidationError": { "properties": { "detail": { "items": { "$ref": "#/components/schemas/ValidationError" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" }, "InterestsResponse": { "properties": { "interests": { "items": { "type": "string" }, "type": "array", "title": "Interests" } }, "type": "object", "required": [ "interests" ], "title": "InterestsResponse" }, "InterestsUpdate": { "properties": { "interests": { "items": { "type": "string" }, "type": "array", "title": "Interests" } }, "type": "object", "required": [ "interests" ], "title": "InterestsUpdate" }, "LocationResponse": { "properties": { "latitude": { "type": "number", "maximum": 90.0, "minimum": -90.0, "title": "Latitude" }, "longitude": { "type": "number", "maximum": 180.0, "minimum": -180.0, "title": "Longitude" }, "city": { "type": "string", "maxLength": 120, "minLength": 1, "title": "City" }, "county": { "type": "string", "maxLength": 120, "minLength": 1, "title": "County" }, "updated_at": { "type": "string", "format": "date-time", "title": "Updated At" } }, "type": "object", "required": [ "latitude", "longitude", "city", "county", "updated_at" ], "title": "LocationResponse" }, "LocationUpdate": { "properties": { "latitude": { "type": "number", "maximum": 90.0, "minimum": -90.0, "title": "Latitude" }, "longitude": { "type": "number", "maximum": 180.0, "minimum": -180.0, "title": "Longitude" }, "city": { "type": "string", "maxLength": 120, "minLength": 1, "title": "City" }, "county": { "type": "string", "maxLength": 120, "minLength": 1, "title": "County" } }, "type": "object", "required": [ "latitude", "longitude", "city", "county" ], "title": "LocationUpdate" }, "LoginRequest": { "properties": { "email_or_phone": { "type": "string", "maxLength": 320, "minLength": 3, "title": "Email Or Phone" }, "password": { "type": "string", "maxLength": 128, "minLength": 8, "title": "Password" } }, "type": "object", "required": [ "email_or_phone", "password" ], "title": "LoginRequest" }, "MatchResponse": { "properties": { "id": { "type": "integer", "title": "Id" }, "matched_at": { "type": "string", "format": "date-time", "title": "Matched At" }, "user": { "$ref": "#/components/schemas/DiscoveryUserResponse" } }, "type": "object", "required": [ "id", "matched_at", "user" ], "title": "MatchResponse" }, "OAuthRequest": { "properties": { "provider": { "type": "string", "pattern": "^(wechat|google)$", "title": "Provider" }, "provider_user_id": { "type": "string", "maxLength": 255, "minLength": 1, "title": "Provider User Id" }, "email": { "anyOf": [ { "type": "string", "format": "email" }, { "type": "null" } ], "title": "Email" }, "full_name": { "anyOf": [ { "type": "string", "maxLength": 120 }, { "type": "null" } ], "title": "Full Name" } }, "type": "object", "required": [ "provider", "provider_user_id" ], "title": "OAuthRequest" }, "PostAuthorResponse": { "properties": { "id": { "type": "integer", "title": "Id" }, "full_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Full Name" }, "profile_image_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Profile Image Url", "description": "Author avatar URL; null before upload. Production OSS URLs expire after one hour." }, "city": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "City" }, "country": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Country" }, "compatibility_percentage": { "type": "integer", "maximum": 100.0, "minimum": 0.0, "title": "Compatibility Percentage", "default": 0 } }, "type": "object", "required": [ "id" ], "title": "PostAuthorResponse" }, "PostCreate": { "properties": { "content": { "type": "string", "maxLength": 5000, "title": "Content", "default": "" }, "post_type": { "type": "string", "enum": [ "text", "image", "video" ], "title": "Post Type", "default": "text" }, "content_format": { "type": "string", "enum": [ "plain", "markdown" ], "title": "Content Format", "default": "plain" }, "feeling": { "anyOf": [ { "type": "string", "maxLength": 50, "minLength": 1 }, { "type": "null" } ], "title": "Feeling" }, "location": { "anyOf": [ { "$ref": "#/components/schemas/PostLocation" }, { "type": "null" } ] } }, "type": "object", "title": "PostCreate" }, "PostLikeResponse": { "properties": { "message": { "type": "string", "title": "Message" }, "like_count": { "type": "integer", "title": "Like Count" }, "liked_by_me": { "type": "boolean", "title": "Liked By Me" }, "liked_by_users": { "items": { "$ref": "#/components/schemas/PostLikerResponse" }, "type": "array", "title": "Liked By Users", "description": "All active likers, newest like first; like_count equals this list's length." } }, "type": "object", "required": [ "message", "like_count", "liked_by_me" ], "title": "PostLikeResponse", "description": "Compact like result; update the existing post rather than replacing it." }, "PostLikerResponse": { "properties": { "id": { "type": "integer", "title": "Id" }, "full_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Full Name" } }, "type": "object", "required": [ "id" ], "title": "PostLikerResponse", "description": "Public post liker identity, without contact details or full profile fields." }, "PostLocation": { "properties": { "name": { "type": "string", "maxLength": 255, "minLength": 1, "title": "Name" }, "latitude": { "anyOf": [ { "type": "number", "maximum": 90.0, "minimum": -90.0 }, { "type": "null" } ], "title": "Latitude" }, "longitude": { "anyOf": [ { "type": "number", "maximum": 180.0, "minimum": -180.0 }, { "type": "null" } ], "title": "Longitude" } }, "type": "object", "required": [ "name" ], "title": "PostLocation" }, "PostMediaResponse": { "properties": { "id": { "type": "integer", "title": "Id" }, "media_type": { "type": "string", "enum": [ "image", "video" ], "title": "Media Type" }, "mime_type": { "type": "string", "title": "Mime Type" }, "size_bytes": { "type": "integer", "title": "Size Bytes" }, "position": { "type": "integer", "title": "Position" }, "url": { "type": "string", "title": "Url" } }, "type": "object", "required": [ "id", "media_type", "mime_type", "size_bytes", "position", "url" ], "title": "PostMediaResponse" }, "PostResponse": { "properties": { "id": { "type": "integer", "title": "Id" }, "content": { "type": "string", "title": "Content" }, "post_type": { "type": "string", "title": "Post Type" }, "content_format": { "type": "string", "enum": [ "plain", "markdown" ], "title": "Content Format" }, "feeling": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Feeling" }, "location": { "anyOf": [ { "$ref": "#/components/schemas/PostLocation" }, { "type": "null" } ] }, "author": { "$ref": "#/components/schemas/PostAuthorResponse" }, "like_count": { "type": "integer", "title": "Like Count" }, "comment_count": { "type": "integer", "title": "Comment Count" }, "liked_by_me": { "type": "boolean", "title": "Liked By Me" }, "liked_by_users": { "items": { "$ref": "#/components/schemas/PostLikerResponse" }, "type": "array", "title": "Liked By Users", "description": "All active likers, newest like first; like_count equals this list's length." }, "media": { "items": { "$ref": "#/components/schemas/PostMediaResponse" }, "type": "array", "title": "Media" }, "created_at": { "type": "string", "format": "date-time", "title": "Created At" } }, "type": "object", "required": [ "id", "content", "post_type", "content_format", "author", "like_count", "comment_count", "liked_by_me", "created_at" ], "title": "PostResponse" }, "PostUnlikeResponse": { "properties": { "message": { "type": "string", "title": "Message" }, "like_count": { "type": "integer", "title": "Like Count" }, "liked_by_me": { "type": "boolean", "title": "Liked By Me" }, "liked_by_users": { "items": { "$ref": "#/components/schemas/PostLikerResponse" }, "type": "array", "title": "Liked By Users", "description": "All active likers, newest like first; like_count equals this list's length." } }, "type": "object", "required": [ "message", "like_count", "liked_by_me" ], "title": "PostUnlikeResponse", "description": "Compact unlike result; mirrors the like result without returning the full post body." }, "PostUpdate": { "properties": { "content": { "type": "string", "maxLength": 5000, "title": "Content" }, "content_format": { "type": "string", "enum": [ "plain", "markdown" ], "title": "Content Format" }, "feeling": { "anyOf": [ { "type": "string", "maxLength": 50, "minLength": 1 }, { "type": "null" } ], "title": "Feeling" }, "location": { "anyOf": [ { "$ref": "#/components/schemas/PostLocation" }, { "type": "null" } ] } }, "type": "object", "title": "PostUpdate" }, "ProfileResponse": { "properties": { "full_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Full Name" }, "gender": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Gender" }, "birth_date": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Birth Date" }, "city": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "City" }, "county": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "County" }, "country": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Country" }, "relationship_goal": { "anyOf": [ { "type": "string", "enum": [ "serious_relationship", "casual_dates", "new_friends", "marriage" ] }, { "type": "null" } ], "title": "Relationship Goal" }, "bio": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Bio" }, "occupation": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Occupation" }, "education": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Education" }, "height_cm": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Height Cm" }, "beliefs": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Beliefs" }, "smoking": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Smoking" }, "drinking": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Drinking" }, "pets": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Pets" }, "exercise": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Exercise" }, "age": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Age" }, "profile_image_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Profile Image Url" }, "video_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Video Url" }, "interests": { "items": { "type": "string" }, "type": "array", "title": "Interests" } }, "type": "object", "required": [ "full_name", "gender", "birth_date", "city", "county", "country", "relationship_goal", "bio", "profile_image_url", "video_url" ], "title": "ProfileResponse" }, "ProfileUpdate": { "properties": { "full_name": { "anyOf": [ { "type": "string", "maxLength": 120 }, { "type": "null" } ], "title": "Full Name" }, "gender": { "anyOf": [ { "type": "string", "maxLength": 30 }, { "type": "null" } ], "title": "Gender" }, "birth_date": { "anyOf": [ { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" }, { "type": "null" } ], "title": "Birth Date" }, "city": { "anyOf": [ { "type": "string", "maxLength": 120 }, { "type": "null" } ], "title": "City" }, "country": { "anyOf": [ { "type": "string", "maxLength": 120 }, { "type": "null" } ], "title": "Country" }, "relationship_goal": { "type": "string", "enum": [ "serious_relationship", "casual_dates", "new_friends", "marriage" ], "title": "Relationship Goal" }, "bio": { "anyOf": [ { "type": "string", "maxLength": 2000, "minLength": 1 }, { "type": "null" } ], "title": "Bio" }, "occupation": { "anyOf": [ { "type": "string", "maxLength": 120 }, { "type": "null" } ], "title": "Occupation" }, "education": { "anyOf": [ { "type": "string", "maxLength": 120 }, { "type": "null" } ], "title": "Education" }, "height_cm": { "anyOf": [ { "type": "integer", "maximum": 250.0, "minimum": 100.0 }, { "type": "null" } ], "title": "Height Cm" }, "beliefs": { "anyOf": [ { "type": "string", "maxLength": 120 }, { "type": "null" } ], "title": "Beliefs" }, "smoking": { "anyOf": [ { "type": "string", "maxLength": 50 }, { "type": "null" } ], "title": "Smoking" }, "drinking": { "anyOf": [ { "type": "string", "maxLength": 50 }, { "type": "null" } ], "title": "Drinking" }, "pets": { "anyOf": [ { "type": "string", "maxLength": 120 }, { "type": "null" } ], "title": "Pets" }, "exercise": { "anyOf": [ { "type": "string", "maxLength": 50 }, { "type": "null" } ], "title": "Exercise" }, "interests": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Interests" } }, "type": "object", "title": "ProfileUpdate" }, "PublicMediaResponse": { "properties": { "id": { "type": "integer", "title": "Id" }, "media_type": { "type": "string", "title": "Media Type" }, "url": { "type": "string", "title": "Url" } }, "type": "object", "required": [ "id", "media_type", "url" ], "title": "PublicMediaResponse" }, "PublicUserProfileResponse": { "properties": { "id": { "type": "integer", "title": "Id" }, "full_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Full Name" }, "gender": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Gender" }, "birth_date": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Birth Date" }, "city": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "City" }, "county": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "County" }, "country": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Country" }, "relationship_goal": { "anyOf": [ { "type": "string", "enum": [ "serious_relationship", "casual_dates", "new_friends", "marriage" ] }, { "type": "null" } ], "title": "Relationship Goal" }, "bio": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Bio" }, "profile_image_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Profile Image Url" }, "video_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Video Url" }, "distance_km": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Distance Km" }, "compatibility_percentage": { "type": "integer", "maximum": 100.0, "minimum": 0.0, "title": "Compatibility Percentage", "default": 0 }, "media": { "items": { "$ref": "#/components/schemas/PublicMediaResponse" }, "type": "array", "title": "Media" }, "interests": { "items": { "type": "string" }, "type": "array", "title": "Interests" }, "posts": { "items": { "$ref": "#/components/schemas/PostResponse" }, "type": "array", "title": "Posts" } }, "type": "object", "required": [ "id" ], "title": "PublicUserProfileResponse", "description": "Public profile details safe to show on another user's profile page." }, "QuestionAnswerResponse": { "properties": { "question_id": { "type": "integer", "title": "Question Id" }, "answer": { "anyOf": [ { "type": "boolean" }, { "type": "string" } ], "title": "Answer" }, "answered_at": { "type": "string", "format": "date-time", "title": "Answered At" } }, "type": "object", "required": [ "question_id", "answer", "answered_at" ], "title": "QuestionAnswerResponse" }, "QuestionAnswerUpdate": { "properties": { "answer": { "anyOf": [ { "type": "boolean" }, { "type": "string" } ], "title": "Answer" } }, "type": "object", "required": [ "answer" ], "title": "QuestionAnswerUpdate" }, "RefreshRequest": { "properties": { "refresh_token": { "type": "string", "maxLength": 200, "minLength": 20, "title": "Refresh Token" } }, "type": "object", "required": [ "refresh_token" ], "title": "RefreshRequest" }, "RegisterRequest": { "properties": { "email_or_phone": { "type": "string", "maxLength": 320, "minLength": 3, "title": "Email Or Phone" }, "password": { "type": "string", "maxLength": 128, "minLength": 8, "title": "Password" }, "confirm_password": { "type": "string", "maxLength": 128, "minLength": 8, "title": "Confirm Password" }, "relationship_goal": { "type": "string", "enum": [ "serious_relationship", "casual_dates", "new_friends", "marriage" ], "title": "Relationship Goal" }, "full_name": { "anyOf": [ { "type": "string", "maxLength": 120 }, { "type": "null" } ], "title": "Full Name" }, "gender": { "anyOf": [ { "type": "string", "maxLength": 30 }, { "type": "null" } ], "title": "Gender" }, "birth_date": { "anyOf": [ { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" }, { "type": "null" } ], "title": "Birth Date" }, "city": { "anyOf": [ { "type": "string", "maxLength": 120 }, { "type": "null" } ], "title": "City" }, "country": { "anyOf": [ { "type": "string", "maxLength": 120 }, { "type": "null" } ], "title": "Country" }, "bio": { "anyOf": [ { "type": "string", "maxLength": 2000, "minLength": 1 }, { "type": "null" } ], "title": "Bio" }, "interests": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Interests" } }, "type": "object", "required": [ "email_or_phone", "password", "confirm_password", "relationship_goal" ], "title": "RegisterRequest" }, "RegisterTokenResponse": { "properties": { "access_token": { "type": "string", "title": "Access Token" }, "refresh_token": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Refresh Token" }, "token_type": { "type": "string", "title": "Token Type", "default": "bearer" } }, "type": "object", "required": [ "access_token" ], "title": "RegisterTokenResponse", "description": "Tokens returned after registration." }, "SwipeRequest": { "properties": { "target_user_id": { "type": "integer", "exclusiveMinimum": 0.0, "title": "Target User Id" }, "direction": { "type": "string", "enum": [ "like", "pass", "super_like" ], "title": "Direction" } }, "type": "object", "required": [ "target_user_id", "direction" ], "title": "SwipeRequest" }, "SwipeResponse": { "properties": { "direction": { "type": "string", "enum": [ "like", "pass", "super_like" ], "title": "Direction" }, "matched": { "type": "boolean", "title": "Matched" }, "match_id": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Match Id" } }, "type": "object", "required": [ "direction", "matched" ], "title": "SwipeResponse" }, "TokenResponse": { "properties": { "access_token": { "type": "string", "title": "Access Token" }, "refresh_token": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Refresh Token" }, "token_type": { "type": "string", "title": "Token Type", "default": "bearer" }, "user": { "$ref": "#/components/schemas/UserResponse" } }, "type": "object", "required": [ "access_token", "user" ], "title": "TokenResponse" }, "UserActivityResponse": { "properties": { "id": { "type": "integer", "title": "Id" }, "email_or_phone": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Email Or Phone" }, "status": { "type": "string", "title": "Status" }, "profile": { "anyOf": [ { "$ref": "#/components/schemas/ProfileResponse" }, { "type": "null" } ] }, "created_at": { "type": "string", "format": "date-time", "title": "Created At" }, "posts": { "items": { "$ref": "#/components/schemas/PostResponse" }, "type": "array", "title": "Posts" }, "liked_users": { "items": { "$ref": "#/components/schemas/DiscoveryUserResponse" }, "type": "array", "title": "Liked Users" }, "liked_by_users": { "items": { "$ref": "#/components/schemas/DiscoveryUserResponse" }, "type": "array", "title": "Liked By Users" }, "matches": { "items": { "$ref": "#/components/schemas/MatchResponse" }, "type": "array", "title": "Matches" }, "liked_users_count": { "type": "integer", "minimum": 0.0, "title": "Liked Users Count" }, "liked_by_users_count": { "type": "integer", "minimum": 0.0, "title": "Liked By Users Count" }, "matches_count": { "type": "integer", "minimum": 0.0, "title": "Matches Count" } }, "type": "object", "required": [ "id", "email_or_phone", "status", "profile", "created_at", "liked_users_count", "liked_by_users_count", "matches_count" ], "title": "UserActivityResponse" }, "UserResponse": { "properties": { "id": { "type": "integer", "title": "Id" }, "email_or_phone": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Email Or Phone" }, "status": { "type": "string", "title": "Status" }, "profile": { "anyOf": [ { "$ref": "#/components/schemas/ProfileResponse" }, { "type": "null" } ] }, "created_at": { "type": "string", "format": "date-time", "title": "Created At" }, "posts": { "items": { "$ref": "#/components/schemas/PostResponse" }, "type": "array", "title": "Posts" }, "liked_users": { "items": { "$ref": "#/components/schemas/DiscoveryUserResponse" }, "type": "array", "title": "Liked Users" }, "liked_by_users": { "items": { "$ref": "#/components/schemas/DiscoveryUserResponse" }, "type": "array", "title": "Liked By Users" }, "matches": { "items": { "$ref": "#/components/schemas/MatchResponse" }, "type": "array", "title": "Matches" } }, "type": "object", "required": [ "id", "email_or_phone", "status", "profile", "created_at" ], "title": "UserResponse" }, "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" } } } }