openapi: 3.1.1 info: title: Titles, Users, Reviews, Tags, and Media API version: 1.0.0 servers: - url: https://api.example.com paths: /title: get: summary: Get titles parameters: - in: query name: query schema: type: string - in: query name: limit schema: type: integer default: 10 - in: query name: offset schema: type: integer default: 0 - in: query name: fields schema: type: string default: all responses: '200': description: List of titles content: application/json: schema: type: array items: $ref: '#/components/schemas/Title' '204': description: No titles found # /title/{title_id}: # get: # summary: Get title description # parameters: # - in: path # name: title_id # required: true # schema: # type: string # - in: query # name: fields # schema: # type: string # default: all # responses: # '200': # description: Title description # content: # application/json: # schema: # $ref: '#/components/schemas/Title' # '404': # description: Title not found # patch: # summary: Update title info # parameters: # - in: path # name: title_id # required: true # schema: # type: string # requestBody: # required: true # content: # application/json: # schema: # $ref: '#/components/schemas/Title' # responses: # '200': # description: Update result # content: # application/json: # schema: # type: object # properties: # success: # type: boolean # error: # type: string # user_json: # $ref: '#/components/schemas/User' # /title/{title_id}/reviews: # get: # summary: Get title reviews # parameters: # - in: path # name: title_id # required: true # schema: # type: string # - in: query # name: limit # schema: # type: integer # default: 10 # - in: query # name: offset # schema: # type: integer # default: 0 # responses: # '200': # description: List of reviews # content: # application/json: # schema: # type: array # items: # $ref: '#/components/schemas/Review' # '204': # description: No reviews found # /users/{user_id}: # get: # summary: Get user info # parameters: # - in: path # name: user_id # required: true # schema: # type: string # - in: query # name: fields # schema: # type: string # default: all # responses: # '200': # description: User info # content: # application/json: # schema: # $ref: '#/components/schemas/User' # '404': # description: User not found # patch: # summary: Update user # parameters: # - in: path # name: user_id # required: true # schema: # type: string # requestBody: # required: true # content: # application/json: # schema: # $ref: '#/components/schemas/User' # responses: # '200': # description: Update result # content: # application/json: # schema: # type: object # properties: # success: # type: boolean # error: # type: string # delete: # summary: Delete user # parameters: # - in: path # name: user_id # required: true # schema: # type: string # responses: # '200': # description: Delete result # content: # application/json: # schema: # type: object # properties: # success: # type: boolean # error: # type: string # /users: # get: # summary: Search user # parameters: # - in: query # name: query # schema: # type: string # - in: query # name: fields # schema: # type: string # responses: # '200': # description: List of users # content: # application/json: # schema: # type: array # items: # $ref: '#/components/schemas/User' # post: # summary: Add new user # requestBody: # required: true # content: # application/json: # schema: # $ref: '#/components/schemas/User' # responses: # '200': # description: Add result # content: # application/json: # schema: # type: object # properties: # success: # type: boolean # error: # type: string # user_json: # $ref: '#/components/schemas/User' # /users/{user_id}/titles: # get: # summary: Get user titles # parameters: # - in: path # name: user_id # required: true # schema: # type: string # - in: query # name: query # schema: # type: string # - in: query # name: limit # schema: # type: integer # default: 10 # - in: query # name: offset # schema: # type: integer # default: 0 # - in: query # name: fields # schema: # type: string # default: all # responses: # '200': # description: List of user titles # content: # application/json: # schema: # type: array # items: # $ref: '#/components/schemas/UserTitle' # '204': # description: No titles found # post: # summary: Add user title # parameters: # - in: path # name: user_id # required: true # schema: # type: string # requestBody: # required: true # content: # application/json: # schema: # type: object # properties: # title_id: # type: string # status: # type: string # responses: # '200': # description: Add result # content: # application/json: # schema: # type: object # properties: # success: # type: boolean # error: # type: string # patch: # summary: Update user title # parameters: # - in: path # name: user_id # required: true # schema: # type: string # requestBody: # required: true # content: # application/json: # schema: # $ref: '#/components/schemas/UserTitle' # responses: # '200': # description: Update result # content: # application/json: # schema: # type: object # properties: # success: # type: boolean # error: # type: string # delete: # summary: Delete user title # parameters: # - in: path # name: user_id # required: true # schema: # type: string # - in: query # name: title_id # schema: # type: string # responses: # '200': # description: Delete result # content: # application/json: # schema: # type: object # properties: # success: # type: boolean # error: # type: string # /users/{user_id}/reviews: # get: # summary: Get user reviews # parameters: # - in: path # name: user_id # required: true # schema: # type: string # - in: query # name: limit # schema: # type: integer # default: 10 # - in: query # name: offset # schema: # type: integer # default: 0 # responses: # '200': # description: List of reviews # content: # application/json: # schema: # type: array # items: # $ref: '#/components/schemas/Review' # /reviews: # post: # summary: Add review # requestBody: # required: true # content: # application/json: # schema: # $ref: '#/components/schemas/Review' # responses: # '200': # description: Add result # content: # application/json: # schema: # type: object # properties: # success: # type: boolean # error: # type: string # /reviews/{review_id}: # patch: # summary: Update review # parameters: # - in: path # name: review_id # required: true # schema: # type: string # requestBody: # required: true # content: # application/json: # schema: # $ref: '#/components/schemas/Review' # responses: # '200': # description: Update result # content: # application/json: # schema: # type: object # properties: # success: # type: boolean # error: # type: string # delete: # summary: Delete review # parameters: # - in: path # name: review_id # required: true # schema: # type: string # responses: # '200': # description: Delete result # content: # application/json: # schema: # type: object # properties: # success: # type: boolean # error: # type: string # /tags: # get: # summary: Get tags # parameters: # - in: query # name: limit # schema: # type: integer # default: 10 # - in: query # name: offset # schema: # type: integer # default: 0 # - in: query # name: fields # schema: # type: string # responses: # '200': # description: List of tags # content: # application/json: # schema: # type: array # items: # $ref: '#/components/schemas/Tag' # /media: # post: # summary: Upload image # responses: # '200': # description: Upload result # content: # application/json: # schema: # type: object # properties: # success: # type: boolean # error: # type: string # image_id: # type: string # get: # summary: Get image path # parameters: # - in: query # name: image_id # required: true # schema: # type: string # responses: # '200': # description: Image path # content: # application/json: # schema: # type: object # properties: # success: # type: boolean # error: # type: string # image_path: # type: string components: schemas: Title: type: object additionalProperties: true User: type: object properties: user_id: type: integer format: int32 description: Unique user ID (primary key) example: 1 avatar_id: type: integer format: int32 description: ID of the user avatar (references images table) nullable: true example: null mail: type: string format: email description: User email example: "john.doe@example.com" nickname: type: string description: Username (alphanumeric + _ or -) maxLength: 16 example: "john_doe_42" disp_name: type: string description: Display name maxLength: 32 example: "John Doe" user_desc: type: string description: User description maxLength: 512 example: "Just a regular user." creation_date: type: string format: date-time description: Timestamp when the user was created example: "2025-10-10T23:45:47.908073Z" required: - user_id - nickname - creation_date UserTitle: type: object additionalProperties: true Review: type: object additionalProperties: true Tag: type: object additionalProperties: true