蜜恋后端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

4814 lines
117 KiB

{
"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"
}
}
}
}